Pull to refresh
0
Golf Robotics
Производство роботов для сбора мячей для гольфа

Камеры машинного зрения для энтузиастов. Как использовать камеру для автономной навигации?

Reading time6 min
Views9.7K

Мы сделали камеру для определения AprilTag и ArTag с mROS. Подключением по Uart или Ethernet.



Мы пробовали JeVois и OpenMV, оценили плюсы и минусы и собрали свою камеру.



Поиск визуальной метки и ориентация робота на основе полученных данных. Мы разрабатываем робота для сбора мячей для гольфа на driving range. Сейчас в мире только одна компания продает робота для решения этой задачи. Рынок очень перспективный, это сподвигло нас превратить проект из DIY в технологический стартап.

Используя GPS без RTK для навигации робота сложно добиться точности, необходимой для безошибочного поиска базы и парковки. Используя Real Time Kinematic, проблемы буду при подъезде к зданиям. Мы испробовали различные варианты и приняли решение сделать свою камеру для поиска визуальной метки при подъезде к базе.

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

В качестве цели были выбраны метки AprilTag, либо ArTag — в зависимости от того, как себя покажут в поле. Т.к. мы не страдаем NIH синдромом — начался поиск камер машинного зрения с поддержкой этих маркеров и с поддержкой скриптов прямо на камере.

Первый JeVois


Из того, что быстро нашлось — JeVois, разработка лаборатории University of Southern California. К сожалению, пришлось заказать в Россию через Амазон, внутренних реселлеров не было и судя по всему не будет — судя по всему маркетинг и продажи ведутся самими разработчиками (мы были был немало удивлены, когда для покупки камеры пришлось переходить с сайта Jevois на сайт Jevois inc, а потом поискав ссылку на каталог — выбрать именно камеру где-то посередине 10-12 позиций).



Первые прогоны на компе были достаточно обнадеживающими, в целом все работало прямо из коробки и выглядело достаточно интересно. Однако после тестов с подключением к плате управления выяснилось четыре серьезных проблемы:

Указанные в рекламных материалах 60-90 FPS даны для разрешений 160x120 либо 320х240, что совсем не походит для парковки — захват все же желателен с расстояния хотя бы 5 метров. А чтобы в зерно 160х120 с 6-8 метров попал квадрат — надо делать его размером минимум полметра и приближении он сначала полностью закроет кадр, а потом перестанет детектится вовсе.

Потребление в 800мА, при этом питание только по USB кабелям с mini USB, которые могут выдержать такой ток без особого падения напряжения. Найти кабель длиной хотя бы полметра с такими особенностями оказалось весьма сложно — перебрано около 15 вариантов, и результат оказался не особо удовлетворителен все равно.

Камера либо слепа ночью, либо пересвечивает днем. Автобаланс работает за пределами добра и зла.

Камера охлаждается вентилятором. Вентилятор очень маленький, скорость высокая — высокочастотный шум или попросту визг.

Визжащий робот — это последнее что нам хотелось делать.

Написание же кода исполнения внутри камеры это отдельное развлечение — установка окружения достаточно путанное дело а сборка и заливка на SD карту занимает минимум 2-5 минуты. Да, флеша нет — все на SD карте.

Вывод: камера для поиграться энтузиастам внутри помещений и с хорошим освещением. При этом желательно что бы энтузиасты были из студентов — интерфейс, документация и способы работы с камерой мне живо напомнили студенческие лабораторные работы, где почти не уделяется внимания на удобство работы с системой и прочие излишества. Это про C++ модули, конечно. Python скрипты можно править через Jevois Inventor, но и FPS тогда существенно ниже. Вне помещений же камера не пережила даже двух дождей, а грязь на поле забила вентилятор с космической скоростью.

Итог — к применению на роботе не годна, однако доказана принципиальная возможность парковки.

OpenMV 3 и все его варианты




В момент первых поисков просто не был доступен — проходила кампания на Кикстартере.

После того как мы наигрались с JeVois и 100 баксов оказались выкинутыми в помойку — был найден продавец с запасами и куплено 2 штуки.

В целом впечатления крайне приятные — замечательно продуманный интерфейс в OpenMV IDE, прозрачная компиляция питона, удобно смотреть за работой алгоритма, отлаживать. Однако проблемы были и тут:

  • Разрешение могло быть любым, однако поиск AprilTag мог вестись только на участке не более чем 200x200 пикселей. Возвращаемся к проблеме зерна и т.д. Разработчик порекомендовал выдергивать сначала блобы, потом в них смотреть коды. Но на чем-то кроме однотонного фона (в идеале белой стены) это не работает, зеленая травка и яркое солнце на фоне все превращают в кашу. Плюс FPS падает до максимум 5.
  • Дешевый Omnivision сенсор + дешевая оптика = мыльная картинка. Визуально это не очень заметно при просмотре видео потока, но при просмотре отдельных кадров четко видно.
  • Нет ИК шторки, зато есть ИК подсветка. [WHAAAAT ?]
  • Нет защиты от внешней среды. Совсем нет.



На этой камере был отлажен скрипт, сделано несколько десятков прогонов парковки. Однако после того как робот скатался из Москвы в Питер и обратно камера перестала запускаться — выбило регулятор питания. Очевидным действием было корпусирование и стабилизация питания. И вот тут-то обнаружилось самое интересное — корпус с нужным IP под эту камеру просто не удалось найти, либо это были боксы с прозрачными крышками, без внутренних креплений и герметичных вводов-выводов кабелей. В результате поисков была найдена масса дешевых китайских камер видеонаблюдения с нужными корпусами. Камера была куплена и распотрошена, вместо платы встал второй экземпляр OpenMV, все заработало.
Но вечер-ночь стали почти непреодолимой преградой — нет ИК шторки.

Итоги: камера ОЧЕНЬ удобная для прототипирования, ресурсы ограничены, нет защиты от внешней среды совсем (вторая камера потом отправилась в промышленный морозильник и -30 не пережила). Не годится.

И тут нам стало очень интересно, что же за платы мы достали из китайских камер

HiSilicon клоны


При внимательном рассмотрении оказалось что на плате стоит 2-х ядерный ARM, DSP процессор, ИК шторка, ИК подсветка, приличный сенсор от Sony, плата покрыта защитным составом + корпус для улицы. Прямо то что надо — осталось собрать софт.

Внутри оказался вполне рабочий клон Линукса от HiSilicon + u-boot.
Пришлось выкачать SDK с китайских ресурсов и разбираться со сборками. В принципе ничего страшного по пути не обнаружилось, кроме того, что необходимо исправить несколько файлов внутри SDK — дистрибутив Линукса на котором SDK собирался достаточно старый, и некоторые заголовочные файлы с тех пор сменились. Ну и пришлось сменить шелл с zsh на bash. Подробности опущу, по хорошему это должна быть отдельная статья.

Помогли вот эти ресурсы :

Разбор, подключение к камере

Примерная схема по сборке софта

Дальше все пошло по известной схеме:



Основное время заняла работа по получению картинки с сенсора, остальное я дописал буквально за 4 часа, просто портировав отлаженный алгоритм с Python на C++.
Работа же с сенсором заняла около полутора недель. Разумеется никакого /dev/video0 в этих устройствах нет, практически голое железо с работой напрямую с памятью и портами.
Сразу скажем, что сэмплы из SDK работают без доработки только на отладочных платах под эти SDK, в остальном это требует массы мелких правок. Как ни смешно — основная проблема это определить какой точно сенсор стоит в камере, т.к. китайцы пишут в описании одно, на плате маркировано другое, в софте инициализируется третья модель. Как пример — камера имеет в описании сенсор IMX323, плата имеет маркировку SC2235, при старте в init скриптах запускается как AR130, а софт работы с камерой инициализирует ее как SC2235P.

Причины всего этого достаточно просты: для конечного невзыскательного потребителя что IMX323, что SC2235 — все едино, картинка весьма похожа. Ядро и rootfs с инит скриптами собрали из SDK с минимальными правками и не стали возиться с отдельным скриптом инициализации под каждую модель — правят только параметры запуска, а название оставили как было. В софте же работы с камерой уже запускается второй кусок инициализации работы DSP с сенсором и там уже критична точная модель камеры — поэтому в логах уже есть точная модель — SC2235P. Р — это важно, это другой по характеристикам сенсор, который даже работает на чуть другой частоте шины и другое разрешение по сравнению с SC2235.

Вторая часть квеста — это даташиты на сенсоры, которых по большому счету и нет. Поэтому пришлось пересобрать модуль hi_i2c с печатью в лог через printk и заменить в снятом дампе с камеры, написать дампер конфигурации DSP видеопроцессора и снимать конфиги с работающей камеры, плюс несколько раз просмотреть драйвера из проекта DafangSoftware. В деталях это тянет на 3-4 отдельные статьи, которые я намерен написать после НГ.

В итоге все получилось даже лучше, чем ожидалось — уверенная работа по захвату AprilTag с 6 метров даже в почти полной темноте, 25-12 fps, ПИД регулятор по управлению парковкой и т.д.
Итог — самое оно для работы в поле, учтены многие вещи для защиты от внешних условий. Единственное что не удалось полностью проверить — работу на ярком солнце, погода с октябрю месяцу испортилась.

Идея для развития


И тут нас посетила идея — у нас в руках аналог OpenMV с куда как лучшими аппаратными характеристиками и имеющее массовое производство. Осталось довести работу с камерой до уровня OpenMV, спортировать туда micropython, сделать удобное IDE и перепроверить как будут работать текущие скрипты из OpenMV. Кроме этого туда вполне портируется mRos и это сразу расширяет применение таких камер для систем на ROS.

В итоге, мы планируем поставки аналогов OpenMV в марте и mROS к маю.

Для того, чтобы снизить цену на кастомизацию камеры мы готовы предложить ее Вам. Заполните форму и мы с Вами свяжемся когда будем готовы к заказу первой партии.
Tags:
Hubs:
+14
Comments10

Articles

Change theme settings

Information

Website
golf-robotics.com
Registered
Founded
Employees
2–10 employees
Location
Россия
Representative
Вячеслав Голицын