Найти в Дзене
КБ Михалёва

Разработка машинного зрения робота-планетохода

Оглавление

Как научить робота видеть предметы, отличать их, оценивать их расположение для принятия решения - об этом читайте в этой статье.

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

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

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

Для создания видеопотока и его обработки предполагалось использовать на выбор:

- Raspberry Zero W с подключенной видеокамерой

- Arduino с камерой 7670 (очень бюджетный вариант)

- специализированный модуль Pixi-2

  • контроллер ESP8266 с подключенной камерой
ESP32-CAM
ESP32-CAM

В конечном итоге, выбор пал на контроллер ESP8266 и реализация машинного зрения была выполнена на частном варианте применения этого контроллера - ESP32-CAM. На мой взгляд это очень интересное бюджетное решение в базовой комплектации ESP8266 с камерой. Правда это урезанная версия 8266, о чем стало понятно уже на этапе проектирования и разработки программного обеспечения по обработке видеоизображений. Но даже эта ложка дегтя не перевесила все преимущества, которые были получены в результате окончательных тестовых испытаний.

Надо сказать, что китайцы, не сильно распространяются о производимом продукте и, к сожалению, нормального DataSheet'а на этот контроллер добыть так и не удалось. Пришлось покопаться на githube и других специализированных форумах.

Что хорошего в этом контроллере:

  • скорость до 160 МГц
  • наличие встроенной камеры
  • WiFi 802.11b/g/n
  • два процессора, способных работать параллельно, обрабатывая приложения
  • встроенная память 512к и внешняя 4Мб
  • поддержка UART/SPI/I2C/PWM/ADC/DAC

Из минусов - ограниченное количество доступных портов.

Для обработки видеопотока была взята библиотека OpenCV. Как с ней пришлось повозиться, что бы освоить и нормально запустить - это просто ужас. Надо сказать, что из разработчиков никто сегодня не смотрит на условия работы своих старых версий и сопряжения их с другими приложениями. Вся эта проблема свалена на голову самого конечного разработчика-конструктора. Документация, если ее удалось найти и начать с ней работать и изучать, - та же песня, в ней как правило дается пример на какой-нибудь уже исторически не работающей версии и добиться у себя такого же результата, как в примере - ну это практически подвиг.

К примеру, первая проштудированная книга Arduino Computer Vision Programming, рекомендованная для разработчиков (Design and develop real-world computer vision applications with the powerful combination ofOpenCV and Arduino) - это просто текст, красивые картинки и любое желание по рекомендациям получить такой же результат - увы невозможен. То openCV не той версии, то Visual устарел, то Java не обновлена и т.п.

Надо сказать, что китайцы умудрились на ESP32-CAM создать идентификацию лиц, посредственную, но вполне рабочую версию. Ее даже использовали в нескольких проектах для идентификации лиц на системе открывания дверей и других идентифицирующих приложений. Но надо сказать, что уровень ее не достаточен для реализации машинного зрения на роботе.

По этой причине вся обработка видео-потока была перенесена на внешний контроллер - в моем случае, этим контроллером стал Raspberry Zero W. На него я установил сервер обработчик запросов MQTT и приложение, написанное на Piton'е обрабатывало видеопоток со скоростью 2 fps. Очень печальная скорость, но для проверки работоспособности всей системы достаточный, и надо отдать должное это получилось.

ориентирование по курсу
ориентирование по курсу

Что удалось в этом случае получить

  • Обнаружение и идентификация лица человека - да, но к роботу-планетоходу это не подходит. По этой причине просто ставлю галочку за то, что реализована такая функция
  • Обнаружение геометрических предметов - треугольник, круг, прямоугольник. Важная функция для идентификации меток при возврате на базу
  • Определение цвета объекта
  • Определение углов сопряжения двух идентифицированных объектов - функция позволившая мне в последствии вычислять курс для заезда на базу
тестовый стенд
тестовый стенд

Тестовые испытания

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

обработка информации на роботе
обработка информации на роботе

Все ок!

О следующих шагах по разработке робота-планетохода читайте на моем канале

С уважением к читателям канала,

Михалев СИ, руководитель конструкторского бюро и детской лаборатории робототехники