Логика авторобота: от машинного зрения до управления трансмиссией

А.Жуковский, С.Усилин, В.Постников
Сегодня мы хотим рассказать о новом проекте, который начали чуть больше года назад на кафедре «Когнитивных технологий» МФТИ.

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




Рис. 1
При этом мы не пытались полностью воссоздать реальные условия дорожной сцены, исключив все прелести малоразмерного моделирования.

Для начала, на простых примерах мы хотели отработать основные архитектурные компоненты системы (базу получения видеопотока и распределенной обработки на комбинации миникомпьютеров и видеокамер, как прототип System–on–a–Chip (SoC)), потенциально пригодные для решения более сложных проблем.

Mы научили робота двигаться по коридору и обнаруживать простые объекты, например, оранжевый дорожный конус. Задача состояла в том, чтобы он мог подъехать к объекту и остановиться. А затем решили поиграть с мячом. В текущей версии, если мяч находится в поле зрения камеры, робот детектирует мяч, разгоняется и толкает его бампером. Если мяч покидает поле зрения камеры, то робот начинает его искать.


Ролик снят во время доклада на осенней конференции молодых ученых МФТИ,
прямо в коридоре главного корпуса
Сейчас мы обучаем робота проходить «змейку» на время. Это упражнение позволяет оценивать качество системы управления и ее прогресс от версии к версии. А также сравнивать с качеством ручного управления с участием человека.

Изначально наш робот содержал в себе только управляющий компьютер, камеру и, собственно, шасси. Это модель спортивного внедорожника Traxxas Slash 2wd выполненная в соотношении 1:10. (Рис. 2, Рис. 3)



Рис. 2 Traxxas Slash 2wd
Контроллер шасси сделан на основе Arduino nano, но фактически из него используется только микроконтроллер ATMega32.

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




Рис. 3 Traxxas Slash 2wd
Если в первой версии, робот транслировал видео через HTTP обратно и формирование управляющих сигналов велось на desktop, то в текущей версии 2.0 (представлено на видео) весь цикл замкнут на борту, причем основная нагрузка по обработке видео легла на миникомпьютер Odroid U2. (Рис. 4 -1)

Помимо компьютера в оборудование версии 2.0 входит:

  • устройство управления роботом (Рис. 4 -2);
  • видеокамера Logitech HD Pro C920/Genius WideCam 1050 (может использоваться практически произвольная веб-камера) (Рис. 4 -3);
  • Wi-Fi-адаптер ASUS USB-N10 (Рис. 4 -4);
  • USB-концентратор (Рис. 4 -5)
  • сонар LV-MAXSONAR-EZ2 (Рис. 4 -6)




Рис. 4
К функциям устройства управления роботом относятся:

  1. реализация команд управляющего компьютера:
    • формирование управляющих ШИМ-сигналов,
    • управление внешней нагрузкой (7 каналов);
  2. обработка сигналов с датчиков:
    • сонары (8 каналов),
    • датчик Холла,
    • датчик напряжения аккумулятора (АЦП);
  3. защита робота:
    • аварийная остановка по фронтальному сонару,
    • остановка при потере управляющего сигнала.



Рис. 5 Схема оборудования робота
Сейчас мы собираем 3-ю версию. В ней система захвата видеопотока будет включать в себя уже две профессиональные видеокамеры IDS, видеосигнал с которых (включая детекцию объектов) будет обрабатываться на отдельных миникомпьютерах, в свою очередь подсоединенных к центральному миникомпьютеру, производящему финальное распознавание сцены и выработку управляющих воздействий.

Планируется также поставить несколько сонаров по периметру робота, чтобы более полно представлять окружение для решения задач парковки.

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

Первое лирическое отступление.
Кстати, если будете делать что-то подобное, сразу предостерегаем от использования китайских аналогов – первая версия контроллера мотора была сделана именно на нем, что вылилось в несколько недель поисков причины странного поведения мотора – оказалось, что микроконтроллер из «аналога» замыкал временами некоторые входы на выходы. Быть может, это нам так повезло, но с оригинальным Arduino таких проблем замечено не было.

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

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

Алгоритм поведения робота для погони за мячиком представлен схематично на рисунке ниже. Кажется, ничего непонятного в нем нет. Разве что стоит сказать пару слов про алгоритм разворота. Это отработка ситуации, когда мячик выходит из поля зрения робота. По сути, у него существует только 4 возможности для разворота: вперед направо, вперед налево и назад направо и назад налево. Робот запоминает, где видел мяч в последний раз и поворачивается в эту сторону по полной аналогии с футболистом, из поля зрения которого пропал мяч. Он стремится развернуться в ту сторону, куда полетел мяч.



Для разворота мы применяем алгоритм «звездочки»: едем, например, сначала вправо и вперед, потом влево и назад, получаются такие дуги, выпуклые в сторону общей центральной точки. Этот маневр, напоминает разворот на ограниченном пространстве, известный многим по экзамену в ГИБДД (Рис. 6).




Рис. 6
Если возникает тупиковая ситуация, связанная с тем, что робот застревает, например, зацепившись за ножку стула, программа управления идентифицирует эту ситуацию за счет расхождения оборотов двигателя и угла поворота колес. В этом случае робот пытается сдать назад, сделать маневр по «звездочке» и продолжить движение к цели.



Четвертое лирическое отступление.
Когда мы готовились к конференции молодых ученых МФТИ, то для усиления зрительского восприятия повысили параметр аккселерации. В итоге, робот стал чаще упираться в препятствия, так как схема детекции случая «застревания» перестала срабатывать адекватно — стали буксовать колеса. Кроме того, на большей скорости робот стал чаще промахиваться мимо мяча (это видно на первом видео). Поэтому нам пришлось решать задачу оптимальной балансировки между скоростями обработки видеопотока, движения робота и принятия решения. По уровню сложности она напоминала проблему привыкания к старому автомобилю советского производства с механической коробкой, типа «Москвича» или «Жигулей» у каждого из которых было по — своему отрегулировано сцепление и зажигание. Кто с этим сталкивался, тот понимает, что требуется некоторое время, чтобы приспособиться ловить баланс между сцеплением и педалью газа, чтобы машина ускорялась плавно.




Рис. 7 Алгоритм поведения робота для погони за мячиком
В третьей версии робота (она уже практически в сборе) мы перешли к использованию «профессиональной» видеокамеры и объектива.




Рис. 8
Параллельно нами ведутся эксперименты по установке камер на рейки, которые крепятся на рейлинги полноразмерного автомобиля (Рис. 8). Это позволит воспроизводить реальную геометрию и условия дорожной сцены.

Подробнее о новой версии робота мы планируем рассказать в следующей статье.



Источник: habrahabr.ru/company/cognitive/blog/226417/