Оглавление:

Учебное пособие по обнаружению объектов четвероногих роботов Jetson Nano: 4 шага
Учебное пособие по обнаружению объектов четвероногих роботов Jetson Nano: 4 шага

Видео: Учебное пособие по обнаружению объектов четвероногих роботов Jetson Nano: 4 шага

Видео: Учебное пособие по обнаружению объектов четвероногих роботов Jetson Nano: 4 шага
Видео: Интерактивное учебное пособие "Гражданская оборона и защита населения в ЧС" (электронные плакаты) 2024, Июнь
Anonim
Image
Image

Nvidia Jetson Nano - это комплект разработчика, который состоит из SoM (System on Module) и эталонной несущей платы. Он в первую очередь предназначен для создания встроенных систем, требующих высокой вычислительной мощности для приложений машинного обучения, машинного зрения и обработки видео. Подробный обзор вы можете посмотреть на моем канале в YouTube.

Nvidia пыталась сделать Jetson Nano максимально удобным и легким в разработке проектов. Они даже запустили небольшой курс о том, как построить своего робота с помощью Jetson Nano, через несколько дней после запуска платы. Вы можете найти подробности об этом проекте здесь.

Однако у меня самого было несколько проблем с Jetbot как проектом:

1) Для меня этого было недостаточно ЭПИЧЕСКИ. Jetson Nano - очень интересная плата с большими возможностями обработки, и создание из нее простого колесного робота казалось очень… неуместным занятием.

2) Выбор оборудования. Для Jetbot требуется некоторое дорогое оборудование, которое можно заменить другими альтернативами - например, они используют джойстик для дистанционного управления. Звучит весело, но действительно ли мне нужен джойстик для управления роботом?

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

Шаг 1. Подготовьте оборудование

Подготовьте свое оборудование
Подготовьте свое оборудование

Для этого проекта я использовал ранний прототип четвероногого робота Zuri, сделанный Zoobotics. Он долго валялся в лаборатории нашей компании. Я снабдил его вырезанным лазером деревянным креплением для Jetson Nano и креплением для камеры. Их дизайн является проприетарным, поэтому, если для вашего робота Jetson Nano вы хотите создать что-то подобное, вы можете взглянуть на проект Meped, который является аналогичным четвероногим с открытым исходным кодом. Фактически, поскольку в нашей лаборатории ни у кого не было исходного кода микроконтроллера Зури (Arduino Mega), я использовал код от Meped с некоторыми незначительными корректировками смещения ног / стоп.

Я использовал обычную веб-камеру, совместимую с USB Raspberry Pi, и USB-ключ Wi-Fi.

Суть в том, что, поскольку мы собираемся использовать Pyserial для последовательной связи между микроконтроллером и Jetson Nano, ваша система, по сути, может использовать любой тип микроконтроллера, если он может взаимодействовать с Jetson Nano с помощью последовательного USB-кабеля. Если ваш робот использует двигатели постоянного тока и драйвер двигателя (например, на базе L298P), можно напрямую связать драйвер двигателя с Jetson Nano GPIO. Но, к сожалению, для управления сервоприводами вы можете использовать только другой микроконтроллер или специальный драйвер сервопривода I2C, поскольку у Jetson Nano нет аппаратного GPIO PWM.

Подводя итог, вы можете использовать тип робота с любым микроконтроллером, который может быть подключен к Jetson Nano с помощью USB-кабеля для передачи данных. Я загрузил код для Arduino Mega в репозиторий github для этого руководства, и часть, относящаяся к взаимодействию Jetson Nano с Arduino, находится здесь:

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

{

Дело 1':

вперед();

перерыв;

case '2':

назад();

перерыв;

case '3':

Поверните направо();

перерыв;

case '4':

Поверните налево();

перерыв;

Мы проверяем, доступны ли данные, и, если они есть, передаем их в структуру управления switch-case. Обратите внимание, что данные из сериала представлены в виде символов, обратите внимание на одинарные кавычки вокруг чисел 1, 2, 3, 4.

Шаг 2: Установите необходимые пакеты

К счастью для нас, системный образ Jetson Nano по умолчанию поставляется с множеством предустановленных вещей (например, OpenCV, TensorRT и т. Д.), Поэтому нам нужно установить только пару других пакетов, чтобы код работал и включал SSH.

Начнем с включения SSH, если вы хотите выполнять всю остальную работу удаленно.

sudo apt update

sudo apt установить openssh-server

Сервер SSH запустится автоматически.

Чтобы подключиться к вашей машине Ubuntu через локальную сеть, вам нужно всего лишь ввести следующую команду:

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 jetbot

sudo apt-get install cmake

sudo python3 setup.py установить

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

git clone

CD

sudo pip3 install -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 (host = '0.0.0.0', thread = True)

Как только мы откроем адрес 0.0.0.0 (localhost) в нашем веб-браузере или адрес Jetson Nano в сети (можно проверить с помощью команды ifconfig), эта функция будет выполнена.

def index ():

Он отображает шаблон веб-страницы, который у нас есть в папке шаблонов. В шаблон встроен источник видео, поэтому после завершения загрузки будет выполнен def video_feed ():, который вернет объект Response, который инициализируется функцией генератора.

Секрет реализации обновлений на месте (обновления изображения на веб-странице для нашего видеопотока) заключается в использовании многостраничного ответа. Составные ответы состоят из заголовка, который включает один из составных типов контента, за которым следуют части, разделенные граничным маркером, каждая из которых имеет свой собственный тип контента для конкретной части.

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

def execute (img): функция - это то место, где происходит вся магия, она берет изображение, изменяет его размер с помощью OpenCV и передает его экземпляру класса Jetbot ObjectDetector «модель». Он возвращает список обнаружений, и мы используем OpenCV для рисования синих прямоугольников вокруг них и написания аннотаций с классом обнаруженных объектов. После этого мы проверяем, обнаружен ли интересующий нас объектmatching_detections = [d for d in Detections [0] if d ['label'] == 53]

Вы можете изменить это число (53) на другое число из набора данных CoCo, если хотите, чтобы ваш робот следил за другими объектами, 53 - это яблоко. Весь список находится в файле Categories.py.

Наконец, если объект не обнаружен в течение 5 секунд, мы передаем символ «5», чтобы робот остановился по последовательному каналу. Если объект найден, мы вычисляем, как далеко он находится от центра изображения, и действуем соответствующим образом (если он близко к центру, идите прямо (символ «1» в серийном номере), если слева, идите влево и т. Д.). Вы можете поиграть с этими значениями, чтобы определить лучшее для вашей конкретной установки!

Шаг 4: Заключительные мысли

Последние мысли
Последние мысли

В этом суть демонстрации ObjectFollowing. Если вы хотите узнать больше о потоковой передаче видео с веб-сервера Flask, вы можете взглянуть на это замечательное руководство Мигеля Гринберга.

Вы также можете ознакомиться с записной книжкой Nvidia Jetbot Object Detection здесь.

Я надеюсь, что мои реализации демонстраций Jetbot помогут построить вашего робота на платформе Jetbot. Я не реализовал демонстрацию обхода препятствий, так как считаю, что выбор модели не даст хороших результатов обхода препятствий.

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

Рекомендуемые: