- Hårdvara krävs:
- Programmeringskrav:
- Konfigurera bearbetning på Raspberry Pi:
- Kretsschema:
- Raspberry Pi Ball tracking-program:
- Arbeta med Raspberry Pi Ball Tracking Robot:
Fältet robotik, artificiell intelligens och maskininlärning utvecklas snabbt för att det säkert kommer att förändra mänsklighetens livsstil inom en snar framtid. Robotar tros förstå och interagera med den verkliga världen genom sensorer och bearbetning av maskininlärning. Bildigenkänning är ett av det populära sättet på vilket robotarna tros förstå objekt genom att titta på den verkliga världen genom en kamera precis som vi gör. I det här projektet, låt oss använda Raspberry Pi för att bygga en robot som kan spåra bollen och följa den precis som robotarna som spelar fotboll.
OpenCV är ett mycket känt och öppen källkodsverktyg som används för bildbehandling, men i denna handledning för att hålla saker enkelt använder vi Processing IDE. Eftersom bearbetning för ARM också har släppt GPIO-biblioteket för bearbetning behöver vi inte längre växla mellan python och bearbetning för att arbeta med Raspberry Pi. Låter coolt, eller hur? Så låt oss komma igång.
Hårdvara krävs:
- Raspberry Pi
- Kameramodul med bandkabel
- Robotchassi
- Växelmotorer med hjul
- L293D motorförare
- Kraftbank eller någon annan bärbar kraftkälla
Programmeringskrav:
- Skärm eller annan skärm för Raspberry pi
- Tangentbord eller mus för Pi
- Bearbetar ARM-programvara
Obs! Det är obligatoriskt att ha en bildskärm ansluten till Pi via ledningar under programmering, för först då kan kamerans video ses
Konfigurera bearbetning på Raspberry Pi:
Som tidigare sagt kommer vi att använda bearbetningsmiljön för att programmera vår Raspberry Pi och inte standardmetoden för att använda python. Så följ stegen nedan:
Steg 1: - Anslut din Raspberry Pi till din bildskärm, tangentbord och mus och slå på den.
Steg 2: - Se till att Pi är ansluten till en aktiv internetanslutning eftersom vi håller på att ladda ner några saker.
Steg 3: - Klicka på Processing ARM för att ladda ner bearbetnings-IDE för Raspberry Pi. Nedladdningen sker i form av en ZIP-fil.
Steg 4: - När du har laddat ner extraherar du filerna i din ZIP-mapp i din önskade katalog. Jag extraherade det bara på mitt skrivbord.
Steg 5: - Öppna nu den extraherade mappen och klicka på filen med namnet bearbetning. Det ska öppna ett fönster som visas nedan.
Steg 6: - Det här är miljön där vi kommer att skriva våra koder. För människor som är bekanta med Arduino, bli inte chockade JA IDE ser ut som Arduino och det gör programmet också.
Steg 7: - Vi behöver två bibliotek för att vårt bollföljande program ska fungera, för att installera klickar du bara på Skiss -> Importera bibliotek -> Lägg till bibliotek . Följande dialogruta öppnas.
Steg 8: - Använd den övre vänstra textrutan för att söka efter Raspberry Pi och tryck enter, ditt sökresultat ska se ut så här.
Steg 9: - Sök efter biblioteken med namnet “GL Video” och “Hardware I / O” och klicka på installera för att installera dem. Se till att du installerar båda biblioteken.
Steg 10: - Baserat på ditt internet tar installationen några minuter. När du är klar är vi redo för bearbetning av programvara.
Kretsschema:
Kretsschemat för detta Raspberry Pi Ball Tracking Project visas nedan.
Som du kan se involverar kretsen en PI-kamera, en motorförare-modul och ett par motorer anslutna till Raspberry pi. Hela kretsen drivs av en mobil kraftbank (representerad av AAA-batteri i kretsen ovan).
Eftersom stiftdetaljerna inte nämns på Raspberry Pi, måste vi verifiera stiften med hjälp av bilden nedan
För att driva motorerna behöver vi fyra stift (A, B, A, B). Dessa fyra stift är anslutna från GPIO14,4,17 respektive 18. Den orange och vita ledningen tillsammans utgör anslutningen för en motor. Så vi har två sådana par för två motorer.
Motorerna är anslutna till L293D Motor Driver- modulen som visas på bilden och drivmodulen drivs av en kraftbank. Se till att powerbankens jord är ansluten till Raspberry Pi-marken, först då fungerar din anslutning.
Det är det vi är klara med vår hårdvaruanslutning, låt oss gå tillbaka till vår processmiljö och börja programmera för att lära vår robot hur man spårar en boll.
Raspberry Pi Ball tracking-program:
Det fullständiga bearbetningsprogrammet för detta projekt ges i slutet av denna sida, som du använder direkt. Längre nedan har jag förklarat hur koden fungerar så att du kan använda den för andra liknande projekt.
Den programkonceptet är mycket enkel. Även om avsikten med projektet är att spåra en boll, kommer vi faktiskt inte att göra det. Vi ska bara identifiera bollen med hjälp av dess färg. Som vi alla vet är videor inget annat än kontinuerliga bildrutor. Så vi tar varje bild och delar upp den i pixlar. Sedan jämför vi varje pixelfärg med kulans färg; om en match hittas kan vi säga att vi har hittat bollen. Med denna information kan vi också identifiera bollens position (pixelfärg) på skärmen. Om positionen är längst till vänster flyttar vi roboten åt höger, om positionen är längst till höger flyttar vi roboten åt vänster så att pixelpositionen alltid förblir i mitten av skärmen. Du kan titta på Computer Vision-video av Daniel shiffman för att få en tydlig bild.
Som alltid börjar vi med att importera de två biblioteken som vi laddar ner. Detta kan göras med följande två rader. Hardware I / O-biblioteket används för att komma åt GPIO-stiften på PI direkt från bearbetningsmiljön, glvideo-biblioteket används för att komma åt Raspberry Pi-kameramodulen.
importbehandling.io. *; importera gohai.glvideo. *;
Inuti installationsfunktionen initialiserar vi utgångsstiftarna för att styra motorn och hämtar också videon från pi-kameran och storlekar den i ett fönster i storlek 320 * 240.
ogiltig installation () {storlek (320, 240, P2D); video = ny GLCapture (detta); video.start (); trackColor = färg (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Det tomrum dragningen är som oändlig loop koden inuti denna slinga kommer att köra så länge programmet avslutas. Om en kamerakälla är tillgänglig läser vi videon som kommer ut ur den
ogiltig dragning () {bakgrund (0); om (video.available ()) {video.read (); }}
Sedan börjar vi dela upp videoramen i pixlar. Varje pixel har ett värde på rött, grönt och blått. Dessa värden lagras i variabeln r1, gl och b1
för (int x = 0; x <video.bredd; x ++) {för (int y = 0; y <video.höjd; y ++) {int loc = x + y * video.bredd; // Vad är aktuell färgfärg currentColor = video.pixels; flottör r1 = röd (nuvarande färg); float g1 = grön (currentColor); flottör b1 = blå (aktuell färg);
För att först upptäcka kulans färg måste vi klicka på färgen. När du klickar på kommer kulans färg att sparas i variabeln trackColour .
void mousePressed () {// Spara färg där musen klickas i trackColor variabel int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
När vi väl har spårfärgen och den aktuella färgen måste vi jämföra dem. Denna jämförelse använder dist-funktionen. Den kontrollerar hur nära den aktuella färgen är spårfärgen.
flyta d = dist (r1, gl, bl, r2, g2, b2);
Det värde dist blir noll för en exakt matchning. Så om värdet på dist är mindre än ett angivet värde (världsrekord) antar vi att vi har hittat spårfärgen. Sedan får vi platsen för den pixeln och lagrar den i variabeln närmast X och närmast Y för att hitta bollens plats
om (d <worldRecord) {worldRecord = d; närmasteX = x; närmastY = y; }
Vi ritar också en ellips runt den hittade färgen för att indikera att färgen har hittats. Värdet på positionen är också tryckt på konsolen, detta hjälper mycket under felsökning.
if (worldRecord <10) {// Rita en cirkel vid den spårade pixelfyllningen (trackColor); strokeWeight (4.0); stroke (0); ellips (närmastX, närmastY, 16, 16); println (närmastX, närmastY);
Slutligen kan vi jämföra positionen för närmaste X och närmaste Y och justera motorerna på ett sådant sätt att färgen kommer till mitten av skärmen. Koden nedan används för att vrida roboten åt höger eftersom X-positionen för färgen visade sig vara på vänster sida av skärmen (<140)
if (närmastX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); fördröjning (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Sväng höger"); }
På samma sätt kan vi kontrollera positionen för X och Y för att styra motorerna i önskad riktning. Som alltid kan du se längst ner på sidan för hela programmet.
Arbeta med Raspberry Pi Ball Tracking Robot:
När du är redo med hårdvaran och programmet är det dags att ha lite kul. Innan vi testar vår bot på marken bör vi se till att allt fungerar bra. Anslut din Pi för att övervaka och starta bearbetningskoden. Du bör se videoflöden i ett litet fönster. För nu bollen in i ramen och klicka på bollen för att lära roboten att den ska spåra just den här färgen. Flytta nu bollen runt skärmen och du bör märka att hjulen roterar.
Om allt fungerar som förväntat, släpp botten på marken och började spela med den. Se till att rummet är jämnt upplyst för bästa resultat. Hela arbetet med projektet visas i videon nedan. Hoppas att du förstod projektet och gillade att bygga något liknande. Om du har några problem är du välkommen att skicka dem i kommentarsektionen nedan eller hjälp.