Indholdsfortegnelse:
- Trin 1: NØDVENDIGE TING:
- Trin 2: ARBEJDSPRINCIPP:
- Trin 3: INPUT FANGST OG BEHANDLING:
- Trin 4:
- Trin 5:
- Trin 6: BEHANDLINGSDEL:
- Trin 7:
- Trin 8:
- Trin 9:
- Trin 10:
- Trin 11:
- Trin 12: MOTION CONTROL:
- Trin 13:
Video: Gesture Hawk: Håndbevægelseskontrolleret robot ved hjælp af billedbehandlingsbaseret grænseflade: 13 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Gesture Hawk blev fremvist i TechEvince 4.0 som en simpel billedbehandlingsbaseret grænseflade mellem mennesker og maskiner. Dens anvendelighed ligger i, at der ikke kræves yderligere sensorer eller bærbare undtagen en handske for at styre den robotbil, der kører på differentialdrevsprincip. I denne instruks vil vi tage dig igennem arbejdsprincippet bag objektsporing og gestusdetektering, der bruges i systemet. Kildekoden til dette projekt kan downloades fra Github via link:
Trin 1: NØDVENDIGE TING:
- L298N motor driver
- DC motorer
- Robot chassis
- Arduino Uno
- LiPo batterier
- Arduino USB -kabel (langt)
- OpenCV -bibliotek med Python
Trin 2: ARBEJDSPRINCIPP:
Gesture Hawk er et trefaset behandlingssystem, som du kan se i diagrammet ovenfor.
Trin 3: INPUT FANGST OG BEHANDLING:
Inputfangst kan forstås i de bredere kategorier, der er angivet i diagrammet ovenfor.
For at udtrække håndformen fra miljøet skal vi bruge maskering eller filtrering af en bestemt farve (i dette tilfælde - violet blå’). For at gøre det skal du konvertere billedet fra BGR til HSV -format, der kan gøres ved hjælp af følgende kodestykke.
hsv = cv2.cvtColor (ramme, cv2. COLOR_BGR2HSV)
Nu er næste trin at finde det ønskede område af HSV -parametre til at udtrække hånden via maske eller filter. Til dette er den bedste måde at bruge sporstænger til at finde et passende område. Her er skærmbilledet af en sporlinje, der blev brugt til dette projekt.
Trin 4:
Trin 5:
Her er der et kodestykke angivet nedenfor for at lave sådan en trackbar til maskekonstruktion:
import cv2
import numpy som npdef ingenting (x): pass cv2.namedWindow ('billede') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, ingenting) cv2.createTrackbar ('l_S ',' billede ', 50, 255, ingenting) cv2.createTrackbar (' l_V ',' image ', 50, 255, ingenting) cv2.createTrackbar (' h_H ',' image ', 130, 255, ingenting) cv2. createTrackbar ('h_S', 'image', 255, 255, ingenting) cv2.createTrackbar ('h_V', 'image', 255, 255, ingenting) mens (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_ 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lavere_R = np. array ([lH, lS, lV]) højere_R = np.array ([hH, hS, hV]) maske = cv2.inRange (hsv, lavere_R, højere_R) res = cv2.bitwise_and (ramme, ramme, maske = maske) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF hvis k == 27: break cv2.destroyAllWindows ()
Trin 6: BEHANDLINGSDEL:
Nå, vi har den geometriske form af en hånd, nu er det tid til at udnytte den og bruge den til at finde ud af håndbevægelsen.
Konveks skrog:
Gennem konveks skrog forsøger vi at passe en omtrentlig polygon via ekstreme punkter til stede i formen. Billedet til venstre viser den omtrentlige polygon, der var blevet tildelt formen med de konvekse punkter markeret med rødt.
Konvekse punkter er de punkter i formen, der er længst fra en side af denne tilnærmede polygon. Men problemet med konveks skrog er, at vi under beregningen får en række af alle de konvekse punkter, men det vi har brug for er det blå spidse konvekse punkt. Vi fortæller dig, hvorfor det er påkrævet.
For at finde dette konvekse punkt skal vi anvende den vinkelrette afstandsformel til at finde afstanden af det konvekse punkt med nærmeste side. Vi observerede, at det blå spidse punkt besidder maksimal afstand fra siden, og så får vi dette punkt.
Trin 7:
Trin 8:
Dernæst skal vi finde hældningen af linjen, der forbinder tommelfingerspidsen (eller det ekstreme punkt) til dette konvekse punkt med vandret.
Trin 9:
I ovenstående tilfælde skal vinklen α være mellem 0 til 90 grader, hvis gestus er til venstresving. Det er tan (α) skal være positivt.
Trin 10:
I ovenstående tilfælde skal vinklen α være mellem 180 og 90 grader, hvis gestus er til højresving. Det er tan (α) skal være negativt.
Derfor, hvis Tan α er positiv, derefter venstresving. Hvis Tan α er negativ, så højresving. Nu er det tid til at se, hvordan du finder den vigtigste stopkommando.
Her undersøges et specificeret forhold (fundet ved hit and trial), og i maksimale tilfælde forbliver dette forhold mellem afstande i dette særlige område.
Trin 11:
Til sidst analyseres bevægelse i forvejen ved hjælp af matchShape () -funktionen i OpenCV. Denne funktion sammenligner formen af to tællere, i dette tilfælde mellem træningseksempel på vægt i ovenstående billede med konturen i venstre side af ovenstående billede. Den returnerer en værdi, der spænder fra 0 til 2 eller 3, afhængigt af variationen i form af to konturer. For identisk samme kontur returnerer den 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Her er cn1 og cnt2 de to konturer, der skal sammenlignes.
Trin 12: MOTION CONTROL:
PySerial:
Vi brugte PySerial -biblioteket i python til at konvertere de behandlede data til serielle data, der skulle kommunikeres til Arduino Uno via Arduino USB -kabel. Når en bestemt gest blev opdaget af opencv, oprettede vi en midlertidig variabel, der siger 'x', og tildelte den en unik værdi og konverterede den til seriel input ved hjælp af følgende kommandolinje:-
importer serie #til at importere Pyserial bibliotek
serial. Serial ('', baudrate = '9600', timeout = '0') # opsætning af seriel output.. PORT NAME er navnet på den port, hvormed dataoverførsel vil finde sted.
serial.write (b'x ') # x er alfabetet sendt til porten … b er at konvertere denne streng til bytes.
Arduino behandling:
Nu er arduino kodet på en sådan måde, at hver anden seriel x er lineært kortlagt til en bestemt handling, der er ansvarlig for en jævn bevægelse af robotten (sig påvisning af venstre gestus vil udløse motorerne til højre for at dreje til venstre). Vi kan kontrollere hvert hjuls bevægelse både translationelt og rotationsmæssigt ved at ændre koden korrekt.
L298N Motor driver:-
Motordriver bruges som mægler mellem motor og strømkilde, da motorer ikke kan drives direkte på grund af lave spændinger. Li-Po-batteri er tilsluttet sin 12V-indgangsterminal, og vi tilslutter arduinos 5V-stik til motordriverens 5V-indgangsstik, der endelig forbinder jord af Li-Po samt arduino i en fælles jordstik til motordriveren.
Nu er motorernes terminaler forbundet med de angivne stik. Endelig forbinder vi indgangsterminaler til motor til PWM -udgangsstik på arduino, så vi kan bestemme rotations- og oversættelsesaspekterne af bevægelse nøjagtigt.
Anbefalede:
Menneske-computer-grænseflade: Funktion en griber (lavet af Kirigami) ved håndledsbevægelse ved hjælp af EMG .: 7 trin
Menneske-computer-grænseflade: Funktionér en griber (lavet af Kirigami) af håndledsbevægelse ved hjælp af EMG .: Så dette var mit første forsøg på en grænseflade mellem mennesker og computere. Jeg fangede muskelaktiveringssignalerne fra min håndledsbevægelse ved hjælp af en EMG-sensor, behandlede det gennem python og arduino og aktiverede en origami -baseret griber
Sådan laver du en drone ved hjælp af Arduino UNO - Lav en quadcopter ved hjælp af mikrokontroller: 8 trin (med billeder)
Sådan laver du en drone ved hjælp af Arduino UNO | Lav en Quadcopter ved hjælp af mikrokontroller: Introduktion Besøg min Youtube -kanal En Drone er en meget dyr gadget (produkt) at købe. I dette indlæg vil jeg diskutere, hvordan jeg gør det billigt ?? Og hvordan kan du lave din egen sådan til en billig pris … Nå i Indien alle materialer (motorer, ESC'er
RF 433MHZ radiostyring ved hjælp af HT12D HT12E - Lav en RF -fjernbetjening ved hjælp af HT12E & HT12D med 433mhz: 5 trin
RF 433MHZ radiostyring ved hjælp af HT12D HT12E | Oprettelse af en RF -fjernbetjening ved hjælp af HT12E & HT12D med 433mhz: I denne instruktør vil jeg vise dig, hvordan du laver en RADIO -fjernbetjening ved hjælp af 433mhz sendermodtagermodul med HT12E -kode & HT12D -dekoder IC.I denne instruktive kan du sende og modtage data ved hjælp af meget meget billige KOMPONENTER SOM: HT
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter - Rc Helikopter - Rc -fly ved hjælp af Arduino: 5 trin (med billeder)
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter | Rc Helikopter | Rc -fly ved hjælp af Arduino: At betjene en Rc -bil | Quadcopter | Drone | RC -fly | RC -båd, vi har altid brug for en modtager og sender, antag at vi til RC QUADCOPTER har brug for en 6 -kanals sender og modtager, og den type TX og RX er for dyr, så vi laver en på vores
Håndbevægelseskontrolleret RC -bil: 15 trin
Håndbevægelseskontrolleret RC -bil: Hej verden! Dette er min første instruerbare Hvis du har spørgsmål - tøv ikke med at stille. Målgruppe: Dette projekt gælder for alle, der har en passion, når det kommer til teknologi. Uanset om du er en ekspert eller en absolut begyndelse