- Nødvendig maskinvare:
- Programmeringskrav:
- Sette opp behandling på Raspberry Pi:
- Kretsdiagram:
- Raspberry Pi Ball Tracking Program:
- Arbeid med Raspberry Pi Ball Tracking Robot:
Feltet robotikk, kunstig intelligens og maskinlæring utvikler seg raskt slik at det helt sikkert vil endre menneskehetens livsstil i nær fremtid. Roboter antas å forstå og samhandle med den virkelige verden gjennom sensorer og maskinlæringsbehandling. Bildegjenkjenning er en av de populære måtene robotene antas å forstå objekter ved å se på den virkelige verden gjennom et kamera akkurat som vi gjør. I dette prosjektet, la oss bruke kraften til Raspberry Pi til å bygge en robot som kan spore ball og følge den akkurat som robotene som spiller fotball.
OpenCV er et veldig kjent og åpen kildekodeverktøy som brukes til bildebehandling, men i denne opplæringen bruker vi Processing IDE for å holde ting enkelt. Siden behandling for ARM også har gitt ut GPIO-biblioteket for behandling, trenger vi ikke å skifte mellom python og prosessering lenger for å jobbe med Raspberry Pi. Høres kult ut, ikke sant? Så la oss komme i gang.
Nødvendig maskinvare:
- Bringebær Pi
- Kameramodul med båndkabel
- Robot chassis
- Girmotorer med hjul
- L293D motor driver
- Kraftbank eller annen bærbar strømkilde
Programmeringskrav:
- Skjerm eller annen skjerm for Raspberry pi
- Tastatur eller mus for Pi
- Behandler ARM-programvare
Merk: Det er obligatorisk å ha en skjerm koblet til Pi gjennom ledninger under programmering, fordi bare da kan kameraets video vises
Sette opp behandling på Raspberry Pi:
Som tidligere fortalt vil vi bruke behandlingsmiljøet til å programmere vår Raspberry Pi og ikke standard måten å bruke python på. Så følg trinnene nedenfor:
Trinn 1: - Koble Raspberry Pi til skjermen, tastaturet og musen og slå den på.
Trinn 2: - Forsikre deg om at Pi er koblet til en aktiv internettforbindelse fordi vi er i ferd med å laste ned få ting.
Trinn 3: - Klikk på Processing ARM for å laste ned behandlings-IDE for Raspberry Pi. Nedlastingen vil være i form av en ZIP-fil.
Trinn 4: - Når du har lastet ned, trekker du ut filene i ZIP-mappen i den foretrukne katalogen. Jeg har akkurat hentet den på skrivebordet mitt.
Trinn 5: - Nå åpner du den utpakkede mappen og klikker på filen som heter prosessering. Det skal åpne et vindu som vist nedenfor.
Trinn 6: - Dette er miljøet der vi skal skrive kodene våre. For folk som er kjent med Arduino, ikke bli sjokkert JA IDE ser ut som Arduino, og det gjør også programmet.
Trinn 7: - Vi trenger to biblioteker for at programmet vårt skal følge, for å installere. Bare klikk på Skisse -> Importer bibliotek -> Legg til bibliotek . Følgende dialogboks åpnes.
Trinn 8: - Bruk tekstboksen øverst til venstre for å søke etter Raspberry Pi og trykk enter, ditt søkeresultat skal se ut som dette.
Trinn 9: - Søk etter bibliotekene med navnet “GL Video” og “Hardware I / O” og klikk på installer for å installere dem. Sørg for at du installerer begge bibliotekene.
Trinn 10: - Basert på internett vil installasjonen ta noen minutter. Når det er gjort, er vi klare for programvare for behandling.
Kretsdiagram:
Kretsdiagrammet til dette Raspberry Pi Ball Tracking Project er vist nedenfor.
Som du kan se, involverer kretsen et PI-kamera, en motordriver-modul og et par motorer koblet til Raspberry pi. Hele kretsen drives av en mobil strømbank (representert med AAA-batteri i kretsen ovenfor).
Siden pinnedetaljene ikke er nevnt på Raspberry Pi, må vi bekrefte pinnene ved hjelp av bildet nedenfor
For å kjøre motorene trenger vi fire pinner (A, B, A, B). Disse fire pinnene er koblet fra henholdsvis GPIO14,4,17 og 18. Den oransje og hvite ledningen sammen danner tilkoblingen for en motor. Så vi har to slike par for to motorer.
Motorene er koblet til L293D Motor Driver- modulen som vist på bildet, og drivermodulen drives av en kraftbank. Forsikre deg om at bakken til strømbanken er koblet til bakken til Raspberry Pi, bare da vil forbindelsen din fungere.
Det er det vi er ferdig med maskinvaretilkoblingen vår, la oss gå tilbake til prosesseringsmiljøet vårt og begynne å programmere for å lære roboten vår å spore en ball.
Raspberry Pi Ball Tracking Program:
Det komplette behandlingsprogrammet for dette prosjektet er gitt på slutten av denne siden, som du bruker direkte. Videre rett nedenfor har jeg forklart hvordan koden fungerer, slik at du kan bruke den til andre lignende prosjekter.
Den programkonsept er svært enkel. Selv om intensjonen med prosjektet er å spore en ball, kommer vi faktisk ikke til å gjøre det. Vi skal bare identifisere ballen ved hjelp av fargen. Som vi alle vet, er videoer ikke annet enn kontinuerlige bilderammer. Så vi tar hvert bilde og deler det i piksler. Deretter sammenligner vi hver pikselfarge med kulens farge; hvis det blir funnet en kamp, kan vi si at vi har funnet ballen. Med denne informasjonen kan vi også identifisere posisjonen til ballen (pikselfarge) på skjermen. Hvis posisjonen er lengst til venstre, beveger vi roboten mot høyre, hvis posisjonen er lengst til høyre, beveger vi roboten mot venstre slik at pikselposisjonen alltid holder seg midt på skjermen. Du kan se Computer Vision-video av Daniel shiffman for å få et klart bilde.
Som alltid begynner vi med å importere de to bibliotekene vi laster ned. Dette kan gjøres med følgende to linjer. Hardware I / O-biblioteket brukes til å få tilgang til GPIO-pinnene på PI direkte fra behandlingsmiljøet, glvideo-biblioteket brukes til å få tilgang til Raspberry Pi-kameramodulen.
importbehandling.io. *; importer gohai.glvideo. *;
Inne i setup -funksjonen vi initial output pins til å styre motoren og også få video fra pi kamera og størrelsen det i et vindu i størrelse 320 * 240.
ugyldig oppsett () {størrelse (320, 240, P2D); video = ny GLCapture (dette); video.start (); trackColor = farge (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Den void trekningen er som uendelig løkke koden inne i denne sløyfe vil utføre så lenge programmet avsluttes. Hvis en kamerakilde er tilgjengelig, leser vi videoen som kommer ut av den
ugyldig tegning () {bakgrunn (0); hvis (video.available ()) {video.read (); }}
Så begynner vi å dele videorammen i piksler. Hver piksel har verdien rød, grønn og blå. Disse verdiene er lagret i variabelen r1, g1 og b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Hva er nåværende fargefarge currentColor = video.pixels; flyte r1 = rød (gjeldende farge); flyte g1 = grønn (gjeldende farge); flyte b1 = blå (gjeldende farge);
For å oppdage fargen på ballen først, må vi klikke på fargen. Når du klikker, vil fargen på ballen bli lagret i variabelen kalt trackColour .
void mousePressed () {// Lagre farge der musen klikkes i trackColor variable int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Når vi har fått sporfargen og den nåværende fargen, må vi sammenligne dem. Denne sammenligningen bruker dist-funksjonen. Den sjekker hvor nær den nåværende fargen er sporfargen.
flyte d = dist (r1, g1, b1, r2, g2, b2);
Den verdien av dist vil være null for en eksakt match. Så hvis verdien av dist er mindre enn en spesifisert verdi (verdensrekord), antar vi at vi har funnet sporfargen. Så får vi plasseringen til den pikslen og lagrer den i variabelen nærmest X og nærmest Y for å finne plasseringen til ballen
hvis (d <worldRecord) {worldRecord = d; nærmesteX = x; nærmesteY = y; }
Vi tegner også en ellipse rundt den funnet fargen for å indikere at fargen er funnet. Verdien av posisjonen er også trykt på konsollen, dette vil hjelpe mye under feilsøking.
hvis (worldRecord <10) {// Tegn en sirkel ved det spores pikselfyllet (trackColor); strokeWeight (4.0); hjerneslag (0); ellips (nærmesteX, nærmesteY, 16, 16); println (nærmesteX, nærmesteY);
Til slutt kan vi sammenligne posisjonen til nærmeste X og nærmeste Y og justere motorene på en slik måte at fargen kommer til midten av skjermen. Koden nedenfor brukes til å slå roboten til høyre siden X-posisjonen til fargen ble funnet å være på venstre side av skjermen (<140)
hvis (nærmesteX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); forsinkelse (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Sving til høyre"); }
På samme måte kan vi sjekke posisjonen til X og Y for å kontrollere motorene i ønsket retning. Som alltid kan du se nederst på siden for hele programmet.
Arbeid med Raspberry Pi Ball Tracking Robot:
Når du er klar med maskinvaren og programmet, er det på tide å ha det gøy. Før vi tester boten vår på bakken, bør vi sørge for at alt fungerer bra. Koble Pi for å overvåke og starte behandlingskoden. Du bør se videofeeden i et lite vindu. Nå, ta ballen inne i rammen og klikk på ballen for å lære roboten at den skal spore akkurat denne fargen. Beveg nå ballen rundt skjermen, og du bør merke at hjulene roterer.
Hvis alt fungerer som forventet, slipper du boten på bakken og begynte å leke med den. Forsikre deg om at rommet er jevnt opplyst for best resultat. Fullstendig bearbeiding av prosjektet er vist i videoen nedenfor. Håper du forsto prosjektet og likte å bygge noe lignende. Hvis du har problemer, kan du gjerne legge dem ut i kommentarfeltet nedenfor eller hjelpe.