- Požadovaný hardvér:
- Programové požiadavky:
- Nastavenie spracovania na Raspberry Pi:
- Schéma zapojenia:
- Program na sledovanie lopty Raspberry Pi:
- Pracovanie robota na sledovanie guľôčok Raspberry Pi:
Oblasť robotiky, umelej inteligencie a strojového učenia sa rýchlo rozvíja, takže je pravdepodobné, že v blízkej budúcnosti zmení životný štýl ľudstva. Predpokladá sa, že roboti rozumejú skutočnému svetu a interagujú s ním prostredníctvom senzorov a spracovania strojového učenia. Rozpoznávanie obrazu je jedným z populárnych spôsobov, ako sa myslí, že roboti rozumejú objektom tak, že sa pozerajú na skutočný svet cez kameru, rovnako ako my. V tomto projekte využime silu Raspberry Pi na zostavenie robota, ktorý dokáže sledovať loptu a sledovať ju rovnako ako roboty, ktoré hrajú futbal.
OpenCV je veľmi slávny a otvorený zdrojový nástroj, ktorý sa používa na spracovanie obrazu. V tomto tutoriáli však kvôli zjednodušeniu používame spracovanie IDE. Pretože spracovanie pre ARM vydalo na spracovanie aj knižnicu GPIO, nebudeme už musieť prechádzať medzi pythonom a spracovaním, aby sme mohli pracovať s Raspberry Pi. Znie to dobre, že? Začnime teda.
Požadovaný hardvér:
- Malinový koláč
- Kamerový modul s plochým káblom
- Robotický podvozok
- Prevodové motory s kolesom
- Vodič motora L293D
- Napájacia banka alebo akýkoľvek iný prenosný zdroj napájania
Programové požiadavky:
- Monitor alebo iný displej pre Raspberry pi
- Klávesnica alebo myš pre Pi
- Spracovanie softvéru ARM
Poznámka: Počas programovania je povinné mať displej pripojený k Pi prostredníctvom vodičov, pretože až potom je možné sledovať video z kamery
Nastavenie spracovania na Raspberry Pi:
Ako už bolo povedané, na programovanie nášho Raspberry Pi použijeme prostredie na spracovanie, a nie predvolený spôsob používania pythonu. Postupujte teda podľa nasledujúcich krokov:
Krok 1: - Pripojte svoje zariadenie Raspberry Pi k monitoru, klávesnici a myši a zapnite ho.
Krok 2: - Uistite sa, že je počítač Pi pripojený k aktívnemu internetovému pripojeniu, pretože sa chystáme stiahnuť niekoľko vecí.
Krok 3: - Kliknutím na Processing ARM stiahnete IDE spracovania pre Raspberry Pi. Stiahnutie bude vo forme súboru ZIP.
Krok 4: - Po stiahnutí rozbaľte súbory vo vašom priečinku ZIP do požadovaného adresára. Práve som ho rozbalil na plochu.
Krok 5: - Teraz otvorte extrahovaný priečinok a kliknite na súbor s názvom processing. Mal by otvoriť okno, ako je uvedené nižšie.
Krok 6: - Toto je prostredie, kde budeme písať svoje kódy. Pre ľudí, ktorí poznajú Arduino, nebuďte šokovaní ÁNO, IDE vyzerá podobne ako Arduino a rovnako aj program.
Krok 7: - Aby náš program sledujúci loptu fungoval, potrebujeme dve knižnice, na inštaláciu stačí kliknúť na Skica -> Importovať knižnicu -> Pridať knižnicu . Otvorí sa nasledujúce dialógové okno.
Krok 8: - Pomocou textového poľa v ľavom hornom rohu vyhľadajte Raspberry Pi a stlačte kláves Enter, výsledok vyhľadávania by mal vyzerať asi takto.
Krok 9: - Vyhľadajte knižnice s názvom „GL Video“ a „Hardware I / O“ a kliknutím na inštaláciu ich nainštalujte. Nezabudnite nainštalovať obe knižnice.
Krok 10: - Na základe vášho internetu bude inštalácia trvať niekoľko minút. Po dokončení sme pripravení na spracovanie softvéru.
Schéma zapojenia:
Schéma zapojenia tohto projektu sledovania loptičiek Raspberry Pi je uvedená nižšie.
Ako vidíte, obvod obsahuje PI kameru, modul Motor Driver a dvojicu motorov pripojených k Raspberry pi. Celý obvod je napájaný bankou Mobile Power (v obvode vyššie predstavuje batéria AAA).
Pretože podrobnosti o kolíkoch nie sú uvedené na Raspberry Pi, musíme si kolíky overiť pomocou nasledujúceho obrázka
Na pohon motorov potrebujeme štyri kolíky (A, B, A, B). Tieto štyri piny sú spojené z GPIO14,4,17 a 18, respektíve. Oranžový a biely vodič spolu tvoria spojenie pre jeden motor. Takže máme dva také páry pre dva motory.
Motory sú pripojené k modulu ovládača motora L293D, ako je to znázornené na obrázku, a modul ovládača je napájaný z výkonovej banky. Uistite sa, že uzemnenie powerbanky je spojené so zemou Raspberry Pi, až potom bude vaše pripojenie fungovať.
To je všetko, čo sme skončili s našim hardvérovým pripojením, vráťme sa do nášho prostredia spracovania a začnime programovať tak, aby sme naučili nášho robota sledovať loptu.
Program na sledovanie lopty Raspberry Pi:
Kompletné spracovanie programu tohto projektu je uvedený na konci tejto stránky, ktoré priamo použiť. Ďalej v texte som vysvetlil fungovanie kódu, aby ste ho mohli použiť pre ďalšie podobné projekty.
Koncept programu je veľmi jednoduchý. Aj keď zámerom projektu je vystopovať loptu, v skutočnosti to nejdeme. Ideme len identifikovať loptu podľa jej farby. Ako všetci vieme, videá nie sú nič iné ako súvislé snímky. Takže urobíme každý obrázok a rozdelíme ho na pixely. Potom porovnáme každú farbu pixelov s farbou gule; ak sa nájde zápas, môžeme povedať, že sme našli loptu. Pomocou týchto informácií môžeme tiež identifikovať polohu gule (farba pixelov) na obrazovke. Ak je pozícia úplne vľavo, posúvame robota doprava, ak je pozícia úplne vpravo, posúvame robota doľava tak, aby poloha pixelov vždy zostávala v strede obrazovky. Môžete si pozrieť video z počítačového videnia Daniela Shiffmana, aby ste získali jasný obraz.
Ako vždy začneme importom dvoch knižníc, ktoré stiahneme. To je možné dosiahnuť nasledujúcimi dvoma riadkami. Knižnica Hardware I / O slúži na prístup k pinom GPIO PI priamo z prostredia spracovania, knižnica glvideo slúži na prístup k modulu kamery Raspberry Pi.
import processing.io. *; import gohai.glvideo. *;
Vnútri nastavenie funkcie budeme inicializovať výstupné piny pre ovládanie motora a tiež dostať video z kamery pi a rozmerom sa v okne o veľkosti 320 * 240.
void setup () {size (320, 240, P2D); video = nový GLCapture (toto); video.start (); trackColor = farba (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Void remíza je ako nekonečnú slučku kód vnútri tohto okruhu bude vykonávať tak dlho, kým sa program ukončí. Ak je k dispozícii zdroj kamery, prečítame si z nej vychádzajúce video
void draw () {background (0); if (video.available ()) {video.read (); }}
Potom začneme rozdeľovať videozáznam na pixely. Každý pixel má hodnotu červenej, zelenej a modrej. Tieto hodnoty sú uložené v premenných r1, g1 a b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Čo je to aktuálna farba color currentColor = video.pixels; float r1 = červená (currentColor); float g1 = zelená (currentColor); float b1 = modrá (currentColor);
Aby sme na začiatku zistili farbu lopty, musíme na ňu kliknúť. Po kliknutí bude farba lopty uložená v premennej nazvanej trackColour .
void mousePressed () {// Uložiť farbu, na ktorú sa klikne myšou v premennej trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Keď máme farbu stopy a aktuálnu farbu, musíme ich porovnať. Toto porovnanie využíva funkciu dist. Kontroluje, ako blízko je aktuálna farba k farbe stopy.
float d = dist (r1, g1, b1, r2, g2, b2);
Hodnota dist bude nula pre presnú zhodu. Ak je teda hodnota vzdialenosti menšia ako zadaná hodnota (svetový rekord), potom predpokladáme, že sme našli farbu stopy. Potom získame polohu tohto pixelu a uložíme ho do premennej najbližšie X a najbližšie Y, aby sme našli umiestnenie lopty
if (d <worldRecord) {worldRecord = d; najbližšie X = x; najbližšieY = y; }
Okolo nájdenej farby tiež nakreslíme elipsu, ktorá označuje, že farba bola nájdená. Hodnota polohy je tiež vytlačená na konzole, čo veľmi pomôže pri ladení.
if (worldRecord <10) {// Nakreslite kruh na výplni sledovaného pixelu (trackColor); zdvihWeight (4,0); zdvih (0); elipsa (najbližšie X, najbližšie Y, 16, 16); println (najbližšie X, najbližšie Y);
Nakoniec môžeme porovnať polohu najbližšieho X a najbližšieho Y a upraviť motory tak, aby sa farba dostala do stredu obrazovky. Nasledujúci kód sa používa na otočenie robota doprava, pretože sa zistilo, že poloha X farby je na ľavej strane obrazovky (<140).
if (najbližšie X <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); oneskorenie (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Odbocte doprava"); }
Podobne môžeme skontrolovať polohu X a Y na ovládanie motorov v požadovanom smere. Ako vždy, celý program nájdete v spodnej časti stránky.
Pracovanie robota na sledovanie guľôčok Raspberry Pi:
Len čo budete pripravení na hardvér a program, je čas sa trochu pobaviť. Predtým, ako otestujeme nášho robota na zemi, mali by sme sa ubezpečiť, že všetko funguje dobre. Pripojte svoje Pi, aby ste mohli monitorovať a spustiť kód spracovania. Videozáznam by ste mali vidieť v malom okne. Teraz prineste loptu dovnútra rámu a kliknite na ňu, aby ste robot naučili, že má sledovať túto konkrétnu farbu. Teraz pohybujte loptou po obrazovke a mali by ste si všimnúť otáčanie kolies.
Ak všetko funguje podľa očakávaní, uvoľnite robota na zemi a začnite sa s ním hrať. Najlepšie výsledky dosiahnete, ak bude miestnosť rovnomerne osvetlená. Kompletné fungovanie projektu je zobrazené na videu nižšie. Dúfam, že ste pochopili projekt a radi ste stavali niečo podobné. Ak máte akékoľvek problémy, neváhajte ich uverejniť v sekcii komentárov nižšie alebo pomôžte.