Съдържание:

Урок за откриване на обекти на четворни роботи на Jetson Nano: 4 стъпки
Урок за откриване на обекти на четворни роботи на Jetson Nano: 4 стъпки

Видео: Урок за откриване на обекти на четворни роботи на Jetson Nano: 4 стъпки

Видео: Урок за откриване на обекти на четворни роботи на Jetson Nano: 4 стъпки
Видео: Катайтесь на багги по городу! - Urban Quad Racing GamePlay 🎮📱 🇷🇺 2024, Юни
Anonim
Image
Image

Nvidia Jetson Nano е комплект за разработчици, който се състои от SoM (система на модул) и референтна платка за носене. Той е насочен предимно към създаване на вградени системи, които изискват висока процесорна мощност за приложения за машинно обучение, машинно виждане и видео обработка. Можете да гледате подробен преглед за него в канала ми в YouTube.

Nvidia се опитва да направи Jetson Nano възможно най-удобен и лесен за разработване на проекти. Те дори стартираха малък курс за това как да изградите своя робот с Jetson Nano, дни след пускането на борда. Подробности за този проект можете да намерите тук.

Аз обаче имах няколко проблема с Jetbot като проект:

1) Не беше достатъчно EPIC за мен. Jetson Nano е много интересна дъска с големи възможности за обработка и правенето на обикновен колесен робот с нея просто изглеждаше като много… непосилно нещо за правене.

2) Избор на хардуер. Jetbot изисква хардуер, който е скъп/може да бъде заменен с други алтернативи - например те използват джойстик за телеоперация. Звучи като забавление, но наистина ли се нуждая от джойстик, за да управлявам робот?

И така, веднага след като се докопах до Jetson Nano, започнах работа по собствен проект, Jetspider. Идеята беше да се възпроизведат основни демонстрации на Jetbot, но с по -общ хардуер и приложими за по -голямо разнообразие от проекти.

Стъпка 1: Подгответе хардуера

Подгответе хардуера си
Подгответе хардуера си

За този проект използвах ранен прототип на четириъгълен робот Zuri, направен от Zoobotics. Той дълго време лежеше в лабораторията на нашата компания. Оборудвах го с лазерно изрязана дървена стойка за Jetson Nano и стойка за камера. Техният дизайн е патентован, така че ако за вашия робот Jetson Nano искате да създадете нещо подобно, можете да разгледате проекта Meped, който е подобен четириъгълник с дизайн с отворен код. Всъщност, тъй като никой нямаше изходния код за микроконтролера на Zuri (Arduino Mega) в нашата лаборатория, използвах кода от Meped с някои малки корекции в изместването на краката/краката.

Използвах обикновена съвместима с USB Raspberry Pi уеб камера и Wifi USB ключ.

Основното е, че тъй като ще използваме Pyserial за серийна комуникация между микроконтролер и Jetson Nano, вашата система по същество може да използва всеки тип микроконтролер, стига да може да бъде свързан с Jetson Nano с USB сериен кабел. Ако вашият робот използва DC двигатели и драйвер на двигател (например базиран на L298P), е възможно директно да се свърже драйверът на двигателя с Jetson Nano GPIO. Но, за съжаление, за управление на сервомоторите можете да използвате само друг микроконтролер или специален I2C серво драйвер, тъй като Jetson Nano няма хардуерен GPIO PWM.

За да обобщим, можете да използвате тип робот с всеки микроконтролер, който може да бъде свързан с Jetson Nano чрез USB кабел за данни. Качих кода за Arduino Mega в хранилището на github за този урок, а частта, свързана с свързването на Jetson Nano с Arduino, е тук:

if (Serial.available ()) {превключвател (Serial.read ()) {

{

случай '1':

напред ();

прекъсване;

случай '2':

обратно();

прекъсване;

случай '3':

обърни се на дясно();

прекъсване;

случай '4':

завийте наляво();

прекъсване;

Проверяваме дали има налични данни и ако има, ги предаваме на структурата за управление на разпределителната кутия. Обърнете внимание, че данните от поредицата идват като знаци, забележете единичния кавичка около числата 1, 2, 3, 4.

Стъпка 2: Инсталирайте необходимите пакети

За щастие за нас, системният образ на Jetson Nano по подразбиране идва с много предварително инсталирани неща (като OpenCV, TensorRT и т.н.), така че трябва само да инсталираме няколко други пакета, за да накараме кода да работи и да активира SSH.

Нека започнем с активиране на SSH в случай, че искате да свършите цялата останала работа от разстояние.

sudo apt актуализация

sudo apt инсталирате openssh-сървър

SSH сървърът ще се стартира автоматично.

За да се свържете с вашата машина Ubuntu през LAN, трябва само да въведете следната команда:

ssh потребителско име@ip_address

Ако имате Windows машина, ще трябва да инсталирате SSH клиент, например Putty.

Нека започнем с инсталирането на Python Package Manager (pip) и Pillow за манипулиране на изображения.

sudo apt инсталирате python3-pip python3-pil

След това ще инсталираме хранилището на Jetbot, тъй като разчитаме на някои части от неговата рамка за извършване на откриване на обекти.

sudo apt инсталирате python3-smbus python-pyserial

git clone

cd джетбот

sudo apt-get install cmake

sudo python3 setup.py install

Накрая клонирайте моето хранилище на Github за този проект във вашата домашна папка и инсталирайте Flask и някои други пакети за дистанционно управление на робота, използвайки уеб сървър.

git клонинг

cd

sudo pip3 инсталирайте -r изисквания -opencv

Изтеглете предварително обучения модел SSD (Single Shot Detector) от тази връзка и го поставете в папката jetspider_demos.

Сега сме готови!

Стъпка 3: Стартирайте кода

Пуснете кода
Пуснете кода

Направих две демонстрации за Jetspider, първото е проста телеоперация, много подобна на тази, която направих по -рано за роувъра Banana Pi, а втората използва TensorRT за откриване на обекти и изпраща командите за движение през серийната връзка към микроконтролера.

Тъй като по -голямата част от кода за телеоперация е описана в другия ми урок (направих само някои незначителни ощипвания, преграждайки предаване на видео) тук, ще се съсредоточа върху частта Откриване на обекти.

Основният скрипт за следване на обект е object_following.py в jetspider_object_following, за телеоперация е spider_teleop.py в jetspider_teleoperation.

Обектът след скрипта започва с импортиране на необходимите модули и деклариране на променливи и екземпляри на клас. След това стартираме Flask уеб сървър с този ред

app.run (хост = '0.0.0.0', с резба = вярно)

Веднага щом отворим 0.0.0.0 (localhost) адрес в нашия уеб браузър или Jetson Nano адрес в мрежата (може да проверим с командата ifconfig), тази функция ще бъде изпълнена

def индекс ():

Той изобразява шаблона на уеб страницата, който имаме в папката шаблони. Шаблонът има вграден видео източник, така че след като приключи зареждането, def video_feed (): ще се изпълни, което връща обект Response, който се инициализира с функцията генератор.

Тайната за внедряване на актуализации на място (актуализиране на изображението в уеб страницата за нашия видео поток) е да се използва отговор от много части. Отговорите с много части се състоят от заглавка, която включва един от многочастичните типове съдържание, последвано от частите, разделени с граничен маркер и всяка от които има свой собствен специфичен тип съдържание.

В def gen (): function ние реализираме функцията генератор в безкраен цикъл, който улавя изображението, изпраща го към def execute (img): function, давайки изображение, което да бъде изпратено до уеб страницата след това.

def execute (img): функцията е мястото, където се случва цялата магия, тя взема изображение, преоразмерява го с OpenCV и го предава на екземпляр от клас Jetbot ObjectDetector "model". Той връща списъка с открития и ние използваме OpenCV, за да нарисуваме сини правоъгълници около тях и да пишем анотации с обект, открит клас. След това проверяваме дали е открит обект от нашия интересmatching_detections = [d за d в детекции [0] ако d ['label'] == 53]

Можете да промените този номер (53) на друг номер от набор от данни CoCo, ако искате вашият робот да следва други обекти, 53 е ябълка. Целият списък е във файла категории.py.

И накрая, ако няма открит обект за 5 секунди, ние предаваме знака "5", за да може роботът да спре над сериала. Ако се намери обект, ние изчисляваме колко далеч е от центъра на изображението и действаме съответно (ако е близо до центъра, вървете направо (знак "1" на сериала), ако е вляво, отидете наляво и т.н.). Можете да играете с тези стойности, за да определите най -доброто за вашата конкретна настройка!

Стъпка 4: Заключителни мисли

Заключителни мисли
Заключителни мисли

Това е същността на демонстрацията на ObjectFollowing, ако искате да научите повече за стрийминга на видео от Flask webserver, можете да разгледате този страхотен урок от Miguel Grinberg.

Можете също да разгледате тетрадката за откриване на обекти на Nvidia Jetbot тук.

Надявам се, че моите реализации на демонстрации на Jetbot ще помогнат за изграждането на вашия робот, използвайки рамката на Jetbot. Не прилагах демонстрация за избягване на препятствия, тъй като мисля, че изборът на модела няма да даде добри резултати за избягване на препятствия.

Добавете ме в LinkedId, ако имате въпроси и се абонирайте за канала ми в YouTube, за да получавате известия за по -интересни проекти, включващи машинно обучение и роботика.

Препоръчано: