Taula de continguts:

Gesture Hawk: robot controlat amb gestos manuals mitjançant la interfície basada en el processament d’imatges: 13 passos (amb imatges)
Gesture Hawk: robot controlat amb gestos manuals mitjançant la interfície basada en el processament d’imatges: 13 passos (amb imatges)

Vídeo: Gesture Hawk: robot controlat amb gestos manuals mitjançant la interfície basada en el processament d’imatges: 13 passos (amb imatges)

Vídeo: Gesture Hawk: robot controlat amb gestos manuals mitjançant la interfície basada en el processament d’imatges: 13 passos (amb imatges)
Vídeo: Part 1 - The Time Machine Audiobook by H. G. Wells (Chs 01-06) 2024, Juny
Anonim
Gesture Hawk: robot controlat per gest manual mitjançant una interfície basada en el processament d’imatges
Gesture Hawk: robot controlat per gest manual mitjançant una interfície basada en el processament d’imatges

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:

COSES REQUERIDES
COSES REQUERIDES
COSES REQUERIDES
COSES REQUERIDES
COSES REQUERIDES
COSES REQUERIDES
COSES REQUERIDES
COSES REQUERIDES
  1. Controlador de motor L298N
  2. Motors DC
  3. Xassís de cotxe robot
  4. Arduino Uno
  5. Bateries LiPo
  6. Cable USB Arduino (llarg)
  7. Biblioteca OpenCV amb Python

Pas 2: PRINCIPI DE TREBALL:

PRINCIPI DE TREBALL
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:

CAPTURA D'INTRADA I TRACTAMENT
CAPTURA D'INTRADA I TRACTAMENT

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:

Imatge
Imatge

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:

PART DEL TRACTAMENT
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:

Imatge
Imatge

Pas 8:

Imatge
Imatge

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:

Imatge
Imatge

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:

Imatge
Imatge

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:

Imatge
Imatge

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:

CONTROL DE MOCIÓ
CONTROL DE MOCIÓ

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: