Cuprins:
- Pasul 1: LUCRURI NECESARE:
- Pasul 2: PRINCIPIUL DE LUCRU:
- Pasul 3: CAPTURĂ DE INTRARE ȘI PROCESARE:
- Pasul 4:
- Pasul 5:
- Pasul 6: PARTEA DE PRELUCRARE:
- Pasul 7:
- Pasul 8:
- Pasul 9:
- Pasul 10:
- Pasul 11:
- Pasul 12: CONTROLUL MUȘCĂRII:
- Pasul 13:
Video: Gesture Hawk: Robot controlat prin gesturi manuale folosind interfața bazată pe procesarea imaginilor: 13 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Gesture Hawk a fost prezentat în TechEvince 4.0 ca o interfață simplă bazată pe procesarea imaginilor om-mașină. Utilitatea sa constă în faptul că nu sunt necesari senzori suplimentari sau portabili, cu excepția unei mănuși, pentru a controla mașina robotică care funcționează pe principiul acționării diferențiale. În acest instructable, vă vom conduce prin principiul de lucru din spatele urmăririi obiectelor și a detectării gesturilor utilizate în sistem. Codul sursă al acestui proiect poate fi descărcat de pe Github prin link:
Pasul 1: LUCRURI NECESARE:
- Driver motor L298N
- DC Motors
- Șasiu auto robot
- Arduino Uno
- Baterii LiPo
- Cablu USB Arduino (lung)
- Biblioteca OpenCV cu Python
Pasul 2: PRINCIPIUL DE LUCRU:
Gesture Hawk este un sistem de procesare în trei faze, după cum puteți vedea în diagrama de mai sus.
Pasul 3: CAPTURĂ DE INTRARE ȘI PROCESARE:
Captura de intrare poate fi înțeleasă în categoriile mai largi date în diagrama de mai sus.
Pentru a extrage forma mâinii din mediu, trebuie să folosim mascarea sau filtrarea unei culori definite (în acest caz - albastru violet’). Pentru a face acest lucru, trebuie să convertiți imaginea din format BGR în format HSV, care se poate face folosind următorul fragment de cod.
hsv = cv2.cvtColor (cadru, cv2. COLOR_BGR2HSV)
Acum, următorul pas este să găsiți gama dorită de parametri HSV pentru a extrage mâna prin mască sau filtru. Pentru aceasta, cel mai bun mod este de a utiliza bare de cale pentru a găsi o gamă adecvată. Iată captura de ecran a unei bare de urmărire folosită pentru acest proiect.
Pasul 4:
Pasul 5:
Aici, există un fragment de cod dat mai jos pentru a crea o astfel de bară de urmărire pentru construirea măștii:
import cv2
import numpy ca npdef nimic (x): trece cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nimic) cv2.createTrackbar ('l_S ',' imagine ', 50, 255, nimic) cv2.createTrackbar (' l_V ',' imagine ', 50, 255, nimic) cv2.createTrackbar (' h_H ',' imagine ', 130, 255, nimic) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) while (1): _, frame = img.read ()
hsv = cv2.cvtColor (cadru, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_V', 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lower_R = np. matrice ([lH, lS, lV]) higher_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, higher_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
Pasul 6: PARTEA DE PRELUCRARE:
Ei bine, avem forma geometrică a unei mâini, acum este timpul să o exploatăm și să o folosim pentru a ne da seama de gestul mâinii.
Carena convexă:
Prin carena convexă, încercăm să potrivim un poligon aproximativ prin punctele extreme prezente în formă. Imaginea prezentă în stânga arată poligonul aproximativ care a fost atribuit formei cu punctele convexe marcate cu roșu.
Punctele convexe sunt acele puncte în formă care sunt cele mai îndepărtate de o parte a acestui poligon aproximativ. Dar, problema cu carena convexă este că, în timpul calculării sale, vom obține o serie de puncte convexe, dar ceea ce avem nevoie este punctul convex albastru. Vă vom spune de ce este necesar.
Pentru a găsi acest punct convex, trebuie să aplicăm formula distanței perpendiculare pentru a găsi distanța punctului convex cu cea mai apropiată latură. Am observat că punctul albastru ascuțit posedă distanța maximă față de lateral și astfel obținem acest punct.
Pasul 7:
Pasul 8:
În continuare trebuie să găsim înclinația liniei care unește vârful degetului mare (sau punctul extrem) la acest punct convex cu orizontală.
Pasul 9:
În cazul de mai sus, unghiul α ar trebui să fie între 0 și 90 de grade dacă gestul este pentru viraj la stânga. Adică tan (α) ar trebui să fie pozitiv.
Pasul 10:
În cazul de mai sus, unghiul α ar trebui să fie cuprins între 180 și 90 de grade dacă gestul este pentru virare la dreapta. Adică tan (α) ar trebui să fie negativ.
Prin urmare, dacă Tan α este pozitiv, atunci virează la stânga. Dacă Tan α este negativ, atunci rotiți la dreapta. Acum, este timpul să vedeți cum să detectați cea mai importantă comandă de oprire.
Aici, se analizează un raport specificat (găsit prin lovire și încercare) și, în cazuri maxime, acest raport de distanțe rămâne în acest interval special.
Pasul 11:
În sfârșit, gestul de mișcare înainte este analizat prin funcția matchShape () în OpenCV. Această funcție compară forma a două contoare, în acest caz, între exemplul de antrenament pe thright în imaginea de mai sus și conturul din partea stângă a imaginii de mai sus. Returnează o valoare cuprinsă între 0 și 2 sau 3, în funcție de variația prezentă sub forma a două contururi. Pentru același contur identic, returnează 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Aici, cn1 și cnt2 sunt cele două contururi care trebuie comparate.
Pasul 12: CONTROLUL MUȘCĂRII:
PySerial:
Am folosit biblioteca PySerial de python pentru a converti datele procesate în date seriale comunicate către Arduino Uno prin cablul USB Arduino. Odată ce un anumit gest a fost detectat de opencv, am creat o variabilă temporară care spune „x” și i-am atribuit o valoare unică și am convertit-o în intrare serială folosind următoarea linie de comandă: -
import serial #pentru a importa biblioteca Pyserial
serial. Serial ('', baudrate = '9600', timeout = '0') # setarea ieșirii seriale.. DENUMIREPORT este numele portului prin care va avea loc transmisia de date.
serial.write (b'x ') # x este alfabetul trimis la port … b este de a converti acest șir în octeți.
Prelucrare Arduino:
Acum, arduino este codat în așa fel încât fiecare serial x diferit este mapat liniar la o anumită acțiune responsabilă pentru o mișcare lină a robotului (să spunem că detectarea gestului din stânga va declanșa motoarele din dreapta pentru a vira la stânga). Putem controla mișcarea fiecărei roți, atât translațional cât și rotațional, schimbând corect codul.
L298N Șofer motor: -
Motor Driver este folosit ca mediator între motor și sursa de alimentare, deoarece motoarele nu pot fi alimentate direct din cauza tensiunilor reduse. Bateria Li-Po este conectată la terminalul său de intrare de 12V și conectăm mufa 5V arduino la mufa de intrare 5V a driverului motorului, conectând în cele din urmă solul Li-Po, precum și arduino într-o priză de masă comună a driverului motorului.
Acum bornele motoarelor sunt conectate la prizele date. În cele din urmă, conectăm terminale de intrare pentru motor la mufele de ieșire PWM de arduino, permițându-ne să decidem cu exactitate aspectele de rotație și de translație ale mișcării.
Recomandat:
Robot controlat prin gesturi folosind Arduino: 7 pași
Robot controlat prin gesturi folosind Arduino: Roboții sunt folosiți în multe sectoare, cum ar fi construcția, armata, producția, asamblarea etc. Roboții pot fi autonomi sau semi-autonomi. Roboții autonomi nu necesită nicio intervenție umană și pot acționa singuri în funcție de situație. Vezi
Mouse controlat prin gesturi folosind Micro: bit: 5 pași
Mouse controlat prin gesturi folosind Micro: bit: INTRODUCERE Proiectul este un mouse controlat prin gesturi, sub forma unei mănuși cu un micro: bit încorporat în el. Este un proiect inspirat de o idee timpurie pe care am avut-o ca inginer încorporat. Îmi doresc întotdeauna să am acces la un set de mouse și tastatură fără fir
Robotul SCARA: Aflați despre Foward și cinematica inversă !!! (Plot Twist Aflați cum să creați o interfață în timp real în ARDUINO folosind PROCESAREA !!!!): 5 pași (cu imagini)
Robotul SCARA: Aflați despre Foward și cinematica inversă !!! (Plot Twist Aflați cum să creați o interfață în timp real în ARDUINO folosind PROCESAREA !!!!): Un robot SCARA este o mașină foarte populară în lumea industriei. Numele înseamnă atât brațul robotului de asamblare conform cu selecție, fie brațul robot articulat conform cu selecție. Este practic un robot de trei grade de libertate, fiind primele două deplasări
Rover controlat prin gesturi folosind un accelerometru și o pereche de emițătoare-receptoare RF: 4 pași
Rover controlat prin gesturi cu ajutorul unui accelerometru și a unei perechi de emițătoare-receptoare RF: Hei, ai dorit vreodată să construiești un rover pe care să-l poți conduce prin simple gesturi de mână, dar care să nu poată niciodată să adune curajul de a te aventura în complexitățile procesării imaginilor și a interfața o cameră web cu microcontroler, ca să nu mai vorbim de ascensiune
Construiți un robot controlat prin gesturi: 4 pași (cu imagini)
Construiți un robot controlat prin gesturi: în acest instructabil construim un robot Arcbotics Sparki care poate fi controlat cu gesturi 3D. O caracteristică frumoasă a acestui proiect este că nu este nevoie de niciun dispozitiv suplimentar, cum ar fi un smartphone sau o mănușă, pentru a controla robotul. Mutați-vă mâna peste element