Talaan ng mga Nilalaman:

Jetson Nano Quadruped Tutorial ng Pagtuklas ng Bagay ng Robot: 4 na Hakbang
Jetson Nano Quadruped Tutorial ng Pagtuklas ng Bagay ng Robot: 4 na Hakbang

Video: Jetson Nano Quadruped Tutorial ng Pagtuklas ng Bagay ng Robot: 4 na Hakbang

Video: Jetson Nano Quadruped Tutorial ng Pagtuklas ng Bagay ng Robot: 4 na Hakbang
Video: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, Hunyo
Anonim
Image
Image

Ang Nvidia Jetson Nano ay isang developer kit, na binubuo ng isang SoM (System on Module) at isang sanggunian na board ng carrier. Pangunahin itong naka-target para sa paglikha ng mga naka-embed na system na nangangailangan ng mataas na kapangyarihan sa pagproseso para sa pag-aaral ng makina, paningin ng makina at mga application ng pagpoproseso ng video. Maaari kang manuod ng detalyadong pagsusuri para dito sa aking channel sa YouTube.

Sinusubukan ng Nvidia na gawin si Jetson Nano bilang madaling gamitin at madaling bumuo ng mga proyekto hangga't maaari. Naglunsad pa sila ng isang maliit na kurso sa kung paano mabuo ang iyong robot kasama si Jetson Nano, mga araw pagkatapos ng paglunsad ng board. Maaari mong makita ang mga detalye tungkol sa proyektong ito dito.

Gayunpaman ako mismo ay may ilang mga problema sa Jetbot bilang isang proyekto:

1) Hindi ito sapat na EPIC para sa akin. Ang Jetson Nano ay isang napaka-kagiliw-giliw na board na may mahusay na mga kakayahan sa pagproseso at paggawa ng isang simpleng robot na may gulong na tila ito ay napaka… underwhelming bagay na dapat gawin.

2) Ang pagpipilian sa hardware. Nangangailangan ang Jetbot ng ilang hardware na mahal / maaaring mapalitan ng iba pang mga kahalili - halimbawa gumagamit sila ng joystick para sa teleoperation. Parang masaya, ngunit kailangan ko ba talaga ng isang joystick upang makontrol ang isang robot?

Kaya, kaagad pagkatapos kong makuha ang aking mga kamay kay Jetson Nano nagsimula akong magtrabaho sa sarili kong proyekto, isang Jetspider. Ang ideya ay upang magtiklop ng pangunahing mga demo na mayroon ang Jetbot, ngunit may mas karaniwang hardware at nalalapat sa isang mas malawak na iba't ibang mga proyekto.

Hakbang 1: Ihanda ang Iyong Hardware

Ihanda ang Iyong Hardware
Ihanda ang Iyong Hardware

Para sa proyektong ito, gumamit ako ng isang maagang prototype ng Zuri quadruped robot, na ginawa ng Zoobotics. Nakahiga ito sa lab ng aming kumpanya ng mahabang panahon. Nilagyan ko ito ng laser-cut na kahoy na mount para sa Jetson Nano at isang mounting ng camera. Ang kanilang disenyo ay pagmamay-ari, kaya kung para sa iyong Jetson Nano robot na nais mong lumikha ng isang katulad na bagay, maaari kang tumingin sa proyekto ng Meped, na isang katulad na quadruped na may isang bukas na mapagkukunan na disenyo. Sa katunayan, dahil walang nagmula ang code ng mapagkukunan para sa microcontroller ni Zuri (Arduino Mega) sa aming lab, ginamit ko ang code mula sa Meped na may ilang mga menor de edad na pagsasaayos sa mga binti / talampakan.

Gumamit ako ng regular na USB Raspberry Pi na katugmang web-cam at isang Wifi USB dongle.

Ang pangunahing punto ay dahil gagamitin namin ang Pyserial para sa serial na komunikasyon sa pagitan ng microcontroller at Jetson Nano, ang iyong system ay maaaring gumamit ng anumang uri ng microcontroller, hangga't maaari itong ma-interfaced sa Jetson Nano na may USB serial cable. Kung ang iyong robot ay gumagamit ng DC motors at isang motor driver (halimbawa L298P-based) posible na direktang i-interface ang driver ng motor sa Jetson Nano GPIO. Ngunit, sa kasamaang palad, para sa pagkontrol sa mga servos maaari ka lamang gumamit ng ibang microcontroller o isang nakalaang driver ng servo ng I2C, dahil ang Jetson Nano ay walang hardware GPIO PWM.

Upang buod, maaari mong gamitin ang uri ng robot sa anumang microcontroller na maaaring konektado sa Jetson Nano gamit ang USB data cable. Na-upload ko ang code para sa Arduino Mega sa github repository para sa tutorial na ito at ang bahaging may kaugnayan sa interfacing Jetson Nano kay Arduino ay narito:

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

{

kaso '1':

pasulong ();

pahinga;

kaso '2':

likod ();

pahinga;

kaso '3':

lumiko pakanan();

pahinga;

kaso '4':

lumiko pakaliwa();

pahinga;

Sinusuri namin kung mayroong magagamit na data, at kung ito ay, ipasa ito sa istraktura ng kontrol ng switch-case. Magbayad ng pansin, ang data na iyon mula sa serial ay dumating bilang mga character, pansinin ang solong marka ng panipi sa paligid ng mga numero 1, 2, 3, 4.

Hakbang 2: I-install ang Kinakailangan na Mga Pakete

Sa kasamaang palad para sa amin, ang default na imahe ng system ng Jetson Nano ay may kasamang maraming paunang naka-install na (tulad ng OpenCV, TensorRT, atbp), kaya kailangan lamang naming mag-install ng ilang iba pang mga pakete upang magawa ang code at paganahin ang SSH.

Magsimula tayo sa pamamagitan ng pagpapagana ng SSH kung sakaling nais mong gawin ang lahat ng natitirang gawain nang malayuan.

sudo apt update

sudo apt i-install ang openssh-server

Awtomatikong magsisimula ang server ng SSH.

Upang kumonekta sa iyong Ubuntu machine sa LAN kailangan mo lamang ipasok ang sumusunod na utos:

ssh username @ ip_address

Kung mayroon kang Windows machine, kakailanganin mong i-install ang SSH client, halimbawa Putty.

Magsimula tayo sa pamamagitan ng pag-install ng Python Package Manager (pip) at Pillow para sa pagmamanipula ng imahe.

sudo apt i-install ang python3-pip python3-pil

Pagkatapos ay mai-install namin ang Jetbot repository, dahil umaasa kami sa ilang bahagi ng balangkas nito upang maisagawa ang pagtuklas ng bagay.

sudo apt i-install ang python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py install

Sa wakas i-clone ang aking imbakan ng Github para sa proyektong ito sa iyong folder sa bahay at i-install ang Flask at ilang iba pang mga pakete para sa remote control ng robot gamit ang web server.

git clone

cd

sudo pip3 i-install ang -r mga kinakailangan-opencv

I-download ang naka-pretrain na modelo ng SSD (Single Shot Detector) mula sa link na ito at ilagay ito sa jetspider_demos folder.

Ngayon ay mabuti na kaming pumunta!

Hakbang 3: Patakbuhin ang Code

Patakbuhin ang Code
Patakbuhin ang Code

Gumawa ako ng dalawang demo para sa Jetspider, ang una ay isang simpleng teleopration, halos kapareho ng ginawa ko kanina para sa Banana Pi rover at ang pangalawa ay gumagamit ng TensorRT para sa pagtuklas ng bagay at ipinapadala ang mga utos ng paggalaw sa serial na koneksyon sa microcontroller.

Dahil ang karamihan sa teleopration code ay inilarawan sa aking iba pang tutorial (Gumawa lamang ako ng ilang mga menor de edad na pag-aayos, muling pag-regraw ng paghahatid ng video) dito ay magtutuon ako sa bahagi ng Pagtuklas ng Bagay.

Pangunahing script para sa sumusunod na object ay object_following.py sa jetspider_object_following, para sa teleoperation ay spider_teleop.py sa jetspider_teleoperation.

Ang sumusunod na script ng bagay ay nagsisimula sa pag-import ng mga kinakailangang module at pagdedeklara ng mga variable at mga pagkakataon sa klase. Pagkatapos ay sinisimulan namin ang Flask web server sa linyang ito

app.run (host = '0.0.0.0', sinulid = Totoo)

Sa sandaling buksan namin ang 0.0.0.0 (localhost) address sa aming web browser o Jetson Nano address sa network (maaaring suriin sa ifconfig command), ang pagpapaandar na ito ay papatayin

def index ():

Nagre-render ito ng template ng web page na mayroon kami sa folder ng mga template. Ang template ay may mapagkukunan ng video na naka-embed dito, kaya kapag natapos itong mag-load, def video_feed (): ay naisasagawa, na nagbabalik ng isang bagay na Tugon na pinasimulan sa pagpapaandar ng generator.

Ang sikreto upang ipatupad ang mga in-place na pag-update (pag-update ng imahe sa web page para sa aming video stream) ay ang paggamit ng isang multipart na tugon. Ang mga tugon na Multipart ay binubuo ng isang header na may kasamang isa sa mga uri ng multipart na nilalaman, na sinusundan ng mga bahagi, na pinaghihiwalay ng isang marker ng hangganan at bawat isa ay mayroong sariling bahagi na tiyak na uri ng nilalaman.

Sa def gen (): pagpapaandar ipinatupad namin ang pag-andar ng generator sa isang walang katapusang loop na kinukuha ang imahe, ipinapadala ito upang ipatupad (img): pagpapaandar, na nagbibigay ng isang imahe upang maipadala sa web page pagkatapos nito.

def execute (img): ang function ay kung saan nangyayari ang lahat ng mahika, tumatagal ito ng isang imahe, baguhin ang laki dito sa OpenCV at ipasa ito sa "modelo" na halimbawa ng klase ng Jetbot ObjectDetector. Ibinabalik nito ang listahan ng mga nakita at ginagamit namin ang OpenCV upang gumuhit ng asul na mga parihaba sa paligid nila at sumulat ng mga anotasyon na may klase ng napansin na bagay. Pagkatapos nito ay suriin namin kung mayroong isang bagay ng aming interes na nakita

Maaari mong baguhin ang numerong iyon (53) sa ibang numero mula sa CoCo dataset kung nais mong sundin ng iyong robot ang iba pang mga bagay, ang 53 ay isang mansanas. Ang buong listahan ay nasa kategorya.py file.

Panghuli kung walang nakita na bagay sa loob ng 5 segundo ay ipinapadala namin ang character na "5" para sa robot na huminto sa serial. Kung ang bagay ay natagpuan kinakalkula namin kung gaano kalayo ito mula sa gitna ng imahe at kumilos nang naaayon (kung malapit sa gitna, dumiretso (character na "1" sa serial), kung sa kaliwa, umalis sa kaliwa, atbp). Maaari mong i-play sa mga halagang iyon upang matukoy ang pinakamahusay para sa iyong partikular na pag-setup!

Hakbang 4: Pangwakas na Mga Saloobin

Pangwakas na Saloobin
Pangwakas na Saloobin

Ito ang buod ng ObjectFollowing demo, kung nais mong malaman ang higit pa tungkol sa Flask webserver Video streaming, maaari kang tumingin sa mahusay na tutorial na ito ni Miguel Grinberg.

Maaari ka ring tumingin sa notebook ng Nvidia Jetbot Object Detection dito.

Inaasahan kong ang aking pagpapatupad ng mga demo ng Jetbot ay makakatulong upang mabuo ang iyong robot gamit ang balangkas ng Jetbot. Hindi ako nagpatupad ng balakid na pag-iwas sa demo, dahil sa palagay ko ang pagpili ng modelo ay hindi magbubunga ng magagandang mga resulta sa pag-iwas sa balakid.

Idagdag ako sa LinkedId kung mayroon kang anumang katanungan at mag-subscribe sa aking channel sa YouTube upang maabisuhan tungkol sa higit pang mga kagiliw-giliw na proyekto na kinasasangkutan ng pag-aaral ng machine at robotics.

Inirerekumendang: