Innehållsförteckning:

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

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

Video: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steg
Video: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, Juni
Anonim
Image
Image

Nvidia Jetson Nano är ett utvecklarpaket som består av ett SoM (System on Module) och en referensbärarkort. Det är främst inriktat på att skapa inbäddade system som kräver hög processorkraft för maskininlärning, maskinsyn och videobearbetningsprogram. Du kan se detaljerad recension för det på min YouTube -kanal.

Nvidia har försökt göra Jetson Nano så användarvänlig och lätt att utveckla projekt som möjligt. De lanserade till och med en liten kurs om hur du bygger din robot med Jetson Nano, dagar efter att styrelsen lanserades. Du hittar detaljerna om det projektet här.

Jag hade dock själv några problem med Jetbot som ett projekt:

1) Det var inte tillräckligt EPISKT för mig. Jetson Nano är en mycket intressant bräda med bra bearbetningsmöjligheter och att göra en enkel hjulrobot med den verkade bara som en mycket … underwhelming sak att göra.

2) Hårdvaruvalet. Jetbot kräver viss hårdvara/som kan ersättas med andra alternativ - till exempel använder de joystick för teleoperation. Låter som kul, men behöver jag verkligen en joystick för att styra en robot?

Så, direkt efter att jag fått tag på Jetson Nano började jag arbeta med mitt eget projekt, en Jetspider. Tanken var att replikera grundläggande demos som Jetbot hade, men med vanligare hårdvara och tillämplig på ett större antal projekt.

Steg 1: Förbered din maskinvara

Förbered din hårdvara
Förbered din hårdvara

För detta projekt använde jag en tidig prototyp av Zuri fyrbandsrobot, tillverkad av Zoobotics. Den låg länge i vårt företags labb. Jag utrustade den med ett laserskuret träfäste för Jetson Nano och ett kamerafäste. Deras design är proprietär, så om du vill skapa något liknande för din Jetson Nano-robot kan du titta på Meped-projektet, som är en liknande fyrfaldig med en öppen källkod. Faktum är att eftersom ingen hade källkoden för Zuris mikrokontroller (Arduino Mega) i vårt labb använde jag koden från Meped med några mindre justeringar i ben/fötter förskjutna.

Jag använde vanlig USB Raspberry Pi-kompatibel webbkamera och en Wifi USB-dongel.

Huvudpunkten är att eftersom vi kommer att använda Pyserial för seriell kommunikation mellan mikrokontroller och Jetson Nano, kan ditt system i princip använda vilken typ av mikrokontroller som helst, så länge det kan anslutas till Jetson Nano med USB -seriekabel. Om din robot använder likströmsmotorer och en motordrivrutin (till exempel L298P-baserad) är det möjligt att direkt ansluta motordrivrutinen med Jetson Nano GPIO. Men tyvärr, för att styra servon kan du bara använda en annan mikrokontroller eller en dedikerad I2C servodrivrutin, eftersom Jetson Nano inte har hårdvara GPIO PWM.

För att sammanfatta kan du använda en typ av robot med alla mikrokontroller som kan anslutas till Jetson Nano med USB -datakabel. Jag laddade upp koden för Arduino Mega till github -förvaret för denna handledning och den del som är relevant för att koppla ihop Jetson Nano med Arduino är här:

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

