Kazalo:

Vadnica za odkrivanje štirikratnih robotskih objektov Jetson Nano: 4 koraki
Vadnica za odkrivanje štirikratnih robotskih objektov Jetson Nano: 4 koraki

Video: Vadnica za odkrivanje štirikratnih robotskih objektov Jetson Nano: 4 koraki

Video: Vadnica za odkrivanje štirikratnih robotskih objektov Jetson Nano: 4 koraki
Video: Besana Pregibnik 2024, November
Anonim
Image
Image

Nvidia Jetson Nano je komplet za razvijalce, ki je sestavljen iz SoM (System on Module) in referenčne nosilne plošče. Namenjen je predvsem ustvarjanju vgrajenih sistemov, ki zahtevajo veliko procesorsko moč za aplikacije strojnega učenja, strojnega vida in obdelave videa. Podroben pregled zanj si lahko ogledate na mojem kanalu YouTube.

Nvidia je poskušala narediti Jetson Nano čim bolj prijaznim in enostavnim za razvoj projektov. Nekaj dni po predstavitvi plošče so celo uvedli majhen tečaj o tem, kako z Jetsonom Nanom sestaviti svojega robota. Podrobnosti o tem projektu najdete tukaj.

Vendar sem imel sam nekaj projektov z Jetbotom kot projektom:

1) Ni mi bilo dovolj EPIC. Jetson Nano je zelo zanimiva plošča z odličnimi zmožnostmi obdelave in izdelava preprostega robota na kolesih se je zdela zelo… neprijetna stvar.

2) Izbira strojne opreme. Jetbot zahteva nekaj strojne opreme, ki jo je mogoče zamenjati z drugimi možnostmi - na primer za krmiljenje na daljavo uporabljajo krmilno palčko. Sliši se zabavno, a res potrebujem igralno palico za nadzor robota?

Tako sem takoj, ko sem prišel v roke Jetsona Nana, začel delati na svojem projektu, Jetspiderju. Zamisel je bila ponoviti osnovne predstavitve, ki jih je imel Jetbot, vendar s pogostejšo strojno opremo in uporabno za več različnih projektov.

1. korak: Pripravite strojno opremo

Pripravite svojo strojno opremo
Pripravite svojo strojno opremo

Za ta projekt sem uporabil zgodnji prototip štirinožnega robota Zuri, ki ga je izdelal Zoobotics. Dolgo je ležal v laboratoriju našega podjetja. Opremil sem ga z lasersko izrezanim lesenim nosilcem za Jetson Nano in nosilcem za kamero. Njihova zasnova je lastniška, zato, če želite za svojega robota Jetson Nano ustvariti nekaj podobnega, si lahko ogledate projekt Meped, ki je podobno štirikotni z odprtokodno zasnovo. Pravzaprav, ker nihče ni imel izvorne kode za Zurijev mikrokrmilnik (Arduino Mega) v našem laboratoriju, sem uporabil kodo iz Mepeda z nekaj manjšimi prilagoditvami odmika nog/stopal.

Uporabil sem običajno spletno kamero, združljivo z USB Raspberry Pi, in USB ključek Wifi.

Glavna stvar je, da ker bomo Pyserial uporabljali za serijsko komunikacijo med mikrokrmilnikom in Jetson Nano, lahko vaš sistem v bistvu uporablja katero koli vrsto mikrokrmilnika, če je le -ta lahko povezan z Jetson Nano s serijskim kablom USB. Če vaš robot uporablja enosmerne motorje in gonilnik motorja (na primer L298P), je mogoče neposredno povezati gonilnik motorja z Jetson Nano GPIO. Na žalost pa za krmiljenje servomotorjev lahko uporabite le drug mikrokrmilnik ali namenski gonilnik servomotorja I2C, saj Jetson Nano nima strojne opreme GPIO PWM.

Če povzamemo, lahko uporabite tip robota s katerim koli mikrokrmilnikom, ki ga lahko povežete z Jetson Nano s podatkovnim kablom USB. Kodo za Arduino Mega sem naložil v skladišče github za to vadnico, del pomemben za povezovanje Jetson Nano z Arduinom pa je tukaj:

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

{

primer '1':

naprej ();

zlom;

primer '2':

nazaj ();

zlom;

primer '3':

zavij desno();

zlom;

primer '4':

zavijemo levo();

zlom;

Preverimo, ali so na voljo podatki, in če so, jih posredujemo v krmilno strukturo stikalne omarice. Bodite pozorni, da so podatki iz serije na voljo kot znaki, opazite enojni narekovaj okoli številk 1, 2, 3, 4.

2. korak: Namestite potrebne pakete

Na srečo privzeta sistemska slika Jetson Nano vsebuje veliko vnaprej nameščenih stvari (na primer OpenCV, TensorRT itd.), Zato moramo namestiti le nekaj drugih paketov, da bo koda delovala in omogočila SSH.

Začnimo z omogočanjem SSH, če želite vse ostalo delo opraviti na daljavo.

sudo apt posodobitev

sudo apt namestite strežnik openssh

Strežnik SSH se bo samodejno zagnal.

Če se želite povezati z računalnikom Ubuntu prek LAN -a, morate vnesti le naslednji ukaz:

ssh uporabniško ime@ip_address

Če imate računalnik z operacijskim sistemom Windows, boste morali namestiti odjemalca SSH, na primer Putty.

Začnimo z namestitvijo Python Package Manager (pip) in Pillow za manipulacijo slik.

sudo apt namestite python3-pip python3-pil

Nato bomo namestili skladišče Jetbot, saj se za odkrivanje objektov zanašamo na nekatere dele njegovega okvira.

sudo apt namestite python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Končno klonirajte moje skladišče Github za ta projekt v domačo mapo in namestite Flask in nekatere druge pakete za robotski daljinski upravljalnik prek spletnega strežnika.

git clone

cd

sudo pip3 install -r requirements -opencv

Prenesite predhodno usposobljeni model SSD (Single Shot Detector) s te povezave in ga postavite v mapo jetspider_demos.

Zdaj smo pripravljeni!

3. korak: Zaženite kodo

Zaženite kodo
Zaženite kodo

Za Jetspider sem naredil dve predstavitvi, prva je preprosta teleoperacija, zelo podobna tisti, ki sem jo prej naredil za rover Banana Pi, druga pa uporablja TensorRT za zaznavanje predmetov in pošilja ukaze za premikanje prek serijske povezave na mikrokrmilnik.

Ker je večina kode teleoperacije opisana v mojem drugem vodiču (naredil sem le nekaj manjših popravkov in prenovil video prenos), se bom tukaj osredotočil na del Odkrivanje objektov.

Glavni skript za sledenje objektu je object_following.py v jetspider_object_following, za teleoperacijo pa spider_teleop.py v jetspider_teleoperation.

Skript predmeta, ki sledi, se začne z uvozom potrebnih modulov in razglasitvijo spremenljivk in primerkov razreda. Nato s to vrstico zaženemo spletni strežnik Flask

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

Takoj, ko v spletnem brskalniku odpremo naslov 0.0.0.0 (localhost) ali naslov Jetson Nano v omrežju (lahko preverite z ukazom ifconfig), bo ta funkcija izvedena

indeks def ():

Upodobi predlogo spletne strani, ki jo imamo v mapi predloge. V predlogo je vgrajen video vir, zato se po končanem nalaganju izvede def video_feed ():, ki vrne objekt Response, ki se inicializira s funkcijo generatorja.

Skrivnost izvajanja posodobitev na mestu (posodabljanje slike na spletni strani za naš video tok) je uporaba večoddelnega odgovora. Večdelni odzivi so sestavljeni iz glave, ki vključuje eno od večdelnih vrst vsebine, ki ji sledijo deli, ločeni z robnim označevalnikom in vsak ima svojo vrsto vsebine, značilno za del.

V funkciji def gen (): implementiramo funkcijo generatorja v neskončno zanko, ki zajame sliko, jo pošlje v funkvo def execute (img): funkcijo, po kateri se slika pošlje na spletno stran.

def execute (img): funkcija je tam, kjer se zgodi vsa čarovnija, vzame sliko, ji spremeni velikost z OpenCV in jo posreduje primerku razreda "model" Jetbot ObjectDetector. Vrne vrne seznam zaznav, z OpenCV -jem pa okoli njih narišemo modre pravokotnike in napišemo opombe z razredom zaznanih objektov. Po tem preverimo, ali je odkrit predmet, ki nas zanima, matching_detections = [d za d v zaznavanjih [0], če je d ['oznaka'] == 53]

To številko (53) lahko spremenite v drugo številko iz nabora podatkov CoCo, če želite, da vaš robot sledi drugim predmetom, 53 je jabolko. Celoten seznam je v datoteki categories.py.

Nazadnje, če v 5 sekundah ni zaznanega nobenega predmeta, pošljemo znak "5", da se robot ustavi nad serijo. Če najdemo predmet, izračunamo, kako daleč je od središča slike, in ukrepamo v skladu s tem (če je blizu središča, pojdite naravnost (znak "1" na zaporedju), če je na levi, pojdite levo itd.). Lahko se igrate s temi vrednostmi, da določite najboljše za svojo nastavitev!

4. korak: Zadnje misli

Zaključne misli
Zaključne misli

To je bistvo predstavitve ObjectFollowing. Če želite izvedeti več o pretakanju videa s spletnega strežnika Flask, si lahko ogledate to odlično vadnico Miguela Grinberga.

Tukaj si lahko ogledate tudi prenosni računalnik Nvidia Jetbot Object Detection.

Upam, da bodo moje implementacije predstavitev Jetbota pomagale pri izdelavi vašega robota z uporabo okvira Jetbot. Nisem izvedel demonstracije izogibanja oviram, saj menim, da izbira modela ne bo prinesla dobrih rezultatov izogibanja oviram.

Če imate kakršno koli vprašanje, me dodajte na LinkedId in se naročite na moj YouTube kanal, da boste obveščeni o zanimivejših projektih, ki vključujejo strojno učenje in robotiko.

Priporočena: