Mundarija:
- 1 -qadam: uskunani tayyorlang
- 2 -qadam: kerakli paketlarni o'rnating
- 3 -qadam: Kodni ishga tushiring
- 4 -qadam: Yakuniy fikrlar
Video: Jetson Nano to'rtburchaklar robotli ob'ektlarni aniqlash bo'yicha qo'llanma: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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
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
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
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:
Saied MaiX platalari bilan ob'ektlarni aniqlash (Kendryte K210): 6 qadam
Sipeed MaiX platalari yordamida ob'ektlarni aniqlash (Kendryte K210): Sipeed MaiX platalari yordamida tasvirni tanib olish haqidagi oldingi maqolamning davomi sifatida men ob'ektni aniqlashga e'tibor qaratgan holda boshqa darslik yozishga qaror qildim. Yaqinda Kendryte K210 chipi bilan bir nechta qiziqarli uskunalar paydo bo'ldi, shu jumladan S
WALL-E metall robotli tank shassisini o'rnatish bo'yicha qo'llanma: 3 qadam
WALL-E metall robotli tank shassisini o'rnatish bo'yicha qo'llanma: bu metall robotli tank shassisidir, u robot tankini tayyorlash uchun yaxshi. alyuminiy qotishmasidan qilingan engil va kuchli Arduino robot.it DIY o'yinchoqlari uchun do'kon SINONING tomonidan ishlab chiqarilgan
Robotli avtomobillarni yig'ish bo'yicha Veedooo dasturlash bo'yicha ko'rsatma: 7 qadam
Veedooo Robotli Avtomobillarni yig'ish bo'yicha ko'rsatma: Paketlar ro'yxati
OpenCV va Tensorflow yordamida Dragonboard 410c yoki 820c bilan ob'ektlarni aniqlash: 4 qadam
OpenCV va Tensorflow -dan foydalangan holda W/ Dragonboard 410c yoki 820c obyektlarni aniqlash: Bu ko'rsatmalarni Ob'ektlarni aniqlash dasturini ishga tushirish uchun Python 3.5 uchun OpenCV, Tensorflow va mashinani o'rganish ramkalarini qanday o'rnatishni tasvirlaydi
Arduino nurni aniqlash bo'yicha qo'llanma: 3 qadam (rasmlar bilan)
Arduino nurni aniqlash bo'yicha qo'llanma: Ushbu qo'llanmani tugatgandan so'ng, siz atrofingizdagi yorug'lik darajasidagi o'zgarishlarni qanday aniqlash mumkinligini bilib olasiz. Ushbu loyihaning qismlari Kuman tomonidan taqdim etilgan. Siz ularni Arduino UNO Starter Kit -da topishingiz mumkin