Taula de continguts:

Tutorial de detecció d'objectes de robot quadruped Jetson Nano: 4 passos
Tutorial de detecció d'objectes de robot quadruped Jetson Nano: 4 passos

Vídeo: Tutorial de detecció d'objectes de robot quadruped Jetson Nano: 4 passos

Vídeo: Tutorial de detecció d'objectes de robot quadruped Jetson Nano: 4 passos
Vídeo: Учебное пособие по Nvidia Jetson Nano | Первый взгляд на искусственный интеллект | Тензорный поток ML 2024, Juny
Anonim
Image
Image

Nvidia Jetson Nano és un kit per a desenvolupadors, que consisteix en un SoM (System on Module) i una placa de suport de referència. Es dirigeix principalment a la creació de sistemes incrustats que requereixen una gran potència de processament per a aplicacions d'aprenentatge automàtic, visió automàtica i processament de vídeo. Podeu veure la ressenya detallada al meu canal de YouTube.

Nvidia ha estat intentant que Jetson Nano sigui el més fàcil d'utilitzar i que sigui fàcil de desenvolupar projectes. Fins i tot van iniciar un petit curs sobre com construir el vostre robot amb Jetson Nano, dies després del llançament del tauler. Podeu trobar els detalls d’aquest projecte aquí.

Tanmateix, jo mateix vaig tenir alguns problemes amb el Jetbot com a projecte:

1) No va ser prou EPIC per a mi. Jetson Nano és un tauler molt interessant amb grans capacitats de processament i fer un simple robot de rodes amb ell semblava una cosa molt… decebedora per fer.

2) L’elecció del maquinari. Jetbot requereix un maquinari car que es pugui substituir per altres alternatives, per exemple, utilitzen el joystick per a la teleoperació. Sembla divertit, però realment necessito un joystick per controlar un robot?

Així que, immediatament després d’haver posat les mans a Jetson Nano, vaig començar a treballar en el meu propi projecte, un Jetspider. La idea era reproduir les demostracions bàsiques que tenia Jetbot, però amb maquinari més comú i aplicable a una àmplia varietat de projectes.

Pas 1: prepareu el vostre maquinari

Prepareu el vostre maquinari
Prepareu el vostre maquinari

Per a aquest projecte vaig utilitzar un primer prototip de robot quadrúpede Zuri, fabricat per Zoobotics. Va estar estirat al laboratori de la nostra empresa durant molt de temps. L’he equipat amb un suport de fusta tallat amb làser per a Jetson Nano i un suport de càmera. El seu disseny és propietari, de manera que si per al vostre robot Jetson Nano voleu crear alguna cosa similar, podeu fer una ullada al projecte Meped, que és un quadrúpede similar amb un disseny de codi obert. De fet, com que ningú tenia el codi font del microcontrolador de Zuri (Arduino Mega) al nostre laboratori, vaig utilitzar el codi de Meped amb alguns ajustaments menors en la compensació de cames / peus.

He utilitzat una càmera web compatible amb USB Raspberry Pi i un dongle USB Wifi.

El punt principal és que, ja que utilitzarem Pyserial per a la comunicació en sèrie entre microcontrolador i Jetson Nano, el vostre sistema pot utilitzar bàsicament qualsevol tipus de microcontrolador, sempre que es pugui connectar amb Jetson Nano amb un cable sèrie USB. Si el robot utilitza motors de corrent continu i un controlador de motor (per exemple, basat en L298P), és possible connectar directament el controlador del motor amb Jetson Nano GPIO. Però, malauradament, per controlar servos només podeu utilitzar un altre microcontrolador o un servo controlador dedicat I2C, ja que Jetson Nano no té maquinari GPIO PWM.

Per resumir, podeu utilitzar un tipus de robot amb qualsevol microcontrolador que es pugui connectar amb Jetson Nano mitjançant un cable de dades USB. He penjat el codi d’Arduino Mega al repositori de github d’aquest tutorial i la part rellevant per a la interfície de Jetson Nano amb Arduino és aquí:

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

{

cas "1":

endavant ();

trencar;

cas "2":

esquena();

trencar;

cas "3":

giri a la dreta();

trencar;

cas "4":

giri a l'esquerra();

trencar;

Comprovem si hi ha dades disponibles i, si és així, les passem a l’estructura de control de la casella. Presteu atenció a que les dades de la sèrie apareguin com a caràcters; observeu la cometa única al voltant dels números 1, 2, 3, 4.

Pas 2: instal·leu els paquets necessaris

Afortunadament per a nosaltres, la imatge del sistema Jetson Nano per defecte inclou moltes coses preinstal·lades (com OpenCV, TensorRT, etc.), de manera que només necessitem instal·lar un parell d’altres paquets per fer funcionar el codi i habilitar SSH.

Comencem activant SSH per si voleu fer tota la resta de la feina de forma remota.

actualització sudo apt

sudo apt install openssh-server

El servidor SSH s'iniciarà automàticament.

Per connectar-vos a la vostra màquina Ubuntu per LAN només heu d'introduir l'ordre següent:

nom d'usuari ssh @ ip_address

Si teniu la màquina Windows, haureu d’instal·lar un client SSH, per exemple Putty.

Comencem instal·lant Python Package Manager (pip) i Pillow per a la manipulació de la imatge.

sudo apt install python3-pip python3-pil

A continuació, instal·larem el dipòsit Jetbot, ja que confiem en algunes parts del seu marc per realitzar la detecció d'objectes.

sudo apt install python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Finalment cloneu el meu dipòsit Github per a aquest projecte a la vostra carpeta inicial i instal·leu Flask i alguns altres paquets per al control remot del robot mitjançant el servidor web.

git clone

cd

sudo pip3 install -r requirements-opencv

Descarregueu el model SSD (Single Shot Detector) pretrenat des d’aquest enllaç i col·loqueu-lo a la carpeta jetspider_demos.

Ara estem bé per anar-hi!

Pas 3: executeu el codi

Executeu el codi
Executeu el codi

Vaig fer dues demostracions per a Jetspider, la primera és una teleopration simple, molt similar a la que vaig fer anteriorment per al rover Banana Pi i la segona utilitza TensorRT per a la detecció d'objectes i envia les ordres de moviment a través de la connexió sèrie al microcontrolador..

Com que la major part del codi de teleopració es descriu al meu altre tutorial (només he fet alguns ajustaments menors, retransmissió de la transmissió de vídeo) aquí em centraré en la part de Detecció d'objectes.

El guió principal per a l'objecte següent és object_following.py a jetspider_object_following, per a la teleoperació és spider_teleop.py a jetspider_teleoperation.

El següent script d'objecte comença amb la importació dels mòduls necessaris i la declaració de variables i instàncies de classe. A continuació, iniciem el servidor web Flask amb aquesta línia

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

Tan bon punt obrim l'adreça 0.0.0.0 (localhost) al nostre navegador web o l'adreça Jetson Nano a la xarxa (es pot comprovar amb l'ordre ifconfig), aquesta funció s'executarà

índex def ():

Representa la plantilla de pàgina web que tenim a la carpeta de plantilles. La plantilla té una font de vídeo incrustada, de manera que, un cop finalitzada la càrrega, s'executarà def video_feed (): que retorna un objecte Response que s'inicialitza amb la funció generadora.

El secret per implementar actualitzacions in situ (actualitzar la imatge a la pàgina web del nostre flux de vídeo) és utilitzar una resposta de diverses parts. Les respostes multipart consisteixen en una capçalera que inclou un dels tipus de contingut multipart, seguit de les parts, separades per un marcador de límits i cadascuna amb el seu propi tipus de contingut específic.

A def gen (): funció implementem la funció generadora en un bucle infinit que captura la imatge, l’envia a def execute (img): function, donant una imatge que s’envia a la pàgina web després d’això.

def execute (img): la funció és on succeeix tota la màgia, pren una imatge, la canvia de mida amb OpenCV i la passa a la instància de classe Jetbot ObjectDetector "model". Torna la llista de deteccions i fem servir OpenCV per dibuixar rectangles blaus al seu voltant i escriure anotacions amb la classe objecte detectat. Després, comprovem si hi ha un objecte del nostre interès

Podeu canviar aquest número (53) a un altre número del conjunt de dades CoCo si voleu que el vostre robot segueixi altres objectes, 53 és una poma. Tota la llista es troba al fitxer categories.py.

Finalment, si no hi ha cap objecte detectat durant 5 segons, transmetem el caràcter "5" perquè el robot es detingui sobre la sèrie. Si es troba un objecte, calculem a quina distància es troba del centre de la imatge i actuem en conseqüència (si està a prop del centre, aneu recte (caràcter "1" a la sèrie), si a l'esquerra, aneu a l'esquerra, etc.). Podeu jugar amb aquests valors per determinar el millor per a la vostra configuració particular.

Pas 4: Pensaments finals

Pensaments finals
Pensaments finals

Aquest és l’essencial de la demostració ObjectFollowing, si voleu obtenir més informació sobre la transmissió de vídeo del servidor web Flask, podeu fer una ullada a aquest fantàstic tutorial de Miguel Grinberg.

També podeu fer una ullada al bloc de notes Nvidia Jetbot Object Detection aquí.

Espero que les meves implementacions de demostracions de Jetbot us ajudin a construir el vostre robot mitjançant el framework Jetbot. No vaig implementar una demostració d'evitació d'obstacles, ja que crec que l'elecció del model no donarà bons resultats d'evitació d'obstacles.

Afegiu-me a LinkedId si teniu alguna pregunta i subscriviu-vos al meu canal de YouTube per rebre notificacions sobre projectes més interessants relacionats amb l'aprenentatge automàtic i la robòtica.

Recomanat: