Tartalomjegyzék:

Jetson Nano négylábú robotobjektum -észlelési oktatóanyag: 4 lépés
Jetson Nano négylábú robotobjektum -észlelési oktatóanyag: 4 lépés

Videó: Jetson Nano négylábú robotobjektum -észlelési oktatóanyag: 4 lépés

Videó: Jetson Nano négylábú robotobjektum -észlelési oktatóanyag: 4 lépés
Videó: Realsense d435i and t265 outdoor. Detected and mapping object. 2024, Június
Anonim
Image
Image

Az Nvidia Jetson Nano egy fejlesztői készlet, amely egy SoM -ből (System on Module) és egy referencia -hordozókártyából áll. Elsősorban olyan beágyazott rendszerek létrehozására irányul, amelyek nagy feldolgozási teljesítményt igényelnek a gépi tanuláshoz, a gépi látáshoz és a videófeldolgozó alkalmazásokhoz. Részletes beszámolót a YouTube -csatornámon tekinthet meg.

Az Nvidia megpróbálta a Jetson Nano-t a lehető legjobban felhasználóbaráttá és könnyen fejleszthetővé tenni. Még néhány nappal a tábla bevezetése után elindítottak egy kis tanfolyamot a robot építéséről Jetson Nano segítségével. A projekt részleteit itt találja.

Mindazonáltal nekem is volt néhány problémám a Jetbot projekttel kapcsolatban:

1) Nem volt elég EPIC számomra. A Jetson Nano egy nagyon érdekes tábla, nagy feldolgozási képességekkel, és egy egyszerű kerekes robot készítése vele csak nagyon… alázatos dolognak tűnt.

2) A hardver megválasztása. A Jetbot drága hardvert igényel, vagy más alternatívákkal helyettesíthető - például joystickot használnak a távműködéshez. Szórakozásnak tűnik, de tényleg szükségem van botkormányra a robot irányításához?

Így rögtön azután, hogy kezembe került a Jetson Nano, elkezdtem dolgozni a saját projektemen, a Jetspideren. Az ötlet az volt, hogy megismételje a Jetbot alapvető demóit, de gyakoribb hardverrel és szélesebb körű projektekre alkalmazható.

1. lépés: Készítse elő a hardvert

Készítse elő a hardvert
Készítse elő a hardvert

Ehhez a projekthez a Zuri négylábú robot korai prototípusát használtam, amelyet a Zoobotics készített. Sokáig hevert a cégünk laborjában. Felszereltem egy lézerrel vágott fa tartószerkezettel a Jetson Nano-hoz és egy kameratartóval. Kialakításuk szabadalmaztatott, így ha a Jetson Nano robothoz valami hasonlót szeretne létrehozni, akkor megnézheti a Meped projektet, amely egy hasonló négylábú, nyílt forráskódú kialakítással. Valójában, mivel a laboratóriumunkban senkinek sem volt Zuri mikrovezérlőjének (Arduino Mega) forráskódja, a Meped kódját használtam, néhány apró módosítással a lábak/lábak eltolásában.

Rendes USB Raspberry Pi kompatibilis webkamerát és Wifi USB-kulcsot használtam.

A lényeg az, hogy mivel a Pyserial -t fogjuk használni a mikrokontroller és a Jetson Nano közötti soros kommunikációhoz, a rendszer lényegében bármilyen típusú mikrokontrollert használhat, feltéve, hogy csatlakoztatható a Jetson Nano -hoz USB soros kábellel. Ha robotja egyenáramú motorokat és motorvezérlőt használ (például L298P-alapú), akkor lehetséges a motorvezérlő közvetlen csatlakoztatása a Jetson Nano GPIO-val. Sajnos azonban a szervók vezérléséhez csak egy másik mikrokontrollert vagy egy dedikált I2C szervo meghajtót használhat, mivel a Jetson Nano nem rendelkezik hardveres GPIO PWM -el.

Összefoglalva: a robot típusát bármilyen mikrokontrollerrel használhatja, amely USB adatkábellel csatlakoztatható a Jetson Nano készülékhez. Feltöltöttem az Arduino Mega kódját az oktatóanyag github -tárába, és a Jetson Nano és Arduino közötti interfészhez kapcsolódó rész itt található:

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