{

fall 1':

fram();

ha sönder;

fall '2':

tillbaka();

ha sönder;

fall '3':

sväng höger();

ha sönder;

fall '4':

sväng vänster();

ha sönder;

Vi kontrollerar om det finns data tillgängliga, och om det är det, vidarebefordrar du det till switch-case-kontrollstrukturen. Var uppmärksam på att data från serien kommer som tecken, märk det enda citattecknet runt siffrorna 1, 2, 3, 4.

Steg 2: Installera de nödvändiga paketen

Lyckligtvis för oss kommer standard Jetson Nano-systembild med många förinstallerade saker (som OpenCV, TensorRT, etc.), så vi behöver bara installera ett par andra paket för att få koden att fungera och aktivera SSH.

Låt oss börja med att aktivera SSH om du vill göra resten av arbetet på distans.

sudo apt uppdatering

sudo apt installera openssh-server

SSH -servern startar automatiskt.

För att ansluta till din Ubuntu -maskin via LAN behöver du bara ange följande kommando:

ssh användarnamn@ip_address

Om du har en Windows -maskin måste du installera SSH -klienten, till exempel Putty.

Låt oss börja med att installera Python Package Manager (pip) och Pillow för bildmanipulation.

sudo apt installera python3-pip python3-pil

Sedan installerar vi Jetbot -förvaret, eftersom vi förlitar oss på vissa delar av ramverket för att utföra objektdetektering.

sudo apt installera python3-smbus python-pyserial

git-klon

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py installera

Slutligen klona mitt Github -arkiv för detta projekt till din hemmapp och installera Flask och några andra paket för robotens fjärrkontroll med webbserver.

git -klon

CD

sudo pip3 installera -r krav -opencv

Ladda ner den förutbildade SSD -modellen (Single Shot Detector) från den här länken och placera den i mappen jetspider_demos.

Nu är vi igång!

Steg 3: Kör koden

Kör koden
Kör koden

Jag gjorde två demos för Jetspider, den första är en enkel teleopration, mycket lik den jag gjorde tidigare för Banana Pi -rovern och den andra använder TensorRT för objektdetektering och skickar rörelsekommandona över den seriella anslutningen till mikrokontrollen.

Eftersom det mesta av teleoprationskoden beskrivs i min andra handledning (jag gjorde bara några mindre tweaks, regraderade videoöverföring) här kommer jag att fokusera på objektdetekteringsdelen.

Huvudskript för objektföljande är object_following.py i jetspider_object_following, för teleoperation är spider_teleop.py i jetspider_teleoperation.

Objektet efter skriptet börjar med att importera nödvändiga moduler och deklarera variabler och klassinstanser. Sedan startar vi Flask -webbservern med den här raden

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

Så snart vi öppnar 0.0.0.0 (localhost) -adress i vår webbläsare eller Jetson Nano -adress i nätverket (kan kontrollera med ifconfig -kommandot), kommer denna funktion att köras

def index ():

Det gör webbsidemallen vi har i mallar -mappen. Mallen har en videokälla inbäddad i den, så när den har lästs in kommer def video_feed (): att köras, som returnerar ett svarsobjekt som initieras med generatorfunktionen.

Hemligheten för att implementera uppdateringar på plats (uppdatera bild på webbsidan för vår videoström) är att använda ett flerdelat svar. Flerdelars svar består av en rubrik som innehåller en av flerdelars innehållstyper, följt av delarna, åtskilda av en gränsmarkör och var och en har sin egen delspecifika innehållstyp.

I def gen (): funktion implementerar vi generatorfunktionen i en oändlig slinga som fångar bilden, skickar den till def execute (img): function, vilket ger en bild som ska skickas till webbsidan efter det.

def execute (img): funktionen är där all magi händer, den tar en bild, ändrar storlek på den med OpenCV och skickar den till Jetbot ObjectDetector -klassinstans "modell". Den returnerar listan över detektioner och vi använder OpenCV för att rita blå rektanglar runt dem och skriva kommentarer med objektdetekterad klass. Efter det kontrollerar vi om det finns ett objekt av vårt intresse detectmatching_detections = [d för d i detektioner [0] om d ['label'] == 53]

Du kan ändra det numret (53) till ett annat nummer från CoCo -dataset om du vill att din robot ska följa andra objekt, 53 är ett äpple. Hela listan finns i kategorier.py -fil.

Slutligen, om det inte finns något objekt detekterat på 5 sekunder, sänder vi tecknet "5" för roboten att stanna över serien. Om objektet hittas beräknar vi hur långt det är från mitten av bilden och agerar därefter (om det är nära mitten, gå rakt (tecken "1" på serien), om det är till vänster, gå till vänster osv). Du kan spela med dessa värden för att bestämma det bästa för just din inställning!

Steg 4: Sista tankarna

Slutgiltiga tankar
Slutgiltiga tankar

Detta är kärnan i ObjectFollowing -demon, om du vill veta mer om Flask webserver videoströmning kan du ta en titt på denna fantastiska handledning av Miguel Grinberg.

Du kan också titta på anteckningsboken Nvidia Jetbot Object Detection här.

Jag hoppas att mina implementeringar av Jetbot -demos hjälper till att bygga din robot med Jetbot -ramverk. Jag genomförde inte demo för att undvika hinder, eftersom jag tror att valet av modell inte kommer att ge bra hinder för att undvika hinder.

Lägg till mig på LinkedId om du har några frågor och prenumerera på min YouTube -kanal för att få meddelanden om mer intressanta projekt som involverar maskininlärning och robotik.

Rekommenderad: