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, Lipanj
Anonim
Image
Image

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

Nvidia je nastojala učiniti Jetson Nano što jednostavnijim i lakšim za razvoj projekata. Čak su pokrenuli i mali tečaj o tome kako izgraditi svog robota s Jetsonom Nanom, nekoliko dana nakon što je ploča pokrenuta. Detalje o tom projektu možete pronaći ovdje.

Međutim, i sam sam imao nekoliko problema s 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… nepotrebna stvar za napraviti.

2) Odabir hardvera. Jetbotu je potreban skup hardver/koji se može zamijeniti drugim alternativama - na primjer, za rad u daljinskom upravljaču koriste joystick. Zvuči zabavno, ali trebam li doista joystick 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čajenijim 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 laboratoriju naše tvrtke. Opremio sam ga laserski izrezanim drvenim držačem za Jetson Nano i postoljem za kameru. Njihov je dizajn vlasnički, pa ako za svog robota Jetson Nano želite stvoriti nešto slično, možete pogledati projekt Meped, koji je sličan četveronožac s dizajnom otvorenog koda. Zapravo, budući da nitko nije imao izvorni kod za Zurijev mikrokontroler (Arduino Mega) u našem laboratoriju, koristio sam kod iz Mepeda s nekim manjim prilagodbama pomaka nogu/stopala.

Koristio sam običnu web kameru kompatibilnu s USB Raspberry Pi i USB ključ za Wifi.

Glavna stvar je da budući da ćemo koristiti Pyserial za serijsku komunikaciju između mikrokontrolera i Jetson Nano, vaš sustav u biti može koristiti bilo koju vrstu mikrokontrolera, sve dok se može povezati s Jetson Nano s USB serijskim kabelom. Ako vaš robot koristi istosmjerne motore i upravljački program motora (na primjer L298P), moguće je izravno sučelje upravljačkog programa motora s Jetson Nano GPIO. No, 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':

naprijed();

pauza;

slučaj '2':

leđa();

pauza;

slučaj '3':

skrenuti desno();

pauza;

slučaj '4':

skrenite lijevo();

pauza;

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, uočite jedan navodnik oko brojeva 1, 2, 3, 4.

Korak 2: Instalirajte potrebne pakete

Srećom po nas, zadana slika sustava 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 daljnji dio posla obaviti na daljinu.

sudo apt ažuriranje

sudo apt install openssh-server

SSH poslužitelj automatski će se pokrenuti.

Za povezivanje s Ubuntu strojem putem 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 programa Python Package Manager (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 njegova 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 spremište Github za ovaj projekt u svoju kućnu mapu i instalirajte Flask i neke druge pakete za robotsko daljinsko upravljanje pomoću web poslužitelja.

git klon

CD

sudo pip3 install -r requirements -opencv

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

Sada smo spremni za pokret!

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 rover Banana Pi, a druga koristi TensorRT za otkrivanje objekata i šalje naredbe kretanja preko serijske veze na mikrokontroler.

Budući da je većina teleopracionog koda opisana u mom drugom vodiču (napravio sam samo neke manje izmjene, nadograđujući prijenos videozapisa) ovdje ću se usredotočiti 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 deklariranjem varijabli i instanci klase. Zatim ovom linijom pokrećemo Flask web poslužitelj

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 će se funkcija izvršiti

def indeks ():

On prikazuje predložak web stranice koji imamo u mapi predlošci. Predložak ima ugrađen video izvor, pa će se po dovršetku 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čnom oznakom i svaki ima svoju vrstu sadržaja specifičnu za dio.

U def gen (): funkciji 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, ona 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]

Taj broj (53) možete promijeniti u drugi broj iz CoCo skupa podataka ako želite da vaš robot prati druge objekte, 53 je jabuka. Cijeli popis nalazi se u datoteci categories.py.

Konačno, ako nema otkrivenog objekta tijekom 5 sekundi, prenosimo znak "5" da bi se robot zaustavio 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 svoju postavku!

Korak 4: Završne misli

Završne misli
Završne misli

Ovo je srž demonstracije ObjectFollowinga, ako želite saznati više o streamingu videa na web poslužitelju Flask, možete pogledati ovaj sjajni vodič Miguela Grinberga.

Ovdje također možete pogledati bilježnicu Nvidia Jetbot Object Detection.

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

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

Preporučeni: