Sadržaj:

Jetson Nano Četveronožni robotski objekt za otkrivanje objekata: 4 koraka
Jetson Nano Četveronožni robotski objekt za otkrivanje objekata: 4 koraka

Video: Jetson Nano Četveronožni robotski objekt za otkrivanje objekata: 4 koraka

Video: Jetson Nano Četveronožni robotski objekt za otkrivanje objekata: 4 koraka
Video: СТРАННЫЕ НОВОСТИ НЕДЕЛИ - 21 | Таинственный | Вселенная | НЛО | Паранормальный 2024, Jun
Anonim
Image
Image

Nvidia Jetson Nano je komplet za programere, koji se sastoji od SoM -a (System on Module) i referentne ploče nosača. Prvenstveno je namijenjen stvaranju ugrađenih sistema koji zahtijevaju visoku procesorsku snagu za aplikacije mašinskog učenja, mašinskog vida i video obrade. Detaljnu recenziju možete pogledati na mom YouTube kanalu.

Nvidia se trudi da Jetson Nano učini što lakšim i lakšim za razvoj projekata. Čak su pokrenuli i mali kurs o tome kako da napravite robota sa Jetson Nano, nekoliko dana nakon što je ploča predstavljena. Detalje o tom projektu možete pronaći ovdje.

Međutim, i sam sam imao nekoliko problema sa Jetbotom kao projektom:

1) Nije mi bilo dovoljno EPIC. Jetson Nano je vrlo zanimljiva ploča s velikim mogućnostima obrade i izrada jednostavnog robota na kotačima s njom samo se činila kao vrlo… potresna stvar za napraviti.

2) Izbor hardvera. Jetbotu je potreban skup hardver/koji se može zamijeniti drugim alternativama - na primjer, koriste džojstik za teleoperacije. Zvuči zabavno, ali trebam li zaista džojstik za upravljanje robotom?

Tako sam odmah nakon što sam se dočepao Jetsona Nanoa počeo raditi na svom projektu, Jetspideru. Ideja je bila replicirati osnovne demonstracije koje je Jetbot imao, ali s uobičajenim hardverom i primjenjivim na širok spektar projekata.

Korak 1: Pripremite svoj hardver

Pripremite svoj hardver
Pripremite svoj hardver

Za ovaj projekt koristio sam rani prototip Zuri četveronožnog robota, koji je izradio Zoobotics. Dugo je ležao u laboratoriji naše kompanije. Opremio sam ga laserski izrezanim drvenim držačem za Jetson Nano i postoljem za kameru. Njihov dizajn je vlasnički, pa ako za svog Jetson Nano robota želite stvoriti nešto slično, možete pogledati projekt Meped, koji je sličan četveronožac s dizajnom otvorenog koda. U stvari, budući da nitko nije imao izvorni kod za Zurijev mikrokontroler (Arduino Mega) u našoj laboratoriji, koristio sam kod iz Mepeda s nekim manjim prilagodbama pomaka nogu/stopala.

Koristio sam običnu web kameru kompatibilnu s USB Raspberry Pi-om i Wi-Fi USB ključ.

Glavna stvar je da budući da ćemo koristiti Pyserial za serijsku komunikaciju između mikrokontrolera i Jetson Nano -a, vaš sistem u osnovi može koristiti bilo koju vrstu mikrokontrolera, sve dok se može povezati s Jetson Nano -om putem USB serijskog kabela. Ako vaš robot koristi istosmjerne motore i upravljački program motora (na primjer L298P), moguće je izravno povezati upravljački program motora s Jetson Nano GPIO. Ali, nažalost, za upravljanje servo pogonima možete koristiti samo drugi mikrokontroler ili namjenski I2C servo upravljački program, budući da Jetson Nano nema hardverski GPIO PWM.

Ukratko, možete koristiti vrstu robota sa bilo kojim mikrokontrolerom koji se može povezati s Jetson Nano pomoću USB podatkovnog kabela. Prenio sam kôd za Arduino Mega u spremište github za ovaj vodič, a dio relevantan za povezivanje Jetsona Nanoa s Arduinom nalazi se ovdje:

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

{

slučaj '1':

forward ();

break;

slučaj '2':

back ();

break;

slučaj '3':

turn_right ();

break;

slučaj '4':

skrenuti lijevo();

break;

Provjeravamo postoje li dostupni podaci, a ako jesu, prosljeđujemo ih upravljačkoj strukturi razvodne kutije. Obratite pažnju da podaci iz serije dolaze kao znakovi, obratite pažnju na jedan navodnik oko brojeva 1, 2, 3, 4.

Korak 2: Instalirajte potrebne pakete

Srećom po nas, zadana slika sistema Jetson Nano dolazi s puno unaprijed instaliranih stvari (poput OpenCV-a, TensorRT-a itd.), Pa moramo samo instalirati nekoliko drugih paketa kako bi kôd funkcionirao i omogućio SSH.

Počnimo s omogućavanjem SSH -a u slučaju da želite sav ostatak posla obaviti na daljinu.

sudo apt update

sudo apt install openssh-server

SSH server će se automatski pokrenuti.

Za povezivanje sa Ubuntu mašinom preko LAN -a potrebno je samo unijeti sljedeću naredbu:

ssh korisničko ime@ip_adresa

Ako imate Windows stroj, morat ćete instalirati SSH klijent, na primjer Putty.

Počnimo s instaliranjem Python Package Manager -a (pip) i Pillow za manipulaciju slikama.

sudo apt install python3-pip python3-pil

Zatim ćemo instalirati Jetbot spremište, budući da se oslanjamo na neke dijelove njegovog okvira za izvođenje otkrivanja objekata.

sudo apt install python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Konačno klonirajte moje Github spremište za ovaj projekt u svoju kućnu mapu i instalirajte Flask i neke druge pakete za daljinsko upravljanje robotom pomoću web servera.

git clone

cd

sudo pip3 install -r requirements -opencv

Preuzmite unaprijed obučeni model SSD -a (Single Shot Detector) sa ove veze i postavite ga u mapu jetspider_demos.

Sada možemo krenuti!

Korak 3: Pokrenite kôd

Pokrenite kôd
Pokrenite kôd

Napravio sam dvije demonstracije za Jetspider, prva je jednostavna teleopracija, vrlo slična onoj koju sam ranije napravio za Banana Pi rover, a druga koristi TensorRT za otkrivanje objekata i šalje naredbe kretanja preko serijske veze na mikrokontroler.

Budući da je većina koda za teleopraciju opisana u mom drugom vodiču (napravio sam samo neke manje izmjene, nadograđujući video prijenos) ovdje ću se fokusirati na dio Otkrivanje objekata.

Glavna skripta za slijedeći objekt je object_following.py u jetspider_object_following, za teleoperaciju je spider_teleop.py u jetspider_teleoperation.

Skripta objekta koja slijedi počinje uvozom potrebnih modula i deklaracijom varijabli i instanci klase. Zatim ovom linijom pokrećemo Flask web server

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

Čim otvorimo 0.0.0.0 (localhost) adresu u našem web pregledniku ili Jetson Nano adresu na mreži (može se provjeriti pomoću naredbe ifconfig), ova funkcija će se izvršiti

def indeks ():

Prikazuje predložak web stranice koji imamo u mapi predlošci. Predložak ima video izvor ugrađen u njega, pa će se nakon dovršetka učitavanja izvršiti def video_feed (): koji vraća objekt odgovora koji je inicijaliziran funkcijom generatora.

Tajna za implementaciju ažuriranja na mjestu (ažuriranje slike na web stranici za naš video stream) je korištenje odgovora s više dijelova. Višečlani odgovori sastoje se od zaglavlja koje uključuje jednu od višedijelnih vrsta sadržaja, nakon čega slijede dijelovi, odvojeni graničnim markerom i svaki ima svoju vrstu sadržaja specifičnu za dio.

U def gen (): function implementiramo funkciju generatora u beskonačnoj petlji koja snima sliku, šalje je na def execute (img): function, dajući sliku koja se nakon toga šalje na web stranicu.

def execute (img): funkcija je mjesto gdje se događa sva čarolija, uzima sliku, mijenja joj veličinu pomoću OpenCV -a i prosljeđuje je Jetbot ObjectDetector klasi instance "model". On vraća popis otkrivanja, a mi koristimo OpenCV za crtanje plavih pravokutnika oko njih i pisanje napomena s klasom otkrivenih objekata. Nakon toga provjeravamo postoji li otkriven objekt od našeg interesamatching_detections = [d za d u detekcijama [0] ako je d ['oznaka'] == 53]

Možete promijeniti taj broj (53) u drugi broj iz CoCo skupa podataka ako želite da vaš robot prati druge objekte, 53 je jabuka. Cijela lista je u datoteci categories.py.

Konačno, ako nijedan objekt nije otkriven 5 sekundi, prenosimo znak "5" za robota da se zaustavi preko serije. Ako se objekt pronađe, izračunamo koliko je udaljen od središta slike i ponašamo se u skladu s tim (ako je blizu središta, idite ravno (znak "1" na serijskom dijelu), ako je s lijeve strane, idite lijevo itd.). Možete se igrati s tim vrijednostima kako biste odredili najbolje za vaše postavljanje!

Korak 4: Završne misli

Završne misli
Završne misli

Ovo je suština ObjectFollowing demonstracije, ako želite saznati više o Flask webserver Video streamingu, možete pogledati ovaj sjajni vodič Miguela Grinberga.

Ovdje možete pogledati i bilježnicu za otkrivanje objekata Nvidia Jetbot.

Nadam se da će moje implementacije Jetbot demonstracija pomoći u izgradnji vašeg robota koristeći Jetbot framework. Nisam implementirao demonstraciju izbjegavanja prepreka, jer mislim da odabir modela neće dati dobre rezultate izbjegavanja prepreka.

Dodajte me na LinkedId ako imate bilo kakvih pitanja i pretplatite se na moj YouTube kanal kako biste primali obavijesti o zanimljivijim projektima koji uključuju strojno učenje i robotiku.

Preporučuje se: