Как научить робота видеть предметы, отличать их, оценивать их расположение для принятия решения - об этом читайте в этой статье.
Речь пойдет об этапе разработки машинного зрения для робота-планетохода Скорпи-1, статьи о проектирование и сборке его основных частей вы можете прочитать, вернувшись на несколько шагов назад в моих рассказах на канале.
Впрочем, эти технологии могут быть легко организованы на любом другом автономном роботе. Автономный - здесь это слово имеет первостепенное значение, означающее, что робот видит без контроля со стороны человека, оценивает предметы не его глазами и затем через удаленное управление поднимает манипулятором предмет.... все сложнее и в большей зависимости от разработанных технических устройств и программного обеспечения, обрабатывающего видео-поток и систему сенсоров.
И если с сенсорами достаточно просто иметь дело, они имеют чаще всего несколько уровней выходных сигналов для последующей обработки, то с видео-потоком несколько сложнее и мне пришлось изрядно попотеть, прежде чем все это стало понятно и было возможным создать нужный алгоритм.
Для создания видеопотока и его обработки предполагалось использовать на выбор:
- Raspberry Zero W с подключенной видеокамерой
- Arduino с камерой 7670 (очень бюджетный вариант)
- специализированный модуль Pixi-2
- контроллер ESP8266 с подключенной камерой
В конечном итоге, выбор пал на контроллер 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. Очень печальная скорость, но для проверки работоспособности всей системы достаточный, и надо отдать должное это получилось.
Что удалось в этом случае получить
- Обнаружение и идентификация лица человека - да, но к роботу-планетоходу это не подходит. По этой причине просто ставлю галочку за то, что реализована такая функция
- Обнаружение геометрических предметов - треугольник, круг, прямоугольник. Важная функция для идентификации меток при возврате на базу
- Определение цвета объекта
- Определение углов сопряжения двух идентифицированных объектов - функция позволившая мне в последствии вычислять курс для заезда на базу
Тестовые испытания
На тестовом испытании заданием для робота-планетохода было идентификация базы, определение курса движения к ней, заезд по габаритным огням (две светодиодные ленты) и фиксация робота на самой базе с сигнализацией остановки и начале зарядки батарей.
Все ок!
О следующих шагах по разработке робота-планетохода читайте на моем канале
С уважением к читателям канала,
Михалев СИ, руководитель конструкторского бюро и детской лаборатории робототехники