Sadržaj:
- Korak 1: Pripremite svoj hardver
- Korak 2: Instalirajte potrebne pakete
- Korak 3: Pokrenite kôd
- Korak 4: Završne misli
Video: Jetson Nano Četveronožni robotski objekt za otkrivanje objekata: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
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
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
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
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:
Otkrivanje objekata sa Sipeed MaiX pločama (Kendryte K210): 6 koraka
Otkrivanje objekata sa Sipeed MaiX pločama (Kendryte K210): Kao nastavak mog prethodnog članka o prepoznavanju slika sa Sipeed MaiX pločama, odlučio sam da napišem još jedan vodič, fokusirajući se na otkrivanje objekata. Nedavno se pojavio zanimljiv hardver sa Kendryte K210 čipom, uključujući S
MALINA PI Pi OTKRIVANJE OBJEKATA S VISE KAMERA: 3 koraka
RASPBERRY PI Pi OTKRIVANJE OBJEKATA S VISE KAMERA: Uvod ću ukratko opisati, jer sam naslov sugerira koja je glavna svrha instrukcije. U ovom uputstvu, korak po korak, objasnit ću vam kako spojiti više kamera poput 1-pi kamere i barem jednu USB kameru ili 2 USB kamere
[Uradi sam] Spider Robot (četveronožni, četveronožni): 14 koraka (sa slikama)
[DIY] Spider Robot (četveronožni, četveronožni): Ako vam je potrebna dodatna podrška, bit će bolje da mi date neku odgovarajuću donaciju: http: //paypal.me/RegisHsu2019-10-10 ažuriranje: Novi prevoditelj uzrokovat će problem izračunavanja plutajućeg broja. Već sam izmijenio kôd. 2017-03-26
Otkrivanje objekata W/ Dragonboard 410c ili 820c koristeći OpenCV i Tensorflow .: 4 koraka
Object Detection W/ Dragonboard 410c ili 820c koristeći OpenCV i Tensorflow .: Ove upute opisuju kako instalirati OpenCV, Tensorflow i okvire strojnog učenja za Python 3.5 za pokretanje aplikacije Object Detection
Otkrivanje objekata tokom vožnje RC automobilom: 9 koraka
Otkrivanje objekata tokom vožnje RC automobila: Ovaj projekt govori o upotrebi ultrazvučnih senzora na automobilu za otkrivanje prepreka