Përmbajtje:

Tutoriali i zbulimit të objektit të robotit Jetson Nano me katër këmbë: 4 hapa
Tutoriali i zbulimit të objektit të robotit Jetson Nano me katër këmbë: 4 hapa

Video: Tutoriali i zbulimit të objektit të robotit Jetson Nano me katër këmbë: 4 hapa

Video: Tutoriali i zbulimit të objektit të robotit Jetson Nano me katër këmbë: 4 hapa
Video: GANGSTAR VEGAS (КАЖДЫЙ ГАНГСТА, ДО ...) СУБТИТРЫ 2024, Qershor
Anonim
Image
Image

Nvidia Jetson Nano është një çantë zhvilluesi, e cila përbëhet nga një SoM (Sistemi në Modul) dhe një bord mbajtës referues. Ai synohet kryesisht për krijimin e sistemeve të ngulitura që kërkojnë fuqi të lartë përpunimi për mësimin e makinerisë, vizionin e makinerisë dhe aplikimet e përpunimit të videos. Ju mund të shikoni rishikimin e hollësishëm për të në kanalin tim në YouTube.

Nvidia është përpjekur ta bëjë Jetson Nano sa më miqësor për përdoruesit dhe të lehtë për tu zhvilluar projekte me të. Ata madje nisën një kurs të vogël se si të ndërtoni robotin tuaj me Jetson Nano, ditë pasi u lançua bordi. Ju mund të gjeni detajet në lidhje me atë projekt këtu.

Sidoqoftë, unë vetë kisha disa probleme me Jetbot si një projekt:

1) Nuk ishte EPIK mjaftueshëm për mua. Jetson Nano është një tabelë shumë interesante me aftësi të shkëlqyera përpunimi dhe krijimi i një roboti të thjeshtë me rrota me të thjesht dukej si një gjë shumë… dërrmuese për të bërë.

2) Zgjedhja e harduerit. Jetbot kërkon disa pajisje që janë të shtrenjta/që mund të zëvendësohen me alternativa të tjera - për shembull ata përdorin levë për teleoperacion. Tingëllon si argëtuese, por a kam vërtet nevojë për një levë për të kontrolluar një robot?

Kështu, menjëherë pasi mora në dorë Jetson Nano fillova të punoja në projektin tim, një Jetspider. Ideja ishte të përsërisnin demonstrimet themelore që kishte Jetbot, por me pajisje më të zakonshme dhe të zbatueshme për një larmi më të gjerë projektesh.

Hapi 1: Përgatitni pajisjen tuaj

Përgatitni pajisjen tuaj
Përgatitni pajisjen tuaj

Për këtë projekt kam përdorur një prototip të hershëm të robotit me katër këmbë Zuri, të bërë nga Zoobotics. Ishte shtrirë në laboratorin e kompanisë sonë për një kohë të gjatë. Unë e pajisa atë me një montim druri të prerë me lazer për Jetson Nano dhe një kamerë. Dizajni i tyre është i pronarit, kështu që nëse për robotin tuaj Jetson Nano dëshironi të krijoni diçka të ngjashme, mund të shikoni projektin Meped, i cili është një katërkëmbësh i ngjashëm me një dizajn me burim të hapur. Në fakt, meqenëse askush nuk kishte kodin burimor për mikrokontrolluesin e Zurit (Arduino Mega) në laboratorin tonë, unë e përdor kodin nga Meped me disa rregullime të vogla në kompensimin e këmbëve/këmbëve.

Kam përdorur ueb-kamera të rregullt USB të pajtueshme me Raspberry Pi dhe një dongle USB Wifi.

Pika kryesore është se meqenëse ne do të përdorim Pyserial për komunikim serik midis mikrokontrolluesit dhe Jetson Nano, sistemi juaj në thelb mund të përdorë çdo lloj mikrokontrolluesi, për aq kohë sa mund të jetë i ndërlidhur me Jetson Nano me kabllo serial USB. Nëse roboti juaj përdor motorë DC dhe një drejtues motori (për shembull të bazuar në L298P) është e mundur që të lidhni drejtpërdrejt drejtuesin e motorit me Jetson Nano GPIO. Por, për fat të keq, për kontrollimin e servove mund të përdorni vetëm një mikrokontrollues tjetër ose një shofer servo të dedikuar I2C, pasi Jetson Nano nuk ka harduer GPIO PWM.

Për ta përmbledhur, mund të përdorni llojin e robotit me çdo mikrokontrollues që mund të lidhet me Jetson Nano duke përdorur kabllo të dhënash USB. Kam ngarkuar kodin për Arduino Mega në depon e github për këtë tutorial dhe pjesa që lidhet me ndërlidhjen e Jetson Nano me Arduino është këtu:

nëse (Serial.disponueshëm ()) {switch (Serial.read ()) {

{

rasti '1':

përpara ();

pushim;

rasti '2':

mbrapa ();

pushim;

rasti '3':

Kthehu djathtas();

pushim;

rasti '4':

Kthehu majtas();

pushim;

Ne kontrollojmë nëse ka të dhëna në dispozicion, dhe nëse janë, i kalojmë ato në strukturën e kontrollit të kutisë së ndërrimit. Kushtojini vëmendje, që të dhënat nga seriali vijnë si karaktere, vini re thonjëzën rreth numrave 1, 2, 3, 4.

Hapi 2: Instaloni paketat e nevojshme

Për fatin tonë të mirë, imazhi i paracaktuar i sistemit Jetson Nano vjen me shumë gjëra të para-instaluara (si OpenCV, TensorRT, etj), kështu që na duhet vetëm të instalojmë disa pako të tjera për ta bërë kodin të funksionojë dhe të mundësojë SSH.

Le të fillojmë duke aktivizuar SSH në rast se dëshironi të bëni të gjithë pjesën tjetër të punës nga distanca.

sudo apt përditësim

sudo apt instaloni serverin e hapjes

Serveri SSH do të fillojë automatikisht.

Për t'u lidhur me makinën tuaj Ubuntu përmes LAN ju duhet vetëm të futni komandën e mëposhtme:

ssh emrin e përdoruesit@ip_address

Nëse keni makinë Windows, do t'ju duhet të instaloni klientin SSH, për shembull Putty.

Le të fillojmë duke instaluar Python Package Manager (pip) dhe Pillow për manipulimin e imazhit.

sudo apt instaloni python3-pip python3-pil

Pastaj ne do të instalojmë depo Jetbot, pasi ne jemi duke u mbështetur në disa pjesë të kornizës së tij për të kryer zbulimin e objekteve.

sudo apt install python3-smbus python-pyserial

git klon

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Më në fund, klononi depon time Github për këtë projekt në dosjen tuaj në shtëpi dhe instaloni Flask dhe disa pako të tjera për telekomandën e robotit duke përdorur serverin në internet.

git klon

cd

sudo pip3 install -r kërkesat -opencv

Shkarkoni modelin e para -stërvitur SSD (Detektor i vetëm i shkrepjes) nga kjo lidhje dhe vendoseni në dosjen jetspider_demos.

Tani jemi mirë të shkojmë!

Hapi 3: Drejtoni Kodin

Drejtoni Kodin
Drejtoni Kodin

Kam bërë dy demonstrime për Jetspider, e para është një teleopracion i thjeshtë, shumë i ngjashëm me atë që kam bërë më parë për rover Banana Pi dhe i dyti përdor TensorRT për zbulimin e objekteve dhe dërgon komandat e lëvizjes mbi lidhjen serike me mikrokontrolluesin Me

Meqenëse shumica e kodit të teleopracionit përshkruhet në mësimin tim tjetër (kam bërë vetëm disa ndryshime të vogla, duke i referuar transmetimit të videos) këtu do të përqendrohem në pjesën e Zbulimit të Objektit.

Skenari kryesor për objektin e mëposhtëm është object_following.py në jetspider_object_following, për teleoperation është spider_teleop.py në jetspider_teleoperation.

Skenari i mëposhtëm i objektit fillon me importimin e moduleve të nevojshme dhe deklarimin e variablave dhe instancave të klasës. Pastaj fillojmë serverin Flask në internet me këtë linjë

app.run (host = '0.0.0.0', i filetuar = E vërtetë)

Sapo të hapim adresën 0.0.0.0 (localhost) në shfletuesin tonë ose adresën Jetson Nano në rrjet (mund të kontrollohet me komandën ifconfig), ky funksion do të ekzekutohet

def indeksi ():

Ai jep modelin e faqes në internet që kemi në dosjen e shablloneve. Modeli ka burimin e videos të ngulitur në të, kështu që pasi të përfundojë ngarkimin, def video_feed (): do të ekzekutohet, që kthen një objekt Përgjigje që është i inicializuar me funksionin e gjeneruesit.

Sekreti për të zbatuar përditësimet në vend (azhurnimi i imazhit në faqen e internetit për transmetimin tonë të videos) është përdorimi i një përgjigjeje me shumë pjesë. Përgjigjet e shumë pjesëve përbëhen nga një titull që përfshin një nga llojet e përmbajtjes shumëpjesësh, i ndjekur nga pjesët, të ndara nga një shënues kufitar dhe secila ka llojin e vet të përmbajtjes të pjesës së vet.

Në funksionin def gen (): ne zbatojmë funksionin e gjeneratorit në një lak të pafund i cili kap imazhin, e dërgon atë në def execute (img): funksion, duke dhënë një imazh që do të dërgohet në faqen e internetit pas kësaj.

def execute (img): funksioni është aty ku ndodh e gjithë magjia, merr një imazh, e ndryshon në madhësi me OpenCV dhe ia kalon shembullit të klasës "model" të Jetbot ObjectDetector. Kthehet kthen listën e zbulimeve dhe ne përdorim OpenCV për të vizatuar drejtkëndësha blu rreth tyre dhe për të shkruar shënime me klasën e zbuluar të objektit. Pas kësaj ne kontrollojmë nëse ka një objekt të interesit tonë të zbuluar ndeshje_detections = [d për d në zbulimet [0] nëse d ['label'] == 53]

Mund ta ndryshoni atë numër (53) në numër tjetër nga të dhënat e CoCo nëse dëshironi që roboti juaj të ndjekë objekte të tjera, 53 është një mollë. E gjithë lista është në kategorinë file.py.

Së fundi, nëse nuk ka objekt të zbuluar për 5 sekonda, ne transmetojmë karakterin "5" që roboti të ndalojë mbi serialin. Nëse objekti gjendet, ne llogarisim sa larg është nga qendra e figurës dhe veprojmë në përputhje me rrethanat (nëse afër qendrës, shkoni drejt (karakteri "1" në serial), nëse në të majtë, shkoni majtas, etj). Mund të luani me ato vlera për të përcaktuar më të mirën për konfigurimin tuaj të veçantë!

Hapi 4: Mendimet përfundimtare

Mendimet përfundimtare
Mendimet përfundimtare

Kjo është thelbi i demonstrimit të ObjectFollowing, nëse doni të dini më shumë për Flask webserver Video streaming, mund t'i hidhni një sy këtij udhëzimi të mrekullueshëm nga Miguel Grinberg.

Ju gjithashtu mund t'i hidhni një sy fletores së Nvidia Jetbot Object Detection këtu.

Shpresoj që zbatimet e mia të demonstrimeve të Jetbot do të ndihmojnë në ndërtimin e robotit tuaj duke përdorur kornizën Jetbot. Unë nuk kam zbatuar një demonstrim të shmangies së pengesave, pasi mendoj se zgjedhja e modelit nuk do të japë rezultate të mira të shmangies së pengesave.

Më shtoni në LinkedId nëse keni ndonjë pyetje dhe regjistrohuni në kanalin tim në YouTube për t'u njoftuar për projekte më interesante që përfshijnë mësimin e makinerisë dhe robotikën.

Recommended: