Turinys:
- 1 žingsnis: REIKALINGI dalykai:
- 2 žingsnis: DARBO PRINCIPAS:
- 3 veiksmas: įvesties surinkimas ir apdorojimas:
- 4 žingsnis:
- 5 veiksmas:
- 6 žingsnis: APDOROJIMO DALIS:
- 7 žingsnis:
- 8 žingsnis:
- 9 veiksmas:
- 10 veiksmas:
- 11 veiksmas:
- 12 žingsnis: JUDĖJIMŲ KONTROLĖ:
- 13 žingsnis:
Video: „Gesture Hawk“: rankomis valdomas robotas naudojant vaizdo apdorojimo sąsają: 13 žingsnių (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
„Gesture Hawk“buvo pristatytas „TechEvince 4.0“kaip paprasta vaizdų apdorojimo žmogaus ir mašinos sąsaja. Jo naudingumas slypi tame, kad norint valdyti robotinį automobilį, kuris veikia diferencinės pavaros principu, nereikia jokių papildomų jutiklių ar dėvimų daiktų, išskyrus pirštines. Šioje instrukcijoje mes supažindinsime jus su sistemoje naudojamų objektų sekimo ir gestų aptikimo principu. Šio projekto šaltinio kodą galima atsisiųsti iš „Github“per nuorodą:
1 žingsnis: REIKALINGI dalykai:
- L298N variklio tvarkyklė
- DC varikliai
- Automobilių robotų važiuoklė
- Arduino Uno
- LiPo baterijos
- „Arduino“USB kabelis (ilgas)
- „OpenCV“biblioteka su „Python“
2 žingsnis: DARBO PRINCIPAS:
„Gesture Hawk“yra trijų fazių apdorojimo sistema, kaip matote aukščiau esančioje diagramoje.
3 veiksmas: įvesties surinkimas ir apdorojimas:
Įvesties fiksavimą galima suprasti platesnėmis kategorijomis, pateiktomis aukščiau pateiktoje diagramoje.
Norėdami išgauti rankos formą iš aplinkos, turime naudoti tam tikros spalvos maskavimą arba filtravimą (šiuo atveju - violetinės mėlynos spalvos). Norėdami tai padaryti, turite konvertuoti vaizdą iš BGR į HSV formatą, kurį galima padaryti naudojant šį kodo fragmentą.
hsv = cv2.cvtColor (rėmelis, cv2. COLOR_BGR2HSV)
Dabar kitas žingsnis yra surasti norimą HSV parametrų diapazoną, kad ištrauktumėte ranką per kaukę ar filtrą. Tam tinkamiausias diapazonas yra geriausias būdas naudoti takelius. Čia yra šiam projektui naudojamos takelio juostos ekrano kopija.
4 žingsnis:
5 veiksmas:
Žemiau pateikiamas kodo fragmentas, skirtas tokiai kaukių konstravimo juostai sukurti:
importuoti cv2
importuoti numpy kaip npdef nieko (x): perduoti 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) o (1): _, frame = img.read ()
hsv = cv2.cvtColor (kadras, 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') low_R = np. masyvas ([lH, lS, lV]) didesnis_R = np.masyvas ([hH, hS, hV]) kaukė = cv2.inRange (hsv, apatinis_R, didesnis_R) res = cv2.bitwise_and (rėmas, rėmas, kaukė = kaukė) cv2.imshow ('vaizdas', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
6 žingsnis: APDOROJIMO DALIS:
Na, mes turime geometrinę rankos formą, dabar atėjo laikas ją išnaudoti ir panaudoti, norint išsiaiškinti rankos gestą.
Išgaubtas korpusas:
Per išgaubtą korpusą mes bandome pritaikyti apytikslį daugiakampį per kraštutinius formos taškus. Kairėje esančiame paveikslėlyje rodomas apytikslis daugiakampis, kuris buvo priskirtas formai su išgaubtais taškais, pažymėtais raudona spalva.
Išgaubti taškai yra tie formos taškai, esantys toliausiai nuo šio apytikslio daugiakampio šono. Tačiau išgaubto korpuso problema yra ta, kad skaičiuojant gausime visų išgaubtų taškų masyvą, tačiau mums reikia išgaubto mėlyno taško. Mes jums pasakysime, kodėl to reikia.
Norėdami rasti šį išgaubtą tašką, turime taikyti statmenos atstumo formulę, kad surastume išgaubto taško atstumą su artimiausia puse. Mes pastebėjome, kad mėlynas smailus taškas turi didžiausią atstumą nuo šono, todėl mes gauname šį tašką.
7 žingsnis:
8 žingsnis:
Toliau turime rasti linijos, jungiančios nykščio galiuką (arba kraštutinį tašką), linkį su šiuo išgaubtu tašku su horizontaliu.
9 veiksmas:
Pirmiau nurodytu atveju kampas α turėtų būti nuo 0 iki 90 laipsnių, jei gestas skirtas posūkiui į kairę. Tai yra įdegis (α) turėtų būti teigiamas.
10 veiksmas:
Pirmiau nurodytu atveju kampas α turėtų būti nuo 180 iki 90 laipsnių, jei gestas skirtas posūkiui į dešinę. Tai yra įdegis (α) turėtų būti neigiamas.
Todėl, jei Tan α yra teigiamas, tada pasukite į kairę. Jei Tan α yra neigiamas, pasukite į dešinę. Dabar atėjo laikas pamatyti, kaip aptikti svarbiausią sustabdymo komandą.
Čia išnagrinėtas nurodytas santykis (nustatytas pagal smūgį ir bandymą) ir daugeliu atvejų šis atstumų santykis išlieka šiame konkrečiame diapazone.
11 veiksmas:
Galiausiai, judėjimo į priekį gestas analizuojamas naudojant OpenSV funkciją matchShape (). Ši funkcija palygina dviejų skaitiklių formą, šiuo atveju, tarp treniruotės pavyzdžio dėl sandarumo aukščiau esančiame paveikslėlyje su kontūru kairėje aukščiau esančio vaizdo pusėje. Ji grąžina reikšmę nuo 0 iki 2 arba 3, atsižvelgiant į dviejų kontūrų formos kitimą. Tuo pačiu kontūru jis grąžina 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Čia cn1 ir cnt2 yra du kontūrai, kuriuos reikia palyginti.
12 žingsnis: JUDĖJIMŲ KONTROLĖ:
„PySerial“:
Mes panaudojome „PySerial“„python“biblioteką, norėdami paversti apdorotus duomenis į serijinius duomenis ir perduoti „Arduino Uno“per „Arduino“USB kabelį. Kai „opencv“aptiko tam tikrą gestą, mes sukūrėme laikiną kintamąjį, pvz., „X“, ir priskyrėme jam unikalią vertę ir konvertavome jį į nuoseklųjį įvestį naudodami šią komandų eilutę:-
importuoti serial #importuoti Pyserial biblioteką
serial. Serial ('', baudrate = '9600', timeout = '0') # nustatantis serijinę išvestį.. UOSTO PAVADINIMAS yra prievado, kuriuo bus perduodami duomenys, pavadinimas.
serial.write (b'x ') # x yra abėcėlė, siunčiama į prievadą … b yra konvertuoti šią eilutę į baitus.
„Arduino“apdorojimas:
Dabar „arduino“yra užkoduotas taip, kad kiekvienas skirtingas serijinis x yra linijiškai susietas su tam tikru veiksmu, atsakingu už sklandų roboto judėjimą (tarkime, kairiojo gesto aptikimas paskatins dešinėje esančius variklius pasukti į kairę). Tinkamai pakeisdami kodą, mes galime kontroliuoti kiekvieno rato judesį tiek vertikaliai, tiek sukimosi būdu.
L298N variklio vairuotojas:-
Variklio vairuotojas naudojamas kaip tarpininkas tarp variklio ir maitinimo šaltinio, nes varikliai negali būti tiesiogiai maitinami dėl žemos įtampos. „Li-Po“akumuliatorius yra prijungtas prie jo 12 V įvesties gnybto, o mes prijungiame „arduino“5 V lizdą prie variklio vairuotojo 5 V įvesties lizdo, galiausiai prijungiančio „Li-Po“žemę, taip pat „arduino“į bendrą variklio vairuotojo įžeminimo lizdą.
Dabar variklių gnybtai yra prijungti prie nurodytų lizdų. Galiausiai mes prijungiame variklio įvesties gnybtus prie arduino PWM išvesties lizdų, kad galėtume tiksliai nuspręsti dėl judesio sukimosi ir vertimo aspektų.
Rekomenduojamas:
Rankomis valdomas „Chrome“dinozaurų įtaisas / Kaip tai padaryti / #smartcreativity: 14 žingsnių
Rankų gestais valdoma „Chrome“dinozaurų programėlė / Kaip tai padaryti / #smartcreativity: Sveiki draugai, šioje pamokoje aš jums parodysiu labai išskirtinį projektą. Taigi, šiandien aš jums parodysiu, kaip rankos gestu valdyti „Chrome“dinozaurų žaidimą labai lengvai. Jei naudosite šią technologiją chromo DINO valdymui, nukrisite
Vaizdo apdorojimo pagrindu sukurta gaisro atpažinimo ir gesintuvo sistema: 3 žingsniai
Vaizdo apdorojimo pagrindu sukurta gaisro atpažinimo ir gesintuvo sistema: Sveiki draugai, tai vaizdo apdorojimu pagrįsta gaisro aptikimo ir gesintuvo sistema naudojant „Arduino“
Rankomis valdomas RC automobilis: 15 žingsnių
Rankomis valdomas RC automobilis: Sveikas pasaulis! Tai mano pirmasis nurodymas Jei turite klausimų - nedvejodami klauskite. Tikslinė auditorija: Šis projektas tinka visiems, kurie turi aistrą technologijų srityje. Nesvarbu, ar esate ekspertas, ar pradedantysis
„Wi-Fi“valdomas robotas naudojant „Wemos D1 ESP8266“, „Arduino IDE“ir „Blynk“programą: 11 žingsnių (su paveikslėliais)
„Wi-Fi“valdomas robotas naudojant „Wemos D1 ESP8266“, „Arduino IDE“ir „Blynk“programą: šioje pamokoje parodysiu, kaip sukurti „Wi-Fi“valdomą robotinį baką, valdomą iš išmaniojo telefono naudojant „Blynk“programą. Šiame projekte buvo naudojama ESP8266 „Wemos D1“plokštė, tačiau taip pat gali būti naudojami kiti plokščių modeliai („NodeMCU“, „Firebeetle“ir kt.)
Balso valdomas robotas naudojant 8051 mikrovaldiklį: 4 žingsniai (su paveikslėliais)
Balso valdomas robotas naudojant 8051 mikrovaldiklį: balsu valdomas robotas priima nurodytą komandą balso pavidalu. Kad ir kokia komanda būtų duota per balso modulį ar „Bluetooth“modulį, esamas valdiklis ją iššifruoja, todėl duota komanda vykdoma. Šiame projekte aš