- Potrebna strojna oprema:
- Zahteva za programiranje:
- Nastavitev obdelave na Raspberry Pi:
- Shema vezja:
- Program sledenja kroglic Raspberry Pi:
- Delovanje robota za sledenje kroglic Raspberry Pi:
Področje robotike, umetne inteligence in strojnega učenja se hitro razvija, tako da bo v bližnji prihodnosti zagotovo spremenilo življenjski slog človeštva. Roboti naj bi razumeli in komunicirali z resničnim svetom s pomočjo senzorjev in obdelave strojnega učenja. Prepoznavanje slik je eden izmed priljubljenih načinov, na katerega naj bi roboti razumeli predmete tako, da tako kot mi gledamo v resnični svet skozi kamero. V tem projektu izkoristite moč Raspberry Pi za izdelavo robota, ki bi lahko sledil žogi in ji sledil tako kot roboti, ki igrajo nogomet.
OpenCV je zelo znano in odprtokodno orodje, ki se uporablja za obdelavo slik, vendar v tej vadnici za poenostavitev uporabljamo Processing IDE. Ker je obdelava za ARM izdala tudi knjižnico GPIO za obdelavo, nam za delo z Raspberry Pi ne bo več treba prestavljati med pythonom in obdelavo. Sliši se kul, kajne? Začnimo torej.
Potrebna strojna oprema:
- Raspberry Pi
- Modul kamere s trakovnim kablom
- Robotsko podvozje
- Zobniški motorji s kolesom
- L293D motorni voznik
- Napajalnik ali kateri koli drug prenosni vir energije
Zahteva za programiranje:
- Monitor ali drug zaslon za Raspberry pi
- Tipkovnica ali miška za Pi
- Obdelava programske opreme ARM
Opomba: Med programiranjem je obvezno imeti zaslon, priključen na Pi prek žic, ker si lahko le tako ogledate videoposnetek kamere
Nastavitev obdelave na Raspberry Pi:
Kot smo že povedali, bomo za programiranje naše Raspberry Pi uporabljali procesno okolje in ne privzeti način uporabe pythona. Torej sledite spodnjim korakom:
1. korak: - Raspberry Pi povežite z monitorjem, tipkovnico in miško ter ga vklopite.
2. korak: - Prepričajte se, da je Pi povezan z aktivno internetno povezavo, ker bomo naložili nekaj stvari.
3. korak: - Kliknite Processing ARM, da prenesete IDE za obdelavo za Raspberry Pi. Prenos bo v obliki datoteke ZIP.
4. korak: - Ko jih prenesete, izvlecite datoteke iz mape ZIP v želenem imeniku. Pravkar sem ga izvlekel na namizju.
5. korak: Zdaj odprite izvlečeno mapo in kliknite datoteko z imenom obdelava. Odprlo bi se okno, kot je prikazano spodaj.
6. korak: - V tem okolju bomo vnašali kode. Za ljudi, ki poznajo Arduino, ne bodite šokirani DA IDE je podoben Arduinu in tudi program.
7. korak: - Za delovanje našega programa, ki sledi, potrebujemo dve knjižnici, za namestitev pa kliknite Sketch -> Import Library -> Add Library . Odpre se naslednje pogovorno okno.
8. korak: - V zgornjem levem besedilnem polju poiščite Raspberry Pi in pritisnite Enter, rezultat iskanja bi moral izgledati nekako tako.
Korak 9: - Poiščite knjižnici z imenom »GL Video« in »Hardware I / O« in kliknite na install, da jih namestite. Namestite obe knjižnici.
10. korak: - Glede na vaš internet bo namestitev trajala nekaj minut. Ko končamo, smo pripravljeni na programsko opremo za obdelavo.
Shema vezja:
Shema vezja tega projekta sledenja kroglic Raspberry Pi je prikazana spodaj.
Kot lahko vidite, vezje vključuje kamero PI, modul Motor Driver in par motorjev, priključenih na Raspberry pi. Celotno vezje napaja Mobile Power Bank (v zgornjem vezju je predstavljena baterija AAA).
Ker podrobnosti o zatičih na Raspberry Pi niso omenjene, jih moramo preveriti s spodnjo sliko
Za pogon motorjev potrebujemo štiri zatiče (A, B, A, B). Ti štirje zatiči so povezani z GPIO14,4,17 oziroma 18. Oranžna in bela žica skupaj tvorita povezavo za en motor. Tako imamo dva taka para za dva motorja.
Motorji so povezani z modulom L293D Motor Driver, kot je prikazano na sliki, pogonski modul pa napaja napajalnik. Prepričajte se, da je ozemljitev napajalnika priključena na tla Raspberry Pi, šele nato bo vaša povezava delovala.
To je to, kar smo končali s svojo povezavo s strojno opremo, vrnimo se v naše procesorsko okolje in začnimo s programiranjem, da bi našega robota naučili, kako slediti žogi.
Program sledenja kroglic Raspberry Pi:
Celoten program za obdelavo tega projekta je podan na koncu te strani, ki jih neposredno uporabljajo. Nadalje tik spodaj sem razložil delovanje kode, da jo lahko uporabite za druge podobne projekte.
Koncept programa je zelo preprost. Čeprav je namen projekta slediti žogi, tega dejansko ne bomo storili. Želeli bomo samo identificirati žogo z njeno barvo. Kot vsi vemo, video posnetki niso nič drugega kot neprekinjeni okvirji slik. Torej posnamemo vsako sliko in jo razdelimo na slikovne pike. Nato primerjamo vsako barvo slikovnih pik z barvo kroglice; če se najde ujemanje, lahko rečemo, da smo našli žogo. S temi informacijami lahko prepoznamo tudi položaj kroglice (barva pik) na zaslonu. Če je položaj skrajno levo, robota premaknemo v desno, če pa položaj skrajno desno, robota premaknemo v levo, tako da položaj pikslov vedno ostane na sredini zaslona. Za jasno sliko si lahko ogledate video posnetka računalniškega vida Daniela Shiffmana.
Kot vedno začnemo z uvozom dveh knjižnic, ki jih prenesemo. To lahko storite v naslednjih dveh vrsticah. Knjižnica strojne opreme V / I se uporablja za dostop do zatičev GPIO PI neposredno iz procesnega okolja, knjižnica glvideo pa za dostop do modula kamere Raspberry Pi.
uvozna obdelava.io. *; uvoz gohai.glvideo. *;
Znotraj nastavitvene funkcije inicializiramo izhodne nožice za nadzor motorja, video pa dobimo tudi iz kamere pi in ga prilagodimo v okno velikosti 320 * 240.
void setup () {velikost (320, 240, P2D); video = nov GLCapture (ta); video.start (); trackColor = barva (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Nična Žreb je kot neskončno zanko koda znotraj te zanke se bo izvajal, dokler se program prekine. Če je na voljo vir kamere, preberemo video, ki prihaja iz njega
void draw () {background (0); if (video.available ()) {video.read (); }}
Nato začnemo video okvir deliti na slikovne pike. Vsaka slikovna pika ima vrednost rdeče, zelene in modre. Te vrednosti so shranjene v spremenljivki r1, g1 in b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Kaj je trenutna barvna barva currentColor = video.pixels; float r1 = rdeča (currentColor); float g1 = zelena (currentColor); float b1 = modra (currentColor);
Če želimo na začetku zaznati barvo kroglice, moramo klikniti na barvo. Ko kliknete, se bo barva kroglice shranila v spremenljivko, imenovano trackColour .
void mousePress () {// Shrani barvo, kjer kliknemo miško, v spremenljivki trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Ko imamo barvo skladbe in trenutno barvo, ju moramo primerjati. Ta primerjava uporablja funkcijo dist. Preveri, kako blizu je trenutna barva barvi skladbe.
float d = dist (r1, g1, b1, r2, g2, b2);
Vrednost dist bo nič za natančno ujemanje. Torej, če je vrednost dist manjša od določene vrednosti (svetovni rekord), domnevamo, da smo našli barvo skladbe. Nato dobimo lokacijo te slikovne pike in jo shranimo v spremenljivko najbližje X in najbližje Y, da najdemo lokacijo žoge
if (d <worldRecord) {worldRecord = d; najbližjeX = x; najbližjeY = y; }
Prav tako narisati elipso okoli najti barvo, ki označuje, da je bilo ugotovljeno, da je barva. Vrednost položaja je natisnjena tudi na konzoli, kar bo veliko pomagalo pri odpravljanju napak.
if (worldRecord <10) {// nariši krog na zapolnjeni slikovni sliki (trackColor); potezna teža (4,0); kap (0); elipsa (najbližjeX, najbližjeY, 16, 16); println (najbližjeX, najbližjeY);
Na koncu lahko primerjamo položaj najbližjega X in najbližjega Y ter motorje prilagodimo tako, da barva pride v sredino zaslona. Spodnja koda se uporablja za obračanje robota v desno, saj je bilo ugotovljeno, da je položaj X barve na levi strani zaslona (<140)
če (najbližjeX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); zamuda (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Zavij desno"); }
Podobno lahko preverimo položaj X in Y za krmiljenje motorjev v želeni smeri. Kot vedno se lahko za celoten program sklicujete na dno strani.
Delovanje robota za sledenje kroglic Raspberry Pi:
Ko ste pripravljeni na strojno opremo in program, je čas, da se zabavate. Preden preizkusimo bota na tleh, se prepričajte, da vse deluje v redu. Povežite Pi za nadzor in zagon kode za obdelavo. Video vir bi morali videti v majhnem oknu. Zdaj vnesite žogo v okvir in kliknite na žogo, da naučite robota, da mora slediti tej določeni barvi. Zdaj premaknite žogo po zaslonu in opazili boste, da se kolesa vrtijo.
Če vse deluje po pričakovanjih, spustite bota na tla in se začnete igrati z njim. Poskrbite, da bo prostor enakomerno osvetljen za najboljše rezultate. Popolno delovanje projekta je prikazano v spodnjem videu. Upam, da ste projekt razumeli in uživali v gradnji podobnega. Če imate kakršne koli težave, jih objavite v spodnjem oddelku za komentarje ali pomagajte.