Obsah:

Výukový program pro detekci čtyřnohých robotů Jetson Nano: 4 kroky
Výukový program pro detekci čtyřnohých robotů Jetson Nano: 4 kroky

Video: Výukový program pro detekci čtyřnohých robotů Jetson Nano: 4 kroky

Video: Výukový program pro detekci čtyřnohých robotů Jetson Nano: 4 kroky
Video: POKUD TOHLE DĚLÁ VÁŠ PES, TAK BYSTE MĚLI VĚDĚT PROČ 2024, Červen
Anonim
Image
Image

Nvidia Jetson Nano je vývojářská sada, která se skládá ze SoM (System on Module) a referenční nosné desky. Je primárně zaměřen na vytváření vestavěných systémů, které vyžadují vysoký výpočetní výkon pro aplikace strojového učení, strojového vidění a zpracování videa. Podrobnou recenzi si můžete prohlédnout na mém kanálu YouTube.

Nvidia se snaží, aby byl Jetson Nano uživatelsky přívětivý a snadno vyvíjel projekty s co největším počtem. Dokonce spustili malý kurz o tom, jak postavit svého robota s Jetson Nano, několik dní po spuštění desky. Podrobnosti o tomto projektu najdete zde.

Sám jsem však měl s Jetbotem jako projektem několik problémů:

1) Nebylo to pro mě dost EPIC. Jetson Nano je velmi zajímavá deska se skvělými schopnostmi zpracování a vytvoření jednoduchého kolového robota s ní vypadalo jako velmi … podmanivá věc.

2) Výběr hardwaru. Jetbot vyžaduje nějaký hardware, který je drahý/lze jej nahradit jinými alternativami - například pro ovládání používají joystick. Zní to jako zábava, ale opravdu potřebuji k ovládání robota joystick?

Takže hned poté, co se mi dostal do rukou Jetson Nano, jsem začal pracovat na svém vlastním projektu, Jetspideru. Cílem bylo replikovat základní ukázky, které měl Jetbot, ale s běžnějším hardwarem a použitelné pro širší škálu projektů.

Krok 1: Připravte si hardware

Připravte si hardware
Připravte si hardware

Pro tento projekt jsem použil raný prototyp čtyřnásobného robota Zuri od Zoobotics. Leželo to dlouho v laboratoři naší společnosti. Vybavil jsem ho laserovým řezáním dřevěného držáku pro Jetson Nano a držáku fotoaparátu. Jejich design je proprietární, takže pokud chcete pro svého robota Jetson Nano vytvořit něco podobného, můžete se podívat na projekt Meped, což je podobný čtyřnásobek s open-source designem. Ve skutečnosti, protože v naší laboratoři nikdo neměl zdrojový kód pro Zuriho mikrokontrolér (Arduino Mega), použil jsem kód z Mepedu s drobnými úpravami posunu nohou/chodidel.

Použil jsem běžnou webovou kameru kompatibilní s USB Raspberry Pi a Wifi USB dongle.

Hlavním bodem je, že jelikož budeme používat Pyserial pro sériovou komunikaci mezi mikrokontrolérem a Jetson Nano, váš systém může v zásadě používat jakýkoli typ mikrokontroléru, pokud může být propojen s Jetson Nano pomocí sériového kabelu USB. Pokud váš robot používá stejnosměrné motory a ovladač motoru (například na bázi L298P), je možné přímo propojit ovladač motoru s Jetson Nano GPIO. Ale bohužel pro ovládání serva můžete použít pouze jiný mikrokontrolér nebo vyhrazený ovladač serva I2C, protože Jetson Nano nemá hardwarový GPIO PWM.

Abychom to shrnuli, můžete použít typ robota s jakýmkoli mikrokontrolérem, který lze připojit k Jetson Nano pomocí datového kabelu USB. Nahrál jsem kód pro Arduino Mega do úložiště github pro tento tutoriál a část relevantní pro propojení Jetson Nano s Arduino je zde:

if (Serial.available ()) {switch (Serial.read ()) {

{

případ '1':

vpřed();

přestávka;

případ '2':

zadní();

přestávka;

případ '3':

odbočit vpravo();

přestávka;

případ '4':

odbočit vlevo();

přestávka;

Zkontrolujeme, zda jsou k dispozici data, a pokud ano, předáme je do struktury řízení rozvaděčů. Věnujte pozornost tomu, že data ze seriálu přicházejí jako znaky, všimněte si uvozovek kolem čísel 1, 2, 3, 4.

Krok 2: Nainstalujte si nezbytné balíčky

Naštěstí pro nás je výchozí obraz systému Jetson Nano dodáván s mnoha předinstalovanými věcmi (jako OpenCV, TensorRT atd.), Takže stačí nainstalovat několik dalších balíčků, aby kód fungoval a umožnil SSH.

Začněme povolením SSH v případě, že chcete veškerou ostatní práci provádět na dálku.

sudo apt aktualizace

sudo apt install openssh-server

Server SSH se spustí automaticky.

K připojení k počítači Ubuntu přes LAN stačí zadat následující příkaz:

ssh uživatelské jméno@ip_address

Pokud máte počítač se systémem Windows, budete muset nainstalovat klienta SSH, například Putty.

Začněme instalací Python Package Manager (pip) a Pillow pro manipulaci s obrázky.

sudo apt install python3-pip python3-pil

Poté nainstalujeme úložiště Jetbot, protože při zjišťování objektů spoléháme na některé části jeho rámce.

sudo apt install python3-smbus python-pyserial

klon git

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Nakonec klonujte mé úložiště Github pro tento projekt do vaší domovské složky a nainstalujte Flask a některé další balíčky pro vzdálené ovládání robota pomocí webového serveru.

klon git

CD

sudo pip3 install -r requirements -opencv

Stáhněte si předtrénovaný model SSD (Single Shot Detector) z tohoto odkazu a umístěte jej do složky jetspider_demos.

Nyní můžeme vyrazit!

Krok 3: Spusťte kód

Spusťte kód
Spusťte kód

Udělal jsem dvě ukázky pro Jetspider, první je jednoduchá teleopration, velmi podobná té, kterou jsem udělal dříve pro rover Banana Pi a druhá používá TensorRT pro detekci objektů a odesílá příkazy k pohybu přes sériové připojení k mikrokontroléru.

Vzhledem k tomu, že většina kódu teleoprationu je popsána v mém dalším tutoriálu (provedl jsem jen několik drobných vylepšení, přepracování přenosu videa), zaměřím se zde na část Detekce objektů.

Hlavní skript pro následující objekt je object_following.py v jetspider_object_following, pro teleoperaci je spider_teleop.py v jetspider_teleoperation.

Objekt následující skript začíná importem potřebných modulů a deklarováním proměnných a instancí tříd. Poté spustíme webový server Flask s tímto řádkem

app.run (host = '0.0.0.0', threaded = True)

Jakmile v našem webovém prohlížeči otevřeme adresu 0.0.0.0 (localhost) nebo adresu Jetson Nano v síti (lze zkontrolovat pomocí příkazu ifconfig), bude tato funkce spuštěna

def index ():

Vykreslí šablonu webové stránky, kterou máme ve složce šablon. Šablona má v sobě vložený zdroj videa, takže jakmile dokončí načítání, provede se def video_feed ():, které vrátí objekt Response, který je inicializován funkcí generátoru.

Tajemství implementace místních aktualizací (aktualizace obrázku na webové stránce pro náš stream videa) spočívá v použití vícedílné odpovědi. Odpovědi složené z několika částí se skládají ze záhlaví, které obsahuje jeden z typů obsahu vícedílných, následované částmi, oddělenými ohraničujícím znakem a každá má svůj vlastní typ obsahu specifický pro část.

Ve funkci def gen (): implementujeme funkci generátoru do nekonečné smyčky, která zachytí obraz, odešle jej do funkce def execute (img):, čímž se získá obrázek, který bude poté odeslán na webovou stránku.

def execute (img): funkce je místo, kde se odehrává veškerá magie, pořídí obrázek, změní jeho velikost pomocí OpenCV a předá jej „modelu“instance třídy Jetbot ObjectDetector. Vrací seznam detekce a pomocí OpenCV kolem nich kreslíme modré obdélníky a zapisujeme poznámky pomocí třídy detekované objekty. Poté zkontrolujeme, zda je detekován předmět našeho zájmu

Toto číslo (53) můžete změnit na jiné číslo z datové sady CoCo, pokud chcete, aby váš robot sledoval jiné objekty, 53 je jablko. Celý seznam je v souboru catalog.py.

Nakonec, pokud není po dobu 5 sekund detekován žádný předmět, přeneseme znak „5“, aby se robot zastavil nad sériovým číslem. Pokud je objekt nalezen, vypočítáme, jak daleko je od středu obrazu, a podle toho se chováme (pokud je blízko středu, jděte rovně (znak „1“v seriálu), pokud vlevo, jděte doleva atd.). Můžete si hrát s těmito hodnotami a určit to nejlepší pro vaše konkrétní nastavení!

Krok 4: Závěrečné myšlenky

Závěrečné myšlenky
Závěrečné myšlenky

Toto je podstata demo ObjectFollowing, pokud se chcete dozvědět více o streamování videa z webového serveru Flask, můžete se podívat na tento skvělý tutoriál od Miguela Grinberga.

Zde se také můžete podívat na notebook Nvidia Jetbot Object Detection.

Doufám, že moje implementace ukázek Jetbot pomůže sestavit vašeho robota pomocí rámce Jetbot. Neimplementoval jsem demo vyhýbání se překážkám, protože si myslím, že volba modelu nepřinese dobré výsledky vyhýbání se překážkám.

Pokud máte nějaké otázky, přidejte si mě na LinkedId a přihlaste se k odběru mého kanálu YouTube, abyste byli informováni o zajímavějších projektech zahrnujících strojové učení a robotiku.

Doporučuje: