Mundarija:

Jetson Nano to'rtburchaklar robotli ob'ektlarni aniqlash bo'yicha qo'llanma: 4 qadam
Jetson Nano to'rtburchaklar robotli ob'ektlarni aniqlash bo'yicha qo'llanma: 4 qadam

Video: Jetson Nano to'rtburchaklar robotli ob'ektlarni aniqlash bo'yicha qo'llanma: 4 qadam

Video: Jetson Nano to'rtburchaklar robotli ob'ektlarni aniqlash bo'yicha qo'llanma: 4 qadam
Video: Navigation Strategies For Mobile Robot 2024, Noyabr
Anonim
Image
Image

Nvidia Jetson Nano - bu dasturiy ta'minot to'plami, u SoM (Moduldagi tizim) va mos yozuvlar tashuvchi platasidan iborat. Bu, birinchi navbatda, mashinani o'rganish, mashinani ko'rish va videoni qayta ishlash uchun yuqori ishlov berish quvvatini talab qiladigan o'rnatilgan tizimlarni yaratishga mo'ljallangan. Siz buni YouTube kanalimdagi batafsil sharhni ko'rishingiz mumkin.

Nvidia Jetson Nano-ni iloji boricha qulay va qulay loyihalarni ishlab chiqishga harakat qilmoqda. Hatto, taxtani ishga tushirilgandan bir necha kun o'tgach, ular sizning robotingizni Jetson Nano bilan qanday qurish haqida kichik kursni boshlashdi. Loyihaning tafsilotlarini bu erda topishingiz mumkin.

Ammo men o'zim loyiha sifatida Jetbot bilan bir nechta muammolarga duch keldim:

1) Men uchun EPIC etarli emas edi. Jetson Nano - bu ajoyib ishlov berish qobiliyatiga ega bo'lgan juda qiziqarli taxta va u bilan oddiy g'ildirakli robot yasash juda qiyin ish bo'lib tuyuldi.

2) Uskunani tanlash. Jetbot qimmat uskunani talab qiladi/uni boshqa alternativalar bilan almashtirish mumkin - masalan, ular teleoperatsiya uchun joystikdan foydalanadilar. Kulgili tuyuladi, lekin menga robotni boshqarish uchun joystik kerakmi?

Shunday qilib, men Jetson Nano -ni qo'lga kiritganimdan so'ng, men o'z loyiham - Jetspider ustida ishlay boshladim. G'oya Jetbot -ning asosiy demolarini takrorlash edi, lekin u yanada keng tarqalgan uskunalarga ega va kengroq loyihalarga tegishli edi.

1 -qadam: uskunani tayyorlang

Uskunangizni tayyorlang
Uskunangizni tayyorlang

Ushbu loyiha uchun men Zurobotics tomonidan ishlab chiqarilgan to'rtburchaklarli Zuri prototipidan foydalanganman. U bizning kompaniyamiz laboratoriyasida uzoq vaqt yotardi. Men uni Jetson Nano uchun yog'ochdan yasalgan lazerli kesish moslamasi va kameraga o'rnatdim. Ularning dizayni xususiydir, shuning uchun agar siz Jetson Nano robotingiz uchun shunga o'xshash narsani yaratmoqchi bo'lsangiz, siz Meped loyihasini ko'rib chiqishingiz mumkin, u xuddi shunday ochiq manbali dizayni bilan to'rt baravar ko'p. Aslida, laboratoriyamizda Zurining mikrokontrollerining (Arduino Mega) hech kimda manba kodi bo'lmaganligi sababli, men Meped kodini oyoq/oyoq ofsetida kichik o'zgarishlar bilan ishlatganman.

Men oddiy USB Raspberry Pi-ga mos keladigan veb-kamerani va Wi-Fi USB-donglini ishlatardim.

Asosiy nuqta shundaki, biz Pyserial -dan mikrokontroller va Jetson Nano o'rtasida ketma -ket aloqa uchun foydalanadigan bo'lsak, sizning tizimingiz, agar USB ketma -ket simi bilan Jetson Nano bilan bog'lansa, har qanday mikrokontrollerdan foydalanishi mumkin. Agar sizning robotingiz doimiy dvigatel va dvigatel drayveridan foydalansa (masalan, L298P-ga asoslangan), siz motor drayverini Jetson Nano GPIO bilan to'g'ridan-to'g'ri bog'lashingiz mumkin. Afsuski, servolarni boshqarish uchun siz faqat boshqa mikrokontroller yoki maxsus I2C servo drayveridan foydalanishingiz mumkin, chunki Jetson Nano -da GPIO PWM apparati yo'q.

Xulosa qilib aytganda, siz USB ma'lumot kabelidan foydalanib, Jetson Nano -ga ulanadigan har qanday mikrokontrollerli robot turidan foydalanishingiz mumkin. Men Arduino Mega kodini ushbu qo'llanma uchun github omboriga yukladim va Jetson Nano -ni Arduino bilan bog'lash bilan bog'liq qism bu erda:

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

{

holat '1':

oldinga ();

tanaffus;

"2" holati:

orqaga ();

tanaffus;

3 -holat:

O'ng tomonga buriling();

tanaffus;

"4" holati:

Chapga buriling();

tanaffus;

Biz ma'lumotlarning mavjudligini tekshiramiz va agar mavjud bo'lsa, uni kalit-boshqaruv elementiga o'tkazamiz. E'tibor bering, serialdagi ma'lumotlar belgilar sifatida keladi, 1, 2, 3, 4 raqamlari atrofidagi bitta tirnoq belgisiga e'tibor bering.

2 -qadam: kerakli paketlarni o'rnating

Yaxshiyamki, biz uchun standart Jetson Nano tasviri oldindan o'rnatilgan ko'plab narsalar bilan ta'minlangan (OpenCV, TensorRT va boshqalar), shuning uchun kodni ishga tushirish va SSHni yoqish uchun biz faqat bir nechta boshqa paketlarni o'rnatishimiz kerak.

Qolgan ishlarni masofadan turib bajarishni istasangiz, SSH -ni yoqishdan boshlaylik.

sudo apt yangilash

sudo apt install openssh-serverni o'rnatadi

SSH -server avtomatik ravishda ishga tushadi.

Ubuntu kompyuteringizga LAN orqali ulanish uchun siz faqat quyidagi buyruqni kiritishingiz kerak:

ssh foydalanuvchi nomi@ip_address

Agar sizda Windows mashinasi bo'lsa, siz SSH dasturini o'rnatishingiz kerak bo'ladi, masalan Putty.

Python Package Manager (pip) va Yostiqni tasvirni boshqarish uchun o'rnatishni boshlaylik.

sudo apt install python3-pip python3-pil

Keyin biz Jetbot omborini o'rnatamiz, chunki biz ob'ektni aniqlash uchun uning ba'zi qismlariga tayanamiz.

sudo apt install python3-smbus python-pyserial

git klon

CD jetbot

sudo apt-get install cmake

sudo python3 setup.py -ni o'rnating

Nihoyat, bu loyiha uchun Github omborimni o'z uy papkangizga klonlang va veb -server yordamida robotni masofadan boshqarish uchun Flask va boshqa paketlarni o'rnating.

git klon

CD

sudo pip3 install -r talablari -opencv

Oldindan o'rgatilgan SSD (yagona zarba detektori) modelini ushbu havoladan yuklab oling va uni jetspider_demos jildiga joylashtiring.

Endi biz ketishimiz yaxshi!

3 -qadam: Kodni ishga tushiring

Kodni ishga tushiring
Kodni ishga tushiring

Men Jetspider uchun ikkita demo qildim, birinchisi - bu ilgari Banana Pi roveri uchun qilganga o'xshash oddiy teleopratsiya, ikkinchisi - ob'ektni aniqlash uchun TensorRTdan foydalanadi va mikrokontrollerga ketma -ket ulanish orqali harakat buyruqlarini yuboradi..

Teleopratsiya kodining ko'p qismi mening boshqa darsligimda tasvirlangani uchun (men video uzatishni yomonlashtiradigan, faqat bir nechta kichik sozlamalar qildim) bu erda men Ob'ektlarni aniqlash qismiga e'tibor qarataman.

Ob'ektni ta'qib qilish uchun asosiy skript - jetspider_object_following -da object_following.py, teleoperation - jetspider_teleoperation -da spider_teleop.py.

Skriptdan keyingi ob'ekt kerakli modullarni import qilish va o'zgaruvchilar va sinf misollarini e'lon qilishdan boshlanadi. Keyin biz Flask veb -serverini shu satr bilan ishga tushiramiz

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

Veb -brauzerimizda 0.0.0.0 (localhost) manzilini yoki tarmoqdagi Jetson Nano manzilini ochishimiz bilan (ifconfig buyrug'i bilan tekshirilishi mumkin), bu funksiya bajariladi.

def indeksi ():

U shablonlar papkasida joylashgan veb -sahifa shablonini ko'rsatadi. Shablonda video manbasi o'rnatilgan, shuning uchun u yuklashni tugatgandan so'ng, def video_feed (): bajariladi, bu generator funktsiyasi bilan ishga tushirilgan Response ob'ektini qaytaradi.

O'z joyida yangilanishlarni amalga oshirish siri (bizning video oqimimiz uchun veb-sahifadagi tasvirni yangilash) ko'p qismli javobdan foydalanishdir. Ko'p qismli javoblar ko'p qismli tarkib turlaridan birini o'z ichiga olgan sarlavhadan, so'ngra chegara belgisi bilan ajratilgan va har birining o'ziga xos tarkib turiga ega bo'lgan qismlardan iborat.

Def gen (): funktsiyasida biz generator funktsiyasini cheksiz pastadirda bajaramiz, u tasvirni ushlaydi, uni def (exe) funktsiyasiga yuboradi, shundan so'ng tasvirni veb -sahifaga yuboriladi.

def execute (img): funktsiya bu erda hamma sehr -jodu sodir bo'ladi, u tasvirni oladi, o'lchamini OpenCV yordamida o'zgartiradi va uni "model" Jetbot ObjectDetector sinfiga o'tkazadi. Bu aniqlovlar ro'yxatini qaytaradi va biz OpenCV -dan foydalanib, ularning atrofida ko'k to'rtburchaklar chizamiz va ob'ekt aniqlangan sinf bilan izoh yozamiz. Shundan so'ng, bizni qiziqtiradigan ob'ekt borligini tekshiramiz: match_detections = [d uchun aniqlashda [0], agar d ['yorliq'] == 53]

Agar siz robotingizni boshqa narsalarga ergashishini xohlasangiz, bu raqamni (53) CoCo ma'lumotlar bazasidan boshqa raqamga o'zgartirishingiz mumkin, 53 - bu olma. Butun ro'yxat category.py faylida.

Nihoyat, agar 5 soniya davomida hech qanday ob'ekt aniqlanmasa, biz "5" belgisini uzatamiz. Agar ob'ekt topilsa, biz tasvir markazidan qanchalik uzoqligini hisoblaymiz va shunga muvofiq harakat qilamiz (agar markazga yaqin bo'lsa, to'g'ri o'ting (ketma -ket "1" belgisi), chapda bo'lsa, chapga va hokazo). O'zingizning sozlamalaringiz uchun eng yaxshisini aniqlash uchun siz ushbu qadriyatlar bilan o'ynashingiz mumkin!

4 -qadam: Yakuniy fikrlar

Yakuniy fikrlar
Yakuniy fikrlar

Bu ObjectFollowing demosining mohiyati, agar siz Flask veb -serverining video oqimi haqida ko'proq bilmoqchi bo'lsangiz, Migel Grinbergning ushbu ajoyib qo'llanmasini ko'rib chiqishingiz mumkin.

Bu erda siz Nvidia Jetbot ob'ektlarni aniqlash daftarini ham ko'rishingiz mumkin.

Umid qilamanki, mening Jetbot demo dasturlari robotingizni Jetbot ramkasidan foydalangan holda yaratishga yordam beradi. Men to'siqlardan qochish demosini qo'ymadim, chunki menimcha, modelni tanlash to'siqlardan qochishning yaxshi natijalarini bermaydi.

Agar sizda biron bir savol bo'lsa, meni LinkedId -ga qo'shing va mening YouTube kanalimga obuna bo'ling, mashinasozlik va robototexnika bilan bog'liq qiziqarli loyihalar haqida xabardor bo'ling.

Tavsiya: