Indholdsfortegnelse:

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

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

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

Nvidia Jetson Nano er et udviklerkit, der består af et SoM (System on Module) og et referencebærerkort. Det er primært målrettet til oprettelse af integrerede systemer, der kræver høj processorkraft til maskinlæring, maskinsyn og videobehandlingsapplikationer. Du kan se detaljeret anmeldelse af det på min YouTube -kanal.

Nvidia har forsøgt at gøre Jetson Nano så brugervenlig og let at udvikle projekter med som muligt. De lancerede endda et lille kursus om, hvordan du bygger din robot med Jetson Nano, dage efter at tavlen blev lanceret. Du kan finde detaljerne om det projekt her.

Jeg havde dog selv et par problemer med Jetbot som et projekt:

1) Det var ikke EPISK nok for mig. Jetson Nano er et meget interessant bræt med gode behandlingsevner og at lave en simpel hjulrobot med det virkede bare som en meget … underwhelming ting at gøre.

2) Hardwarevalget. Jetbot kræver noget hardware, der er dyrt/kan erstattes med andre alternativer - for eksempel bruger de joystick til teleoperation. Det lyder som sjovt, men har jeg virkelig brug for et joystick til at styre en robot?

Så umiddelbart efter jeg havde fået fingrene i Jetson Nano begyndte jeg at arbejde på mit eget projekt, en Jetspider. Ideen var at replikere grundlæggende demoer, Jetbot havde, men med mere almindelig hardware og anvendelig til en bredere vifte af projekter.

Trin 1: Forbered din hardware

Forbered din hardware
Forbered din hardware

Til dette projekt brugte jeg en tidlig prototype af Zuri quadruped robot, fremstillet af Zoobotics. Den lå længe i vores virksomheds laboratorium. Jeg udstyrede den med et laserskåret træbeslag til Jetson Nano og et kameraholder. Deres design er proprietært, så hvis du vil oprette noget lignende til din Jetson Nano-robot, kan du kigge på Meped-projektet, som er en lignende quadruped med et open source-design. Faktisk, da ingen havde kildekoden til Zuris mikrokontroller (Arduino Mega) i vores laboratorium, brugte jeg koden fra Meped med nogle mindre justeringer i ben/fødder forskudt.

Jeg brugte almindelig USB Raspberry Pi-kompatibel web-cam og en Wifi USB-dongle.

Hovedpunktet er, at da vi kommer til at bruge Pyserial til seriel kommunikation mellem mikrokontroller og Jetson Nano, kan dit system i det væsentlige bruge enhver form for mikrokontroller, så længe det kan have grænseflade med Jetson Nano med et USB serielt kabel. Hvis din robot bruger jævnstrømsmotorer og en motordriver (f.eks. L298P-baseret), er det muligt direkte at koble motordriveren sammen med Jetson Nano GPIO. Men desværre til styring af servoer kan du kun bruge en anden mikrokontroller eller en dedikeret I2C servodriver, da Jetson Nano ikke har hardware GPIO PWM.

For at opsummere kan du bruge robot type med enhver mikrokontroller, der kan tilsluttes Jetson Nano ved hjælp af USB -datakabel. Jeg uploadede koden til Arduino Mega til github -opbevaringsstedet for denne vejledning, og den del, der er relevant for grænsefladen mellem Jetson Nano og Arduino, er her:

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

{

tilfælde '1':

frem();

pause;

tilfælde '2':

tilbage();

pause;

sag '3':

Drej til højre();

pause;

sag '4':

Drej til venstre();

pause;

Vi kontrollerer, om der er tilgængelige data, og hvis det er tilfældet, skal de videregives til switch-case-kontrolstrukturen. Vær opmærksom på, at data fra serien følger som tegn, bemærk det enkelte anførselstegn omkring tallene 1, 2, 3, 4.

Trin 2: Installer de nødvendige pakker

Heldigvis for os kommer der standard Jetson Nano-systembillede med mange ting forudinstalleret (som OpenCV, TensorRT osv.), Så vi behøver kun at installere et par andre pakker for at få koden til at fungere og aktivere SSH.

Lad os starte med at aktivere SSH, hvis du vil udføre alt resten af arbejdet eksternt.

sudo apt opdatering

sudo apt installerer openssh-server

SSH -serveren starter automatisk.

For at oprette forbindelse til din Ubuntu -maskine via LAN skal du kun indtaste følgende kommando:

ssh brugernavn@ip_address

Hvis du har en Windows -maskine, skal du installere SSH -klient, f.eks. Putty.

Lad os starte med at installere Python Package Manager (pip) og Pillow til billedmanipulation.

sudo apt installere python3-pip python3-pil

Derefter installerer vi Jetbot -depot, da vi er afhængige af nogle dele af dets ramme for at udføre objektdetektering.

sudo apt installere python3-smbus python-pyserial

git-klon

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py installation

Klon endelig mit Github -lager til dette projekt til din hjemmemappe og installer Flask og nogle andre pakker til robotens fjernbetjening ved hjælp af webserver.

git -klon

cd

sudo pip3 install -r krav -opencv

Download den foruddannede SSD (Single Shot Detector) -model fra dette link, og placer den i jetspider_demos -mappen.

Nu er vi godt i gang!

Trin 3: Kør koden

Kør koden
Kør koden

Jeg lavede to demoer til Jetspider, den første er en simpel teleopration, meget lig den, jeg tidligere lavede til Banana Pi -roveren, og den anden bruger TensorRT til genkendelse af objekter og sender bevægelseskommandoer over den serielle forbindelse til mikrokontrolleren.

Da det meste af teleoprationskoden er beskrevet i min anden tutorial (jeg lavede kun nogle mindre tweaks, regraderer videooverførsel) her vil jeg fokusere på objektdetekteringsdelen.

Hoved script til følgende objekt er object_following.py i jetspider_object_following, for teleoperation er spider_teleop.py i jetspider_teleoperation.

Objektet efter script starter med at importere de nødvendige moduler og deklarere variabler og klasseforekomster. Derefter starter vi Flask webserver med denne linje

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

Så snart vi åbner 0.0.0.0 (localhost) adresse i vores webbrowser eller Jetson Nano adresse på netværket (kan tjekke med ifconfig kommando), udføres denne funktion

def index ():

Det gengiver den webside -skabelon, vi har i skabelonmappen. Skabelonen har en videokilde indlejret i den, så når den er færdig med at indlæse, vil def video_feed (): blive eksekveret, der returnerer et svarobjekt, der initialiseres med generatorfunktionen.

Hemmeligheden ved at implementere opdateringer på stedet (opdatering af billede på websiden til vores videostream) er at bruge et flerdelt svar. Flerpartssvar består af et overskrift, der indeholder en af indholdsartene med flere dele, efterfulgt af delene, adskilt af en grænsemarkør og hver har sin egen delspecifikke indholdstype.

I def gen (): funktion implementerer vi generatorfunktionen i en uendelig loop, der fanger billedet, sender det til def execute (img): function, hvilket giver et billede, der skal sendes til websiden efter det.

def execute (img): funktionen er, hvor al magien sker, den tager et billede, ændrer størrelsen på det med OpenCV og sender det til Jetbot ObjectDetector -klasseinstans "model". Det returnerer listen over detektioner, og vi bruger OpenCV til at tegne blå rektangler omkring dem og skrive annoteringer med objektdetekteret klasse. Derefter kontrollerer vi, om der er et objekt af vores interesse detectmatching_detections = [d for d i detections [0] hvis d ['label'] == 53]

Du kan ændre dette nummer (53) til et andet nummer fra CoCo -datasættet, hvis du vil have din robot til at følge andre objekter, 53 er et æble. Hele listen er i kategorier.py -fil.

Endelig, hvis der ikke er registreret noget objekt i 5 sekunder, sender vi karakteren "5", så robotten stopper over serien. Hvis objektet findes, beregner vi, hvor langt det er fra midten af billedet og handler i overensstemmelse hermed (hvis det er tæt på midten, gå lige (tegn "1" på serie), hvis det er til venstre, gå til venstre osv.). Du kan lege med disse værdier for at bestemme det bedste til din særlige opsætning!

Trin 4: Endelige tanker

Endelige tanker
Endelige tanker

Dette er kernen i ObjectFollowing -demoen, hvis du vil vide mere om Flask -webserver -videostreaming, kan du kigge på denne fantastiske tutorial af Miguel Grinberg.

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

Jeg håber, at mine implementeringer af Jetbot -demoer vil hjælpe med at bygge din robot ved hjælp af Jetbot -rammer. Jeg implementerede ikke demo for forhindring af forhindringer, da jeg tror, at valget af modellen ikke vil give gode forhindringsresultater.

Tilføj mig på LinkedId, hvis du har spørgsmål, og tilmeld dig min YouTube -kanal for at få besked om mere interessante projekter, der involverer maskinlæring og robotik.

Anbefalede: