This is an old revision of the document!
Grupa: 331CB
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.
In functie de gestul realizat de utilizator si inregistrat prin intermediul camerei web, unul 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-o parte si in cealalta fata de pozitia initiala.
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.
Mediu de dezvoltare: Arduino IDE
Biblioteci externe:
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.
Mediu de dezvoltare: Pycharm
Module externe:
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).
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 (1280×720) 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.
Consider ca