- Szükséges hardver:
- Programozási követelmény:
- A Raspberry Pi feldolgozásának beállítása:
- Kördiagramm:
- Raspberry Pi labdakövető program:
- A Raspberry Pi labdakövető robot működése:
A robotika, a mesterséges intelligencia és a gépi tanulás területe gyorsan fejlődik, és a közeljövőben biztosan megváltoztatja az emberiség életmódját. Úgy gondolják, hogy a robotok érzékelők és gépi tanulás feldolgozása révén értik meg a való világot, és kölcsönhatásba lépnek vele. A képfelismerés az egyik legnépszerűbb módja annak, hogy a robotok úgy gondolják, hogy úgy értenek meg tárgyakat, hogy kamerán keresztül nézik a való világot, mint mi. Ebben a projektben használja a Raspberry Pi erejét egy olyan robot felépítéséhez, amely képes követni a labdát és követni azt, akárcsak a focizó robotokat.
Az OpenCV egy nagyon híres és nyílt forráskódú eszköz, amelyet képfeldolgozásra használnak, de ebben az oktatóanyagban az egyszerűség érdekében a Processing IDE-t használjuk. Mivel az ARM-re történő feldolgozás a GPIO könyvtárat is kiadta feldolgozásra, nem kell többé váltanunk a python és a feldolgozás között a Raspberry Pi-vel való együttműködéshez. Jól hangzik, igaz? Kezdjük tehát.
Szükséges hardver:
- Raspberry Pi
- Kamera modul szalagkábellel
- Robot alváz
- Fogaskerekes motorok kerekekkel
- L293D motorvezérlő
- Power bank vagy bármilyen más hordozható áramforrás
Programozási követelmény:
- Monitor vagy más kijelző a Raspberry pi számára
- Kulcstartó vagy egér Pi számára
- ARM szoftver feldolgozása
Megjegyzés: A programozás során kötelező, hogy a Pi-hez vezetékekkel csatlakozzon egy kijelző, mert csak akkor tekinthető meg a kamera videója
A Raspberry Pi feldolgozásának beállítása:
Mint korábban elmondtuk, a feldolgozó környezetet fogjuk használni a Raspberry Pi programozásához, és nem a python használatának alapértelmezett módját. Tehát kövesse az alábbi lépéseket:
1. lépés: - Csatlakoztassa a Raspberry Pi-t a monitorhoz, a billentyűzethez és az egérhez, majd kapcsolja be.
2. lépés: - Győződjön meg arról, hogy a Pi aktív internetkapcsolathoz csatlakozik, mert néhány dolgot le akarunk tölteni.
3. lépés: - Kattintson az ARM feldolgozása elemre, hogy letöltse a Raspberry Pi feldolgozásához szükséges IDE-t. A letöltés ZIP fájl formájában lesz.
4. lépés: - A letöltés után vonja ki a ZIP mappában lévő fájlokat a kívánt könyvtárból. Csak kibontottam az asztalomra.
5. lépés: - Most nyissa meg a kibontott mappát, és kattintson a feldolgozás nevű fájlra. Meg kell nyitnia egy ablakot az alábbiak szerint.
6. lépés: - Ebben a környezetben fogjuk beírni a kódjainkat. Azok számára, akik ismerik az Arduino-t, ne döbbenjünk IGEN, az IDE valóban hasonlít az Arduinóra, és a program is.
7. lépés: - Szükségünk van két könyvtárra, hogy a gömbkövető programunk működhessen, telepítéséhez kattintson a Sketch -> Library Import -> Library hozzáadása gombra . Megnyílik a következő párbeszédpanel.
8. lépés: - Használja a bal felső szövegdobozt a Raspberry Pi keresésére, és nyomja meg az Enter billentyűt. A keresési eredménynek valami ilyennek kell lennie.
9. lépés: - Keresse meg a „GL Video” és a „Hardver I / O” nevű könyvtárakat, és kattintson a telepítésre a telepítéshez. Győződjön meg arról, hogy mindkét könyvtárat telepítette.
10. lépés: - Internetje alapján a telepítés néhány percet vesz igénybe. Miután elkészültünk, készen állunk a szoftverek feldolgozására.
Kördiagramm:
A Raspberry Pi gömbkövető projekt kapcsolási rajza az alábbiakban látható.
Amint láthatja, az áramkör tartalmaz egy PI kamerát, Motor Driver modult és egy pár motort, amelyek a Raspberry pi-hez vannak csatlakoztatva. A teljes áramkört egy Mobile Power bank táplálja (amelyet AAA elem képvisel a fenti áramkörben).
Mivel a csapok részleteit a Raspberry Pi nem említi, az alábbi kép segítségével ellenőriznünk kell a csapokat
A motorok vezetéséhez négy csapra van szükségünk (A, B, A, B). Ez a négy érintkező a GPIO14,4,17 és a 18-ból származik. A narancssárga és a fehér huzal együtt alkotja a csatlakozást egy motorhoz. Tehát két ilyen párunk van két motorhoz.
A motorok az L293D Motor Driver modulhoz vannak csatlakoztatva, a képen látható módon, és a meghajtó modult egy tápegység táplálja. Győződjön meg arról, hogy az árambank földje csatlakozik a Raspberry Pi földjéhez, csak akkor működik a kapcsolata.
Ez az, hogy elkészültünk a hardver kapcsolattal, térjünk vissza a feldolgozási környezetünkhöz, és kezdjünk el programozni, hogy megtanítsuk robotunknak a labda nyomon követését.
Raspberry Pi labdakövető program:
A projekt teljes Processing programja az oldal végén található, amelyet közvetlenül használ. Az alábbiakban kifejtettem a kód működését, hogy más hasonló projektekhez is felhasználhassa.
A programkoncepció nagyon egyszerű. Bár a projekt célja egy labda követése, valójában nem fogjuk megtenni. Éppen a színe alapján fogjuk azonosítani a labdát. Mint mindannyian tudjuk, a videók nem más, mint folyamatos képkockák. Tehát minden képet elkészítünk és pixelekre osztjuk. Ezután összehasonlítjuk az egyes pixelek színét a gömb színével; ha talál egyezést, akkor azt mondhatjuk, hogy megtaláltuk a labdát. Ezekkel az információkkal azonosíthatjuk a labda helyzetét (képpont szín) a képernyőn is. Ha a helyzet bal szélen van, akkor a robotot jobbra mozgatjuk, ha a helyzet jobb szélső, akkor a robotot balra mozgatjuk, hogy a pixel helyzete mindig a képernyő közepén maradjon. Megtekintheti a Computer Vision videót Daniel Shiffmanről, hogy tiszta képet kapjon.
Mint mindig, a két letöltött könyvtár importálásával kezdjük. Ezt a következő két sor segítségével tehetjük meg. A Hardver I / O könyvtár a PI GPIO csapjainak elérésére szolgál közvetlenül a feldolgozási környezetből, a glvideo könyvtár pedig a Raspberry Pi kamera modul elérésére szolgál.
import feldolgozása.io. *; import gohai.glvideo. *;
A beállítási funkción belül inicializáljuk a kimeneti csapokat a motor vezérléséhez, és a pi kameráról is megszerezzük a videót, és egy 320 * 240 méretű ablakban méretezzük.
void setup () {méret (320, 240, P2D); videó = új GLCapture (ez); video.start (); trackColor = szín (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
A void draw olyan, mint a végtelen hurok, a ciklus belsejében lévő kód mindaddig végrehajtódik, amíg a program leáll. Ha rendelkezésre áll fényképezőgép-forrás, elolvassuk a belőle kijövő videót
void draw () {háttér (0); if (video.available ()) {video.read (); }}
Ezután elkezdjük felbontani a videoképet pixelekre. Minden pixel értéke piros, zöld és kék. Ezeket az értékeket az r1, g1 és b1 változó tárolja
for (int x = 0; x <videó.szélesség; x ++) {for (int y = 0; y <video.magasság; y ++) {int loc = x + y * video.width; // Mi az aktuális színszín currentColor = video.pixels; úszó r1 = piros (currentColor); úszó g1 = zöld (currentColor); úszó b1 = kék (currentColor);
A gömb színének kezdeti felismeréséhez a színre kell kattintanunk. Miután rákattintott, a labda színe a trackColour nevű változóban lesz tárolva.
void mousePressed () {// Szín mentése, ahol az egérre kattintunk a trackColor változóban int loc = mouseX + mouseY * video.width; trackColor = video.pixelek; }
Ha megvan a pálya színe és az aktuális szín, össze kell hasonlítanunk őket. Ez az összehasonlítás a dist függvényt használja. Ellenőrzi, hogy az aktuális szín milyen közel van a pálya színéhez.
úszó d = dist (r1, g1, b1, r2, g2, b2);
A dist értéke nulla lesz egy pontos egyezés esetén. Tehát, ha a dist értéke kisebb, mint egy megadott érték (világrekord), akkor feltételezzük, hogy megtaláltuk a pálya színét. Ezután megkapjuk annak a képpontnak a helyét, és eltároljuk az X-hez legközelebbi változóban, hogy megtaláljuk a gömb helyét
if (d <worldRecord) {worldRecord = d; legközelebbiX = x; legközelebbiY = y; }
A megtalált szín köré ellipszist is rajzolunk, jelezve, hogy a szín megtalálható. A pozíció értéke ki van nyomtatva a konzolra is, ez sokat segít a hibakeresés közben.
if (worldRecord <10) {// Rajzoljon egy kört a nyomon követett pixel kitöltésnél (trackColor); strokeWeight (4,0); stroke (0); ellipszis (legközelebbiX, legközelebbiY, 16, 16); println (legközelebbX, legközelebbY);
Végül összehasonlíthatjuk a legközelebbi X és a legközelebbi Y helyzetét, és úgy állíthatjuk be a motorokat, hogy a szín a képernyő közepére kerüljön. Az alábbi kódot használjuk a robot jobbra fordításához, mivel a szín X helyzetét a képernyő bal oldalán találtuk (<140)
if (legközelebbiX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); késés (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Forduljon jobbra"); }
Hasonlóképpen ellenőrizhetjük X és Y helyzetét a motorok kívánt irányba történő irányításához. Mint mindig, a teljes programot az oldal aljára utalhatja.
A Raspberry Pi labdakövető robot működése:
Miután elkészült a hardverrel és a programmal, ideje szórakozni. Mielőtt a talajon tesztelnénk botunkat, meg kell győződnünk arról, hogy minden rendben működik-e. Csatlakoztassa a Pi-t a feldolgozási kód megfigyeléséhez és elindításához. A videó hírcsatornát egy kis ablakon kell látnia. Most vigye be a labdát a keretbe, és kattintson a labdára, hogy megtanítsa a robotnak, hogy kövesse ezt a színt. Most mozgassa a labdát a képernyőn, és észre kell vennie, hogy a kerekek forognak.
Ha minden a várakozásoknak megfelelően működik, engedje el a botot a földön, és kezdjen el vele játszani. A legjobb eredmény érdekében ellenőrizze, hogy a szoba egyenletesen meg van-e világítva. A projekt teljes működését az alábbi videó mutatja. Remélem, megértette a projektet, és élvezett valami hasonlót. Ha bármilyen problémája van, nyugodtan tegye közzé az alábbi megjegyzés részben, vagy segítsen.