Sisällysluettelo:
- Vaihe 1: VAATIMUKSIA:
- Vaihe 2: TYÖPERIAATE:
- Vaihe 3: TULON KAPPALE JA KÄSITTELY:
- Vaihe 4:
- Vaihe 5:
- Vaihe 6: KÄSITTELYOSA:
- Vaihe 7:
- Vaihe 8:
- Vaihe 9:
- Vaihe 10:
- Vaihe 11:
- Vaihe 12: LIIKKEEN HALLINTA:
- Vaihe 13:
Video: Gesture Hawk: Käsi -eleohjattu robotti kuvankäsittelypohjaisen käyttöliittymän avulla: 13 vaihetta (kuvien kanssa)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Gesture Hawk esiteltiin TechEvince 4.0: ssa yksinkertaisena kuvankäsittelypohjaisena ihmisen ja koneen käyttöliittymänä. Sen hyödyllisyys on se, että differentiaalikäyttöperiaatteella toimivan robottiauton ohjaamiseen ei tarvita muita antureita tai pukeutumista paitsi käsine. Tässä ohjeessa käymme läpi järjestelmässä käytetyn objektien seurannan ja eleiden havaitsemisen toimintaperiaatteen. Tämän projektin lähdekoodi voidaan ladata Githubista linkin kautta:
Vaihe 1: VAATIMUKSIA:
- L298N -moottorin ohjain
- DC -moottorit
- Robottiauton runko
- Arduino Uno
- LiPo -akut
- Arduino USB -kaapeli (pitkä)
- OpenCV -kirjasto Pythonilla
Vaihe 2: TYÖPERIAATE:
Gesture Hawk on kolmivaiheinen prosessointijärjestelmä, kuten yllä olevasta kaaviosta näet.
Vaihe 3: TULON KAPPALE JA KÄSITTELY:
Syötteen sieppaus voidaan ymmärtää laajemmissa luokissa, jotka on annettu yllä olevassa kaaviossa.
Käden muodon poistamiseksi ympäristöstä meidän on käytettävä tietyn värin peittoa tai suodatusta (tässä tapauksessa violetinsininen). Tätä varten sinun on muunnettava kuva BGR: stä HSV -muotoon, joka voidaan tehdä käyttämällä seuraavaa koodinpätkää.
hsv = cv2.cvtColor (kehys, cv2. COLOR_BGR2HSV)
Seuraava askel on löytää haluttu HSV -parametrialue, jotta kätesi voidaan poistaa maskin tai suodattimen kautta. Tätä varten paras tapa on etsiä sopiva alue käyttämällä raidepalkkeja. Tässä on kuvakaappaus tähän projektiin käytetystä raidapalkista.
Vaihe 4:
Vaihe 5:
Tässä on alla oleva koodinpätkä tällaisen raidan luomiseksi maskin rakentamista varten:
tuoda cv2
tuo numpy nimellä npdef nothing (x): pass cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' kuva ', 50, 255, ei mitään) cv2.createTrackbar (' l_V ',' kuva ', 50, 255, ei mitään) cv2.createTrackbar (' h_H ',' kuva ', 130, 255, ei mitään) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing), kun (1): _, frame = img.read ()
hsv = cv2.cvtColor (kehys, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_V', 'kuva') hH = cv2.getTrackbarPos ('h_H', 'kuva') hS = cv2.getTrackbarPos ('h_S', 'kuva') hV = cv2.getTrackbarPos ('h_V', 'kuva') alempi_R = np. array ([lH, lS, lV]) suurempi_R = np.array ([hH, hS, hV]) maski = cv2.inRange (hsv, alempi_R, korkeampi_R) res = cv2.bitwise_and (kehys, kehys, maski = maski) cv2.imshow ('kuva', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
Vaihe 6: KÄSITTELYOSA:
No, meillä on käden geometrinen muoto, nyt on aika hyödyntää sitä ja hyödyntää sitä käsieleen.
Kupera runko:
Kuperan rungon kautta yritämme sovittaa likimääräisen monikulmion muodon ääripisteiden kautta. Vasemmanpuoleisessa kuvassa näkyy likimääräinen monikulmio, joka oli määritetty muodolle kuperat pisteet merkitty punaisella.
Kuperat pisteet ovat muodon pisteitä, jotka ovat kauimpana tämän likimääräisen monikulmion sivusta. Kuperaan runkoon liittyvä ongelma on kuitenkin se, että sen laskennan aikana saamme taulukon kaikista kupeista pisteistä, mutta tarvitsemme sinisen kärjen kupera pisteen. Kerromme, miksi sitä tarvitaan.
Tämän kupera pisteen löytämiseksi meidän on sovellettava kohtisuoraa etäisyyskaavaa kuperan pisteen etäisyyden löytämiseksi lähimmän sivun kanssa. Havaitsimme, että sinisellä terävällä pisteellä on suurin etäisyys sivusta, joten saamme tämän pisteen.
Vaihe 7:
Vaihe 8:
Seuraavaksi meidän on löydettävä peukalon kärjen (tai ääripisteen) yhdistävän suoran kaltevuus tähän kuperaan pisteeseen, jossa on vaakasuora.
Vaihe 9:
Edellä mainitussa tapauksessa kulman α tulisi olla 0-90 astetta, jos ele on tarkoitettu vasemmalle kääntymiseen. Toisin sanoen rusketuksen (α) pitäisi olla positiivinen.
Vaihe 10:
Yllä olevassa tapauksessa kulman α tulisi olla 180-90 astetta, jos ele on suunnattu oikealle. Eli tan (α) pitäisi olla negatiivinen.
Siksi, jos Tan α on positiivinen, käänny vasemmalle. Jos Tan α on negatiivinen, käänny oikealle. Nyt on aika katsoa, kuinka tunnistaa tärkein pysäytyskomento.
Tässä tarkastellaan tiettyä suhdetta (löydetty osumalla ja kokeilulla) ja useimmissa tapauksissa tämä etäisyyksien suhde pysyy tällä alueella.
Vaihe 11:
Lopuksi, eteenpäin suuntautuva liike -ele analysoidaan matchChape () -funktiolla OpenCV: ssä. Tämä toiminto vertaa kahden laskurin muotoa, tässä tapauksessa yllä olevan kuvan kireyden harjoitteluesimerkin ja yllä olevan kuvan vasemman reunan muodon välillä. Se palauttaa arvon välillä 0 - 2 tai 3 kahden ääriviivan muodon mukaan. Saman muodon osalta se palauttaa arvon 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Tässä cn1 ja cnt2 ovat kaksi vertailtavaa ääriviivaa.
Vaihe 12: LIIKKEEN HALLINTA:
PySerial:
Käytimme PySerial -kirjastoa pythonissa muuntaaksemme käsitellyt tiedot sarjatiedoiksi, jotka välitettiin Arduino Unolle Arduino USB -kaapelin kautta. Kun opencv havaitsi tietyn eleen, loimme väliaikaisen muuttujan sanomalla "x" ja määritimme sille jonkin ainutlaatuisen arvon ja muutimme sen sarjatuloksi seuraavan komentorivin avulla:-
tuo sarja #tuoda Pyserial -kirjasto
serial. Serial ('', baudrate = '9600', timeout = '0') # sarjaliitännän määrittäminen.. PORTTI NIMI on portin nimi, jolla tiedonsiirto tapahtuu.
serial.write (b'x ') # x on porttiin lähetetty aakkoset … b on muuntaa tämä merkkijono tavuiksi.
Arduino -prosessointi:
Nyt arduino on koodattu siten, että jokainen eri sarja x on lineaarisesti kartoitettu tiettyyn toimintoon, joka on vastuussa robotin sujuvasta liikkeestä (esimerkiksi vasemman eleen havaitseminen laukaisee oikealla olevat moottorit kääntymään vasemmalle). Voimme hallita jokaisen pyörän liikettä käänteisesti ja pyörivästi muuttamalla koodia oikein.
L298N Moottorin ohjain:-
Moottorin ohjainta käytetään välittäjänä moottorin ja virtalähteen välillä, koska moottoreita ei voida käyttää suoraan pienjännitearvojen vuoksi. Li-Po-akku on kytketty 12 V: n tuloliitäntäänsä, ja me liitämme arduinon 5 V: n pistorasian moottorin kuljettajan 5 V: n tuloliitäntään, joka lopulta liittää Li-Po: n maadoituksen sekä arduinon moottoriajurin yhteiseen maadoituspistorasiaan.
Nyt moottorien liittimet on kytketty annettuihin pistorasioihin. Lopuksi liitämme moottorin tuloliitännät arduinon PWM -lähtöliitäntöihin, jolloin voimme vapaasti päättää liikkeen pyörimis- ja käännösnäkökohdista.
Suositeltava:
ESP32 -robotti servoja käyttämällä: 6 vaihetta (kuvien kanssa)
ESP32-robotti servojen avulla: Olen kokeillut erilaisia ESP32-kehityskortteja, tilasin äskettäin yhden TTGO T-Beam -lajikkeista, joissa on akkupistoke oman 18650 Lipon lisäämiseksi. rakentaa
SCARA -robotti: oppia Foward- ja käänteiskinematiikasta !!! (Plot Twist Opi tekemään reaaliaikainen käyttöliittymä ARDUINOssa KÄSITTELYÄ käyttäen !!!!): 5 vaihetta (kuvien kanssa)
SCARA -robotti: oppia Foward- ja käänteiskinematiikasta !!! (Plot Twist Opi tekemään reaaliaikainen käyttöliittymä ARDUINOssa KÄSITTELYN avulla !!!!): SCARA -robotti on erittäin suosittu kone teollisuusmaailmassa. Nimi tarkoittaa sekä valikoivasti yhteensopivaa kokoonpanorobottivartta että valikoivasti yhteensopivaa nivelletty robottivartta. Se on pohjimmiltaan kolmen vapauden asteen robotti, joka on kaksi ensimmäistä
Puheohjattu robotti 8051 -mikrokontrollerilla: 4 vaihetta (kuvien kanssa)
Puheohjattu robotti käyttämällä 8051 -mikrokontrolleria: Puheohjattu robotti ottaa määritetyn komennon äänen muodossa. Riippumatta siitä, mitä komento annetaan äänimoduulin tai Bluetooth -moduulin kautta, olemassa oleva ohjain purkaa sen ja siten annettu komento suoritetaan. Tässä projektissa minä
Voi -robotti: Arduino -robotti eksistentiaalisen kriisin kanssa: 6 vaihetta (kuvilla)
Voi -robotti: Arduino -robotti eksistentiaalisessa kriisissä: Tämä projekti perustuu animaatiosarjaan "Rick and Morty". Yhdessä jaksossa Rick tekee robotin, jonka ainoa tarkoitus on tuoda voita. Bruface -opiskelijoina (Brysselin teknillinen tiedekunta) meillä on tehtävä mecha
Oppitunti 4-numeroisen näytön käyttöliittymän käyttäminen Arduino UNO: n kanssa: 6 vaihetta (kuvilla)
Oppitunti 4-numeroisen näytön käyttöliittymän käyttäminen Arduino UNO: n avulla: Tämä opetusohjelma opettaa sinulle perusasioita 4-numeroisen näytön käyttämisestä Arduino UNO: n kanssa