Differences

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

Link to this comparison view

pm:prj2022:agmocanu:robotic_arm [2022/05/02 10:20]
vlad.vasile1907
pm:prj2022:agmocanu:robotic_arm [2022/05/22 23:00] (current)
vlad.vasile1907
Line 1: Line 1:
 ====== Robotic Arm ====== ====== Robotic Arm ======
-===== Introducere ===== 
- 
 <note tip> <note tip>
-Prezentarea pe scurt a proiectului vostru: +[[vlad.vasile@stud.acs.upb.ro|Vasile Vlad-Andrei]] 
-  * ce face + 
-  * care este scopul lui +Grupa: 331CB
-  * care a fost ideea de la care aţi pornit +
-  * de ce credeţi că este util pentru alţii şi pentru voi+
 </​note>​ </​note>​
 +===== Introducere =====
 +
 +Scopul proiectului este acela de a controla un brat robotic prin intermediul unor gesturi realiate de utilizator.
 +
 +Bratul este una dintre cele mai utile si versatile unelte pe care le are omul la dispozitie, consider ca ideea de a controla un "​brat"​ robotic de la distanta prin intermediul gesturilor poate avea o multitudine de aplicatii in viata reala, de la o "​mana"​ de ajutor in plus pentru task-urile zilnice, la folosirea acestui brat in locuri greu accesibile, in domeniul medical, etc.
 +
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +In functie de gestul realizat de utilizator si inregistrat prin intermediul camerei webunul dintre cele 3 servomotoare se va roti astfel incat sa realizeze miscarea bratului robotic. Va exista un servomotor pentru fiecare directie din spatiul 3D si acestea vor putea fi rotite la 90 de grade intr-parte si in cealalta fata de pozitia initiala.
-O schemă bloc cu toate modulele proiectului vostruatât software cât şi hardware însoţită ​de o descriere a acestora precum şi a modului în care interacţionează.+
  
-Exemplu ​de schemă bloc: http://www.robs-projects.com/​mp3proj/​newplayer.html +O miscare stanga - dreapta a mainii, ​de exemplu, va fi inregistrata de camera, va fi prelucrata cu ajutorul librariei Mediapipe astfel incat sa rezulte coordonatele la care trebuie sa ajunga bratul si vor fi transmise prin interfata seriala catre Arduino, acesta mutand cursorul servomotorului responsabil pentru directia respectiva
-</​note>​+ 
 +=== Schema bloc === 
 +{{vasile_vlad_andrei_schema_bloc.jpg?​700 | Schema bloc}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +=== Lista piese === 
-Aici puneţi tot ce ţine de hardware design: +  * Arduino UNO 
-  * listă de piese +  * Breadboard 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +  * 3x Servomotoare 
-  * diagrame de semnal ​ +  * Ecran LCD 16x2 I2C 
-  * rezultatele simulării +  * Camera Web 
-</​note>​+  * Fire de legatura 
 + 
 +=== Schema electrica === 
 +{{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.
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +{{vasile_vlad_andrei_schema1.jpeg?​350|Schema implementata}} {{vasile_vlad_andrei_schema2.jpeg?​350|Schema implementata}}
  
-<note tip> +Demo: https://​www.youtube.com/watch?​v=VnQlsDqyTok
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
 ===== 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}}
  
-<note warning>​ +Link githttps://github.com/​vladandreiy/PM_Robotic_Arm
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +
- +
-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>+
  
 ===== Jurnal ===== ===== Jurnal =====
- +  * 6.05.2022: Completare pagina wiki - Milestone 1 
-<note tip> +  * 16.05.2022-18.05.2022:​ Implementarea codului software 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului+  * 20.05.2022-22.05.2022:​ Construire brat si finalizare implementare 
-</​note>​+  * 22.05.2022: Completare pagina wiki - Milestone 2
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
- +  * https://​docs.arduino.cc/​learn/​electronics/​servo-motors/​ 
-<​note>​ +  * https://​www.makerguides.com/​character-i2c-lcd-arduino-tutorial/​ 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * https://​create.arduino.cc/​projecthub/​ansh2919/​serial-communication-between-python-and-arduino-e7cce0 
-</note>+  ​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.1651476048.txt.gz · Last modified: 2022/05/02 10:20 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