- Hardware necesar:
- Cerință de programare:
- Configurarea procesării pe Raspberry Pi:
- Diagrama circuitului:
- Program de urmărire a mingii Raspberry Pi:
- Funcționarea robotului de urmărire a mingii Raspberry Pi:
Domeniul roboticii, al inteligenței artificiale și al învățării automate evoluează rapid, cu siguranță că va schimba stilul de viață al omenirii în viitorul apropiat. Se crede că roboții înțeleg și interacționează cu lumea reală prin senzori și prin procesarea învățării automate. Recunoașterea imaginii este una dintre modalitățile populare în care se crede că roboții înțeleg obiecte privind lumea reală printr-o cameră la fel ca noi. În acest proiect, să folosim puterea Raspberry Pi pentru a construi un robot care să poată urmări mingea și să-l urmeze la fel ca roboții care joacă fotbal.
OpenCV este un instrument cu sursă foarte renumit și deschis care este utilizat pentru procesarea imaginilor, dar în acest tutorial pentru a simplifica lucrurile, folosim IDE-ul de procesare. Deoarece procesarea pentru ARM a lansat și biblioteca GPIO pentru procesare, nu va mai trebui să ne schimbăm între python și procesare pentru a lucra cu Raspberry Pi. Sună grozav nu? Așa că hai să începem.
Hardware necesar:
- Raspberry Pi
- Modul de cameră cu cablu cu bandă
- Șasiu robot
- Motoare cu roți dințate
- Driver motor L293D
- Power bank sau orice altă sursă de alimentare portabilă
Cerință de programare:
- Monitor sau alt ecran pentru Raspberry pi
- Tastatură sau mouse pentru Pi
- Procesarea software-ului ARM
Notă: Este obligatoriu să aveți un afișaj conectat la Pi prin fire în timpul programării, deoarece numai atunci videoclipul camerei poate fi vizionat
Configurarea procesării pe Raspberry Pi:
După cum am spus mai devreme, vom folosi mediul de procesare pentru a ne programa Raspberry Pi și nu modul implicit de a folosi python. Deci, urmați pașii de mai jos:
Pasul 1: - Conectați-vă Raspberry Pi la monitor, tastatură și mouse și porniți-l.
Pasul 2: - Asigurați-vă că Pi este conectat la o conexiune activă la internet, deoarece suntem pe punctul de a descărca câteva lucruri.
Pasul 3: - Faceți clic pe Processing ARM, pentru a descărca IDE-ul de procesare pentru Raspberry Pi. Descărcarea va fi sub forma unui fișier ZIP.
Pasul 4: - Odată descărcat, extrageți fișierele din folderul ZIP din directorul preferat. Tocmai l-am extras pe desktop.
Pasul 5: - Acum, deschideți folderul extras și faceți clic pe fișierul numit procesare. Ar trebui să deschidă o fereastră așa cum se arată mai jos.
Pasul 6: - Acesta este mediul în care ne vom introduce codurile. Pentru oamenii care sunt familiarizați cu Arduino, nu fiți șocați DA IDE arată similar cu Arduino și la fel și programul.
Pasul 7: - Avem nevoie de două biblioteci pentru ca programul nostru de urmărire a mingii să funcționeze, pentru a instala apoi faceți clic pe Sketch -> Import Library -> Add Library . Se va deschide următoarea casetă de dialog.
Pasul 8: - Utilizați caseta de text din stânga sus pentru a căuta Raspberry Pi și apăsați Enter, rezultatul căutării ar trebui să arate cam așa.
Pasul 9: - Căutați bibliotecile denumite „GL Video” și „Hardware I / O” și faceți clic pe instalare pentru a le instala. Asigurați-vă că instalați ambele biblioteci.
Pasul 10: - Pe baza internetului dvs., instalarea va dura câteva minute. Odată terminat, suntem pregătiți pentru procesarea software-ului.
Diagrama circuitului:
Diagrama circuitului acestui proiect de urmărire a mingii Raspberry Pi este prezentată mai jos.
După cum puteți vedea, circuitul implică o cameră PI, modulul Motor Driver și o pereche de motoare conectate la Raspberry pi. Circuitul complet este alimentat de o bancă de alimentare mobilă (reprezentată de o baterie AAA în circuitul de mai sus).
Deoarece detaliile pinilor nu sunt menționate pe Raspberry Pi, trebuie să verificăm pinii folosind imaginea de mai jos
Pentru a conduce motoarele, avem nevoie de patru pini (A, B, A, B). Acești patru pini sunt conectați de la GPIO14,4,17 și respectiv 18. Firul portocaliu și cel alb formează împreună conexiunea pentru un motor. Deci avem două astfel de perechi pentru două motoare.
Motoarele sunt conectate la modulul L293D Motor Driver așa cum se arată în imagine, iar modulul driverului este alimentat de o bancă de alimentare. Asigurați-vă că pământul băncii de alimentare este conectat la pământul Raspberry Pi, doar atunci conexiunea dvs. va funcționa.
Asta am terminat cu conexiunea noastră hardware, să ne întoarcem la mediul nostru de procesare și să începem programarea pentru a învăța robotul nostru cum să urmărească o minge.
Program de urmărire a mingii Raspberry Pi:
Programul complet de procesare al acestui proiect este dat la sfârșitul acestei pagini, pe care îl utilizați direct. Mai jos, chiar mai jos, am explicat modul de funcționare al codului, astfel încât să îl puteți folosi pentru alte proiecte similare.
Conceptul de program este foarte simplu. Deși intenția proiectului este de a urmări o minge, de fapt nu o vom face. Vom identifica mingea folosind culoarea ei. După cum știm cu toții, videoclipurile nu sunt altceva decât cadre continue de imagini. Deci, facem fiecare fotografie și o împărțim în pixeli. Apoi comparăm fiecare culoare a pixelilor cu culoarea mingii; dacă se găsește un meci, atunci putem spune că am găsit mingea. Cu aceste informații putem identifica și poziția mingii (culoarea pixelilor) pe ecran. Dacă poziția este la stânga, mutăm robotul spre dreapta, dacă poziția este la dreapta, mutăm robotul la stânga, astfel încât poziția pixelului să rămână întotdeauna în centrul ecranului. Puteți viziona videoclipul Computer Vision al lui Daniel Shiffman pentru a obține o imagine clară.
Ca întotdeauna, începem prin importarea celor două biblioteci pe care le descărcăm. Acest lucru se poate face prin următoarele două linii. Biblioteca I / O hardware este utilizată pentru a accesa pinii GPIO ai PI direct din mediul de procesare, biblioteca glvideo este utilizată pentru a accesa modulul camerei Raspberry Pi.
import processing.io. *; import gohai.glvideo. *;
În interiorul configurare funcția am inițializa pinii de ieșire pentru a controla motorul și pentru a obține, de asemenea, video de la camera pi și dimensiunea într - o fereastră de dimensiuni 320 * 240.
configurare nulă () {dimensiune (320, 240, P2D); video = GLCapture nou (aceasta); video.start (); trackColor = culoare (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Nule remiză este ca bucla infinita codul din interiorul această buclă va fi executa atâta timp cât programul se încheie. Dacă este disponibilă o sursă de cameră, citim videoclipul care iese din ea
void draw () {fundal (0); if (video.available ()) {video.read (); }}
Apoi începem să împărțim cadrul video în pixeli. Fiecare pixel are o valoare de roșu, verde și albastru. Aceste valori sunt stocate în variabilele 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; // Ce este culoarea curentă culoare currentColor = video.pixels; float r1 = roșu (currentColor); float g1 = verde (currentColor); float b1 = albastru (currentColor);
Pentru a detecta culoarea mingii inițial, trebuie să facem clic pe culoare. După ce faceți clic, culoarea mingii va fi stocată în variabila numită trackColour .
void mousePressed () {// Salvați culoarea în care se face clic pe mouse în variabila trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Odată ce avem culoarea pistei și culoarea curentă, trebuie să le comparăm. Această comparație utilizează funcția dist. Se verifică cât de aproape este culoarea curentă de culoarea pistei.
plutitor d = dist (r1, g1, b1, r2, g2, b2);
Valoarea dist va fi zero pentru o potrivire exactă. Deci, dacă valoarea dist este mai mică decât o valoare specificată (record mondial), atunci presupunem că am găsit culoarea pistei. Apoi obținem locația acelui pixel și îl stocăm în variabila cea mai apropiată X și cea mai apropiată Y pentru a găsi locația mingii
if (d <worldRecord) {worldRecord = d; cel mai apropiatX = x; cel mai apropiatY = y; }
De asemenea, desenăm o elipsă în jurul culorii găsite pentru a indica faptul că culoarea a fost găsită. Valoarea poziției este, de asemenea, tipărită pe consolă, acest lucru va ajuta foarte mult în timpul depanării.
if (worldRecord <10) {// Desenați un cerc la umplerea pixelilor urmăriți (trackColor); strokeWeight (4.0); accident vascular cerebral (0); elipsa (cel mai apropiatX, cel mai apropiatY, 16, 16); println (cel mai apropiatX, cel mai apropiatY);
În cele din urmă, putem compara poziția celui mai apropiat X și cel mai apropiat Y și putem regla motoarele în așa fel încât culoarea să ajungă în centrul ecranului. Codul de mai jos este folosit pentru a roti robotul spre dreapta, deoarece sa constatat că poziția X a culorii se află în partea stângă a ecranului (<140)
if (cel mai apropiatX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); întârziere (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println („Virați la dreapta”); }
În mod similar, putem verifica poziția lui X și Y pentru a controla motoarele în direcția necesară. Ca întotdeauna, puteți consulta partea de jos a paginii pentru programul complet.
Funcționarea robotului de urmărire a mingii Raspberry Pi:
Odată ce sunteți gata cu hardware-ul și programul, este timpul să vă distrați. Înainte de a ne testa robotul la sol, ar trebui să ne asigurăm că totul funcționează bine. Conectați-vă Pi pentru a monitoriza și lansa codul de procesare. Ar trebui să vedeți fluxul video pe o fereastră mică. Acum, aduceți bila în interiorul cadrului și faceți clic pe bilă pentru a învăța robotul că ar trebui să urmărească această culoare specială. Acum mutați mingea în jurul ecranului și ar trebui să observați rotirea roților.
Dacă totul funcționează așa cum era de așteptat, eliberați botul de la sol și începeți să vă jucați cu el. Asigurați-vă că camera este iluminată uniform pentru cele mai bune rezultate. Lucrarea completă a proiectului este prezentată în videoclipul de mai jos. Sper că ați înțeles proiectul și v-a plăcut să construiți ceva similar. Dacă aveți probleme, nu ezitați să le postați în secțiunea de comentarii de mai jos sau să ajutați.