Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:gpatru:483 [2023/05/06 01:02]
ioana.dinu0810
pm:prj2023:gpatru:483 [2023/05/26 10:57] (current)
ioana.dinu0810 [Concluzii]
Line 41: Line 41:
 - SG90 servo motor (http://​www.ee.ic.ac.uk/​pcheung/​teaching/​DE1_EE/​stores/​sg90_datasheet.pdf) sunt motoare usor de controlat care ajusteaza pozitia camerei, prin miscarea suportului. Comanda pe care o primesc reprezinta unghiul la care trebuie sa se roteasca pentru a orienta camera catre obiectul detectat.\\ ​ - SG90 servo motor (http://​www.ee.ic.ac.uk/​pcheung/​teaching/​DE1_EE/​stores/​sg90_datasheet.pdf) sunt motoare usor de controlat care ajusteaza pozitia camerei, prin miscarea suportului. Comanda pe care o primesc reprezinta unghiul la care trebuie sa se roteasca pentru a orienta camera catre obiectul detectat.\\ ​
 <note tip>In schema de mai jos care contine designul hardware al robotului (componente,​ conexiuni), camera nu este surprinsa in imagine. Aceasta comunica cu microcontrollerul prin protocolul de comunicatie SPI, datele fiind trasmise atat de la ATmega328P catre PixyCam, dar si invers.</​note>​ <note tip>In schema de mai jos care contine designul hardware al robotului (componente,​ conexiuni), camera nu este surprinsa in imagine. Aceasta comunica cu microcontrollerul prin protocolul de comunicatie SPI, datele fiind trasmise atat de la ATmega328P catre PixyCam, dar si invers.</​note>​
-{{:​pm:​prj2023:​gpatru:​hardware_design_ryobo.png?​600|}} \\ +{{:​pm:​prj2023:​gpatru:​hardware_design_ryobo.png?​600|}}\\ ​
  
 ===== Software Design ===== ===== Software Design =====
-<note tip> +**PlatformIO si C/C++** \\  
-Descrierea codului aplicaţiei ​(firmware): +Am ales sa folosesc PlatformIO care este o platformă de dezvoltare software deschisă și gratuită, special concepută pentru proiecte embedded. Aceasta oferă un mediu integrat de dezvoltare ​(IDEși un sistem de gestionare a bibliotecilor,​ care face ușor pentru dezvoltatorii de software să creeze și să gestioneze proiecte embedded. PlatformIO poate fi utilizat cu o varietate de platforme hardware, inclusiv Arduino. \\  
-  ​* mediu de dezvoltare ​(if any(e.g. AVR Studio, ​CodeVisionAVR) +Printre caracteristicile cheie ale PlatformIO se numără\\  
-  ​* librării şsurse 3rd-party (e.gProcyon AVRlib+  ​- Suport pentru peste 1.000 de platforme hardware diferite \\  
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +  - Suport pentru multiple limbaje de programare, inclusiv C/C++ (limbajul ales pentru Ryobo\\  
-  ​* ​(etapa 3surse şi funcţii implementate +  - Integrare cu mai multe IDE-uri populare, cum ar fi Visual ​Studio ​CodeAtom și Eclipse \\  
-</​note>​+  ​- Posibilitatea de a instala și gestiona biblioteci de software folosind o singură comandă \\  
 +  - Capacitatea de a genera automat fișiere de configurație pentru proiecte, ceea ce reduce timpul necesar pentru configurarea inițială a proiectelor \\  
 +  - Suport pentru testare unitară șintegrare continuă \\  
 +În general, PlatformIO este o platformă puternică și flexibilă de dezvoltare software pentru proiecte embedded, care își găsește utilitatea într-o gamă largă de aplicații, de la proiecte hobbyist până la dezvoltarea de produse comerciale. \\  
 + 
 +**Librarii** \\  
 +  - Pixy2.h si Pixy2CCC.h sunt bibliotecile folosite pana acum pentru a apela metode specifice camerei ​(de exemplu: getBlocks(),​ care returneaza valorile intre care este incadrat obiectul detectat)Sunt folosite si obiecte specifice camerei: signature, m_x, m_y etcDe asemenea, pentru o vizibilitate mai mare si o performanta mai buna in medii in care lumina nu este atat de buna, am folosit metoda setLamp(pentru a aprinde ledurile de la camera. \\  
 +  ​- SPI.h pentru comunicatie intre microcontroller si camera. \\  
 +  - Servo.h pentru crearea obiectelor de tip Servo, folosirea metodelor attach() si write(). Am testat functionarea in 2 moduri: atat cu biblioteca de Servo, cat si fara. La final, am ales implementarea prin care obtineam rezultatele mai bune. \\  
 + 
 +**Algoritmi** \\  
 +Prima etapa a algoritmilor a fost sa implementez ​pe microcontroller un program ​care modifica unghiul servomotoarelor in functie de pozitia obiectului fata de centrul frameului. Pentru a obtine comanda in PWM, am calculat pozitia cu ajutorul coordonatelor x si y furnizate de camera, iar apoi am aplicat un algoritm care se bazeaza pe controlul proportional. Acesta este primul pas si minimul pentru a indeplini sarcina de urmarire. \\  
 + 
 +Al doilea pas ar fi comandarea motoarelor DC sa porneasca atunci cand inputul de la camera este identic cu proprietatile obiectului cautat. Comanda se realizeaza prin PWM, semnal care ajunge la driver si dicteaza directia de deplasare, in functie de intrarea folosita din driver.\\  
 + 
 +Al treilea pas este urmarirea in spatiu se realizeaza in functie de dimensiunea identificata prin camera a obeictului. Sunt analizati parametrii primiti ​(atat width, cat si height). Daca obiectul este identificat si este relativ departe (parametrii width si height sunt mici), motoarele pornesc. Altfel, daca obiectul nu este identificat sau daca acesta este foarte aproape de camera (parametrii width si height depasesc un anumit prag setat), motoarele se opresc. \\  
 + 
 +O etapa de rafinare a urmaririi este reprezentata de virajele facute de motoarele DC. Aceasta problema este putin mai dificila si se bazeaza pe testare si setarea anumitor prioritati in program, astfel incat functionarea robotului sa semene cu un FSM (finite-state machine). In cazul de fata, am prioritizat centrarea obiectului pe axa Ox, iar apoi este realizat virajul in spatiu, in functie de comanda (unghiul) servomotorului care realizeaza centrarea pe Ox. \\ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +1. Testarea unitara a servomotoarelor a demonstrat necesitatea unui algoritm de tip PID, mai ales a componentei P, deoarece chiar daca si fara componenta proportionala,​ urmarirea era realizata, procesul nu era unul cu performante mari in ceea ce priveste urmarirea referintei si stabilizarea. Servomotoarele tindeau sa se reintoarca la pozitia neutra dupa fiecare modificare a unghiului. \\ 
 +2. Dupa adaugarea a doi factori Kp diferiti in functie de plan (pe Ox am uitizat 0.4, iar pe Oy, 0.5), am obtinut o urmarire vizibil imbunatatita. \\ 
 +3. Dupa ce am testat functionalitatea de centrare, am implementat deplasarea in spatiu. Cei mai importanti parametri de modificat au fost dimensiunile width (80) si height (60) ale obiectului vazut de camera. \\ 
 +{{:​pm:​prj2023:​gpatru:​ryobo_final.png?​400|}} \\ 
  
 ===== Concluzii ===== ===== Concluzii =====
 +Ryobo este un prototip in ceea ce priveste conceptul de __visual servoing__. In acest proiect am dorit sa punctez cateva notiuni mai provocatoare,​ din mai multe puncte de vedere: \\ 
 +1. **Control**:​ Pentru a face robotul sa functioneze,​ am avut nevoie de prioritizarea uneia dintre urmariri, astfel incat sa creez o activitate cat mai determinista. Am folosit un algoritm proportional de control pentru motoare, cu factori alesi experimental. \\ 
 +2. **Machine Learning**: Camera ruleaza un algoritm de detectie bazat pe hue-ul si contrastul din imaginile capturate. \\ 
 +3. **"​Economie"​ in ceea ce priveste componentele**:​ Am folosit toate cele 6 canale de PWM disponibile pe ATmega328P si rezultatul este satisfacator,​ chiar daca pot fi aduse imbunatatiri:​ cresterea vitezei motoarelor, multithreading etc. Nu am folosit un senzor de distanta pentru a identifica aproprierea obeictului, ci am prelucrat software datele de la camera. \\ 
 +4. **Utilitatea**:​ Algoritmii de acest gen nu trebuie sa isi gaseasca sfarsitul in implementarea pe roboti miniaturali,​ ci, odata ce tehnologia avanseaza, pot fi folositi pe drone, in mediul industrial sau pentru securitate.\\ ​
 +
  
 ===== Download ===== ===== Download =====
  
 <​note>​ <​note>​
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +  ​Proiectul detaliat poate fi descarcat ​de aici (inclusiv readme): https://​gitlab.com/​smp2023/​331ab/​ryobo.git \\ 
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă ​fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** ​(dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:​prj2009:​cc:​dumitru_alin**.+
 </​note>​ </​note>​
- 
 ===== Jurnal ===== ===== Jurnal =====
 +Primul pas a fost controlul servo-urilor in functie de inputul prelucrat de la camera:​\\ ​
 +{{:​pm:​prj2023:​gpatru:​evolution1.jpeg?​400|}} \\ 
 +Am inceput sa printez piesele din corpul robotului. Aici este primul body: \\ 
 +{{:​pm:​prj2023:​gpatru:​evolution2.jpeg?​400|}} \\ 
 +Pentru a oferi stabilitate tuturor componentelor din interior, inclusiv placii Arduino Uno, am printat si body-ul din mijloc de care este prinsa placa, avand si bratul de servo fixat deasupra. Al treilea body este cel mobil. Pentru a-i asigura stabilitate am folosit 3 ball casters care aluneca pe body-ul din mijloc atunci cand servomotorul misca platforma. \\ 
 +{{:​pm:​prj2023:​gpatru:​ryobo_aproapeasamblat.jpg?​400|}} \\ 
 +Am identificat existenta unei probleme legate de miscarea camerei in planul Oy. Suportul de care urma sa fie prins bratul servomotorului era la baza camerei. Orice mica ajustare a servomotorului ar fi miscat camera destul de puternic. Pentru o centrare mai buna, am distantat camera mai mult de platforma mobila si am prins bratul servomotorului la mijlocul sau, nu la baza. \\ 
 +{{:​pm:​prj2023:​gpatru:​ryobo_identificareparghie.jpg?​400|}} \\ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-**Proiecte similare**:+**Proiecte similare**: ​\\ 
  
-- (https://​cdn-learn.adafruit.com/​downloads/​pdf/​pixy-pet-robot-color-vision-follower-using-pixycam.pdf) → Proiectul Pixy Pet Robot Color Vision Follower este un robot care urmărește un obiect colorat cu ajutorul camerei Pixy Cam 2. Robotul este capabil să detecteze și să urmărească obiecte cu o rată de până la 50 de cadre pe secundă și este controlat de un microcontroller Arduino Leonardo. Față de proiectul meu, acest proiect are mai multe microcontrollere performante,​ ceea ce face proiectul mai ușor de implementat,​ deoarece fiecare poate prelua o funcție specifică. În cadrul proiectului meu, controlul motoarelor va fi mai dificil, deoarece acestea vor fi controlate prin intermediul unei mașini de stare care rulează în bucla infinită de pe ATmega328P. +- (https://​cdn-learn.adafruit.com/​downloads/​pdf/​pixy-pet-robot-color-vision-follower-using-pixycam.pdf) → Proiectul Pixy Pet Robot Color Vision Follower este un robot care urmărește un obiect colorat cu ajutorul camerei Pixy Cam 2. Robotul este capabil să detecteze și să urmărească obiecte cu o rată de până la 50 de cadre pe secundă și este controlat de un microcontroller Arduino Leonardo. Față de proiectul meu, acest proiect are mai multe microcontrollere performante,​ ceea ce face proiectul mai ușor de implementat,​ deoarece fiecare poate prelua o funcție specifică. În cadrul proiectului meu, controlul motoarelor va fi mai dificil, deoarece acestea vor fi controlate prin intermediul unei mașini de stare care rulează în bucla infinită de pe ATmega328P. ​\\  
-- (https://​youtu.be/​DV4YK_Kk5IY) → În acest proiect este prezentat un exemplu de detectare a unei mingi colorate care se mișcă rapid și imprevizibil. Camera așezată pe un suport se orientează după obiectul detectat, fiind mișcată de două servomotoare. Acestea sunt comandate de ATmega328P. Acest proiect nu include o componentă de urmărire la o distanță fixă a obiectului. Nu este un corp robotic complet, ci doar un suport acționat de două servomotoare. +- (https://​youtu.be/​DV4YK_Kk5IY) → În acest proiect este prezentat un exemplu de detectare a unei mingi colorate care se mișcă rapid și imprevizibil. Camera așezată pe un suport se orientează după obiectul detectat, fiind mișcată de două servomotoare. Acestea sunt comandate de ATmega328P. Acest proiect nu include o componentă de urmărire la o distanță fixă a obiectului. Nu este un corp robotic complet, ci doar un suport acționat de două servomotoare. ​\\  
-- (https://​youtu.be/​w_krOCBk1DE) → În acest proiect este construit un robot cu 4 motoare și 4 roți comandate printr-o [punte H L298N](https://​www.sparkfun.com/​datasheets/​Robotics/​L298_H_Bridge.pdf). Camera funcționează ca un senzor pentru a urmări obiectul detectat la o distanță fixă. Acest proiect nu implementează mobilitatea camerei pe axa orizontală și verticală, astfel încât camera să fie mereu orientată către obiect. Ryobo are o complexitate mai mare, deoarece sincronizează toate mișcările motoarelor și urmărirea devine mai dificilă.+- (https://​youtu.be/​w_krOCBk1DE) → În acest proiect este construit un robot cu 4 motoare și 4 roți comandate printr-o [punte H L298N](https://​www.sparkfun.com/​datasheets/​Robotics/​L298_H_Bridge.pdf). Camera funcționează ca un senzor pentru a urmări obiectul detectat la o distanță fixă. Acest proiect nu implementează mobilitatea camerei pe axa orizontală și verticală, astfel încât camera să fie mereu orientată către obiect. Ryobo are o complexitate mai mare, deoarece sincronizează toate mișcările motoarelor și urmărirea devine mai dificilă. ​\\ 
  
-**Biblioteca folosita si descrierea functiilor**:​ https://​docs.pixycam.com/​wiki/​doku.php?​id=wiki:​v2:​ccc_api+**Biblioteca folosita si descrierea functiilor**:​ https://​docs.pixycam.com/​wiki/​doku.php?​id=wiki:​v2:​ccc_api ​\\ 
  
-**First code Pixy info**: https://​sites.google.com/​view/​jumpinkit/​pixy-proyect +**First code Pixy info**: https://​sites.google.com/​view/​jumpinkit/​pixy-proyect \\ 
- +
-<​note>​ +
-**Resurse Software**\\  +
- +
-**Resurse Hardware**\\  +
- +
-</​note>​+
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2023/gpatru/483.1683324149.txt.gz · Last modified: 2023/05/06 01:02 by ioana.dinu0810
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0