Taula de continguts:
- Pas 1: COSES REQUERIDES:
- Pas 2: PRINCIPI DE TREBALL:
- Pas 3: CAPTURA D'INTRADA I PROCESSAMENT:
- Pas 4:
- Pas 5:
- Pas 6: PART DEL TRACTAMENT:
- Pas 7:
- Pas 8:
- Pas 9:
- Pas 10:
- Pas 11:
- Pas 12: CONTROL DEL MOVIMENT:
- Pas 13:
Vídeo: Gesture Hawk: robot controlat amb gestos manuals mitjançant la interfície basada en el processament d’imatges: 13 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Gesture Hawk es va mostrar a TechEvince 4.0 com una simple interfície home-màquina basada en el processament d’imatges. La seva utilitat rau en el fet que no es requereixen cap sensor addicional o portable, excepte un guant, per controlar el cotxe robòtic que funciona segons el principi de la transmissió diferencial. En aquesta instrucció, us guiarem pel principi de funcionament del seguiment d’objectes i de la detecció de gestos que s’utilitza al sistema. El codi font d’aquest projecte es pot descarregar des de Github mitjançant l’enllaç:
Pas 1: COSES REQUERIDES:
- Controlador de motor L298N
- Motors DC
- Xassís de cotxe robot
- Arduino Uno
- Bateries LiPo
- Cable USB Arduino (llarg)
- Biblioteca OpenCV amb Python
Pas 2: PRINCIPI DE TREBALL:
Gesture Hawk és un sistema de processament de tres fases com podeu veure al diagrama anterior.
Pas 3: CAPTURA D'INTRADA I PROCESSAMENT:
La captura d’entrada es pot entendre a les categories més àmplies que es donen al diagrama anterior.
Per extreure la forma de la mà de l’entorn, hem d’utilitzar l’emmascarament o el filtratge d’un color definit (en aquest cas - blau violeta’). Per fer-ho, heu de convertir la imatge del format BGR a HSV que es pot fer mitjançant el següent fragment de codi.
hsv = cv2.cvtColor (marc, cv2. COLOR_BGR2HSV)
Ara, el següent pas és trobar el rang desitjat de paràmetres HSV per extreure la mà mitjançant màscara o filtre. Per a això, la millor manera és utilitzar barres de pista per trobar un abast adequat. Aquí teniu la captura de pantalla d’una barra de seguiment que s’utilitza per a aquest projecte.
Pas 4:
Pas 5:
A continuació, es mostra un fragment de codi a continuació per fer una barra de seguiment com aquesta per a la construcció de màscares:
importar cv2
importar numpy com npdef res (x): passar cv2.namedWindow ('imatge') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'imatge', 110, 255, res) cv2.createTrackbar ('l_S ',' imatge ', 50, 255, res) cv2.createTrackbar (' l_V ',' imatge ', 50, 255, res) cv2.createTrackbar (' h_H ',' imatge ', 130, 255, res) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) while (1): _, frame = img.read ()
hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_V', 'imatge') hH = cv2.getTrackbarPos ('h_H', 'imatge') hS = cv2.getTrackbarPos ('h_S', 'imatge') hV = cv2.getTrackbarPos ('h_V', 'imatge') lower_R = np. array ([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 ('imatge', res) k = cv2.waitKey (1) & 0xFF si k == 27: trenca cv2.destroyAllWindows ()
Pas 6: PART DEL TRACTAMENT:
Bé, tenim la forma geomètrica d’una mà, ara toca explotar-la i utilitzar-la per esbrinar el gest de la mà.
Casc convex:
A través del casc convex, intentem ajustar un polígon aproximat a través de punts extrems presents a la forma. La imatge present a l'esquerra mostra el polígon aproximat que s'havia assignat a la forma amb els punts convexos marcats amb vermell.
Els punts convexos són aquells punts en la forma que estan més allunyats d’un costat d’aquest polígon aproximat. Però, el problema del casc convex és que durant el seu càlcul obtindrem una matriu de tots els punts convexs, però el que necessitem és el punt convex de punta blava. Us explicarem per què és obligatori.
Per trobar aquest punt convex, hem d'aplicar la fórmula de la distància perpendicular per trobar la distància del punt convex amb el costat més proper. Hem observat que el punt apuntat blau posseeix la màxima distància del costat i, per tant, obtenim aquest punt.
Pas 7:
Pas 8:
A continuació, hem de trobar la inclinació de la línia que uneix la punta del polze (o el punt extrem) a aquest punt convex amb horitzontal.
Pas 9:
En el cas anterior, l'angle α hauria d'estar entre 0 i 90 graus si el gest és per girar a l'esquerra. És a dir, tan (α) hauria de ser positiu.
Pas 10:
En el cas anterior, l’angle α hauria d’estar entre 180 i 90 graus si el gest és per girar a la dreta. És a dir, tan (α) hauria de ser negatiu.
Per tant, si Tan α és positiu, gireu a l'esquerra. Si Tan α és negatiu, gireu a la dreta. Ara és hora de veure com detectar l’ordre stop més important.
Aquí, s’examina una proporció especificada (trobada per èxit i prova) i, en el màxim dels casos, aquesta proporció de distàncies es manté en aquest interval concret.
Pas 11:
Per fi, el gest de moviment previ s’analitza mitjançant la funció matchShape () a OpenCV. Aquesta funció compara la forma de dos comptadors, en aquest cas, entre l'exemple d'entrenament sobre el tirador de la imatge superior i el contorn del costat esquerre de la imatge anterior. Retorna un valor que oscil·la entre 0 i 2 o 3, segons la variació present en la forma de dos contorns. Per un contorn idèntic, retorna 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0,0)
Aquí, cn1 i cnt2 són els dos contorns que s'han de comparar.
Pas 12: CONTROL DEL MOVIMENT:
PySerial:
Hem utilitzat la biblioteca PySerial de python per convertir les dades processades en dades serials comunicades a Arduino Uno mitjançant el cable USB Arduino. Una vegada que opencv va detectar un gest concret, vam crear una variable temporal que diu "x" i li vam assignar un valor únic i el vam convertir a l'entrada en sèrie mitjançant la següent línia d'ordres: -
importació de sèrie # per importar la biblioteca Pyserial
serial. Serial ('', baudrate = '9600', timeout = '0') # configuració de la sortida serial.. NOM DEL PORT és el nom del port pel qual es produirà la transmissió de dades.
serial.write (b'x ') # x és l'alfabet enviat al port … b és convertir aquesta cadena en bytes.
Processament Arduino:
Ara, arduino es codifica de manera que cada sèrie diferent x es mapeja linealment a una determinada acció responsable d'un moviment suau del robot (per exemple, la detecció del gest esquerre activarà els motors de la dreta per girar a l'esquerra). Podem controlar el moviment de cada roda tant de manera translacional com de rotació canviant correctament el codi.
L298N Controlador de motor: -
Motor Driver s'utilitza com a mediador entre el motor i la font d'alimentació, ja que els motors no es poden alimentar directament a causa de les baixes tensions. La bateria Li-Po està connectada al seu terminal d’entrada de 12V i connectem la presa de 5V d’arduino a la presa d’entrada de 5V del conductor del motor, finalment connectant la terra de Li-Po, així com l’arduino en una presa de terra comuna del controlador de motor.
Ara els terminals dels motors estan connectats a les preses donades. Finalment, connectem terminals d’entrada per a motors a preses de sortida PWM d’arduino, cosa que ens permet decidir lliurement els aspectes de rotació i translació del moviment.
Recomanat:
Motor de corrent continu Control de gestos manuals Velocitat i direcció mitjançant Arduino: 8 passos
Control de gestos de mà amb velocitat i direcció de CC MOTOR mitjançant Arduino: en aquest tutorial aprendrem a controlar un motor de CC amb gestos de mans mitjançant arduino i Visuino. Mireu el vídeo. Consulteu també això: Tutorial sobre gestos de mans
Gadget de dinosaures de Chrome controlat per gestos manuals / Com fer-ho / #smartcreativity: 14 passos
Gadget de dinosaures de Chrome controlat per gest amb les mans / Com fer això / #smartcreativity: Hola amics, en aquest tutorial us mostraré un projecte molt exclusiu, així que avui us mostraré com controlar el joc de dinosaures de Chrome amb el vostre gest de mà molt fàcilment. Si utilitzeu aquesta tecnologia per controlar DINO crom, llavors caureu
Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32: 8 passos
Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32s: en aquest tutorial, aprendreu tot sobre com iniciar, connectar-se i aconseguir que el dispositiu I2C (acceleròmetre) funcioni amb el controlador (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
SCARA Robot: Aprendre sobre Foward i la cinemàtica inversa !!! (Plot Twist Aprèn a fer una interfície en temps real a ARDUINO mitjançant PROCESSAMENT !!!!): 5 passos (amb imatges)
SCARA Robot: Aprendre sobre Foward i la cinemàtica inversa !!! (Plot Twist Aprèn a fer una interfície en temps real a ARDUINO mitjançant el processament !!!!): Un robot SCARA és una màquina molt popular al món de la indústria. El nom significa tant el braç de robot de muntatge selectiu que compleix com el braç de robot articulat que compleix selectivament. Bàsicament és un robot de tres graus de llibertat, sent els dos primers desplaçaments
Com es construeix un robot controlat amb braç de pinça controlat mitjançant Nrf24l01 Arduino: 3 passos (amb imatges)
Com es construeix un robot controlat amb braç de pinça controlat mitjançant Nrf24l01 Arduino: la instrucció "Com construir robot controlat amb braç de pinça mitjançant Via Nrf24l01 Arduino" explicarà com construir un braç de pinça de tres graus de llibertat instal·lat en rodes de rodes controlades pel mòdul L298N de doble motor amb MEG