Satura rādītājs:
- 1. darbība. Nepieciešamās lietas:
- 2. darbība: DARBA PRINCIPS:
- 3. darbība. IEVADES UZGLABĀŠANA UN APSTRĀDE:
- 4. solis:
- 5. darbība:
- 6. darbība: APSTRĀDES DAĻA:
- 7. darbība:
- 8. darbība
- 9. darbība
- 10. darbība:
- 11. darbība:
- 12. darbība: KUSTĪBU VADĪBA:
- 13. darbība
Video: Žestu vanags: ar žestiem kontrolēts robots, izmantojot saskarni, kas balstīta uz attēlu apstrādi: 13 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Gesture Hawk tika demonstrēts TechEvince 4.0 kā vienkārša attēla apstrādes pamatā esoša cilvēka un mašīnas saskarne. Tās lietderība ir tāda, ka, lai vadītu robotu automašīnu, kas darbojas pēc diferenciālās piedziņas principa, nav nepieciešami papildu sensori vai valkājams, izņemot cimdu. Šajā pamācībā mēs iepazīstināsim jūs ar sistēmā izmantoto objektu izsekošanas un žestu noteikšanas principu. Šī projekta avota kodu var lejupielādēt no Github, izmantojot saiti:
1. darbība. Nepieciešamās lietas:
- L298N motora vadītājs
- DC Motors
- Automašīnu robotu šasija
- Arduino Uno
- LiPo baterijas
- Arduino USB kabelis (garš)
- OpenCV bibliotēka ar Python
2. darbība: DARBA PRINCIPS:
Gesture Hawk ir trīsfāžu apstrādes sistēma, kā redzams iepriekš redzamajā diagrammā.
3. darbība. IEVADES UZGLABĀŠANA UN APSTRĀDE:
Ievades uztveršanu var saprast plašākās kategorijās, kas norādītas iepriekšējā diagrammā.
Lai iegūtu roku formu no vides, mums jāizmanto noteiktas krāsas maskēšana vai filtrēšana (šajā gadījumā - violeti zila”). Lai to izdarītu, attēls jāpārvērš no BGR uz HSV formātu, ko var izdarīt, izmantojot šādu koda fragmentu.
hsv = cv2.cvtColor (rāmis, cv2. COLOR_BGR2HSV)
Tagad nākamais solis ir atrast vēlamo HSV parametru diapazonu, lai izvilktu roku, izmantojot masku vai filtru. Šim nolūkam labākais veids ir izmantot sliedes, lai atrastu piemērotu diapazonu. Šeit ir šim projektam izmantotās sliežu joslas ekrānuzņēmums.
4. solis:
5. darbība:
Tālāk ir sniegts koda fragments, lai izveidotu šādu sliežu joslu maskas veidošanai:
importēt cv2
importēt numpy kā 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, nekas) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing), kamēr (1): _, frame = img.read ()
hsv = cv2.cvtColor (rāmis, 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. masīvs ([lH, lS, lV]) augstāks_R = np.masīvs ([hH, hS, hV]) maska = cv2.inRange (hsv, apakšējais_R, augstāks_R) res = cv2.bitwise_and (rāmis, rāmis, maska = maska) cv2.imshow ('attēls', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
6. darbība: APSTRĀDES DAĻA:
Mēs esam ieguvuši rokas ģeometrisko formu, tagad ir pienācis laiks to izmantot un izmantot, lai noskaidrotu rokas žestu.
Izliekts korpuss:
Caur izliektu korpusu mēs cenšamies ievietot aptuvenu daudzstūri, izmantojot formas galējos punktus. Kreisajā pusē esošajā attēlā redzams aptuvenais daudzstūris, kas tika piešķirts formai ar izliektiem punktiem, kas atzīmēti ar sarkanu.
Izliekti punkti ir tie formas punkti, kas atrodas vistālāk no šī aptuvenā daudzstūra malas. Bet problēma ar izliektu korpusu ir tāda, ka tās aprēķināšanas laikā mēs iegūsim visu izliekto punktu masīvu, bet mums ir nepieciešams zils smails izliekts punkts. Mēs jums pateiksim, kāpēc tas ir nepieciešams.
Lai atrastu šo izliekto punktu, mums jāizmanto perpendikulārā attāluma formula, lai atrastu izliektā punkta attālumu ar tuvāko malu. Mēs novērojām, ka zilajam punktam ir maksimālais attālums no sāniem, un tāpēc mēs iegūstam šo punktu.
7. darbība:
8. darbība
Tālāk mums jāatrod līnijas slīpums, kas savieno īkšķa galu (vai galējo punktu) ar šo izliekto punktu ar horizontāli.
9. darbība
Iepriekš minētajā gadījumā leņķim α jābūt no 0 līdz 90 grādiem, ja žests ir vērsts pa kreisi. Tas ir iedegums (α) jābūt pozitīvam.
10. darbība:
Iepriekš minētajā gadījumā leņķim α jābūt no 180 līdz 90 grādiem, ja žests ir vērsts pa labi. Tas ir iedegums (α) jābūt negatīvam.
Tāpēc, ja iedegums α ir pozitīvs, tad pagriezieties pa kreisi. Ja iedegums α ir negatīvs, tad pagriezieties pa labi. Tagad ir pienācis laiks uzzināt, kā noteikt vissvarīgāko apturēšanas komandu.
Šeit tiek pārbaudīta noteikta attiecība (atrasta pēc trāpījuma un izmēģinājuma), un maksimālajos gadījumos šī attālumu attiecība paliek šajā konkrētajā diapazonā.
11. darbība:
Visbeidzot, priekšējās kustības žests tiek analizēts, izmantojot OpenSV funkciju matchShape (). Šī funkcija salīdzina divu skaitītāju formu, šajā gadījumā, starp treniņa piemēru par treknumu iepriekšējā attēlā ar kontūru iepriekšējā attēla kreisajā pusē. Tas atgriež vērtību, kas svārstās no 0 līdz 2 vai 3, atkarībā no divu kontūru formas variācijām. Identiski vienādai kontūrai tas atgriež 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Šeit cn1 un cnt2 ir divas kontūras, kuras jāsalīdzina.
12. darbība: KUSTĪBU VADĪBA:
PySerial:
Mēs izmantojām PySerial python bibliotēku, lai apstrādātos datus pārvērstu sērijas datos, lai tos nosūtītu Arduino Uno, izmantojot Arduino USB kabeli. Tiklīdz opencv atklāja konkrētu žestu, mēs izveidojām pagaidu mainīgo, teiksim “x” un piešķīrām tam kādu unikālu vērtību un pārveidojām to par sērijveida ievadi, izmantojot šādu komandrindu:-
importēt sēriju #importēt Pyserial bibliotēku
serial. Serial ('', baudrate = '9600', timeout = '0') # iestatot seriālo izvadi.. PORTA NOSAUKUMS ir ostas nosaukums, ar kuru notiks datu pārraide.
serial.write (b'x ') # x ir alfabēts, kas nosūtīts uz portu … b ir pārveidot šo virkni par baitiem.
Arduino apstrāde:
Tagad arduino ir kodēts tādā veidā, ka katrs atšķirīgais seriālais x ir lineāri piesaistīts noteiktai darbībai, kas ir atbildīga par robota vienmērīgu kustību (teiksim, kreisā žesta noteikšana iedarbinās motorus labajā pusē, lai pagrieztos pa kreisi). Mēs varam kontrolēt katra riteņa kustību translatīvi, kā arī rotācijas kārtībā, pareizi mainot kodu.
L298N Motora vadītājs:-
Motora draiveris tiek izmantots kā starpnieks starp motoru un barošanas avotu, jo motorus nevar tieši darbināt zemā sprieguma dēļ. Li-Po akumulators ir savienots ar tā 12 V ieejas spaili, un mēs savienojam arduino 5 V kontaktligzdu ar motora vadītāja 5 V ieejas ligzdu, beidzot savienojot Li-Po zemējumu, kā arī arduino motora vadītāja kopējā zemes ligzdā.
Tagad motoru spailes ir savienotas norādītajās kontaktligzdās. Visbeidzot, mēs pievienojam motora ieejas spaili arduino PWM izejas ligzdām, ļaujot mums brīvi izlemt kustības rotācijas un tulkošanas aspektus.
Ieteicams:
Žestu kontrolēts robots, izmantojot Arduino: 7 soļi
Žestu kontrolēts robots, izmantojot Arduino: Roboti tiek izmantoti daudzās nozarēs, piemēram, celtniecībā, militārajā jomā, ražošanā, montāžā utt. Roboti var būt autonomi vai daļēji autonomi. Autonomajiem robotiem nav nepieciešama cilvēka iejaukšanās, un tie var rīkoties paši atbilstoši situācijai. Skatīt
Žestu kontrolēts robots - Spinel Crux: 4 soļi
Žestu kontrolēts robots - Spinel Crux: Spinel Crux Žestu kontrolēts robots bezvadu uzraudzības projektam. Šajā sērijā mēs izveidosim robotu, kas var ceļot pa nelīdzenu reljefu un kontrolēt, izmantojot roku žestus. Lai vadītu robotu, mēs izmantosim vadības cimdu, kas
SCARA robots: mācīšanās par virzošo un apgriezto kinemātiku !!! (Plot Twist Uzziniet, kā izveidot reāllaika saskarni ARDUINO, izmantojot PROCESSING!): 5 soļi (ar attēliem)
SCARA robots: mācīšanās par virzošo un apgriezto kinemātiku !!! (Plot Twist Uzziniet, kā izveidot reāllaika saskarni ARDUINO, izmantojot PROCESSING!): SCARA robots ir ļoti populāra mašīna nozares pasaulē. Nosaukums apzīmē gan selektīvi saderīgu montāžas robota roku, gan selektīvi saderīgu šarnīra robota roku. Tas būtībā ir trīs brīvības pakāpes robots, kas ir pirmie divi diski
DIY zemsprieguma āra apgaismojums, kas tiek kontrolēts, izmantojot Raspberry Pi: 11 soļi (ar attēliem)
DIY zemsprieguma āra apgaismojums, kas tiek kontrolēts, izmantojot Raspberry Pi: Kāpēc? Man jāatzīst, ka, tāpat kā daudzi citi, esmu liels lietu interneta (vai IoT) ventilators. Es arī joprojām esmu noguris, pieslēdzot internetam visas savas gaismas, ierīces, ārdurvis, garāžas durvis un kas zina, kas vēl. Īpaši tādos pasākumos kā
Wi-Fi kontrolēts robots, izmantojot Wemos D1 ESP8266, Arduino IDE un lietotni Blynk: 11 soļi (ar attēliem)
Wi-Fi kontrolēts robots, izmantojot Wemos D1 ESP8266, Arduino IDE un lietotni Blynk: Šajā apmācībā es jums parādīšu, kā izveidot viedtālrunī vadāmu robotu tvertni ar Wi-Fi, izmantojot Blynk lietotni. Šajā projektā tika izmantota ESP8266 Wemos D1 plāksne, bet var izmantot arī citus plākšņu modeļus (NodeMCU, Firebeetle utt.), Un pr