This shows you the differences between two versions of the page.
| — |
pm:prj2026:tarik_ilhan.omer:iulia.petrisor [2026/05/03 22:44] (current) iulia.petrisor created |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Braț Robotic Autonom pentru X și 0 ====== | ||
| + | ===== Introducere ===== | ||
| + | |||
| + | Acest proiect constă în realizarea unui braț robotic de tip Pen Plotter cu 4 grade de libertate (4-DOF), echipat cu un pix ca efector final. Sistemul este capabil să joace fizic X și 0 împotriva unui om pe o tablă verticală, analizând mutările prin intermediul unui algoritm de Computer Vision. | ||
| + | * **Ce face:** Robotul preia imagini cu tabla de joc printr-o cameră video, extrage starea curentă a jocului folosind tehnici de Computer Vision, determină mutarea optimă prin intermediul algoritmului decizional Minimax și comandă brațul mecanic (4-DOF) pentru a trasa fizic simbolul pe foaie. | ||
| + | * **Scopul lui:** Demonstrarea integrării complete între procesarea de imagine (Computer Vision), logica de joc (AI/Minimax) și controlul fizic de precizie (Inverse Kinematics și semnale PWM). | ||
| + | * **Ideea de pornire:** Motivația principală a fost crearea unui sistem mecatronic complet (end-to-end) capabil să închidă bucla „percepție-decizie-acțiune”. Am dorit să duc algoritmii de joc dincolo de mediul pur virtual și să le dau capacitatea de a „vedea” mediul real și de a acționa fizic asupra lui, pe o tablă verticală. | ||
| + | * **Utilitate:** Proiectul demonstrează practic provocările integrării a 3 domenii complet diferite: procesarea imaginilor (Computer Vision), logica decizională (AI) și controlul fizic de precizie (Inverse Kinematics). El poate servi ca un model la scară redusă pentru sisteme industriale care necesită inspecție vizuală urmată de o manipulare mecanică precisă. | ||
| + | |||
| + | ===== Descriere generală ===== | ||
| + | Arhitectura proiectului este distribuită pe 2 module principale: un modul //high-level// responsabil cu rularea algoritmilor complecși de viziune și AI (**Raspberry Pi**) și un modul //low-level// dedicat controlului fizic și generării semnalelor PWM (**microcontrolerul AVR**). Cele două comunică bidirecțional printr-o interfață serială. | ||
| + | |||
| + | **Schema Bloc a Sistemului:** | ||
| + | |||
| + | - **Modulul de percepție și decizie (Raspberry Pi):** O cameră video preia imagini cu tabla de joc. Software-ul procesează imaginea, deduce starea jocului, rulează algoritmul Minimax pentru a găsi mutarea optimă și calculează coordonatele spațiale (Inverse Kinematics). | ||
| + | - **Interfața de comunicare (Cablu USB):** Comenzile de poziționare (unghiurile articulațiilor) sunt transmise sub formă de șiruri de caractere prin protocolul UART over USB. Utilizarea acestei interfețe asigură compatibilitatea nivelurilor logice, protejând nativ porturile GPIO de 3.3V ale Raspberry Pi-ului împotriva tensiunii de 5V specifice microcontrolerului AVR. | ||
| + | - **Modulul de execuție (Arduino Uno + Sensor Shield V5.0):** Arduino citește comanda de pe portul serial și o transformă în semnale PWM. | ||
| + | - **Modulul de forță (Sursa de Putere 5V 5A):** Sursa externă alimentează direct servomotoarele prin blocul cu șuruburi al Sensor Shield-ului. **Jumper-ul SEL de pe shield este ELIMINAT** pentru a izola complet alimentarea motoarelor de alimentarea logică a plăcii Arduino (protejând astfel portul USB). | ||
| + | |||
| + | {{ :pm:prj2026:tarik_ilhan.omer:schema_bloc_pm.png?600 | Schema Bloc a Sistemului }} | ||
| + | |||
| + | ===== Hardware Design ===== | ||
| + | Designul hardware este structurat pentru a susține un flux complet de tip percepție-acțiune. Acesta integrează o componentă de achiziție și procesare vizuală (Camera web și Raspberry Pi) cu un subsistem robust de execuție mecanică (Arduino Uno și brațul 4-DOF), asigurând totodată o distribuție sigură și stabilă a puterii pentru servomotoare. | ||
| + | |||
| + | **Listă de piese:** | ||
| + | * 1 x Placă de dezvoltare compatibilă Arduino Uno (Controller mecanic) | ||
| + | * 1 x Raspberry Pi (Procesare imagine și algoritm Minimax) | ||
| + | * 1 x Cameră web / Modul Cameră RPi | ||
| + | * 1 x Arduino Sensor Shield V5.0 (Pentru distribuția curată a semnalelor și a curentului) | ||
| + | * 4 x Servomotoare MG995 (Pentru axele principale ale brațului: Bază, Umăr, Cot, Încheietură) | ||
| + | * 1 x Micro-servomotor MG90 (Pentru mecanismul final de ridicare/coborâre a pixului) | ||
| + | * 1 x Sursă de alimentare 5V 5A DC cu mufă 5.5x2.1mm (Putere dedicată motoarelor) | ||
| + | * 1 x Mufă mamă alimentare DC 5.5x2.1mm cu regletă (Adaptor pentru Sensor Shield) | ||
| + | * Componente structurale printate 3D (Brațul plotter-ului) | ||
| + | * Cablu USB-A la USB-B (Pentru conectare și comunicare serială) | ||
| + | * Fire de conexiune (Jumper wires) | ||
| + | |||
| + | **Detalii de design electric:** | ||
| + | Servomotoarele MG995 pot avea un curent de vârf (stall current) de până la 1.5A - 2.5A fiecare. S-a ales o sursă externă de 5V/5A pentru a acoperi consumul simultan al brațului în mișcare (aprox. 2.5A - 3A). Aceasta este conectată exclusiv la bornele albastre ale Sensor Shield-ului, cu jumper-ul SEL scos, garantând că Arduino Uno primește doar semnal logic 5V din USB, iar motoarele primesc forță brută independent. | ||
| + | |||
| + | ===== Software Design ===== | ||
| + | Proiectul utilizează două medii de dezvoltare și limbaje distincte, împărțind sarcinile pe baza capabilităților hardware. | ||
| + | |||
| + | **1. Software High-Level (Raspberry Pi / PC) - Python:** | ||
| + | * **Librării:** OpenCV (pentru procesare video), PySerial (pentru comunicarea cu Arduino), NumPy (pentru calcule matriciale). | ||
| + | * **Algoritmi implementați:** | ||
| + | * **Computer Vision:** Filtrare culori, detecție de contururi (Canny Edge/Hough Transforms) pentru a identifica grila de X și 0 și mutările curente. | ||
| + | * **AI (Minimax):** Un algoritm decizional pentru jocul de X și 0, garantând minimizarea șanselor de câștig ale adversarului. | ||
| + | * **Inverse Kinematics:** Funcții matematice care convertesc coordonatele carteziene (X, Y pe foaie) în unghiuri specifice (0-180 grade) pentru fiecare dintre cele 4 articulații MG995. | ||
| + | |||
| + | **2. Firmware Low-Level (AVR ATmega328P) - Bare-metal C/C++:** | ||
| + | * **Mediu de dezvoltare:** PlatformIO | ||
| + | * **Logică și Implementare internă:** | ||
| + | * **Comunicație Serială (USART):** Preluarea datelor de la Raspberry Pi se realizează prin configurarea manuală a modulului hardware USART. Se setează regiștrii specifici (''UBRR0'' pentru baud rate, ''UCSR0B'', ''UCSR0C'' pentru activarea recepției și formatarea cadrelor). Citirea string-ului de comenzi este gestionată prin rutine de tratare a întreruperilor (''ISR(USART_RX_vect)''), pentru a nu bloca execuția principală. | ||
| + | * **Generare Semnal PWM (Hardware Timers):** Pentru controlul servomotoarelor, se folosesc timerele interne ale microcontrolerului ATmega328P (precum Timer1 pe 16 biți, care oferă o rezoluție ridicată). Acestea sunt configurate în modul Fast PWM pentru a genera un semnal cu frecvența strictă de 50Hz (perioadă de 20ms), prin setarea regiștrilor ''TCCR1A'' și ''TCCR1B''. | ||
| + | * **Calcul și Execuție:** Programul parsează string-ul primit pe serială, transformă unghiurile cerute în lățimi de impuls (între 1ms și 2ms) și actualizează dinamic regiștrii de comparare (ex: ''OCR1A'', ''OCR1B''). Această modificare hardware ajustează instantaneu factorul de umplere (duty cycle) al pinilor, generând mișcarea precisă a articulațiilor brațului. | ||
| + | |||
| + | |||
| + | |||