Innehållsförteckning:
- Steg 1: Förbered din maskinvara
- Steg 2: Installera de nödvändiga paketen
- Steg 3: Kör koden
- Steg 4: Sista tankarna
Video: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
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ö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
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
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:
Raspberry Pi Object Detection: 7 steg
Raspberry Pi Object Detection: Den här guiden innehåller steg-för-steg-instruktioner för hur du konfigurerar TensorFlows Object Detection API på Raspberry Pi. Genom att följa stegen i den här guiden kommer du att kunna använda din Raspberry Pi för att utföra objektdetektering på livevideo från en P
RASPBERRY PI Pi OBJECT DETECTION WITH MULTIPLE CAMERA'S: 3 Steps
RASPBERRY PI Pi OBJEKTDETEKTION MED MULTIPLE CAMERAS: Jag ska hålla introt kort, eftersom själva titeln antyder vad huvudsyftet med den instruerbara är. I denna steg-för-steg-instruktion kommer jag att förklara hur du ansluter flera kameror som 1-pi-kamera och minst en USB-kamera eller 2 USB-kameror.
[DIY] Spider Robot (Quad Robot, Quadruped): 14 steg (med bilder)
[DIY] Spider Robot (Quad Robot, Quadruped): Om du behöver extra stöd från mig är det bättre att ge en lämplig donation till mig: http: //paypal.me/RegisHsu2019-10-10 uppdatering: Den nya kompilatorn kommer att orsaka beräkningsproblemet för flytande tal. Jag har redan ändrat koden. 2017-03-26
Trafikmönsteranalysator med Live Object Detection: 11 steg (med bilder)
Trafikmönsteranalysator som använder liveobjektdetektering: I dagens värld är trafikljus avgörande för en säker väg. Men många gånger kan trafikljus vara irriterande i situationer där någon närmar sig ljuset precis som det blir rött. Detta slösar bort tid, särskilt om ljuset är för
Visual Object Detection With a Camera (TfCD): 15 steg (med bilder)
Visual Object Detection With a Camera (TfCD): Kognitiva tjänster som kan känna igen känslor, ansikten hos människor eller enkla objekt är för närvarande fortfarande i ett tidigt utvecklingsstadium, men med maskininlärning utvecklas denna teknik alltmer. Vi kan förvänta oss att se mer av denna magi i