Innholdsfortegnelse:

Opplæring i Jetson Nano Quadruped Robot Object Detection: 4 trinn
Opplæring i Jetson Nano Quadruped Robot Object Detection: 4 trinn

Video: Opplæring i Jetson Nano Quadruped Robot Object Detection: 4 trinn

Video: Opplæring i Jetson Nano Quadruped Robot Object Detection: 4 trinn
Video: БУДУЩЕЕ ЗДЕСЬ! Эти 7 машин СКОРО будут летать вокруг вас 2024, Juni
Anonim
Image
Image

Nvidia Jetson Nano er et utviklerpakke, som består av et SoM (System on Module) og et referansebærerkort. Det er først og fremst målrettet for å lage innebygde systemer som krever høy prosessorkraft for maskinlæring, maskinsyn og videobehandlingsapplikasjoner. Du kan se detaljert anmeldelse av den på min YouTube -kanal.

Nvidia har prøvd å gjøre Jetson Nano så brukervennlig og lett å utvikle prosjekter som mulig. De lanserte til og med et lite kurs om hvordan du bygger roboten din med Jetson Nano, dager etter at brettet ble lansert. Du finner detaljene om det prosjektet her.

Selv hadde jeg imidlertid noen problemer med Jetbot som et prosjekt:

1) Det var ikke EPISK nok for meg. Jetson Nano er et veldig interessant brett med gode prosessorkapasiteter og å lage en enkel hjulrobot med det virket bare som en veldig … underwhelming ting å gjøre.

2) Maskinvarevalget. Jetbot krever noe maskinvare som er dyrt/kan erstattes med andre alternativer - for eksempel bruker de joystick for teleoperasjon. Høres ut som morsomt, men trenger jeg virkelig en joystick for å kontrollere en robot?

Så umiddelbart etter at jeg fikk hendene på Jetson Nano begynte jeg å jobbe med mitt eget prosjekt, en Jetspider. Tanken var å gjenskape grunnleggende demoer Jetbot hadde, men med mer vanlig maskinvare og gjeldende for et større utvalg av prosjekter.

Trinn 1: Forbered maskinvaren

Forbered maskinvaren
Forbered maskinvaren

For dette prosjektet brukte jeg en tidlig prototype av Zuri firdobbel robot, laget av Zoobotics. Den lå lenge i selskapets laboratorium. Jeg utstyrte den med et laserskåret trefeste for Jetson Nano og et kamerafeste. Designet deres er proprietær, så hvis du vil lage noe lignende for Jetson Nano-roboten din, kan du se på Meped-prosjektet, som er en lignende quadruped med en åpen kildekode-design. Faktisk, siden ingen hadde kildekoden for Zuris mikrokontroller (Arduino Mega) i laboratoriet vårt, brukte jeg koden fra Meped med noen mindre justeringer i ben/føtter forskjøvet.

Jeg brukte vanlig USB Raspberry Pi-kompatibel webkamera og en Wifi USB-dongle.

Hovedpoenget er at siden vi kommer til å bruke Pyserial for seriell kommunikasjon mellom mikrokontroller og Jetson Nano, kan systemet i hovedsak bruke hvilken som helst type mikrokontroller, så lenge det kan være koblet til Jetson Nano med USB seriell kabel. Hvis roboten din bruker likestrømsmotorer og en motordriver (for eksempel L298P-basert), er det mulig å koble motordriveren direkte til Jetson Nano GPIO. Men dessverre, for å kontrollere servoer kan du bare bruke en annen mikrokontroller eller en dedikert I2C servodriver, siden Jetson Nano ikke har maskinvare GPIO PWM.

For å oppsummere, kan du bruke robottype med hvilken som helst mikrokontroller som kan kobles til Jetson Nano ved hjelp av USB -datakabel. Jeg lastet opp koden for Arduino Mega til github -depotet for denne opplæringen, og delen som er relevant for å koble Jetson Nano til Arduino er her:

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

{

sak '1':

framover();

gå i stykker;

sak '2':

tilbake();

gå i stykker;

sak '3':

ta til høyre();

gå i stykker;

sak '4':

ta til venstre();

gå i stykker;

Vi sjekker om det er tilgjengelige data, og hvis det er det, sender vi dem videre til kontrollstrukturen for bryterhuset. Vær oppmerksom på at data fra serien kommer som tegn, legg merke til det enkle anførselstegnet rundt tallene 1, 2, 3, 4.

Trinn 2: Installer de nødvendige pakkene

Heldigvis for oss kommer standard Jetson Nano-systembilde med mange ting forhåndsinstallert (som OpenCV, TensorRT, osv.), Så vi trenger bare å installere et par andre pakker for å få koden til å fungere og aktivere SSH.

La oss starte med å aktivere SSH hvis du vil gjøre alt resten av arbeidet eksternt.

sudo apt oppdatering

sudo apt installer openssh-server

SSH -serveren starter automatisk.

For å koble til Ubuntu -maskinen din via LAN trenger du bare å skrive inn følgende kommando:

ssh brukernavn@ip_address

Hvis du har en Windows -maskin, må du installere SSH -klienten, for eksempel Putty.

La oss starte med å installere Python Package Manager (pip) og Pillow for bildemanipulering.

sudo apt installer python3-pip python3-pil

Deretter installerer vi Jetbot -depotet, siden vi er avhengige av noen deler av rammeverket for å utføre gjenkjenning av objekter.

sudo apt installer python3-smbus python-pyserial

git-klon

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py installere

Til slutt kloner Github -depotet mitt for dette prosjektet til hjemmemappen din og installer Flask og noen andre pakker for robotens fjernkontroll ved hjelp av webserver.

git -klon

cd

sudo pip3 install -r krav -opencv

Last ned den forutdannede SSD -modellen (Single Shot Detector) fra denne lenken og legg den i jetspider_demos -mappen.

Nå er vi godt i gang!

Trinn 3: Kjør koden

Kjør koden
Kjør koden

Jeg lagde to demoer for Jetspider, den første er en enkel teleopration, veldig lik den jeg gjorde tidligere for Banana Pi -roveren, og den andre bruker TensorRT for gjenkjenning av objekter og sender bevegelseskommandoene over den serielle forbindelsen til mikrokontrolleren.

Siden det meste av teleoprasjonskoden er beskrevet i min andre opplæring (jeg har bare gjort noen mindre justeringer, regraderer videooverføring) her, vil jeg fokusere på objektdeteksjon -delen.

Hovedskript for objekt følgende er object_following.py i jetspider_object_following, for teleoperation er spider_teleop.py i jetspider_teleoperation.

Objektet etter skriptet starter med å importere de nødvendige modulene og deklarere variabler og klasseforekomster. Deretter starter vi Flask webserver med denne linjen

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

Så snart vi åpner 0.0.0.0 (localhost) -adressen i nettleseren vår eller Jetson Nano -adressen på nettverket (kan sjekke med ifconfig -kommandoen), blir denne funksjonen utført

def index ():

Det gjengir websidemalen vi har i malmappen. Malen har en videokilde innebygd i den, så når den er lastet inn, def video_feed (): vil bli utført, som returnerer et responsobjekt som initialiseres med generatorfunksjonen.

Hemmeligheten for å implementere oppdateringer på stedet (oppdatering av bildet på nettsiden for videostrømmen vår) er å bruke et flerdelt svar. Flerpartssvar består av en overskrift som inneholder en av innholdstypene for flere deler, etterfulgt av delene, atskilt med en grensemarkør og hver med sin egen delspesifikke innholdstype.

I def gen (): funksjon implementerer vi generatorfunksjonen i en uendelig sløyfe som fanger bildet, sender det til def execute (img): function, noe som gir et bilde som skal sendes til websiden etter det.

def execute (img): funksjonen er hvor all magien skjer, den tar et bilde, endrer størrelsen på det med OpenCV og sender det til Jetbot ObjectDetector klasse forekomst "modell". Den returnerer listen over deteksjoner, og vi bruker OpenCV til å tegne blå rektangler rundt dem og skrive merknader med objektdetektert klasse. Etter det sjekker vi om det er et objekt av vår interesse detectmatching_detections = [d for d i detections [0] if d ['label'] == 53]

Du kan endre dette tallet (53) til et annet nummer fra CoCo -datasettet hvis du vil at roboten skal følge andre objekter, 53 er et eple. Hele listen er i kategorier.py -fil.

Til slutt, hvis det ikke er oppdaget noe objekt i 5 sekunder, sender vi karakteren "5" for at roboten skal stoppe over serien. Hvis objektet blir funnet, beregner vi hvor langt det er fra midten av bildet og handler deretter (hvis du er i nærheten av midten, går du rett (tegn "1" på serien), til venstre, går du til venstre osv.). Du kan leke med disse verdiene for å finne det beste for ditt spesielle oppsett!

Trinn 4: Avsluttende tanker

Siste tanker
Siste tanker

Dette er kjernen i ObjectFollowing -demoen, hvis du vil vite mer om Flask webserver videostreaming, kan du ta en titt på denne flotte opplæringen av Miguel Grinberg.

Du kan også se på den bærbare Nvidia Jetbot Object Detection her.

Jeg håper implementeringene av Jetbot -demoer vil bidra til å bygge roboten din ved hjelp av Jetbot -rammeverk. Jeg implementerte ikke demo for hindring av hindringer, siden jeg tror valget av modellen ikke vil gi gode hindringsunngåelsesresultater.

Legg til meg på LinkedId hvis du har spørsmål, og abonner på YouTube -kanalen min for å bli varslet om flere interessante prosjekter som involverer maskinlæring og robotikk.

Anbefalt: