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

    А.Жуковский, С.Усилин, В.Постников

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

    Состоит он в создании системы машинного зрения, робота – автомобиля (Рис. 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). Это позволит воспроизводить реальную геометрию и условия дорожной сцены.

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

    Cognitive Technologies

    37,00

    Компания

    Поделиться публикацией
    Комментарии 37
    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        Вот и я хотел бы присоединиться к вопросу — с помощью чего обрабатывается видеопоток?
        Без подробностей получается какая-то аттестационная статья — отчитаться на кафедре о проделанной работе и о планах развития. Но здесь нам хочется подробностей!
          0
          Осмеюсь предположить, что для обработки видопотока используется OpenCV.
          Больше подробностей, конечно, было бы интересно.
            0
            да, OpenCV как основная инфраструктура.
            там несколько вещей как быстрый серый хаф отсутствует, бинаризация поумнее и тп…, но база опен сиви — отл. Мой респект Нижнему Новгороду
            0
            см. ниже ссылку
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            дай лапу, друг))
              0
              я без юмора или сарказма тут, )) родители нам не мешали мечтать

            0
            Молодцы! Делаю похожего робота, тоже думал над шасси от rc модели, даже заказал, но из-за этих разворотов решил отказаться. По ультразвуковому датчику, сразу добавляйте инфракрасный дальномер, вместе они дают более коректные данные. Единственное не понял как у вас сделан энкодер к двигателю?
              0
              Думаю ИК дальномер тут просто не нужен.
              Так как для отработки столкновения — достаточно УЗ, а для всего остального есть камера.
                0
                мы УЗ отключили в футболе. в целом он конечно местами туповатый, не то что игроки чемпионата мира. проскакивает мимо мяча часто, особенно если вразрез дают или за спину закидывают. )
                0
                Про управление двигателем и сервоприводом: мы вклинились в родную систему управления вместо радиомодуля и подаем управляющие сигналы вместо него. Попытав осциллограф, мы выяснили, что управляющие значения задаются шириной ШИМ-импульсов (частота 20 кГц): «нулевое» значение — 1,5 мс, «полный назад»/«влево» — 1 мс, «полный вперед»/«вправо» — 2 мс. Эти импульсы генерирует микроконтроллер (atmega32u4).
              • НЛО прилетело и опубликовало эту надпись здесь
                  +1
                  Да, и сделайте пожалуйста сход-развал машинке.
                    +1
                    Насчет заданных выше вопросов:
                    На одроиде, где происходят основные вычисления (обработка видеопотока) запущен линукс.
                    Под ним работает программа обработки видеопотока, верхний уровень использует как инфраструктуру OpenCV и библиотеки обработки изображений и распознавания, разработанные на кафедре. Код кроссплатформенный, на лаптопе и роботе выглядит одинаково.

                    Детектор координат шарика устроен сравнительно просто (это была модельная задача, так сказать, упражнение в ряду прочих). Используется шаблонный поиск по интегрированной карте изображения, отфильтрованного в координатах HSV.

                    Низкоуровневое управление трансмиссией осуществляется через микропрограмму на контроллере ардуино.
                      0
                      Планируете ли вы выложить часть исходников по распознаванию видео потока? Конкретно не вашу версию, а просто набор примеров для начинающих, чтобы было за что зацепится?
                        0
                        студенческая песочница живет в googlcode.visiroad
                          0
                          кстати, если есть серьезный интерес проекту нам нужен один паяльник и один математик (задач много, в шпагате иногда)… резюме можно слать на кафедру когнитивных технологий ФИВТ МФТИ.
                      0
                      Очень здорово, интересует подробности обхода недетектируемого препятствия:
                      программа управления идентифицирует эту ситуацию за счет расхождения оборотов двигателя и угла поворота колес
                      Какое именно соотношение между оборотами и углом?
                        0
                        Исходники выложите под свободной лицензией или все закрыто?
                          0
                          Спасибо вам за достойную платформу для робота!
                          Желаю вам в ближайшем будущем научить робота проходить трассу short cource для этого класса :)
                            +1
                            Круто! Нет, ну реально мощно сделано! Скажите, мне одному мерещится дипломный проект? Только что с защиты своего пришел =)
                              0
                              Почему такой маленький угол поворота?
                              Почему только одна пара колес поворачивает?
                              У вас же по сути безграничные возможности, сделайте более маневренную модель!
                                +1
                                Речь идет (как мне кажется) и исходя из некоторых упоминаний из статьи — о модели реального автомобиля. То есть эту систему планируется со временем перенести на большой автомобиль, поэтому и характеристики подбирались примерно под него. Поэтому используется маневр «звездочка».
                                  +1
                                  Мы использовали стандартное шасси от заднеприводного Traxxas, в момент разворота (звездочки) колеса выворачиваются максимально
                                  +1
                                  На последнем фото камера прикреплена белой изолентой?
                                    0
                                    пусть тот кто скажет что зеленой — первый бросит в меня камень))
                                      0
                                      на самом деле закрепили попрочнее, в ролике то же самое

                                    0
                                    Поведением и звуком робот напомнил мышедроида из Звёздный Войн.
                                      0
                                      На первом рисунке у вас виден похоже Beaglebone. На последнем уже другое, разные версии?
                                        0
                                        в начале был бигльбон, все растет, все из меня))
                                          0
                                          Да, в первой версии робота был установлен именно BeagleBone, но обработка видео на нем не осуществлялась, он использовался для тестирования управления и для передачи видеопотока по сети. Во второй версии (которая на видео) установлен Odroid-U2, и распознавание осуществляется на нем.
                                            0
                                            На самом деле, версия с лампочками, клаксоном, профессиональной камерой и блэкджеком уже готова, и в ней используется Odroid-XU.
                                            0
                                            кстати, хотелось отметить работу людей, золотые руки которых вбили ключевые костыли.
                                            это не сотрудники кафедры, но наши коллеги:
                                            Андрей Гладков и Иван Коптелов.
                                            Всемирный респект!

                                              0
                                              =================================
                                              и хотелось бы встречный вопрос задать:

                                              а что бы вы хотели от авторобота?

                                              элементы подсказки при вождении
                                              чтоб вез после матча домой прямо

                                              ))

                                              ?
                                                0
                                                в планах кафедры сделать автогазонокосилку (Postnikov ©) и робот взрыватель мин (чистильщик)

                                                пусть мир станет красивее))

                                                  0
                                                  Привет! Я родился! © Лунтик

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

                                                Самое читаемое