- Nepieciešamā aparatūra:
- Programmēšanas prasība:
- Apstrādes iestatīšana uz Raspberry Pi:
- Ķēdes shēma:
- Aveņu Pi bumbiņu izsekošanas programma:
- Raspberry Pi bumbu izsekošanas robota darbība:
Robotikas, mākslīgā intelekta un mašīnmācīšanās joma strauji attīstās, un tuvākajā nākotnē tā noteikti mainīs cilvēces dzīvesveidu. Tiek uzskatīts, ka roboti saprot un mijiedarbojas ar reālo pasauli, izmantojot sensorus un mašīnmācīšanās apstrādi. Attēlu atpazīšana ir viens no populārākajiem veidiem, kā tiek uzskatīts, ka roboti saprot objektus, skatoties reālajā pasaulē caur kameru tāpat kā mēs. Šajā projektā izmantojiet Raspberry Pi spēku, lai izveidotu robotu, kas varētu izsekot bumbai un sekot tai tāpat kā robotiem, kas spēlē futbolu.
OpenCV ir ļoti slavens un atvērta pirmkoda rīks, kas tiek izmantots attēlu apstrādei, taču, lai viss būtu vienkārši, šajā apmācībā mēs izmantojam IDE apstrādi. Tā kā apstrāde ARM ir izlaidusi arī GPIO bibliotēku apstrādei, mums vairs nebūs jāpārslēdzas starp pitonu un apstrādi, lai strādātu ar Raspberry Pi. Izklausās forši vai ne? Tāpēc ļaujiet mums sākt darbu.
Nepieciešamā aparatūra:
- Aveņu Pi
- Kameras modulis ar lentes kabeli
- Robotu šasija
- Zobratu motori ar riteni
- L293D motora vadītājs
- Jaudas banka vai jebkurš cits pārnēsājams enerģijas avots
Programmēšanas prasība:
- Raspberry pi monitors vai cits displejs
- Taustiņu panelis vai pele Pi
- ARM programmatūras apstrāde
Piezīme: Programmēšanas laikā obligāti jābūt displejam, kas savienots ar Pi, izmantojot vadus, jo tikai tad var apskatīt kameras video
Apstrādes iestatīšana uz Raspberry Pi:
Kā teicām iepriekš, mēs izmantosim apstrādes vidi, lai programmētu mūsu Raspberry Pi, nevis noklusējuma veidu, kā izmantot pitonu. Tātad, veiciet tālāk norādītās darbības.
1. solis: - Savienojiet savu Raspberry Pi ar monitoru, tastatūru un peli un ieslēdziet to.
2. solis: - Pārliecinieties, vai Pi ir savienots ar aktīvu interneta savienojumu, jo mēs gatavojamies lejupielādēt dažas lietas.
3. solis: - Noklikšķiniet uz ARM apstrāde, lai lejupielādētu Raspberry Pi apstrādes IDE. Lejupielāde notiks ZIP faila formā.
4. solis: - Pēc lejupielādes izvilkiet failus savā ZIP mapē vēlamajā direktorijā. Es tikko to izvilku savā darbvirsmā.
5. solis: - Tagad atveriet izvilkto mapi un noklikšķiniet uz faila ar nosaukumu apstrāde. Tam vajadzētu atvērt logu, kā parādīts zemāk.
6. solis: - Šī ir vide, kurā mēs rakstīsim savus kodus. Cilvēkiem, kuri ir pazīstami ar Arduino, nebrīnieties JĀ, IDE patiešām izskatās līdzīgs Arduino, tāpat arī programma.
7. solis: - Lai darbotos mūsu lodīšu sekošanas programma, mums ir nepieciešamas divas bibliotēkas, lai tās instalētu, vienkārši noklikšķiniet uz Skice -> Import Library -> Add Library . Tiks atvērts šāds dialoglodziņš.
8. solis: - Izmantojiet augšējo kreiso tekstlodziņu, lai meklētu Raspberry Pi un nospiediet taustiņu Enter, un meklēšanas rezultātam vajadzētu izskatīties apmēram šādi.
9. solis: - meklējiet bibliotēkas ar nosaukumu “GL Video” un “Hardware I / O” un noklikšķiniet uz Instalēt, lai tās instalētu. Pārliecinieties, vai esat instalējis abas bibliotēkas.
10. solis: - pamatojoties uz jūsu internetu, instalēšana prasīs dažas minūtes. Kad tas ir izdarīts, mēs esam gatavi programmatūras apstrādei.
Ķēdes shēma:
Šī Raspberry Pi bumbu izsekošanas projekta shēma ir parādīta zemāk.
Kā redzat, ķēde ietver PI kameru, motora draivera moduli un motoru pāri, kas savienoti ar Raspberry pi. Visu ķēdi darbina mobilā strāvas banka (iepriekš minētajā ķēdē to attēlo AAA akumulators).
Tā kā tapas detaļas nav minētas Raspberry Pi, mums ir jāpārbauda tapas, izmantojot zemāk redzamo attēlu
Lai vadītu Motors, mums ir nepieciešamas četras tapas (A, B, A, B). Šīs četras tapas ir savienotas attiecīgi no GPIO14,4,17 un 18. Oranžā un baltā stieple kopā veido savienojumu vienam motoram. Tātad mums ir divi šādi pāri diviem motoriem.
Motori ir savienoti ar L293D Motor Driver moduli, kā parādīts attēlā, un vadītāja moduli darbina strāvas banka. Pārliecinieties, vai strāvas bankas zeme ir savienota ar Raspberry Pi zemi, tikai tad jūsu savienojums darbosies.
Tas ir tas, ka mēs esam paveikuši ar mūsu aparatūras savienojumu, atgriezīsimies savā apstrādes vidē un sāksim programmēt, lai iemācītu mūsu robotam izsekot bumbu.
Aveņu Pi bumbiņu izsekošanas programma:
Šīs lapas beigās ir norādīta visa šī projekta apstrādes programma, kuru jūs tieši izmantojat. Tālāk zemāk es esmu izskaidrojis koda darbību, lai jūs to varētu izmantot citiem līdzīgiem projektiem.
Programmas koncepcija ir ļoti vienkārša. Lai gan projekta nolūks ir izsekot bumbu, mēs patiesībā to nedarīsim. Mēs tikai identificēsim bumbu, izmantojot tās krāsu. Kā mēs visi zinām, videoklipi ir tikai nepārtraukti attēlu kadri. Tāpēc mēs uzņemam katru attēlu un sadalām to pikseļos. Tad mēs salīdzinām katru pikseļu krāsu ar bumbiņas krāsu; ja tiek atrasts mačs, tad varam teikt, ka esam atraduši bumbu. Izmantojot šo informāciju, mēs varam arī noteikt bumbas stāvokli (pikseļu krāsu) uz ekrāna. Ja pozīcija atrodas tālu pa kreisi, mēs pārvietojam robotu uz labo pusi, ja pozīcija ir pa labi, mēs pārvietojam robotu pa kreisi, lai pikseļu pozīcija vienmēr paliktu ekrāna centrā. Lai iegūtu skaidru priekšstatu, varat noskatīties Daniela Šifmena video ar Computer Vision.
Kā vienmēr, mēs sākam ar divu lejupielādēto bibliotēku importēšanu. To var izdarīt ar šādām divām rindām. Aparatūras I / O bibliotēka tiek izmantota, lai piekļūtu PI GPIO tapām tieši no apstrādes vides, glvideo bibliotēka tiek izmantota, lai piekļūtu Raspberry Pi kameras modulim.
importa apstrāde.io. *; importēt gohai.glvideo. *;
Iestatīšanas funkcijas iekšpusē mēs inicializējam izejas tapas, lai kontrolētu motoru, kā arī iegūstam video no pi kameras un izmēru logā ar izmēru 320 * 240.
void setup () {izmērs (320, 240, P2D); video = jauns GLCapture (šis); video.sākt (); trackColor = krāsa (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Neesošu izdarīt ir kā bezgalīgu kods iekšā šajā cilpas tiks izpildīt, kamēr programma tiek pārtraukta. Ja ir pieejams kameras avots, mēs lasām no tā iznākošo video
void draw () {fons (0); ja (video.pieejams ()) {video.lasīt (); }}
Tad mēs sākam sadalīt video kadru pikseļos. Katram pikseļam ir sarkanā, zaļā un zilā vērtība. Šīs vērtības tiek saglabātas mainīgajos r1, g1 un b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Kas ir pašreizējā krāsu krāsa currentColor = video.pixels; pludiņš r1 = sarkans (currentColor); pludiņš g1 = zaļš (currentColor); pludiņš b1 = zils (currentColor);
Lai sākotnēji noteiktu bumbas krāsu, mums ir jānoklikšķina uz krāsas. Pēc klikšķa bumbas krāsa tiks saglabāta mainīgajā, ko sauc par trackColour .
void mousePressed () {// Krāsas saglabāšana, noklikšķinot uz peles trackColor mainīgajā int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Kad mums ir trases krāsa un pašreizējā krāsa, mums tās jāsalīdzina. Šajā salīdzinājumā tiek izmantota dist funkcija. Tas pārbauda, cik pašreizējā krāsa ir tuvu celiņa krāsai.
pludiņš d = dist (r1, g1, b1, r2, g2, b2);
No dist vērtība būs nulle precīzu atbilstību. Tātad, ja dist vērtība ir mazāka par norādīto vērtību (pasaules rekords), tad mēs pieņemam, ka esam atraduši celiņa krāsu. Tad mēs iegūstam šī pikseļa atrašanās vietu un saglabājam to mainīgajā X un vistuvākajā Y, lai atrastu bumbas atrašanās vietu
ja (d <worldRecord) {worldRecord = d; vistuvākaisX = x; vistuvākaisY = y; }
Mēs arī uzzīmējam elipsi ap atrasto krāsu, lai norādītu, ka krāsa ir atrasta. Pozīcijas vērtība ir uzdrukāta arī uz konsoles, tas daudz palīdzēs atkļūdošanas laikā.
if (worldRecord <10) {// Uzzīmējiet apli pie izsekotā pikseļa aizpildījuma (trackColor); insultsSvars (4,0); insults (0); elipse (vistuvākaisX, vistuvākaisY, 16, 16); println (vistuvākaisX, tuvākaisY);
Visbeidzot, mēs varam salīdzināt tuvāko X un tuvāko Y pozīciju un pielāgot motorus tā, lai krāsa nonāktu ekrāna centrā. Tālāk redzamais kods tiek izmantots, lai pagrieztu robotu pa labi, jo tika konstatēts, ka krāsas X pozīcija atrodas ekrāna kreisajā pusē (<140)
ja (vistuvākaisX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); kavēšanās (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Pagriezieties pa labi"); }
Līdzīgi mēs varam pārbaudīt X un Y stāvokli, lai kontrolētu motorus vajadzīgajā virzienā. Kā vienmēr, varat skatīt pilnu programmu lapas apakšdaļā.
Raspberry Pi bumbu izsekošanas robota darbība:
Kad esat gatavs aparatūrai un programmai, ir laiks izklaidēties. Pirms mēs pārbaudām savu robotu uz zemes, mums jāpārliecinās, vai viss darbojas labi. Pievienojiet Pi, lai uzraudzītu un palaistu apstrādes kodu. Jums vajadzētu redzēt video plūsmu uz neliela loga. Tagad ielieciet bumbu rāmī un noklikšķiniet uz bumbas, lai iemācītu robotam, ka tam vajadzētu izsekot šai konkrētajai krāsai. Tagad pārvietojiet bumbu pa ekrānu, un jums vajadzētu pamanīt, ka riteņi rotē.
Ja viss darbojas kā paredzēts, atlaidiet botu uz zemes un sākāt ar to spēlēt. Lai iegūtu labākos rezultātus, pārliecinieties, ka telpa ir vienmērīgi apgaismota. Pilnīga projekta darbība ir parādīta zemāk esošajā video. Ceru, ka sapratāt projektu un jums patika veidot kaut ko līdzīgu. Ja jums ir kādas problēmas, nekautrējieties tos ievietot komentāru sadaļā zemāk vai palīdzēt.