Turinys:

„Jetson Nano“keturkojo roboto objekto aptikimo pamoka: 4 žingsniai
„Jetson Nano“keturkojo roboto objekto aptikimo pamoka: 4 žingsniai

Video: „Jetson Nano“keturkojo roboto objekto aptikimo pamoka: 4 žingsniai

Video: „Jetson Nano“keturkojo roboto objekto aptikimo pamoka: 4 žingsniai
Video: Jetson ONE - Official Launch 2024, Lapkritis
Anonim
Image
Image

„Nvidia Jetson Nano“yra kūrėjų rinkinys, kurį sudaro „SoM“(„System on Module“) ir etaloninė nešiklio plokštė. Jis visų pirma skirtas kurti įterptąsias sistemas, kurioms reikia didelės apdorojimo galios mašininio mokymosi, mašininio matymo ir vaizdo apdorojimo programoms. Išsamią apžvalgą galite peržiūrėti mano „YouTube“kanale.

„Nvidia“stengėsi, kad „Jetson Nano“būtų kuo patogesnis vartotojui ir būtų lengvai kuriami projektai. Jie netgi pradėjo nedidelį kursą, kaip sukurti savo robotą su „Jetson Nano“, praėjus kelioms dienoms po lentos paleidimo. Išsamią informaciją apie projektą galite rasti čia.

Tačiau aš pats turėjau keletą problemų dėl „Jetbot“kaip projekto:

1) Man to nepakako EPIC. „Jetson Nano“yra labai įdomi lenta, turinti puikias apdorojimo galimybes, o paprasto rato roboto sukūrimas su ja atrodė labai… neįtikėtinas dalykas.

2) Techninės įrangos pasirinkimas. „Jetbot“reikalinga brangi aparatūra, kurią galima pakeisti kitomis alternatyvomis, pavyzdžiui, nuotoliniam naudojimui jie naudoja vairasvirtę. Skamba kaip smagu, bet ar man tikrai reikia vairasvirtės, kad galėčiau valdyti robotą?

Taigi, iškart po to, kai į rankas paėmiau „Jetson Nano“, pradėjau dirbti su savo projektu - „Jetspider“. Idėja buvo pakartoti pagrindines „Jetbot“demonstracines versijas, tačiau su įprasta aparatine įranga ir pritaikytina įvairesniems projektams.

1 žingsnis: Paruoškite aparatūrą

Paruoškite aparatūrą
Paruoškite aparatūrą

Šiam projektui panaudojau ankstyvą „Zuri“keturkojo roboto prototipą, kurį sukūrė „Zoobotics“. Ilgai gulėjo mūsų įmonės laboratorijoje. Aš jį aprūpinau lazeriu pjaustytu mediniu laikikliu „Jetson Nano“ir fotoaparato laikikliu. Jų dizainas yra patentuotas, todėl jei savo „Jetson Nano“robotui norite sukurti kažką panašaus, galite pažvelgti į „Meped“projektą, kuris yra panašus keturkojis su atviro kodo dizainu. Tiesą sakant, kadangi mūsų laboratorijoje niekas neturėjo Zuri mikrovaldiklio („Arduino Mega“) šaltinio kodo, aš naudoju „Meped“kodą, šiek tiek pakoreguodamas kojas/pėdas.

Naudojau įprastą su „Raspberry Pi“suderinamą interneto kamerą ir „Wifi“USB raktą.

Pagrindinis dalykas yra tai, kad kadangi mes ketiname naudoti „Pyserial“serijiniam ryšiui tarp mikrovaldiklio ir „Jetson Nano“, jūsų sistema iš esmės gali naudoti bet kokio tipo mikrovaldiklius, jei tik jie gali būti prijungti prie „Jetson Nano“su USB nuosekliu kabeliu. Jei jūsų robotas naudoja nuolatinės srovės variklius ir variklio tvarkyklę (pavyzdžiui, L298P), galima tiesiogiai prijungti variklio tvarkyklę prie „Jetson Nano GPIO“. Tačiau, deja, valdydami servo sistemas galite naudoti tik kitą mikrovaldiklį arba specialią I2C servo tvarkyklę, nes „Jetson Nano“neturi aparatinės įrangos GPIO PWM.

Apibendrinant, galite naudoti roboto tipą su bet kokiu mikrovaldikliu, kurį galima prijungti prie „Jetson Nano“naudojant USB duomenų kabelį. Aš įkėliau „Arduino Mega“kodą į šios pamokos „github“saugyklą, o dalis, susijusi su „Jetson Nano“sąsaja su „Arduino“, yra čia:

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

{

atvejis „1“:

Persiųsti();

pertrauka;

atvejis „2“:

atgal ();

pertrauka;

atvejis „3“:

Pasukite į dešinę();

pertrauka;

atvejis „4“:

Pasukite į kairę();

pertrauka;

Mes patikriname, ar yra duomenų, ir, jei yra, perduodame juos jungiklių dėklo valdymo struktūrai. Atkreipkite dėmesį, kad serijos duomenys pateikiami kaip simboliai, atkreipkite dėmesį į vieną kabutę aplink skaičius 1, 2, 3, 4.

2 veiksmas: įdiekite reikiamus paketus

Mūsų laimei, numatytasis „Jetson Nano“sistemos vaizdas turi daug iš anksto įdiegtų dalykų (pvz., „OpenCV“, „TensorRT“ir kt.), Todėl mums reikia įdiegti tik porą kitų paketų, kad kodas veiktų ir įjungtų SSH.

Pradėkime nuo SSH įgalinimo, jei visą likusį darbą norite atlikti nuotoliniu būdu.

sudo apt atnaujinimas

sudo apt install openssh-server

SSH serveris bus paleistas automatiškai.

Norėdami prisijungti prie „Ubuntu“kompiuterio per LAN, turite įvesti tik šią komandą:

ssh vartotojo vardas@ip_address

Jei turite „Windows“mašiną, turėsite įdiegti SSH klientą, pavyzdžiui, „Putty“.

Pradėkime diegdami „Python Package Manager“(pip) ir „Pillow“, skirtą manipuliuoti vaizdais.

sudo apt įdiegti python3-pip python3-pil

Tada įdiegsime „Jetbot“saugyklą, nes objektų aptikimui naudojame kai kurias jos sistemos dalis.

sudo apt įdiegti python3-smbus python-pyserial

git klonas

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py įdiegti

Galiausiai klonuokite mano šio projekto „Github“saugyklą į savo namų aplanką ir įdiekite „Flask“ir kai kuriuos kitus roboto nuotolinio valdymo paketus naudodami žiniatinklio serverį.

git klonas

cd

sudo pip3 įdiegti -r reikalavimai -opencv

Atsisiųskite iš anksto parengtą SSD (vieno šūvio detektoriaus) modelį iš šios nuorodos ir įdėkite jį į aplanką jetspider_demos.

Dabar mums gera eiti!

3 veiksmas: paleiskite kodą

Paleiskite kodą
Paleiskite kodą

Sukūriau dvi „Jetspider“demonstracines versijas, pirmoji yra paprasta teleoperacija, labai panaši į tą, kurią anksčiau padariau „Banana Pi“roveriui, o antroji naudoja „TensorRT“objektų aptikimui ir siunčia judesio komandas per nuoseklųjį ryšį į mikrovaldiklį..

Kadangi didžioji dalis teleopracijos kodo yra aprašyta kitoje mano pamokoje (aš padariau tik keletą nedidelių pakeitimų, vaizdo įrašų perdavimo pertvarkymas), čia sutelksiu dėmesį į objekto aptikimo dalį.

Pagrindinis scenarijus sekančiam objektui yra object_following.py, esantis jetspider_object_following, o nuotolinis veikimas yra spider_teleop.py, esantis jetspider_teleoperation.

Objektą sekantis scenarijus prasideda importuojant reikiamus modulius ir deklaruojant kintamuosius bei klasės egzempliorius. Tada šia eilute paleidžiame „Flask“žiniatinklio serverį

app.run (pagrindinis kompiuteris = '0.0.0.0', sriegis = tiesa)

Kai tik atidarysime 0.0.0.0 (localhost) adresą savo interneto naršyklėje arba „Jetson Nano“adresą tinkle (galima patikrinti naudojant komandą ifconfig), ši funkcija bus vykdoma

def indeksas ():

Tai pateikia tinklalapio šabloną, kurį turime šablonų aplanke. Šablone yra įterptas vaizdo įrašo šaltinis, todėl kai jis bus baigtas įkelti, bus vykdomas def video_feed ():, kuris grąžins atsakymo objektą, kuris yra inicijuotas naudojant generatoriaus funkciją.

Įdiegimo vietoje (vaizdo įrašo srauto tinklalapio vaizdo atnaujinimo) paslaptis yra kelių dalių atsako naudojimas. Daugialypius atsakymus sudaro antraštė, apimanti vieną iš kelių dalių turinio tipų, po to einančios dalys, atskirtos ribos žymekliu ir kiekviena turinti tam tikros dalies turinio tipą.

Def gen (): funkcija mes įgyvendiname generatoriaus funkciją begalinėje kilpoje, kuri užfiksuoja vaizdą, siunčia jį į „def execute“(img): function, o po to gaunamas vaizdas, kuris turi būti išsiųstas į tinklalapį.

def execute (img): funkcija yra ta vieta, kur vyksta visa magija, ji paima vaizdą, pakeičia jo dydį su „OpenCV“ir perduoda jį „Jetbot ObjectDetector“klasės egzemplioriui „modelis“. Jis grąžina aptikimų sąrašą, o mes naudojame „OpenCV“, kad aplink juos nubrėžtume mėlynus stačiakampius ir rašytume komentarus su aptikta objekto klase. Po to patikriname, ar yra aptiktas mūsų dominantis objektas

Galite pakeisti šį skaičių (53) į kitą skaičių iš „CoCo“duomenų rinkinio, jei norite, kad jūsų robotas sektų kitus objektus, 53 yra obuolys. Visas sąrašas yra kategorijų.py faile.

Galiausiai, jei 5 sekundes nėra aptinkamas objektas, mes perduodame simbolį „5“, kad robotas sustotų per seriją. Jei objektas yra rastas, mes apskaičiuojame, kiek jis yra nuo vaizdo centro, ir atitinkamai elgiamės (jei arti centro, eikite tiesiai (simbolis „1“serijoje), jei kairėje, eikite į kairę ir tt). Galite žaisti su šiomis vertybėmis, kad nustatytumėte geriausią jūsų konkrečiai sąrankai!

4 žingsnis: paskutinės mintys

Galutinės mintys
Galutinės mintys

Tai yra „ObjectFollowing“demonstracinės versijos esmė, jei norite daugiau sužinoti apie „Flask“žiniatinklio serverio vaizdo įrašų transliaciją, galite pažvelgti į šią puikią Miguelio Grinbergo pamoką.

Čia taip pat galite pažvelgti į „Nvidia Jetbot Object Detection“bloknotą.

Tikiuosi, kad mano įdiegtos „Jetbot“demonstracinės versijos padės sukurti jūsų robotą naudojant „Jetbot“sistemą. Aš neįdiegiau kliūčių vengimo demonstracinės versijos, nes manau, kad pasirinktas modelis neduos gerų kliūčių vengimo rezultatų.

Jei turite klausimų, pridėkite mane „LinkedId“ir užsiprenumeruokite mano „YouTube“kanalą, kad gautumėte pranešimą apie įdomesnius projektus, susijusius su mašininiu mokymusi ir robotika.

Rekomenduojamas: