Sisällysluettelo:

Jetson Nanon nelijalkainen robottiobjektin tunnistusopetus: 4 vaihetta
Jetson Nanon nelijalkainen robottiobjektin tunnistusopetus: 4 vaihetta

Video: Jetson Nanon nelijalkainen robottiobjektin tunnistusopetus: 4 vaihetta

Video: Jetson Nanon nelijalkainen robottiobjektin tunnistusopetus: 4 vaihetta
Video: Обзор микрокомпьютера Nvidia Jetson Nano: распаковка и установка системы 2024, Marraskuu
Anonim
Image
Image

Nvidia Jetson Nano on kehittäjäpaketti, joka koostuu SoM -järjestelmästä (System on Module) ja viitekortista. Se on tarkoitettu ensisijaisesti sulautettujen järjestelmien luomiseen, jotka vaativat suurta prosessointitehoa koneoppimiseen, konenäköön ja videonkäsittelyyn. Voit katsoa sen yksityiskohtaisen arvostelun YouTube -kanavallani.

Nvidia on yrittänyt tehdä Jetson Nanosta mahdollisimman käyttäjäystävällisen ja helposti kehitettävän projektin. He jopa aloittivat pienen kurssin robotin rakentamisesta Jetson Nanon kanssa päiviä levyn julkaisun jälkeen. Löydät projektin yksityiskohdat täältä.

Minulla oli kuitenkin muutamia ongelmia Jetbotin kanssa projektina:

1) Se ei ollut tarpeeksi EPIC minulle. Jetson Nano on erittäin mielenkiintoinen levy, jolla on erinomaiset käsittelyominaisuudet ja yksinkertaisen pyörillä varustetun robotin tekeminen sen kanssa vain tuntui erittäin… aliarvioivalta.

2) Laitteiston valinta. Jetbot vaatii kalliita laitteistoja, jotka voidaan korvata muilla vaihtoehdoilla - esimerkiksi he käyttävät ohjaussauvaa etäkäyttöön. Kuulostaa hauskalta, mutta tarvitsenko todella ohjaussauvan robotin ohjaamiseen?

Joten heti sen jälkeen, kun sain käsiini Jetson Nanon, aloin työskennellä oman projektini, Jetspiderin, parissa. Ajatuksena oli toistaa Jetbotin perusdemot, mutta yleisemmällä laitteistolla ja sovellettavissa laajempaan valikoimaan projekteja.

Vaihe 1: Valmistele laitteisto

Valmistele laitteisto
Valmistele laitteisto

Tässä projektissa käytin Zooboticsin valmistamaa Zuri -nelijalkaisen robotin varhaista prototyyppiä. Se makasi yrityksemme laboratoriossa pitkään. Varustin sen laserleikatulla puukiinnikkeellä Jetson Nanolle ja kameratelineellä. Niiden muotoilu on oma, joten jos haluat luoda Jetson Nano -robotillesi jotain vastaavaa, voit tutustua Meped-projektiin, joka on samanlainen nelijalkainen avoimen lähdekoodin suunnittelulla. Itse asiassa, koska kenelläkään ei ollut laboratoriossamme Zurin mikrokontrollerin (Arduino Mega) lähdekoodia, käytin Mepedin koodia pienillä säätöillä jaloissa/jaloissa.

Käytin tavallista USB Raspberry Pi -yhteensopivaa verkkokameraa ja Wifi-USB-sovitinta.

Pääasia on, että koska aiomme käyttää Pyseriaa sarjaliikenteeseen mikro -ohjaimen ja Jetson Nanon välillä, järjestelmäsi voi käytännössä käyttää mitä tahansa mikro -ohjainta, kunhan se voidaan liittää Jetson Nanon kanssa USB -sarjakaapelilla. Jos robotti käyttää tasavirtamoottoreita ja moottoriajuria (esimerkiksi L298P-pohjainen), moottorin ohjain voidaan liittää suoraan Jetson Nano GPIO -laitteeseen. Mutta valitettavasti servojen ohjaamiseen voit käyttää vain toista mikro -ohjainta tai omaa I2C -servo -ohjainta, koska Jetson Nano ei sisällä laitteistokäyttöistä GPIO PWM -tekniikkaa.

Yhteenvetona voidaan sanoa, että robottityyppiä voidaan käyttää minkä tahansa mikro -ohjaimen kanssa, joka voidaan liittää Jetson Nano -laitteeseen USB -datakaapelilla. Latasin Arduino Megan koodin tämän opetusohjelman github -arkistoon, ja osa, joka liittyy Jetson Nanon liittämiseen Arduinon kanssa, on täällä:

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

{

tapaus '1':

eteenpäin();

tauko;

tapaus '2':

takaisin();

tauko;

tapaus '3':

käänny oikealle();

tauko;

tapaus '4':

käänny vasemmalle();

tauko;

Tarkistamme, onko tietoja saatavilla, ja jos on, välitämme ne kytkentäkotelon ohjausrakenteelle. Huomaa, että sarjan tiedot tulevat merkkinä, huomaa lainausmerkki numeroiden 1, 2, 3, 4 ympärillä.

Vaihe 2: Asenna tarvittavat paketit

Meille onneksi Jetson Nano -järjestelmän oletuskuvan mukana tulee paljon esiasennettua tavaraa (kuten OpenCV, TensorRT jne.), Joten meidän on asennettava vain pari muuta pakettia, jotta koodi toimii ja SSH otetaan käyttöön.

Aloitetaan ottamalla SSH käyttöön, jos haluat tehdä kaiken muun työn etänä.

sudo apt päivitys

sudo apt install openssh-server

SSH -palvelin käynnistyy automaattisesti.

Jos haluat muodostaa yhteyden Ubuntu -koneeseesi lähiverkon kautta, sinun tarvitsee vain syöttää seuraava komento:

ssh -käyttäjänimi@ip_address

Jos sinulla on Windows -kone, sinun on asennettava SSH -asiakas, esimerkiksi Putty.

Aloitetaan asentamalla Python Package Manager (pip) ja Pillow kuvankäsittelyyn.

sudo apt asenna python3-pip python3-pil

Asennamme sitten Jetbot -arkiston, koska luotamme joidenkin sen puitteiden osiin objektien havaitsemiseen.

sudo apt asentaa python3-smbus python-pyserial

git-klooni

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Kloonaa lopulta Github -arkistoni tätä projektia varten kotikansioosi ja asenna Flask ja muut paketit robotin kauko -ohjausta varten verkkopalvelimen avulla.

git -klooni

CD

sudo pip3 asenna -r vaatimukset -opencv

Lataa esivalmistettu SSD (Single Shot Detector) -malli tästä linkistä ja aseta se jetspider_demos -kansioon.

Nyt on hyvä lähteä!

Vaihe 3: Suorita koodi

Suorita koodi
Suorita koodi

Tein kaksi demoa Jetspiderille, ensimmäinen on yksinkertainen teleoperaatio, joka on hyvin samanlainen kuin mitä tein aiemmin Banana Pi roverille, ja toinen käyttää TensorRT: tä objektien havaitsemiseen ja lähettää liikekomennot sarjayhteyden kautta mikrokontrolleriin.

Koska suurin osa teleopraatiokoodista on kuvattu toisessa opetusohjelmassani (tein vain pieniä hienosäätöjä, videon lähetyksen uudelleenluokittelua), keskityn tässä objektin tunnistusosaan.

Objektien seuraamisen pääskripti on object_following.py in jetspider_object_following, teleoperaatio on spider_teleop.py in jetspider_teleoperation.

Objektia seuraava komentosarja alkaa tarvittavien moduulien tuomisella ja muuttujien ja luokka -ilmentymien ilmoittamisella. Sitten aloitamme Flask -verkkopalvelimen tällä rivillä

app.run (isäntä = '0.0.0.0', threaded = True)

Heti kun avaamme 0.0.0.0 (localhost) -osoitteen verkkoselaimessamme tai Jetson Nano -osoitteen verkossa (voi tarkistaa ifconfig -komennolla), tämä toiminto suoritetaan

def -indeksi ():

Se tekee Web -sivumallin, joka meillä on Mallit -kansiossa. Malliin on upotettu videolähde, joten kun lataus on valmis, suoritetaan def video_feed ():, joka palauttaa vastausobjektin, joka on alustettu generaattoritoiminnolla.

Paikan päällä olevien päivitysten (videovirran verkkosivun kuvan päivittäminen) salaisuus on käyttää moniosaista vastausta. Moniosaiset vastaukset koostuvat otsikosta, joka sisältää yhden moniosaisista sisältötyypeistä, joita seuraa osat, jotka on erotettu rajamerkillä ja joilla jokaisella on oma osakohtainen sisältötyypinsä.

Def gen (): -funktiossa toteutamme generaattoritoiminnon äärettömässä silmukassa, joka kaappaa kuvan ja lähettää sen def execute (img): function -toimintoon, jolloin kuva lähetetään sen jälkeen verkkosivulle.

def execute (img): toiminto on missä kaikki taikuus tapahtuu, se ottaa kuvan, muuttaa sen kokoa OpenCV: llä ja välittää sen Jetbot ObjectDetector -luokan esiintymälle "model". Se palauttaa palauttaa havaitsemisluettelon ja piirtämme OpenCV: n avulla siniset suorakulmiot niiden ympärille ja kirjoitamme huomautuksia objektin havaitsemalla luokalla. Tämän jälkeen tarkistamme, onko kiinnostavaa kohdetta havaittumatching_detections = [d d d havainnoissa [0] jos d ['label'] == 53]

Voit muuttaa tämän numeron (53) toiseksi CoCo -tietojoukon numeroksi, jos haluat, että robotti seuraa muita kohteita, 53 on omena. Koko luettelo on category.py -tiedostossa.

Lopuksi, jos mitään kohdetta ei havaita 5 sekuntiin, lähetämme merkin "5", jotta robotti pysähtyy sarjan yli. Jos kohde löytyy, laskemme kuinka kaukana se on kuvan keskustasta ja toimimme sen mukaisesti (jos lähellä keskustaa, mene suoraan (sarja "1"), jos vasemmalla, mene vasemmalle jne.). Voit pelata näiden arvojen avulla määrittääksesi parhaiten asetuksellesi!

Vaihe 4: Viimeiset ajatukset

Lopulliset ajatukset
Lopulliset ajatukset

Tämä on ObjectFollowing -esittelyn ydin, jos haluat tietää lisää Flask -verkkopalvelimen videon suoratoistosta, voit katsoa tätä Miguel Grinbergin hienoa opetusohjelmaa.

Voit myös katsoa Nvidia Jetbot Object Detection -muistikirjaa täältä.

Toivon, että Jetbot -esittelyjeni toteutukset auttavat rakentamaan robottisi Jetbot -kehyksen avulla. En toteuttanut esteiden välttämisen esittelyä, koska mielestäni mallin valinta ei tuota hyviä esteiden välttämisen tuloksia.

Lisää minut LinkedIdiin, jos sinulla on kysyttävää, ja tilaa YouTube -kanavani, niin saat ilmoituksen mielenkiintoisimmista koneoppimista ja robotiikkaa koskevista projekteista.

Suositeltava: