- Požadovaný hardware:
- Programovací požadavek:
- Nastavení zpracování na Raspberry Pi:
- Kruhový diagram:
- Program sledování míče Raspberry Pi:
- Práce s robotem sledujícím míč Raspberry Pi:
Oblast robotiky, umělé inteligence a strojového učení se rychle vyvíjí, což jistě v blízké budoucnosti změní životní styl lidstva. Předpokládá se, že roboti rozumějí reálnému světu a komunikují s ním prostřednictvím senzorů a zpracování strojového učení. Rozpoznávání obrazu je jedním z populárních způsobů, jakými jsou roboti považováni za objekty, které se dívají na skutečný svět prostřednictvím kamery stejně jako my. V tomto projektu využijme sílu Raspberry Pi k vytvoření robota, který dokáže sledovat míč a sledovat ho stejně jako roboti hrající fotbal.
OpenCV je velmi slavný a otevřený zdrojový nástroj, který se používá pro zpracování obrazu, ale v tomto výukovém programu používáme pro zjednodušení zpracování IDE zpracování. Vzhledem k tomu, že zpracování pro ARM vydalo ke zpracování také knihovnu GPIO, nebudeme již muset přecházet mezi pythonem a zpracováním, abychom mohli pracovat s Raspberry Pi. Zní to dobře, že? Pojďme tedy začít.
Požadovaný hardware:
- Raspberry Pi
- Kamerový modul s plochým kabelem
- Robotický podvozek
- Převodové motory s kolem
- Ovladač motoru L293D
- Napájecí banka nebo jakýkoli jiný přenosný zdroj energie
Programovací požadavek:
- Monitor nebo jiný displej pro Raspberry pi
- Klávesnice nebo myš pro Pi
- Zpracování softwaru ARM
Poznámka: Během programování je povinné mít displej připojen k Pi prostřednictvím vodičů, protože teprve poté lze sledovat video z kamery
Nastavení zpracování na Raspberry Pi:
Jak již bylo řečeno dříve, k programování našeho Raspberry Pi budeme používat prostředí zpracování, nikoli výchozí způsob používání pythonu. Postupujte tedy podle následujících kroků:
Krok 1: - Připojte svůj Raspberry Pi k monitoru, klávesnici a myši a zapněte jej.
Krok 2: - Ujistěte se, že je vaše Pi připojeno k aktivnímu připojení k internetu, protože se chystáme stáhnout několik věcí.
Krok 3: - Kliknutím na Zpracování ARM stáhnete IDE zpracování pro Raspberry Pi. Stahování bude ve formě souboru ZIP.
Krok 4: - Po stažení rozbalte soubory ve složce ZIP do preferovaného adresáře. Právě jsem to extrahoval na plochu.
Krok 5: - Nyní otevřete rozbalenou složku a klikněte na soubor s názvem processing. Mělo by otevřít okno, jak je znázorněno níže.
Krok 6: - Toto je prostředí, kde budeme psát naše kódy. Pro lidi, kteří znají Arduino, nebuďte šokováni ANO, IDE vypadá podobně jako Arduino a stejně tak i program.
Krok 7: - Potřebujeme dvě knihovny, aby náš program sledující míč fungoval, k instalaci pak stačí kliknout na Skica -> Importovat knihovnu -> Přidat knihovnu . Otevře se následující dialogové okno.
Krok 8: - Pomocí textového pole vlevo nahoře vyhledejte Raspberry Pi a stiskněte klávesu Enter, výsledek hledání by měl vypadat asi takto.
Krok 9: - Vyhledejte knihovny s názvem „GL Video“ a „Hardware I / O“ a kliknutím na instalaci je nainstalujte. Ujistěte se, že jste nainstalovali obě knihovny.
Krok 10: - Na základě vašeho internetu bude instalace trvat několik minut. Jakmile jsme hotovi, jsme připraveni na zpracování softwaru.
Kruhový diagram:
Schéma zapojení tohoto projektu sledování míčů Raspberry Pi je uvedeno níže.
Jak vidíte, obvod zahrnuje PI kameru, modul Motor Driver a dvojici motorů připojených k Raspberry pi. Celý obvod je napájen bankou Mobile Power (v obvodu výše představovanou baterií AAA).
Vzhledem k tomu, že podrobnosti o pinech nejsou na Raspberry Pi zmíněny, musíme je ověřit pomocí níže uvedeného obrázku
K pohonu motorů potřebujeme čtyři kolíky (A, B, A, B). Tyto čtyři piny jsou připojeny z GPIO14,4,17 a 18. Oranžový a bílý vodič tvoří spojení pro jeden motor. Takže máme dva takové páry pro dva motory.
Motory jsou připojeny k modulu ovladače motoru L293D, jak je znázorněno na obrázku, a modul ovladače je napájen z napájecí banky. Ujistěte se, že uzemnění powerbanky je připojeno k uzemnění Raspberry Pi, teprve potom bude vaše připojení fungovat.
To je vše, co jsme udělali s naším hardwarovým připojením, vraťme se zpět do našeho prostředí zpracování a začneme programovat, abychom naučili našeho robota sledovat míč.
Program sledování míče Raspberry Pi:
Kompletní zpracování programu tohoto projektu je uveden na konci této stránky, které přímo použít. Dále hned níže jsem vysvětlil fungování kódu, abyste jej mohli použít pro jiné podobné projekty.
Koncept programu je velmi jednoduchý. Ačkoli záměrem projektu je sledovat míč, ve skutečnosti to nebudeme dělat. Prostě identifikujeme míč podle jeho barvy. Jak všichni víme, videa nejsou nic jiného než souvislé snímky. Takže pořídíme každý obrázek a rozdělíme ho na pixely. Poté porovnáme každou barvu pixelu s barvou koule; pokud je nalezena shoda, můžeme říci, že jsme našli míč. S touto informací můžeme také identifikovat polohu koule (barva pixelu) na obrazovce. Pokud je pozice zcela vlevo, pohybujeme robotem doprava, pokud je pozice zcela vpravo, pohybujeme robotem doleva tak, aby poloha pixelu vždy zůstávala uprostřed obrazovky. Můžete sledovat video z počítačového vidění Daniela Shiffmana, abyste získali jasný obraz.
Jako vždy začneme importem dvou knihoven, které stáhneme. Toho lze dosáhnout pomocí následujících dvou řádků. Knihovna Hardware I / O se používá pro přístup k pinům GPIO PI přímo z prostředí zpracování, knihovna glvideo se používá pro přístup k modulu kamery Raspberry Pi.
import processing.io. *; import gohai.glvideo. *;
Uvnitř nastavení funkce budeme inicializovat výstupní piny pro ovládání motoru a také dostat video z kamery pi a rozměrům se v okně o velikosti 320 * 240.
void setup () {size (320, 240, P2D); video = nový GLCapture (toto); video.start (); trackColor = color (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 jako nekonečnou smyčku kód uvnitř tohoto okruhu bude vykonávat tak dlouho, dokud se program ukončí. Pokud je k dispozici zdroj kamery, přečteme si z ní vycházející video
void draw () {background (0); if (video.available ()) {video.read (); }}
Pak začneme rozdělovat video rámeček na pixely. Každý pixel má hodnotu červené, zelené a modré. Tyto hodnoty jsou uloženy v proměnný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; // Co je aktuální barva color currentColor = video.pixels; float r1 = červená (currentColor); float g1 = zelená (currentColor); float b1 = modrá (currentColor);
Abychom zpočátku detekovali barvu koule, musíme kliknout na barvu. Jakmile kliknete, barva koule se uloží do proměnné zvané trackColour .
void mousePressed () {// Uloží barvu tam, kde se klikne myší v proměnné trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Jakmile máme barvu stopy a aktuální barvu, musíme je porovnat. Toto srovnání používá funkci dist. Kontroluje, jak blízko je aktuální barva k barvě stopy.
float d = dist (r1, g1, b1, r2, g2, b2);
Hodnota dist bude nula pro přesnou shodu. Pokud je tedy hodnota vzdálenosti menší než zadaná hodnota (světový rekord), předpokládáme, že jsme našli barvu stopy. Poté získáme umístění tohoto pixelu a uložíme jej do proměnné nejbližší X a nejbližší Y, abychom zjistili umístění koule
if (d <worldRecord) {worldRecord = d; nejbližší X = x; nejbližšíY = y; }
Také nakreslíme elipsu kolem nalezené barvy, abychom označili, že byla nalezena barva. Hodnota pozice je také vytištěna na konzole, což hodně pomůže při ladění.
if (worldRecord <10) {// Nakreslete kruh na výplni sledovaného pixelu (trackColor); zdvihWeight (4,0); mrtvice (0); elipsa (nejbližší X, nejbližší Y, 16, 16); println (nejbližší X, nejbližší Y);
Nakonec můžeme porovnat polohu nejbližšího X a nejbližšího Y a upravit motory tak, aby se barva dostala do středu obrazovky. Níže uvedený kód se používá k otočení robota doprava, protože bylo zjištěno, že poloha X barvy je na levé straně obrazovky (<140)
if (nejbližší X <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); zpoždění (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Odbočit doprava"); }
Podobně můžeme zkontrolovat polohu X a Y pro ovládání motorů v požadovaném směru. Jako vždy můžete celý program vyhledat v dolní části stránky.
Práce s robotem sledujícím míč Raspberry Pi:
Jakmile jste připraveni na hardware a program, je čas se pobavit. Než otestujeme našeho robota na zemi, měli bychom se ujistit, že vše funguje dobře. Připojte svůj Pi ke sledování a spuštění procesního kódu. Videozáznam by se měl zobrazit v malém okně. Nyní přiveďte míč dovnitř rámu a kliknutím na míč naučte robota, že by měl sledovat tuto konkrétní barvu. Nyní pohybujte míčem po obrazovce a měli byste si všimnout otáčení kol.
Pokud vše funguje podle očekávání, uvolněte robota na zemi a začněte si s ním hrát. Pro dosažení nejlepších výsledků musí být místnost rovnoměrně osvětlena. Kompletní fungování projektu je uvedeno ve videu níže. Doufám, že jste pochopili projekt a rádi jste stavěli něco podobného. Pokud máte nějaké problémy, neváhejte je zveřejnit v sekci komentářů níže nebo pomoci.