- Vereiste hardware:
- Programmeervereiste:
- Verwerking instellen op Raspberry Pi:
- Schakelschema:
- Raspberry Pi Ball-trackingprogramma:
- Werking van Raspberry Pi Ball Tracking Robot:
Het gebied van robotica, kunstmatige intelligentie en machine learning evolueert snel, zodat het de levensstijl van de mensheid in de nabije toekomst zeker zal veranderen. Robots worden verondersteld de echte wereld te begrijpen en ermee te communiceren via sensoren en machine learning. Beeldherkenning is een van de populaire manieren waarop robots worden verondersteld objecten te begrijpen door naar de echte wereld te kijken door een camera, net als wij. Laat in dit project de kracht van Raspberry Pi gebruiken om een robot te bouwen die de bal kan volgen en volgen, net als de robots die voetbal spelen.
OpenCV is een zeer bekende en open source tool die wordt gebruikt voor beeldverwerking, maar in deze tutorial gebruiken we om het simpel te houden de Processing IDE. Aangezien de verwerking voor ARM ook de GPIO-bibliotheek heeft vrijgegeven voor verwerking, hoeven we niet meer te schakelen tussen python en verwerking om met Raspberry Pi te werken. Klinkt goed toch? Dus laten we beginnen.
Vereiste hardware:
- Raspberry Pi
- Cameramodule met lintkabel
- Robot chassis
- Tandwielmotoren met wiel
- L293D-motordriver
- Powerbank of een andere draagbare stroombron
Programmeervereiste:
- Monitor of ander beeldscherm voor Raspberry pi
- Toetsenbord of muis voor Pi
- Verwerking ARM-software
Opmerking: het is verplicht om tijdens het programmeren een beeldscherm via draden op de Pi te hebben aangesloten, omdat alleen dan de camerabeelden kunnen worden bekeken
Verwerking instellen op Raspberry Pi:
Zoals eerder verteld, zullen we de verwerkingsomgeving gebruiken om onze Raspberry Pi te programmeren en niet de standaardmanier om python te gebruiken. Volg dus onderstaande stappen:
Stap 1: - Verbind je Raspberry Pi met je monitor, toetsenbord en muis en zet hem aan.
Stap 2: - Zorg ervoor dat je Pi is verbonden met een actieve internetverbinding, want we staan op het punt om een paar dingen te downloaden.
Stap 3: - Klik op Processing ARM om de verwerkings-IDE voor Raspberry Pi te downloaden. De download zal plaatsvinden in de vorm van een ZIP-bestand.
Stap 4: - Pak na het downloaden de bestanden uit in uw ZIP-map in de map van uw voorkeur. Ik heb het net uitgepakt op mijn bureaublad.
Stap 5: - Open nu de uitgepakte map en klik op het bestand met de naam processing. Het zou een venster moeten openen zoals hieronder getoond.
Stap 6: - Dit is de omgeving waarin we onze codes gaan typen. Voor mensen die bekend zijn met Arduino, schrik niet JA, de IDE lijkt op Arduino en dat geldt ook voor het programma.
Stap 7: - We hebben twee bibliotheken nodig om ons ball-volgende programma te laten werken, om te installeren, klik dan op Sketch -> Import Library -> Add Library . Het volgende dialoogvenster wordt geopend.
Stap 8: - Gebruik het tekstvak linksboven om naar Raspberry Pi te zoeken en druk op enter, het zoekresultaat zou er ongeveer zo uit moeten zien.
Stap 9: - Zoek de bibliotheken met de naam "GL Video" en "Hardware I / O" en klik op installeren om ze te installeren. Zorg ervoor dat u beide bibliotheken installeert.
Stap 10: - Op basis van uw internet duurt de installatie enkele minuten. Als we klaar zijn, zijn we klaar met het verwerken van software.
Schakelschema:
Het schakelschema van dit Raspberry Pi Ball Tracking Project wordt hieronder weergegeven.
Zoals je kunt zien, omvat het circuit een PI-camera, een Motor Driver-module en een paar motoren die zijn aangesloten op de Raspberry pi. Het volledige circuit wordt gevoed door een mobiele powerbank (weergegeven door een AAA-batterij in het bovenstaande circuit).
Omdat de details van de pinnen niet op de Raspberry Pi worden vermeld, moeten we de pinnen verifiëren met behulp van de onderstaande afbeelding
Om de motoren aan te drijven, hebben we vier pinnen nodig (A, B, A, B). Deze vier pinnen zijn verbonden vanaf respectievelijk GPIO14,4,17 en 18. De oranje en witte draad vormen samen de verbinding voor één motor. We hebben dus twee van dergelijke paren voor twee motoren.
De motoren zijn aangesloten op de L293D Motor Driver- module zoals weergegeven in de afbeelding en de driver-module wordt gevoed door een powerbank. Zorg ervoor dat de aarde van de powerbank is verbonden met de aarde van de Raspberry Pi, alleen dan werkt je verbinding.
Dat is het, we zijn klaar met onze hardwareverbinding, laten we teruggaan naar onze verwerkingsomgeving en beginnen met programmeren om onze robot te leren hoe hij een bal moet volgen.
Raspberry Pi Ball-trackingprogramma:
Het volledige verwerkingsprogramma van dit project vindt u aan het einde van deze pagina, die u direct gebruikt. Even verderop heb ik de werking van de code uitgelegd, zodat u deze voor andere soortgelijke projecten kunt gebruiken.
Het programmaconcept is heel eenvoudig. Hoewel de bedoeling van het project is om een bal te volgen, gaan we het eigenlijk niet doen. We gaan de bal alleen identificeren aan de hand van zijn kleur. Zoals we allemaal weten, zijn video's niets anders dan doorlopende fotolijsten. Dus we nemen elke foto en splitsen deze in pixels. Vervolgens vergelijken we elke pixelkleur met de kleur van de bal; als er een match wordt gevonden, kunnen we zeggen dat we de bal hebben gevonden. Met deze informatie kunnen we ook de positie van de bal (pixelkleur) op het scherm identificeren. Als de positie uiterst links is, verplaatsen we de robot naar rechts, als de positie uiterst rechts is, verplaatsen we de robot naar links zodat de pixelpositie altijd in het midden van het scherm blijft. Je kunt de Computer Vision-video van Daniel Shiffman bekijken om een duidelijk beeld te krijgen.
Zoals altijd beginnen we met het importeren van de twee bibliotheken die we downloaden. Dit kan gedaan worden door de volgende twee regels. De Hardware I / O-bibliotheek wordt gebruikt om rechtstreeks vanuit de verwerkingsomgeving toegang te krijgen tot de GPIO-pinnen van de PI, de glvideo-bibliotheek wordt gebruikt om toegang te krijgen tot de Raspberry Pi-cameramodule.
import processing.io. *; importeer gohai.glvideo. *;
Binnen de setup- functie initialiseren we de output-pinnen om de motor te besturen en krijgen we ook de video van de pi-camera en vergroten we deze in een venster van 320 * 240.
leegte setup () {grootte (320, 240, P2D); video = nieuwe GLCapture (dit); video.start (); trackColor = kleur (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
De leegte trekking is als de oneindige lus, de code in deze lus zal worden uitgevoerd zolang het programma wordt beëindigd. Als er een camerabron beschikbaar is, lezen we de video die eruit komt
void draw () {achtergrond (0); if (video.available ()) {video.read (); }}
Vervolgens beginnen we het videoframe in pixels te splitsen. Elke pixel heeft de waarde rood, groen en blauw. Deze waarden worden opgeslagen in de variabele r1, g1 en b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Wat is de huidige kleur kleur currentColor = video.pixels; zweven r1 = rood (currentColor); float g1 = groen (currentColor); float b1 = blauw (currentColor);
Om de kleur van de bal in eerste instantie te detecteren, moeten we op de kleur klikken. Eenmaal klikken wordt de kleur van de bal opgeslagen in de variabele trackColour .
void mousePressed () {// Kleur opslaan waar met de muis wordt geklikt in trackColor-variabele int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Zodra we de trackkleur en de huidige kleur hebben, moeten we ze vergelijken. Deze vergelijking maakt gebruik van de dist-functie. Het controleert hoe dicht de huidige kleur bij de trackkleur ligt.
zweven d = dist (r1, g1, b1, r2, g2, b2);
De waarde van dist is nul voor een exacte overeenkomst. Dus als de waarde van dist kleiner is dan een gespecificeerde waarde (wereldrecord), dan nemen we aan dat we de trackkleur hebben gevonden. Vervolgens krijgen we de locatie van die pixel en slaan deze op in de variabele die het dichtst bij X en het dichtst bij Y ligt om de locatie van de bal te vinden
if (d <worldRecord) {worldRecord = d; dichtstbijzijndeX = x; dichtstbijzijndeY = y; }
We tekenen ook een ellips rond de gevonden kleur om aan te geven dat de kleur is gevonden. De waarde van de positie wordt ook op de console afgedrukt, dit zal veel helpen bij het debuggen.
if (worldRecord <10) {// Teken een cirkel bij de bijgehouden pixelvulling (trackColor); strokeWeight (4,0); beroerte (0); ellips (dichtstbijzijndeX, dichtstbijzijndeY, 16, 16); println (dichtstbijzijndeX, dichtstbijzijndeY);
Ten slotte kunnen we de positie van de dichtstbijzijnde X en de dichtstbijzijnde Y vergelijken en de motoren zo afstellen dat de kleur naar het midden van het scherm gaat. De onderstaande code wordt gebruikt om de robot naar rechts te draaien, aangezien de X-positie van de kleur zich aan de linkerkant van het scherm bevond (<140)
if (dichtstbijzijndeX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); vertraging (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Rechts afslaan"); }
Evenzo kunnen we de positie van X en Y controleren om de motoren in de vereiste richting te sturen. Zoals altijd kunt u onderaan de pagina het volledige programma raadplegen.
Werking van Raspberry Pi Ball Tracking Robot:
Als je eenmaal klaar bent met de hardware en het programma, is het tijd om wat plezier te hebben. Voordat we onze bot op de grond testen, moeten we ervoor zorgen dat alles goed werkt. Verbind uw Pi om te monitoren en start de verwerkingscode. Je zou de videofeed in een klein venster moeten zien. Breng nu de bal in het frame en klik op de bal om de robot te leren dat hij deze specifieke kleur moet volgen. Beweeg nu de bal over het scherm en je zou de wielen moeten zien draaien.
Als alles werkt zoals verwacht, laat de bot dan op de grond los en begin ermee te spelen. Zorg ervoor dat de kamer gelijkmatig wordt verlicht voor het beste resultaat. De volledige werking van het project wordt getoond in de onderstaande video. Ik hoop dat je het project begreep en het leuk vond om iets soortgelijks te bouwen. Als je problemen hebt, kun je ze in de commentaarsectie hieronder plaatsen of helpen.