Differences

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

Link to this comparison view

pm:prj2022:agmocanu:robotic_arm [2022/05/22 19:17]
vlad.vasile1907
pm:prj2022:agmocanu:robotic_arm [2022/05/22 23:00] (current)
vlad.vasile1907
Line 32: Line 32:
 === Schema electrica === === Schema electrica ===
 {{vasile_vlad_andrei_schema_electrica.png?​700 | Schema electrica}} {{vasile_vlad_andrei_schema_electrica.png?​700 | Schema electrica}}
- 
  
  
Line 39: Line 38:
 === Cod Arduino === === Cod Arduino ===
 Mediu de dezvoltare: Arduino IDE Mediu de dezvoltare: Arduino IDE
 +
 Biblioteci externe: Biblioteci externe:
-* LiquidCrystal_I2C.h 
-* Servo.h 
  
-Programul ​citește valorile de pe pinii corespunzători potențiometrelor și mapează aceste valori la valori cuprinse între 0 și 180. În urma a două verificări valorile mapate se scriu pe fiecare servomotr și astfel brațul este mișcatCele 2 verificări au rolul de a elimina erorile produse de variația valorii rezultate de la convertorul analog-digital ​care ar determina ca brațul să aibă mișcări imprevizibile chiar și atunci când potențiometrele ramân nemișcateÎn final se scrie prin interfața I2C unghiul la care se află fiecare ​servomotor.+  * LiquidCrystal_I2C.h 
 +  * Servo.h 
 + 
 +Programul ​va citi mesajele primite prin interfata seriala, in urma rularii programului scris in PythonUn mesaj contine unghiurile celor 3 servomotoare separate prin spatiu. Dupa parsarea mesajului, va roti servomotoarele corespunzator,​ miscand componentele bratului ​de care acestea sunt lipiteSe vor afisa pe LCD coordonatele fiecarui ​servomotor.
  
 === Cod Python === === Cod Python ===
 Mediu de dezvoltare: Pycharm Mediu de dezvoltare: Pycharm
 +
 Module externe: Module externe:
-* mediapipe -  +  ​* mediapipe - detectarea mainii 
-* cv2 -  +  * cv2 - inregistrarea si afisarea imaginii obtinute de la camera web 
-* serial - comunicarea seriala cu arduino+  * 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}}+{{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>​
  
pm/prj2022/agmocanu/robotic_arm.1653236239.txt.gz · Last modified: 2022/05/22 19:17 by vlad.vasile1907
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