Sisukord:
- 1. samm: VAJALIKUD ASJAD:
- 2. toiming: tööpõhimõte:
- 3. etapp: sisendi kogumine ja töötlemine:
- 4. samm:
- 5. samm:
- 6. samm: TÖÖTLEMISOSA:
- 7. samm:
- 8. samm:
- 9. samm:
- 10. samm:
- 11. samm:
- 12. samm: LIIKUMISTE KONTROLL:
- 13. samm:
Video: Liigutuskull: käsitsi liigutatav robot pilditöötluspõhise liidese abil: 13 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Gesture Hawki tutvustati TechEvince 4.0-s lihtsa pilditöötluspõhise inimese ja masina liidesena. Selle kasulikkus seisneb selles, et diferentsiaalkäigupõhimõttel töötava robotauto juhtimiseks ei ole vaja täiendavaid andureid ega kanda, välja arvatud kinnas. Selles juhendis tutvustame teid süsteemis kasutatavate objektide jälgimise ja liigutuste tuvastamise tööpõhimõtte kaudu. Selle projekti lähtekoodi saab alla laadida Githubist lingi kaudu:
1. samm: VAJALIKUD ASJAD:
- L298N mootorijuht
- DC mootorid
- Robot auto šassii
- Arduino Uno
- LiPo akud
- Arduino USB -kaabel (pikk)
- OpenCV raamatukogu Pythoniga
2. toiming: tööpõhimõte:
Gesture Hawk on kolmefaasiline töötlussüsteem, nagu näete ülaltoodud diagrammil.
3. etapp: sisendi kogumine ja töötlemine:
Sisendi püüdmist saab mõista ülaltoodud diagrammil esitatud laiemates kategooriates.
Käe kuju keskkonnast eraldamiseks peame kasutama kindlat värvi (antud juhul violetsinist) maskeerimist või filtreerimist. Selleks peate pildi teisendama BGR -st HSV -vormingusse, mida saab teha järgmise koodilõigu abil.
hsv = cv2.cvtColor (raam, cv2. COLOR_BGR2HSV)
Järgmine samm on leida soovitud HSV parameetrite vahemik, et maski või filtri abil käsi välja tõmmata. Selleks on parim viis sobiva vahemiku leidmiseks kasutada ribasid. Siin on ekraanipilt selle projekti jaoks kasutatavast ribaribast.
4. samm:
5. samm:
Siin on allpool toodud koodilõik, mis võimaldab maski ehitamiseks sellise riba teha:
import cv2
import numpy kui npdef nothing (x): pass cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' image ', 50, 255, nothing) cv2.createTrackbar (' l_V ',' image ', 50, 255, nothing) cv2.createTrackbar (' h_H ',' image ', 130, 255, nothing) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) samas (1): _, frame = img.read ()
hsv = cv2.cvtColor (raam, 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') madalam_R = np. massiiv ([lH, lS, lV]) kõrgem_R = np.massiiv ([hH, hS, hV]) mask = cv2.inRange (hsv, madalam_R, kõrgem_R) res = cv2.bitwise_and (raam, raam, mask = mask) cv2.imshow ('pilt', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
6. samm: TÖÖTLEMISOSA:
Noh, meil on käe geomeetriline kuju, nüüd on aeg seda ära kasutada ja kasutada seda käeliigutuse leidmiseks.
Kumer korpus:
Kumera kere kaudu proovime kuju äärmiste punktide kaudu sobitada ligikaudse hulknurga. Vasakul olev pilt näitab ligikaudset hulknurka, mis oli kujule määratud punastega tähistatud kumerate punktidega.
Kumerad punktid on need kuju punktid, mis on selle ligikaudse hulknurga küljest kõige kaugemal. Kuid kumera kere probleem on see, et selle arvutamise käigus saame massiivi kõigist kumeratest punktidest, kuid vajame sinist teravat kumerpunkti. Me ütleme teile, miks seda nõutakse.
Selle kumera punkti leidmiseks peame rakendama risti asetseva kauguse valemit kumera punkti kauguse leidmiseks lähima küljega. Vaatasime, et sinine terav punkt on küljest maksimaalse kaugusega ja nii saame selle punkti.
7. samm:
8. samm:
Järgmisena peame leidma pöia otsa (või äärmise punkti) ühendava joone kalde selle kumera horisontaalse punktiga.
9. samm:
Ülaltoodud juhul peaks nurk α olema 0 kuni 90 kraadi, kui žest on vasakpöörde jaoks. See on tan (α) peaks olema positiivne.
10. samm:
Ülaltoodud juhul peaks nurk α jääma 180 kuni 90 kraadi vahele, kui žest on suunatud paremale pööramisele. See on tan (α) peaks olema negatiivne.
Seega, kui Tan α on positiivne, siis vasakpööre. Kui Tan α on negatiivne, pöörake paremale. Nüüd on aeg näha, kuidas tuvastada kõige olulisem peatamiskäsk.
Siin uuritakse kindlaksmääratud suhet (leitud tabamuse ja katse põhjal) ning maksimaalsetel juhtudel jääb see vahemaade suhe sellesse vahemikku.
11. samm:
Lõpuks analüüsib liigutamise liigutust OpenCV funktsioon matchShape (). See funktsioon võrdleb kahe loenduri kuju, sel juhul ülaltoodud pildil oleva pingutusharjutuse näite ja ülaltoodud pildi vasakus servas oleva kontuuri vahel. See tagastab väärtuse vahemikus 0 kuni 2 või 3 vastavalt kahe kontuuri kujule. Sama kontuuri korral tagastab see 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Siin on cn1 ja cnt2 kaks kontuuri, mida tuleb võrrelda.
12. samm: LIIKUMISTE KONTROLL:
PySerial:
Kasutasime PySeriali pythoni raamatukogu, et teisendada töödeldud andmed seeriaandmeteks, et edastada need Arduino Unole Arduino USB -kaabli kaudu. Kui opencv tuvastas konkreetse žesti, lõime ajutise muutuja, näiteks „x”, ja määrasime sellele mõne unikaalse väärtuse ning teisendasime selle jadasisendiks järgmise käsurea abil:-
impordi seeria #importida Pyserial raamatukogu
serial. Serial ('', baudrate = '9600', timeout = '0') # seeriaväljundi seadistamine.. PORT NAME on selle pordi nimi, mille kaudu andmeedastus toimub.
serial.write (b'x ') # x on porti saadetud tähestik … b on selle stringi teisendamine baitideks.
Arduino töötlemine:
Nüüd on arduino kodeeritud selliselt, et iga erinev seeria x on lineaarselt kaardistatud teatud toimingute eest, mis vastutavad roboti sujuva liikumise eest (ütleme, et vasaku liigutuse tuvastamine käivitab parempoolsed mootorid vasakule pööramiseks). Koodi nõuetekohase muutmisega saame kontrollida iga ratta liikumist nii translatiivselt kui ka pöörlevalt.
L298N Mootori juht:-
Mootori juhti kasutatakse vahendajana mootori ja toiteallika vahel, kuna mootoreid ei saa madala pinge tõttu otseselt toita. Li-Po aku on ühendatud selle 12 V sisendklemmiga ja me ühendame arduino 5 V pistikupesa mootori juhi 5 V sisendpesaga, mis lõpuks ühendab nii Li-Po maanduse kui ka arduino mootorijuhi ühises maanduspessa.
Nüüd on mootorite klemmid ühendatud pistikupesadega. Lõpuks ühendame mootori sisendklemmid arduino PWM väljundpesadega, võimaldades meil vabalt otsustada liikumise pöörlemis- ja teisendusaspektide üle.
Soovitan:
Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja footonite liidese abil: 6 sammu
Niiskuse, rõhu ja temperatuuri arvutamine BME280 ja fotonite liidese abil: Me puutume kokku erinevate projektidega, mis nõuavad temperatuuri, rõhu ja niiskuse jälgimist. Seega mõistame, et need parameetrid mängivad tegelikult olulist rolli süsteemi töö efektiivsuse hindamisel erinevates atmosfääritingimustes
Liidese HMC5883L kompassianduri õpetus Arduinoga: 10 sammu (piltidega)
HMC5883L liidese õpetus Arduinoga: Kirjeldus HMC5883L on 3-teljeline digitaalne kompass, mida kasutatakse kahel üldotstarbel: magnetilise materjali, näiteks ferromagneti, magnetiseerimise mõõtmiseks või tugevuse ja mõnel juhul ka suuna mõõtmiseks. magnetväli punktis s
Liidese Sensirion, SPS-30, tahkete osakeste andur Arduino Duemilanove abil, kasutades I2C režiimi: 5 sammu
Interfacing Sensirion, SPS-30, tahkete osakeste andur Arduino Duemilanove abil, kasutades I2C režiimi: Kui uurisin SPS30 andurite liidestamist, mõistsin, et enamik allikaid on mõeldud Raspberry Pi jaoks, kuid mitte nii palju Arduino jaoks. Kulutan natuke aega, et andur Arduinoga tööle saada, ja otsustasin oma kogemuse siia postitada, et see saaks
Arduino TFT liidese põhitõed: 10 sammu (piltidega)
Arduino TFT -liidese põhitõed: TFT -puuteekraanid on hämmastav graafiline liides, mida saab kasutada selliste mikrokontrolleritega nagu Atmel, PIC, STM, kuna sellel on lai värvivalik, hea graafiline võime ja pikslite hea kaardistamine. Täna läheme 2,4 -tollise TFT liidesega
Lihtne automaatse kondensaatori tester / mahtuvusmõõtur Arduino abil ja käsitsi: 4 sammu
Lihtne automaatse kondensaatori tester / mahtuvusmõõtur Arduino ja käsitsi: Tere! Selle füüsikaüksuse jaoks vajate:* toiteallikat 0–12 V* ühte või mitut kondensaatorit* ühte või mitut laadimistakistit* stopperit* pinge multimeetrit mõõtmine* arduino nano* 16x2 I²C ekraan* 1/4 W takistid 220, 10k, 4,7M ja