This shows you the differences between two versions of the page.
pm:prj2022:agmocanu:robotic_arm [2022/05/22 10:45] vlad.vasile1907 |
pm:prj2022:agmocanu:robotic_arm [2022/05/22 23:00] (current) vlad.vasile1907 |
||
---|---|---|---|
Line 31: | Line 31: | ||
=== Schema electrica === | === Schema electrica === | ||
- | {{vasile_vlad_andrei_schema_electrica.png?700 | Schema bloc}} | + | {{vasile_vlad_andrei_schema_electrica.png?700 | Schema electrica}} |
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | === Cod Arduino === | ||
+ | Mediu de dezvoltare: Arduino IDE | ||
+ | |||
+ | Biblioteci externe: | ||
+ | |||
+ | * LiquidCrystal_I2C.h | ||
+ | * Servo.h | ||
+ | |||
+ | Programul va citi mesajele primite prin interfata seriala, in urma rularii programului scris in Python. Un mesaj contine unghiurile celor 3 servomotoare separate prin spatiu. Dupa parsarea mesajului, va roti servomotoarele corespunzator, miscand componentele bratului de care acestea sunt lipite. Se vor afisa pe LCD coordonatele fiecarui servomotor. | ||
+ | |||
+ | === Cod Python === | ||
+ | Mediu de dezvoltare: Pycharm | ||
+ | |||
+ | Module externe: | ||
+ | * mediapipe - detectarea mainii | ||
+ | * cv2 - inregistrarea si afisarea imaginii obtinute de la camera web | ||
+ | * serial - comunicarea seriala cu arduino | ||
+ | |||
+ | Se va initializa legatura seriala cu Arduino-ul conectat prin portul USB, comunicand prin interfata seriala cu un baud rate de 115.2 kbps, setat atat in programul in Python cat si cel pentru Arduino. Aceasta valoare este cea mai mare pe care am putut sa o setez, in cadrul testarii nu a prezentat nicio eroare, un baud rate mai mare rezultand in erori aparute instantaneu. Datele obtinute de la camera se genereaza totusi cu o frecventa mult mai rapida, un baud rate mai mare ar fi fost util pentru a avea un brat mai sensibil la orice miscare, intrucat in programul implementat datele se vor trimite la fieare 8 iteratii (cadre) pentru a permite microcontrolerului sa citeasca si sa prelucrezele datele si sa pozitioneze servomotoarele corespunzator. | ||
+ | |||
+ | Cu ajutorul modulului Open Computer Vision (cv2), se vor prelua imaginile generate de camera Web, care vor fi prelucrate de programul de detectie a mainilor implementat in modulul mediapipe. In momentul in care se detecteaza o mana, programul va prelua coordonatele indiciilor 5 si 17 conform imaginii de mai jos (inceputul aratatorului si inceputul degetului mic). | ||
+ | |||
+ | {{vasile_vlad_andrei_hand_landmarks.png?500|Mediapipe Indici Mana}} | ||
+ | |||
+ | |||
+ | Etapa de initializare presupune pozitionarea mainii intr-un dreptunghi pentru prima rulare a programului, daca aceasta iese din cadru sau in cazul in care se misca mult prea rapid si nu este detectata de algoritmul de detectie al mainilor intr-un anumit cadru. Aceasta initializare are rolul de a reprezenta un punct de start apropiat de pozitia initiala a bratului, care are servomotoarele rotite la un unghi de 90 de grade (initializarea are in general valori cuprinse intre 80 si 100 de grade, pentru diferite pozitionari si dimensiuni ale mainii) | ||
+ | |||
+ | Coordonatele pentru primele 2 servomotoare (X si Y) se obtin prin maparea pozitiei mainii din intervalul ferestrei (1280x720) din care se scad dimensiunile curente ale mainii in intervalul 0-180. | ||
+ | Coordonata celui de-al treila servomotor (Z) se obtine prin calcularea distantei euclidiene intre cele doua puncte ale mainii, rezultand valori ridicate in momentul in care se apropie mana, respectiv valori scazute atunci cand aceasta se departeaza. Aceasta distanta este de asemenea mapata in intervalul 0-180. | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | {{vasile_vlad_andrei_schema1.jpeg?350|Schema implementata}} {{vasile_vlad_andrei_schema2.jpeg?350|Schema implementata}} | ||
+ | |||
+ | Demo: https://www.youtube.com/watch?v=VnQlsDqyTok | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Consider ca proiectul a fost unul util, intrucat am aplicat atat cunostiinte aflate in cadrul laboratorului dar am si dobandit diverse cunostinte in lucrul cu modulele Python folosite. | ||
+ | Constructia bratului robotic a durat mai mult decat m-as fi asteptat (mai intai gasirea materialelor potrivite si apoi mai multe retusuri precum adaugarea de pietre in cutia cu primul servomotor, pilirea colturilor riglei pentru cel de al doilea brat pentru a nu se ridica la unghiurile extreme de 0/180 de grade, lipirea riglei de servomotor in diferite moduri si de foarte multe ori, intrucat acestea cedeau datorita greutatii). | ||
+ | Ideea initiala a fost realizarea unui brat mai util, insa utilizarea acestuia din final a fost aceea de a avea atasat la capat o carioaca (cel mai interactiv si cu o greutate ce poate fi sustinuta de puterea servomotoarelor si banda dublu adeziva). | ||
+ | Implementarea software consider ca a fost reusita, insa este constransa de limitarile microprocesorului si servomotoarelor, datele fiind transmise la fiecare 8 iteratii si existand un delay vizibil. | ||
===== Download ===== | ===== Download ===== | ||
+ | {{:pm:prj2022:agmocanu:vasile_vlad_andrei_331cb_pm_robotic_arm.zip|Cod Sursa}} | ||
+ | |||
+ | Link git: https://github.com/vladandreiy/PM_Robotic_Arm | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | * **6.05.2022**: Completare pagina wiki - Milestone 1 | + | * 6.05.2022: Completare pagina wiki - Milestone 1 |
+ | * 16.05.2022-18.05.2022: Implementarea codului software | ||
+ | * 20.05.2022-22.05.2022: Construire brat si finalizare implementare | ||
+ | * 22.05.2022: Completare pagina wiki - Milestone 2 | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | * https://docs.arduino.cc/learn/electronics/servo-motors/ | ||
+ | * https://www.makerguides.com/character-i2c-lcd-arduino-tutorial/ | ||
+ | * https://create.arduino.cc/projecthub/ansh2919/serial-communication-between-python-and-arduino-e7cce0 | ||
+ | * https://www.geeksforgeeks.org/opencv-python-tutorial/ | ||
+ | * https://google.github.io/mediapipe/solutions/hands.html | ||
+ | * https://techtutorialsx.com/2021/04/20/python-real-time-hand-tracking/ | ||
<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> | ||