- Potreban hardver:
- Zahtjev za programiranje:
- Postavljanje obrade na Raspberry Pi:
- Kružni dijagram:
- Program praćenja kuglica Raspberry Pi:
- Rad robota za praćenje kuglica Raspberry Pi:
Područje robotike, umjetne inteligencije i strojnog učenja ubrzano se razvija i sigurno će promijeniti životni stil čovječanstva u bliskoj budućnosti. Smatra se da roboti razumiju i komuniciraju sa stvarnim svijetom putem senzora i obrade strojnog učenja. Prepoznavanje slika jedan je od popularnih načina na koji se smatra da roboti razumiju predmete promatrajući stvarni svijet kroz kameru baš kao i mi. U ovom projektu, iskoristite snagu Raspberry Pi za izgradnju robota koji može pratiti loptu i pratiti je poput robota koji igra nogomet.
OpenCV je vrlo poznat i alat otvorenog koda koji se koristi za obradu slika, ali u ovom uputstvu za pojednostavljivanje koristimo Processing IDE. Budući da je obrada za ARM također objavila GPIO knjižnicu za obradu, nećemo se više morati prebacivati između pythona i obrade da bismo radili s Raspberry Pi. Zvuči cool zar ne? Pa krenimo.
Potreban hardver:
- Raspberry Pi
- Modul kamere s vrpcastim kabelom
- Robot šasija
- Zupčani motori s kotačem
- L293D vozač motora
- Banka napajanja ili bilo koji drugi prijenosni izvor napajanja
Zahtjev za programiranje:
- Monitor ili drugi zaslon za Raspberry pi
- Tipkovnica ili miš za Pi
- Obrada ARM softvera
Napomena: Tijekom programiranja obavezno je imati zaslon povezan na Pi putem žica jer se samo tada može gledati video s kamere
Postavljanje obrade na Raspberry Pi:
Kao što je ranije rečeno, koristit ćemo procesorsko okruženje za programiranje naše Raspberry Pi, a ne zadani način upotrebe pythona. Dakle, slijedite korake u nastavku:
1. korak: - Povežite Raspberry Pi s monitorom, tipkovnicom i mišem i uključite ga.
Korak 2: - Provjerite je li Pi povezan s aktivnom internetskom vezom jer ćemo preuzeti nekoliko stvari.
Korak 3: - Kliknite Processing ARM da biste preuzeli IDE za obradu za Raspberry Pi. Preuzimanje će biti u obliku ZIP datoteke.
Korak 4: - Nakon preuzimanja izvucite datoteke iz ZIP mape u željenom direktoriju. Upravo sam ga izvadio na radnoj površini.
Korak 5: - Sada otvorite izvađenu mapu i kliknite datoteku nazvanu obrada. Trebao bi otvoriti prozor kao što je prikazano dolje.
![]()
Korak 6: - Ovo je okruženje u kojem ćemo upisivati svoje kodove. Za ljude koji su upoznati s Arduinom, nemojte se šokirati DA IDE izgleda slično Arduinu, pa tako i program.
Korak 7: - Potrebne su nam dvije knjižnice da bi naš sljedeći program za loptice radio, da bismo ga instalirali, a zatim kliknite Skica -> Uvezi knjižnicu -> Dodaj knjižnicu . Otvorit će se sljedeći dijaloški okvir.
![]()
Korak 8: - Koristite gornji lijevi okvir za tekst da potražite Raspberry Pi i pritisnite Enter, rezultat pretraživanja trebao bi izgledati otprilike ovako.
![]()
Korak 9: - Potražite knjižnice pod nazivom „GL Video“ i „Hardware I / O“ i kliknite na install da biste ih instalirali. Obavezno instalirajte obje knjižnice.
10. korak: - Na temelju vašeg interneta instalacija će trajati nekoliko minuta. Kada završimo, spremni smo za obradu softvera.
Kružni dijagram:
Dijagram spojeva ovog projekta praćenja kuglica Raspberry Pi prikazan je u nastavku.
![]()
Kao što vidite, sklop uključuje PI kameru, modul pokretačkog programa motora i par motora spojenih na Raspberry pi. Kompletni krug napaja mobilna Power banka (predstavljena AAA baterijom u gornjem krugu).
Budući da se detalji o pribadačama ne spominju na Raspberry Pi-u, moramo provjeriti pribadače pomoću donje slike
Za pogon motora potrebne su nam četiri zatiča (A, B, A, B). Ove su četiri pinove povezane s GPIO14,4,17 odnosno 18. Narančasta i bijela žica zajedno čine vezu za jedan motor. Dakle, imamo dva takva para za dva motora.
Motori su povezani s modulom pokretačkog programa L293D, kao što je prikazano na slici, a pogonski modul napaja baterija napajanja. Provjerite je li uzemljenje napajanja spojeno na uzemljenje Raspberry Pi, samo tada će vaša veza raditi.
To je to što smo završili s hardverskom vezom, vratimo se našem procesorskom okruženju i započnite programirati kako bismo naučili našeg robota kako pratiti loptu.
![]()
Program praćenja kuglica Raspberry Pi:
Kompletan program za obradu ovog projekta je dano na kraju ove stranice, koje se izravno koristiti. Dalje, odmah ispod, objasnio sam rad koda kako biste ga mogli koristiti za druge slične projekte.
Koncept programa je vrlo jednostavan. Iako je namjera projekta pratiti loptu, zapravo to nećemo učiniti. Samo ćemo identificirati loptu koristeći njezinu boju. Kao što svi znamo, videozapisi nisu ništa drugo do kontinuirani okviri slika. Dakle, uzmemo svaku sliku i podijelimo je u piksele. Zatim uspoređujemo svaku boju piksela s bojom kuglice; ako je pronađena utakmica onda možemo reći da smo pronašli loptu. Pomoću ovih podataka također možemo prepoznati položaj kuglice (boja piksela) na ekranu. Ako je položaj krajnje lijevo, robota pomičemo udesno, ako je položaj krajnje robota, pomičemo robota ulijevo, tako da položaj piksela uvijek ostaje u središtu zaslona. Možete pogledati video Computer Visiona Daniela Shiffmana kako biste dobili jasnu sliku.
Kao i uvijek započinjemo uvozom dviju knjižnica koje preuzimamo. To se može učiniti u sljedeća dva retka. Hardverska I / O knjižnica koristi se za pristup GPIO pinovima PI-a izravno iz procesnog okruženja, glvideo knjižnica koristi se za pristup modulu kamere Raspberry Pi.
obrada uvoza.io. *; uvoz gohai.glvideo. *;
Unutar postavljanje funkcije smo početne izlazne igle za kontrolu motora i dobiti video iz pi kamere i veličini u prozoru veličine 320 * 240.
void setup () {veličina (320, 240, P2D); video = novi GLCapture (ovaj); video.start (); trackColor = boja (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Praznina Ždrijeb je kao beskonačnu petlju kod unutar ove petlje će se izvršiti sve dok se program prekida. Ako je dostupan izvor kamere, čitamo video koji izlazi iz njega
void draw () {background (0); if (video.available ()) {video.read (); }}
Tada počinjemo dijeliti video kadar u piksele. Svaki piksel ima vrijednost crvene, zelene i plave boje. Te su vrijednosti pohranjene u varijabli r1, g1 i b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Što je trenutna boja u boji currentColor = video.pixels; plutajuće r1 = crvena (trenutnaBoja); plutajuća g1 = zelena (trenutnaBoja); plutajuće b1 = plava (trenutnaBoja);
Da bismo u početku otkrili boju kuglice, moramo kliknuti na boju. Nakon što kliknete, boja kuglice pohranit će se u varijablu koja se naziva trackColour .
void mousePress () {// Spremi boju tamo gdje se klikne mišem u varijabli trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pikseli; }
Nakon što imamo boju staze i trenutnu boju, moramo ih usporediti. Ova usporedba koristi funkciju dist. Provjerava koliko je trenutna boja bliska boji zapisa.
plutajuće d = dist (r1, g1, b1, r2, g2, b2);
Vrijednost dist će biti nula točno podudaranje. Dakle, ako je vrijednost dist manja od određene vrijednosti (svjetski rekord), pretpostavljamo da smo pronašli boju zapisa. Tada dobivamo mjesto tog piksela i pohranjujemo ga u varijablu najbliže X i najbliže Y kako bismo pronašli mjesto lopte
if (d <worldRecord) {worldRecord = d; najbližiX = x; najbližiY = y; }
Također pronalazimo elipsu oko pronađene boje da označimo da je boja pronađena. Vrijednost položaja također je ispisana na konzoli, što će vam puno pomoći tijekom uklanjanja pogrešaka.
if (worldRecord <10) {// Nacrtajte krug na ispuni praćenog piksela (trackColor); težina poteza (4,0); udarac (0); elipsa (najbližaX, najbližaY, 16, 16); println (najbližiX, najbližiY);
Napokon možemo usporediti položaj najbližeg X i najbližeg Y i prilagoditi motore na takav način da boja dođe u središte zaslona. Kôd u nastavku koristi se za okretanje robota udesno, jer je utvrđeno da je X položaj boje na lijevoj strani zaslona (<140)
ako (najbližiX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); kašnjenje (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Skrenite udesno"); }
Slično možemo provjeriti položaj X i Y za upravljanje motorima u potrebnom smjeru. Kao i uvijek, cjelokupni program možete uputiti na dno stranice.
Rad robota za praćenje kuglica Raspberry Pi:
Kad ste spremni s hardverom i programom, vrijeme je da se malo zabavite. Prije nego što testiramo svog bota na zemlji, trebali bismo provjeriti radi li sve u redu. Spojite svoj Pi za nadzor i pokretanje koda za obradu. Trebali biste vidjeti video feed na malom prozoru. Sada unesite loptu u okvir i kliknite je kako biste naučili robota da treba pratiti ovu boju. Sada pomaknite loptu oko zaslona i trebali biste primijetiti kako se kotači okreću.
![]()
![]()
Ako sve funkcionira prema očekivanjima, pustite bota na zemlju i počnite se igrati s njim. Provjerite je li soba ravnomjerno osvijetljena za najbolje rezultate. Kompletni rad projekta prikazan je u video ispod. Nadam se da ste razumjeli projekt i uživali u izgradnji nečeg sličnog. Ako imate bilo kakvih problema, slobodno ih objavite u odjeljku za komentare u nastavku ili pomozite.
