Cuprins:

Tutorial Jetson Nano Quadruped Robot Detection Object: 4 pași
Tutorial Jetson Nano Quadruped Robot Detection Object: 4 pași

Video: Tutorial Jetson Nano Quadruped Robot Detection Object: 4 pași

Video: Tutorial Jetson Nano Quadruped Robot Detection Object: 4 pași
Video: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, Iunie
Anonim
Image
Image

Nvidia Jetson Nano este un kit pentru dezvoltatori, care constă dintr-un SoM (System on Module) și o placă de transport de referință. Este destinat în principal pentru crearea de sisteme încorporate care necesită o putere de procesare ridicată pentru aplicații de învățare automată, viziune automată și procesare video. Puteți urmări recenzii detaliate pentru canalul meu de pe YouTube.

Nvidia a încercat să facă Jetson Nano cât mai ușor de utilizat și ușor de dezvoltat proiecte cu cât posibil. Au lansat chiar un mic curs despre cum să-ți construiești robotul cu Jetson Nano, la câteva zile după lansarea plăcii. Puteți găsi detalii despre acel proiect aici.

Cu toate acestea, eu am avut câteva probleme cu Jetbot ca proiect:

1) Nu a fost suficient de EPIC pentru mine. Jetson Nano este o placă foarte interesantă, cu capacități excelente de procesare și realizarea unui robot cu roți simplu, cu el, părea doar un lucru foarte … copleșitor.

2) Alegerea hardware-ului. Jetbot necesită hardware care este scump / poate fi înlocuit cu alte alternative - de exemplu, utilizează joystick-ul pentru teleoperare. Pare distractiv, dar chiar am nevoie de un joystick pentru a controla un robot?

Așa că, imediat după ce am pus mâna pe Jetson Nano, am început să lucrez la propriul meu proiect, un Jetspider. Ideea a fost să reproducem demonstrațiile de bază pe care Jetbot le avea, dar cu hardware mai comun și aplicabil unei varietăți mai largi de proiecte.

Pasul 1: Pregătiți-vă hardware-ul

Pregătiți-vă hardware-ul
Pregătiți-vă hardware-ul

Pentru acest proiect am folosit un prototip timpuriu de robot quadruped Zuri, realizat de Zoobotics. A rămas mult timp în laboratorul companiei noastre. L-am echipat cu un suport din lemn tăiat cu laser pentru Jetson Nano și un suport pentru cameră. Designul lor este proprietar, deci dacă pentru robotul dvs. Jetson Nano doriți să creați ceva similar, puteți arunca o privire asupra proiectului Meped, care este un patruped similar cu un design open-source. De fapt, din moment ce nimeni nu avea codul sursă pentru microcontrolerul lui Zuri (Arduino Mega) în laboratorul nostru, am folosit codul de la Meped cu câteva ajustări minore în compensarea picioarelor / picioarelor.

Am folosit o cameră web compatibilă USB Raspberry Pi obișnuită și un dongle USB Wifi.

Principalul punct este că, din moment ce vom folosi Pyserial pentru comunicații seriale între microcontroler și Jetson Nano, sistemul dvs. poate folosi în mod esențial orice tip de microcontroler, atâta timp cât poate fi interfațat cu Jetson Nano cu cablu serial USB. Dacă robotul dvs. folosește motoare de curent continuu și un driver de motor (de exemplu, bazat pe L298P), este posibil să interfațați direct driverul de motor cu Jetson Nano GPIO. Dar, din păcate, pentru controlul servoarelor puteți utiliza doar un alt microcontroler sau un servo-driver dedicat I2C, deoarece Jetson Nano nu are hardware GPIO PWM.

Pentru a rezuma, puteți utiliza tipul de robot cu orice microcontroler care poate fi conectat cu Jetson Nano utilizând un cablu de date USB. Am încărcat codul pentru Arduino Mega în depozitul github pentru acest tutorial și partea relevantă pentru interfața Jetson Nano cu Arduino este aici:

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

{

cazul 1':

redirecţiona();

pauză;

cazul „2”:

înapoi();

pauză;

cazul „3”:

Obligatoriu Dreapta();

pauză;

cazul „4”:

Viraj la stânga();

pauză;

Verificăm dacă există date disponibile și, dacă există, le transmitem structurii de control a casei de comutare. Fii atent, că datele din serial apar ca caractere, observă ghilimela unică în jurul numerelor 1, 2, 3, 4.

Pasul 2: Instalați pachetele necesare

Din fericire pentru noi, imaginea implicită a sistemului Jetson Nano vine cu o mulțime de lucruri preinstalate (cum ar fi OpenCV, TensorRT etc.), deci trebuie doar să instalăm câteva alte pachete pentru a face codul să funcționeze și să activeze SSH.

Să începem prin a activa SSH în cazul în care doriți să faceți tot restul lucrării de la distanță.

actualizare sudo apt

sudo apt instalează openssh-server

Serverul SSH va porni automat.

Pentru a vă conecta la mașina dvs. Ubuntu prin LAN, trebuie doar să introduceți următoarea comandă:

ssh nume de utilizator @ ip_address

Dacă aveți mașină Windows, va trebui să instalați client SSH, de exemplu Putty.

Să începem prin instalarea Python Package Manager (pip) și Pillow pentru manipularea imaginii.

sudo apt instalează python3-pip python3-pil

Apoi vom instala depozitul Jetbot, deoarece ne bazăm pe unele părți ale cadrului său pentru a efectua detectarea obiectelor.

sudo apt install python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py instalare

În cele din urmă clonați depozitul meu Github pentru acest proiect în folderul dvs. de acasă și instalați Flask și alte pachete pentru controlul de la distanță al robotului folosind serverul web.

git clone

CD

sudo pip3 install -r requirements-opencv

Descărcați modelul pretensionat SSD (Single Shot Detector) de pe acest link și plasați-l în folderul jetspider_demos.

Acum suntem bine să plecăm!

Pasul 3: Rulați codul

Rulați codul
Rulați codul

Am făcut două demonstrații pentru Jetspider, primul este o teleoprare simplă, foarte asemănător cu cel pe care l-am făcut mai devreme pentru roverul Banana Pi și al doilea folosește TensorRT pentru detectarea obiectelor și trimite comenzile de mișcare prin conexiunea serială la microcontroler.

Deoarece majoritatea codului de teleoprare este descris în celălalt tutorial al meu (am făcut doar câteva modificări minore, retrogradarea transmisiei video) aici mă voi concentra asupra părții Detectarea obiectelor.

Principalul script pentru următorul obiect este object_following.py în jetspider_object_following, pentru teleoperare este spider_teleop.py în jetspider_teleoperation.

Scriptul următor al obiectului începe cu importul modulelor necesare și declararea variabilelor și instanțelor clasei. Apoi pornim serverul web Flask cu această linie

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

De îndată ce deschidem adresa 0.0.0.0 (localhost) în browserul nostru web sau adresa Jetson Nano din rețea (se poate verifica cu comanda ifconfig), această funcție va fi executată

index def ():

Redă șablonul paginii web pe care îl avem în folderul șabloane. Șablonul are sursă video încorporată, așa că odată ce termină încărcarea, va fi executat def video_feed (): care returnează un obiect Response care este inițializat cu funcția generator.

Secretul implementării actualizărilor la fața locului (actualizarea imaginii în pagina web pentru fluxul nostru video) este utilizarea unui răspuns multipart. Răspunsurile cu mai multe părți constau dintr-un antet care include unul dintre tipurile de conținut cu mai multe părți, urmate de părți, separate printr-un marker de graniță și fiecare având propriul tip de conținut specific părții.

În def gen (): funcția implementăm funcția generator într-o buclă infinită care captează imaginea, o trimite la def execute (img): funcție, obținând o imagine care urmează să fie trimisă pe pagina web.

def execute (img): funcția este locul în care se întâmplă toată magia, ia o imagine, o redimensionează cu OpenCV și o transmite instanței clasei Jetbot ObjectDetector „model”. Returnează returnează lista detecțiilor și folosim OpenCV pentru a desena dreptunghiuri albastre în jurul lor și pentru a scrie adnotări cu clasa obiectului detectat. După aceea, verificăm dacă există un obiect de interesul nostru

Puteți schimba acel număr (53) cu alt număr din setul de date CoCo dacă doriți ca robotul dvs. să urmărească alte obiecte, 53 este un măr. Întreaga listă se află în fișier categories.py.

În cele din urmă, dacă nu există niciun obiect detectat timp de 5 secunde, transmitem caracterul „5” pentru ca robotul să se oprească peste serial. Dacă se găsește obiectul, calculăm cât de departe este de centrul imaginii și acționăm în consecință (dacă este aproape de centru, mergeți drept (caracterul "1" pe serial), dacă în stânga, mergeți la stânga etc.). Puteți juca cu aceste valori pentru a determina ce este mai bun pentru configurarea dvs. particulară!

Pasul 4: Gânduri finale

Gânduri finale
Gânduri finale

Acesta este esența demo-ului ObjectFollowing, dacă doriți să aflați mai multe despre Flask serverul de web streaming video, puteți arunca o privire la acest mare tutorial de Miguel Grinberg.

De asemenea, puteți arunca o privire la notebook-ul de detectare a obiectelor Nvidia Jetbot aici.

Sper că implementările mele de demonstrații Jetbot vă vor ajuta să vă construiți robotul folosind cadrul Jetbot. Nu am implementat o demonstrație pentru evitarea obstacolelor, deoarece cred că alegerea modelului nu va da rezultate bune pentru evitarea obstacolelor.

Adăugați-mă pe LinkedId dacă aveți vreo întrebare și abonați-vă la canalul meu YouTube pentru a primi notificări despre proiecte mai interesante care implică învățarea automată și robotică.

Recomandat: