Obsah:
- Krok 1: Připravte si hardware
- Krok 2: Nainstalujte si nezbytné balíčky
- Krok 3: Spusťte kód
- Krok 4: Závěrečné myšlenky
Video: Výukový program pro detekci čtyřnohých robotů Jetson Nano: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
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
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
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
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:
Výukový program pro robota Arduino: 3 kroky
Arduino Robot Tutorial: Hledal jsem v Instructable databázi návod pro oficiální Arduino Robot, ale nenašel jsem! Takže jsem naštval tento návod, abych pomohl ostatním, kteří potřebovali trochu pomoci s jejich novým robotem Arduino
Výukový program pro pokročilou instalaci firmwaru M5Stack MultiApp: 3 kroky
Výukový program pro pokročilou instalaci firmwaru M5Stack MultiApp: Jsem velkým fanouškem modulu M5Stack ESP32. Vypadá to velmi profesionálně, na rozdíl od mých obvyklých „krysích hnízd“prototypových desek a vodičů! U většiny vývojových desek ESP32 můžete spustit pouze jeden program / aplikaci najednou, ale nyní na M5Stack si můžete vybrat
Výukový program pro stavbu mořské roviny RC mořská panna: 4 kroky
Sea Plane Build Tutorial RC Mermaid: Stylové krásné mořské letadlo vyrobené z depronu je skvělé létající letadlo, které lze spustit ručně nebo jej vzlétnout z travnaté půdy a snadněji z vodní hladiny. Velmi snadno se staví a létání vás bude bavit
Výukový program Arduino pro detekci světla: 3 kroky (s obrázky)
Výukový program Arduino pro detekci světla: Po dokončení tohoto tutoriálu se naučíte, jak můžete detekovat změny úrovní světla kolem vás. Díly pro tento projekt poskytl Kuman. Najdete je v jejich startovací sadě Arduino UNO
Výukový program pro štít ovladače motoru L298 2Amp pro Arduino: 6 kroků
Výukový program pro štítový ovladač motoru L298 2Amp pro Arduino: Popis L298 2Amp Motor Driver Shield pro Arduino je založen na integrovaném obvodu ovladače motoru L298, což je ovladač můstku motoru s plným můstkem. Může pohánět dva samostatné 2A DC motory nebo 1 2A krokový motor. Rychlost a směry motoru lze ovládat samostatně