{

„1” eset:

előre();

szünet;

„2” eset:

vissza();

szünet;

„3” eset:

jobbra();

szünet;

„4” eset:

forduljon balra();

szünet;

Ellenőrizzük, hogy rendelkezésre állnak-e adatok, és ha igen, akkor továbbítsuk azokat a kapcsolóház vezérlőszerkezetének. Ügyeljen arra, hogy a sorozat adatai karakterekben jelenjenek meg, vegye figyelembe az egyetlen idézőjelet az 1, 2, 3, 4 számok körül.

2. lépés: Telepítse a szükséges csomagokat

Szerencsére számunkra az alapértelmezett Jetson Nano rendszerkép sok cuccot tartalmaz előre telepítve (például OpenCV, TensorRT stb.), Ezért csak néhány más csomagot kell telepítenünk, hogy a kód működjön és engedélyezze az SSH-t.

Kezdjük az SSH engedélyezésével arra az esetre, ha a többi munkát távolról szeretné elvégezni.

sudo apt frissítés

sudo apt install openssh-server

Az SSH szerver automatikusan elindul.

Ahhoz, hogy LAN -on keresztül csatlakozzon az Ubuntu gépéhez, csak a következő parancsot kell megadnia:

ssh felhasználónév@ip_address

Ha Windows géped van, telepítened kell az SSH klienst, például a Puttyt.

Kezdjük a Python Package Manager (pip) és a Pillow telepítésével a képmanipulációhoz.

sudo apt install python3-pip python3-pil

Ezután telepítjük a Jetbot tárolót, mivel a keretrendszer egyes részeire támaszkodunk az objektumok észlelése során.

sudo apt install python3-smbus python-pyserial

git klón

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Végül klónozza a Github tárhelyemet ehhez a projekthez az otthoni mappájába, és telepítse a Flask -t és néhány más csomagot a robot távirányítójához a webszerver segítségével.

git klón

CD

sudo pip3 telepítés -r követelmények -opencv

Töltse le az előre megtervezett SSD (Single Shot Detector) modellt erről a linkről, és helyezze a jetspider_demos mappába.

Most már indulhatunk is!

3. lépés: Futtassa a kódot

Futtassa a kódot
Futtassa a kódot

Két demót készítettem a Jetspider számára, az első egy egyszerű teleopráció, nagyon hasonló ahhoz, amit korábban a Banana Pi roverhez készítettem, a második pedig a TensorRT -t használja az objektumok észlelésére, és elküldi a mozgatási parancsokat a soros kapcsolaton keresztül a mikrokontrollernek..

Mivel a teleoprációs kód nagy részét a másik oktatóanyagom írja le (csak néhány apró módosítást végeztem, a videóátvitel átminősítését), itt az Objektumfelismerés részre koncentrálok.

Az objektumkövetés fő szkriptje a jetspider_object_following objektumban az object_following.py, a távműtét esetén a spider_teleop.py a jetspider_teleoperation programban.

Az objektumot követő parancsfájl a szükséges modulok importálásával és a változók és osztálypéldányok deklarálásával kezdődik. Ezután ezzel a sorral elindítjuk a Flask webszervert

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

Amint megnyitjuk a 0.0.0.0 (localhost) címet a webböngészőnkben vagy a Jetson Nano címet a hálózaton (ellenőrizhetjük az ifconfig paranccsal), ez a funkció végrehajtásra kerül

def index ():

Ez teszi a weblap sablont, amely a sablonok mappában van. A sablonba videoforrás van beágyazva, így miután befejezte a betöltést, a def video_feed (): végrehajtásra kerül, amely visszaad egy Válaszobjektumot, amelyet a generátor funkcióval inicializálnak.

A helyben történő frissítések (a képfolyam frissítése a videófolyamunk weboldalán) megvalósításának titka a többrészes válasz használata. A többrészes válaszok egy fejlécből állnak, amely tartalmazza az egyik többrészes tartalomtípust, majd azokat a részeket, amelyeket határjelző választ el, és mindegyiknek megvan a saját részspecifikus tartalomtípusa.

A def gen (): függvényben a generátor függvényt egy végtelen ciklusban valósítjuk meg, amely rögzíti a képet, elküldi a def execute (img): function funkcióhoz, és ezután egy képet küld a weboldalra.

def execute (img): függvény, ahol minden varázslat megtörténik, egy képet készít, átméretezi az OpenCV -vel, és átadja a Jetbot ObjectDetector osztálypéldánynak "model". Visszaadja az észlelések listáját, és az OpenCV segítségével kék téglalapokat rajzolunk köréjük, és megjegyzéseket írunk az objektum észlelt osztályával. Ezt követően ellenőrizzük, hogy van -e érdeklődési körünkbe tartozó objektum

Ezt a számot (53) másik számra módosíthatja a CoCo adatkészletből, ha azt szeretné, hogy robotja más objektumokat kövessen, az 53 egy alma. A teljes lista category.py fájlban található.

Végül, ha 5 másodpercig nem észlel objektumot, akkor továbbítjuk az "5" karaktert, hogy a robot megálljon a sorozat felett. Ha objektumot találunk, kiszámítjuk, hogy milyen messze van a kép közepétől, és ennek megfelelően cselekszünk (ha közel van a középponthoz, menjünk egyenesen ("1" karakter a sorozaton), ha bal oldalon, akkor balra, stb.). Játszhat ezekkel az értékekkel, hogy meghatározza a legjobbat az adott beállításhoz!

4. lépés: Utolsó gondolatok

Végső gondolatok
Végső gondolatok

Ez az ObjectFollowing demó lényege, ha többet szeretne megtudni a Flask webszerver Video streamingről, akkor nézze meg ezt a remek bemutatót Miguel Grinberg.

Itt megtekintheti az Nvidia Jetbot Object Detection notebookot is.

Remélem, hogy a Jetbot bemutatóim megvalósításai segítenek felépíteni robotját a Jetbot keretrendszer használatával. Nem valósítottam meg az akadályok elkerülésének bemutatóját, mivel úgy gondolom, hogy a modell megválasztása nem hoz jó akadálykerülő eredményeket.

Ha bármilyen kérdése van, vegyen fel engem a LinkedId -en, és iratkozzon fel YouTube -csatornámra, hogy értesítést kapjak a gépi tanulást és a robotikát érintő érdekesebb projektekről.

Ajánlott: