Sisukord:

Jetson Nano neljajalgsete robotobjektide tuvastamise õpetus: 4 sammu
Jetson Nano neljajalgsete robotobjektide tuvastamise õpetus: 4 sammu

Video: Jetson Nano neljajalgsete robotobjektide tuvastamise õpetus: 4 sammu

Video: Jetson Nano neljajalgsete robotobjektide tuvastamise õpetus: 4 sammu
Video: Обзор микрокомпьютера Nvidia Jetson Nano: распаковка и установка системы 2024, Juuni
Anonim
Image
Image

Nvidia Jetson Nano on arenduskomplekt, mis koosneb SoM -ist (System on Module) ja võrdluskandjaplaadist. See on peamiselt mõeldud sisseehitatud süsteemide loomiseks, mis nõuavad suurt töötlemisvõimsust masinõppe, masina nägemise ja videotöötluse rakenduste jaoks. Selle üksikasjalikku ülevaadet saate vaadata minu YouTube'i kanalil.

Nvidia on püüdnud muuta Jetson Nano võimalikult kasutajasõbralikuks ja hõlpsasti arendatavaks. Nad käivitasid isegi väikese kursuse, kuidas Jetson Nanoga oma robotit ehitada, mitu päeva pärast plaadi käivitamist. Selle projekti üksikasjad leiate siit.

Kuid mul endal oli Jetboti kui projektiga paar probleemi:

1) See ei olnud minu jaoks piisavalt eepiline. Jetson Nano on väga huvitav plaat, millel on suurepärased töötlemisvõimalused ja lihtsa ratastega roboti tegemine sellega tundus lihtsalt väga… alatu.

2) riistvara valik. Jetbot vajab mõnda riistvara, mis on kallis/asendatav muude alternatiividega - näiteks kasutavad nad kaugjuhtimiseks juhtkangi. Kõlab nagu lõbus, aga kas ma tõesti vajan juhtkangi, et robotit juhtida?

Niisiis, kohe pärast seda, kui olin Jetson Nano kätte saanud, hakkasin tegelema oma projektiga, Jetspideriga. Idee oli korrata Jetboti põhilisi demosid, kuid tavalisema riistvaraga ja rakendatav suuremale hulgale projektidele.

Samm: valmistage riistvara ette

Valmistage riistvara ette
Valmistage riistvara ette

Selle projekti jaoks kasutasin Zobi neljajalgse roboti varajast prototüüpi, mille on valmistanud Zoobotics. See lebas pikka aega meie ettevõtte laboris. Varustasin selle laseriga lõigatud puidust kinnitusega Jetson Nano jaoks ja kaamera kinnitusega. Nende disain on varaline, nii et kui soovite oma Jetson Nano roboti jaoks midagi sarnast luua, saate vaadata Mepedi projekti, mis on sarnane avatud lähtekoodiga neljajalgne. Tegelikult, kuna kellelgi polnud meie laboris Zuri mikrokontrolleri (Arduino Mega) lähtekoodi, kasutasin Mepedi koodi koos väikeste muudatustega jalgade/jalgade nihutamisel.

Kasutasin tavalist USB Raspberry Pi-ga ühilduvat veebikaamerat ja Wifi USB-donglit.

Peamine on see, et kuna me hakkame mikrokontrolleri ja Jetson Nano vaheliseks jadaühenduseks kasutama Pyserialit, saab teie süsteem sisuliselt kasutada mis tahes tüüpi mikrokontrollerit, kui seda saab ühendada Jetson Nano USB -jadakaabliga. Kui teie robot kasutab alalisvoolumootoreid ja mootori draiverit (näiteks L298P-põhist), on võimalik mootori draiverit otse Jetson Nano GPIO-ga liidestada. Kahjuks saate servode juhtimiseks kasutada ainult teist mikrokontrollerit või spetsiaalset I2C servo draiverit, kuna Jetson Nano ei sisalda riistvara GPIO PWM -i.

Kokkuvõtteks võite kasutada robotitüüpi mis tahes mikrokontrolleriga, mille saab Jetson Nano abil USB -andmesidekaabli abil ühendada. Laadisin Arduino Mega koodi selle õpetuse jaoks githubi hoidlasse üles ja Jetson Nano Arduinoga liidestamiseks oluline osa on siin:

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

{

juhtum '1':

edasi ();

murda;

juhtum '2':

tagasi();

murda;

juhtum '3':

pööra paremale();

murda;

juhtum '4':

pööra vasakule();

murda;

Kontrollime, kas andmed on saadaval, ja kui on, siis edastame need lülituskorpuse juhtimisstruktuurile. Pöörake tähelepanu sellele, et seeria andmed tulevad tähemärkidena, pange tähele jutumärke numbrite 1, 2, 3, 4 ümber.

Samm: installige vajalikud paketid

Meie õnneks on vaikimisi Jetson Nano süsteemi kujutisega kaasas palju eelinstallitud asju (nt OpenCV, TensorRT jne), seega peame koodi töötamiseks ja SSH lubamiseks installima vaid paar muud paketti.

Alustuseks lubage SSH juhuks, kui soovite kogu ülejäänud töö kaugjuhtimisega teha.

sudo apt värskendus

sudo apt install openssh-server

SSH -server käivitub automaatselt.

Oma Ubuntu masinaga ühenduse loomiseks LAN -i kaudu peate sisestama ainult järgmise käsu:

ssh kasutajanimi@ip_address

Kui teil on Windowsi masin, peate installima SSH -kliendi, näiteks Putty.

Alustuseks paigaldame Python Package Manageri (pip) ja Pillow pildiga manipuleerimiseks.

sudo apt install python3-pip python3-pil

Seejärel installime Jetboti hoidla, kuna objektide tuvastamisel toetume selle raamistiku mõnele osale.

sudo apt install python3-smbus python-pyserial

git kloon

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Lõpuks kloonige minu projekti jaoks mõeldud Githubi hoidla oma kodukataloogi ja installige veebiserveri abil Flask ja mõned muud paketid roboti kaugjuhtimiseks.

git kloon

cd

sudo pip3 install -r nõuded -opencv

Laadige sellelt lingilt alla eelnevalt ettevalmistatud SSD (Single Shot Detector) mudel ja asetage see kausta jetspider_demos.

Nüüd on meil hea minna!

Samm: käivitage kood

Käivitage kood
Käivitage kood

Tegin Jetspideri jaoks kaks demot, esimene on lihtne teleoperatsioon, mis on väga sarnane sellele, mille tegin varem Banana Pi roveri jaoks ja teine kasutab TensorRT -d objektide tuvastamiseks ja saadab liigutuskäsud jadaühenduse kaudu mikrokontrollerile.

Kuna enamikku teleoperatsioonikoodist on kirjeldatud minu teises õpetuses (tegin vaid mõningaid väiksemaid muudatusi, video edastamise ümberhäälestamine), keskendun siin objekti tuvastamise osale.

Objekti järgimise põhiskript on objektis jetspider_object_following object_following.py, kaugtöö puhul on jetspider_teleoperation spider_teleop.py.

Skripti järgnev objekt algab vajalike moodulite importimisega ning muutujate ja klassi eksemplaride deklareerimisega. Seejärel käivitame selle reaga Flaski veebiserveri

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

Niipea kui avame 0.0.0.0 (localhost) aadressi meie veebibrauseris või Jetson Nano aadressi võrgus (saab kontrollida käsuga ifconfig), käivitatakse see funktsioon

def indeks ():

See renderdab mallide kaustas oleva veebilehe malli. Malli on sisse lülitatud videoallikas, nii et kui laadimine on lõpule viidud, käivitatakse def video_feed ():, mis tagastab vastusobjekti, mis lähtestatakse generaatorifunktsiooniga.

Kohapealsete värskenduste (meie videovoo veebilehe pildi värskendamine) rakendamise saladus on mitmeosalise vastuse kasutamine. Mitmeosalised vastused koosnevad päisest, mis sisaldab ühte mitmeosalisest sisutüübist, millele järgnevad piirimärgiga eraldatud osad ja igaühel on oma osa spetsiifiline sisutüüp.

Funktsioonis def gen (): rakendame generaatori funktsiooni lõpmatus silmusesse, mis jäädvustab pildi, saadab selle def execute (img): function, saades pildi, mis saadetakse pärast seda veebilehele.

def execute (img): funktsioon on koht, kus kogu maagia juhtub, see võtab pildi, muudab selle suurust OpenCV abil ja edastab selle Jetbot ObjectDetector klassi eksemplarile "model". Tagastab tagastab tuvastuste loendi ja me kasutame OpenCV abil nende ümber siniseid ristkülikuid ja kirjutame märkmeid objekti tuvastatud klassiga. Pärast seda kontrollime, kas meie huvipakkuv objekt on tuvastatud

Kui soovite, et teie robot järgiks teisi objekte, saate selle numbri (53) muuta CoCo andmekogumist teisele numbrile, 53 on õun. Kogu loend on kategoorias.py.

Lõpuks, kui 5 sekundi jooksul objekti ei tuvastata, edastame märgi "5", et robot saaks seeria kohal peatuda. Kui objekt leitakse, arvutame välja, kui kaugel see on kujutise keskpunktist, ja tegutseme vastavalt (kui keskpunkti lähedal, minge otse (seerias märk 1), vasakul vasakul jne). Nende väärtustega saate mängida, et valida oma konkreetse seadistuse jaoks parim!

4. samm: lõplikud mõtted

Lõplikud mõtted
Lõplikud mõtted

See on ObjectFollowing demo põhisisu. Kui soovite Flaski veebiserveri video voogesituse kohta rohkem teada saada, saate vaadata seda suurepärast Miguel Grinbergi õpetust.

Siin saate vaadata ka Nvidia Jetbot Object Detection märkmikku.

Loodan, et minu Jetboti demode rakendused aitavad teie robotit Jetboti raamistiku abil üles ehitada. Ma ei rakendanud takistuste vältimise demot, kuna arvan, et mudeli valik ei anna häid takistuste vältimise tulemusi.

Kui teil on küsimusi, lisage mind LinkedIdi ja tellige minu YouTube'i kanal, et saada märguandeid huvitavamate masinõppe ja robootikaga seotud projektide kohta.

Soovitan: