INHOUDSOPGAWE:

Jetson Nano viervoudige robotvoorwerpopsporingstudie: 4 stappe
Jetson Nano viervoudige robotvoorwerpopsporingstudie: 4 stappe

Video: Jetson Nano viervoudige robotvoorwerpopsporingstudie: 4 stappe

Video: Jetson Nano viervoudige robotvoorwerpopsporingstudie: 4 stappe
Video: Обзор микрокомпьютера Nvidia Jetson Nano: распаковка и установка системы 2024, Junie
Anonim
Image
Image

Nvidia Jetson Nano is 'n ontwikkelaarstel wat bestaan uit 'n SoM (System on Module) en 'n verwysingsdraerbord. Dit is hoofsaaklik gerig op die skep van ingebedde stelsels wat hoë verwerkingskrag benodig vir masjienleer, masjienvisie en video -verwerkingstoepassings. U kan 'n gedetailleerde resensie daarvan op my YouTube -kanaal sien.

Nvidia het probeer om Jetson Nano so gebruikersvriendelik as moontlik te maak om projekte mee te ontwikkel. Hulle het selfs 'n paar kursusse geloods oor hoe om u robot saam met Jetson Nano te bou, dae nadat die bord begin is. U kan die besonderhede oor die projek hier vind.

Ek het egter self 'n paar probleme ondervind met die Jetbot as 'n projek:

1) Dit was vir my nie EPIES genoeg nie. Jetson Nano is 'n baie interessante bord met uitstekende verwerkingsvermoëns en om 'n eenvoudige robot op wiele te maak, lyk net soos 'n baie oorweldigende ding.

2) Die hardeware keuse. Jetbot benodig hardeware wat duur is/wat met ander alternatiewe vervang kan word - hulle gebruik byvoorbeeld joystick vir teleoperasie. Klink na plesier, maar het ek regtig 'n joystick nodig om 'n robot te beheer?

Dus, onmiddellik nadat ek Jetson Nano in die hande gekry het, het ek begin werk aan my eie projek, 'n Jetspider. Die idee was om basiese demo's wat Jetbot gehad het, te herhaal, maar met meer algemene hardeware en van toepassing op 'n groter verskeidenheid projekte.

Stap 1: Berei u hardeware voor

Berei u hardeware voor
Berei u hardeware voor

Vir hierdie projek het ek 'n vroeë prototipe van die Zuri -viervoetige robot gebruik, gemaak deur Zoobotics. Dit het lank in ons onderneming se laboratorium gelê. Ek het dit toegerus met 'n lasergesnyde houthouer vir Jetson Nano en 'n kamera-houer. Hulle ontwerp is eie, so as u vir u Jetson Nano-robot iets soortgelyks wil skep, kan u na die Meped-projek kyk, 'n soortgelyke quadruped met 'n open source-ontwerp. Aangesien niemand eintlik die bronkode vir Zuri se mikrobeheerder (Arduino Mega) in ons laboratorium gehad het nie, het ek die kode van Meped gebruik met 'n paar klein verstellings in die bene/voete.

Ek gebruik gewone USB Raspberry Pi-versoenbare webkamera en 'n Wifi USB-dongle.

Die belangrikste punt is dat aangesien ons Pyserial gaan gebruik vir seriële kommunikasie tussen mikrobeheerder en Jetson Nano, u stelsel in wese enige tipe mikrobeheerder kan gebruik, solank dit met Jetson Nano met 'n USB -seriële kabel gekoppel kan word. As u robot DC-motors en 'n motorbestuurder (byvoorbeeld op L298P) gebruik, is dit moontlik om die motorbestuurder direk met Jetson Nano GPIO te koppel. Maar vir die beheer van servo's kan u slegs 'n ander mikrobeheerder of 'n toegewyde I2C -servostuurder gebruik, aangesien Jetson Nano nie hardeware GPIO PWM het nie.

Om op te som, kan u 'n tipe robot gebruik met enige mikrobeheerder wat met Jetson Nano verbind kan word met behulp van 'n USB -datakabel. Ek het die kode vir Arduino Mega opgelaai na die github -bewaarplek vir hierdie tutoriaal, en die gedeelte wat verband hou met die koppeling van Jetson Nano met Arduino is hier:

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

{

geval '1':

vorentoe ();

breek;

geval '2':

agter ();

breek;

geval '3':

draai regs();

breek;

geval '4':

draai links();

breek;

Ons kyk of daar data beskikbaar is, en stuur dit dan na die beheerstruktuur van die skakelaar. Let op dat data uit die reeks as karakters kom, let op die aanhalingsteken rondom die nommers 1, 2, 3, 4.

Stap 2: Installeer die nodige pakkette

Gelukkig bevat die standaard Jetson Nano-stelselbeeld baie dinge wat vooraf geïnstalleer is (soos OpenCV, TensorRT, ens.), Sodat ons slegs 'n paar ander pakkette moet installeer om die kode te laat werk en SSH moontlik te maak.

Kom ons begin deur SSH in te skakel as u die res van die werk op afstand wil doen.

sudo apt -opdatering

sudo apt installeer openssh-bediener

Die SSH -bediener sal outomaties begin.

Om met u Ubuntu -masjien via LAN te koppel, hoef u slegs die volgende opdrag in te voer:

ssh gebruikersnaam@ip_address

As u 'n Windows -masjien het, moet u SSH -kliënt installeer, byvoorbeeld Putty.

Kom ons begin met die installering van Python Package Manager (pip) en Pillow vir beeldmanipulasie.

sudo apt installeer python3-pip python3-pil

Dan installeer ons Jetbot -bewaarplek, aangesien ons op sommige dele van die raamwerk staatmaak om objekopsporing uit te voer.

sudo apt installeer python3-smbus python-pyserial

git-kloon

cd jetbot

sudo apt-get installeer cmake

sudo python3 setup.py installeer

Laai my Github -bewaarplek vir hierdie projek uiteindelik na u tuismap en installeer Flask en 'n paar ander pakkette vir die afstandbeheer van die robot met behulp van 'n webbediener.

git -kloon

cd

sudo pip3 installeer -r vereistes -opencv

Laai die vooraf opgeleide SSD (Single Shot Detector) -model van hierdie skakel af en plaas dit in die jetspider_demos -lêergids.

Nou is ons gereed om te gaan!

Stap 3: voer die kode uit

Begin die kode
Begin die kode

Ek het twee demo's vir Jetspider gemaak, die eerste een is 'n eenvoudige teleoprasie, baie soortgelyk aan die een wat ek vroeër gemaak het vir die Banana Pi -rover en die tweede een gebruik TensorRT vir voorwerpopsporing en stuur die bewegingsopdragte oor die seriële verbinding na die mikrobeheerder.

Aangesien die grootste deel van die teleoprasie -kode in my ander tutoriaal beskryf word (ek het slegs 'n paar klein aanpassings gemaak, met die oordrag van video -oordrag), fokus ek hier op die objekopsporing -gedeelte.

Die hoofskrif vir die volgende voorwerp is object_following.py in jetspider_object_following, want teleoperasie is spider_teleop.py in jetspider_teleoperation.

Die voorwerp wat die volgende skrip begin, begin met die invoer van die nodige modules en die verklaring van veranderlikes en klasgevalle. Dan begin ons Flask -webbediener met hierdie reël

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

Sodra ons 0.0.0.0 (localhost) adres in ons webblaaier of Jetson Nano -adres op die netwerk oopmaak (kan met ifconfig -opdrag kyk), word hierdie funksie uitgevoer

def indeks ():

Dit maak die webbladsjabloon wat ons in die templates -lêergids het, weer. Die video -bron is in die sjabloon ingebed, dus sodra dit gelaai is, word def video_feed (): uitgevoer, wat 'n reaksie -voorwerp teruggee wat met die kragopwekker funksie geïnitialiseer word.

Die geheim om opdaterings ter plaatse te implementeer (die opdatering van die prent op die webblad vir ons videostroom) is om 'n meervoudige antwoord te gebruik. Meervoudige antwoorde bestaan uit 'n opskrif wat een van die meervoudige inhoudtipes bevat, gevolg deur die dele, geskei deur 'n grensmerker en elk met sy eie deelspesifieke inhoudstipe.

In def gen (): funksie implementeer ons die kragopwekkerfunksie in 'n oneindige lus wat die beeld vang, stuur na def execute (img): function, wat 'n beeld oplewer wat daarna na die webblad gestuur moet word.

def execute (img): funksie is waar al die towerkrag gebeur, dit neem 'n beeld, verander die grootte met OpenCV en gee dit deur na 'model' van Jetbot ObjectDetector -klas. Dit gee die lys met opsporings terug, en ons gebruik OpenCV om blou reghoeke daar rondom te teken en annotasies te skryf met 'n voorwerp -opgespoorde klas. Daarna kyk ons of daar 'n voorwerp van ons belang is detectmatching_detections = [d vir d in detecties [0] as d ['label'] == 53]

U kan die getal (53) na 'n ander nommer van die CoCo -dataset verander as u wil hê dat u robot ander voorwerpe moet volg, 53 is 'n appel. Die hele lys is in kategorieë.py -lêer.

Ten slotte, as daar geen voorwerp vir 5 sekondes bespeur word nie, stuur ons die karakter "5" sodat die robot oor die reeks kan stop. As 'n voorwerp gevind word, bereken ons hoe ver dit van die middel van die beeld is en tree daarvolgens op (as dit naby die middel is, gaan reguit (teken "1" op die reeks), as dit links is, links, ens.). U kan met hierdie waardes speel om die beste vir u spesifieke opset te bepaal!

Stap 4: Laaste gedagtes

Laaste gedagtes
Laaste gedagtes

Dit is die kern van die ObjectFollowing -demo, as u meer wil weet oor Flask -webserver -videostreaming, kan u na hierdie wonderlike tutoriaal van Miguel Grinberg kyk.

U kan ook die notaboek van Nvidia Jetbot Object Detection hier sien.

Ek hoop dat my implementering van Jetbot -demos u sal help om u robot met Jetbot -raamwerk te bou. Ek het nie 'n demo vir hindernisvermyding geïmplementeer nie, aangesien ek dink dat die keuse van die model nie goeie resultate vir die vermyding van hindernisse sal oplewer nie.

Voeg my by LinkedId as u enige vrae het en teken in op my YouTube -kanaal om in kennis gestel te word van meer interessante projekte rakende masjienleer en robotika.

Aanbeveel: