Obsah:

Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps
Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps

Video: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps

Video: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps
Video: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, Jún
Anonim
Image
Image

Nvidia Jetson Nano je vývojárska súprava, ktorá sa skladá zo SoM (systém v module) a referenčnej nosnej dosky. Je primárne zameraný na vytváranie vstavaných systémov, ktoré vyžadujú vysoký spracovateľský výkon pre aplikácie strojového učenia, strojového videnia a spracovania videa. Podrobnú recenziu si môžete pozrieť na mojom kanáli YouTube.

Nvidia sa snaží, aby bol Jetson Nano užívateľsky prívetivý a čo najľahšie vyvíjajúci projekty. Dokonca niekoľko dní po uvedení dosky na trh spustili malý kurz o tom, ako postaviť svojho robota s Jetson Nano. Podrobnosti o projekte nájdete tu.

Sám som však mal s projektom Jetbot ako projektom niekoľko problémov:

1) Nebolo to pre mňa dosť EPIC. Jetson Nano je veľmi zaujímavá doska so skvelými schopnosťami spracovania a vyrobiť si s ňou jednoduchého robota na kolieskach sa mi zdalo ako … ohromujúca vec.

2) Voľba hardvéru. Jetbot vyžaduje hardvér, ktorý je drahý/dá sa nahradiť inými alternatívami - napríklad na diaľkové ovládanie používa joystick. Znie to ako zábava, ale skutočne na ovládanie robota potrebujem joystick?

Hneď potom, ako sa mi dostal do rúk Jetson Nano, som začal pracovať na vlastnom projekte Jetspider. Cieľom bolo replikovať základné ukážky, ktoré mal Jetbot, ale s bežnejším hardvérom a použiteľné pre širšiu škálu projektov.

Krok 1: Pripravte si hardvér

Pripravte si hardvér
Pripravte si hardvér

Na tento projekt som použil raný prototyp štvornásobného robota Zuri od spoločnosti Zoobotics. Ležalo to dlho v laboratóriu našej spoločnosti. Vybavil som ho laserom rezaným dreveným držiakom pre Jetson Nano a držiakom na fotoaparát. Ich dizajn je patentovaný, takže ak chcete pre svojho robota Jetson Nano vytvoriť niečo podobné, môžete sa pozrieť na projekt Meped, ktorý je podobným štvornásobným dizajnom s otvoreným zdrojovým kódom. V skutočnosti, pretože nikto nemal v našom laboratóriu zdrojový kód pre Zuriho mikrokontrolér (Arduino Mega), použil som kód z Mepedu s malými úpravami posunu nôh/chodidiel.

Použil som bežnú webovú kameru kompatibilnú s USB Raspberry Pi a Wifi USB kľúč.

Hlavným bodom je, že keďže budeme používať Pyserial na sériovú komunikáciu medzi mikrokontrolérom a Jetson Nano, váš systém môže v zásade používať akýkoľvek typ mikrokontroléra, pokiaľ bude možné ho prepojiť s Jetson Nano pomocou sériového kábla USB. Ak váš robot používa jednosmerné motory a ovládač motora (napríklad na báze L298P), je možné priamo prepojiť ovládač motora s Jetson Nano GPIO. Ale bohužiaľ, na ovládanie servov môžete použiť iba iný mikrokontrolér alebo vyhradený ovládač serva I2C, pretože Jetson Nano nemá hardvér GPIO PWM.

Stručne povedané, typ robota môžete použiť s akýmkoľvek mikrokontrolérom, ktorý je možné pripojiť k Jetson Nano pomocou dátového kábla USB. Nahral som kód pre Arduino Mega do úložiska github pre tento tutoriál a časť relevantná pre prepojenie Jetson Nano s Arduino je tu:

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

{

prípad „1“:

dopredu ();

prestávka;

prípad „2“:

späť();

prestávka;

prípad „3“:

odbočte vpravo();

prestávka;

prípad „4“:

odbočiť vľavo();

prestávka;

Skontrolujeme, či sú k dispozícii údaje, a ak áno, odovzdáme ich do riadiacej štruktúry prepínača. Dávajte pozor, aby údaje zo seriálu boli ako znaky, všimnite si jednoduchú úvodzovku okolo číslic 1, 2, 3, 4.

Krok 2: Nainštalujte potrebné balíky

Našťastie pre nás, predvolený obraz systému Jetson Nano je dodávaný s mnohými predinštalovanými vecami (ako OpenCV, TensorRT atď.), Takže stačí nainštalovať niekoľko ďalších balíkov, aby kód fungoval a povolil SSH.

Začneme tým, že povolíme SSH v prípade, že budete chcieť vykonávať všetku ostatnú prácu na diaľku.

sudo apt aktualizácia

sudo apt install openssh-server

Server SSH sa spustí automaticky.

Na pripojenie k počítaču Ubuntu cez LAN stačí zadať nasledujúci príkaz:

ssh užívateľské meno@ip_address

Ak máte počítač so systémom Windows, budete si musieť nainštalovať klienta SSH, napríklad Putty.

Začnime inštaláciou správcu balíkov Python (pip) a Pillow na manipuláciu s obrázkami.

sudo apt install python3-pip python3-pil

Potom nainštalujeme úložisko Jetbot, pretože pri detekcii objektov sa spoliehame na niektoré časti jeho rámca.

sudo apt install python3-smbus python-pyserial

klon git

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Nakoniec klonujte moje úložisko Github pre tento projekt do vášho domovského priečinka a nainštalujte Flask a niektoré ďalšie balíčky na diaľkové ovládanie robota pomocou webového servera.

klon git

cd

sudo pip3 install -r requirements -opencv

Stiahnite si predtrénovaný model SSD (Single Shot Detector) z tohto odkazu a umiestnite ho do priečinka jetspider_demos.

Teraz môžeme ísť!

Krok 3: Spustite kód

Spustite kód
Spustite kód

Vytvoril som dve ukážky pre Jetspider, prvá je jednoduchá teleopration, veľmi podobná tej, ktorú som predtým urobil pre rover Banana Pi, a druhá používa na detekciu objektov TensorRT a odosiela pohybové príkazy cez sériové pripojenie k mikrokontroléru..

Pretože väčšina kódu teleoprácie je popísaná v mojom inom návode (urobil som len niekoľko drobných vylepšení, aktualizujem prenos videa), zameriam sa tu na časť Detekcia objektov.

Hlavný skript pre nasledujúce objekty je object_following.py v jetspider_object_following, pre teleoperáciu je spider_teleop.py v jetspider_teleoperation.

Skript nasledujúci po objekte začína importom potrebných modulov a deklarovaním premenných a inštancií tried. Potom spustíme webový server Flask s týmto riadkom

app.run (hostiteľ = '0.0.0.0', so závitom = True)

Hneď ako v našom webovom prehliadači otvoríme adresu 0.0.0.0 (localhost) alebo adresu Jetson Nano v sieti (dá sa skontrolovať pomocou príkazu ifconfig), táto funkcia sa spustí.

def index ():

Vykreslí šablónu webovej stránky, ktorú máme v priečinku šablón. Šablóna má v sebe vložený zdroj videa, takže akonáhle sa dokončí načítanie, vykoná sa def video_feed ():, ktorý vráti objekt Response, ktorý je inicializovaný funkciou generátora.

Tajomstvo implementácie aktualizácií na mieste (aktualizácia obrázku na webovej stránke pre náš stream videa) je použitie odpovede z viacerých častí. Viacdielne odpovede pozostávajú z hlavičky, ktorá obsahuje jeden z typov obsahu z viacerých častí, za ktorou nasledujú časti oddelené hraničnou značkou a každá z nich má svoj vlastný typ obsahu špecifický pre časť.

Vo funkcii def gen (): implementujeme funkciu generátora do nekonečnej slučky, ktorá zachytí obrázok, odošle ho do funkcie def execute (img): a poskytne obrázok, ktorý sa má potom odoslať na webovú stránku.

def execute (img): funkcia je miesto, kde sa deje všetko kúzlo, urobí obrázok, zmení jeho veľkosť pomocou OpenCV a pošle ho „modelu“inštancie triedy Jetbot ObjectDetector. Vráti vráti zoznam detekcií a pomocou OpenCV okolo nich nakreslíme modré obdĺžniky a napíšeme anotácie s triedou detekovanou objektom. Potom skontrolujeme, či je detekovaný predmet nášho záujmumatching_detections = [d pre d v detekciách [0] ak d ['štítok'] == 53]

Toto číslo (53) môžete zmeniť na iné číslo z množiny údajov CoCo, ak chcete, aby váš robot sledoval iné objekty, 53 je jablko. Celý zoznam je v súbore catalog.py.

Nakoniec, ak nie je po dobu 5 sekúnd zistený žiadny predmet, vyšleme znak „5“, aby sa robot zastavil nad sériovým číslom. Ak je objekt nájdený, vypočítame, ako ďaleko je od stredu obrazu, a podľa toho sa budeme správať (ak je blízko stredu, choďte rovno (znak „1“na sériovom čísle), ak je vľavo, choďte doľava atď.). Môžete sa s týmito hodnotami pohrať a určiť to najlepšie pre vaše konkrétne nastavenie!

Krok 4: Záverečné myšlienky

Záverečné myšlienky
Záverečné myšlienky

Toto je podstata ukážky ObjectFollowing, ak sa chcete dozvedieť viac o streamovaní videa na webovom serveri Flask, môžete sa pozrieť na tento skvelý návod od Miguela Grinberga.

Môžete sa tu tiež pozrieť na notebook Nvidia Jetbot Object Detection.

Dúfam, že moje implementácie ukážok Jetbot pomôžu zostaviť vášho robota pomocou rámca Jetbot. Neimplementoval som demo vyhýbania sa prekážkam, pretože si myslím, že výber modelu neprinesie dobré výsledky vyhýbania sa prekážkam.

Ak máte akékoľvek otázky, pridajte si ma na LinkedId a prihláste sa na odber môjho kanála YouTube, aby ste boli informovaní o zaujímavejších projektoch zahŕňajúcich strojové učenie a robotiku.

Odporúča: