Автономный робот команды НАМТ на «Робокросс-2013» и «Eurathlon 2013»

в 13:20, , рубрики: автономный робот, обработка изображений, Робокросс, соревнования роботов, метки: , ,

День добрый!

Хочу опубликовать отчёт об автономном роботе команды НАМТ, участвовавшей в соревнованиях «Робокросс 2013» и европейском «Eurathlon 2013».
На этот раз роботизировался не автомобиль, а электрический квадроцикл, так как система делалась с прицелом на Eurathlon, путёвку на который обеспечило первое место на «Робокросс 2012». Газель на горных дорогах была бы слишком габаритным и трудноуправляемым объектом. Одна МКПП добавляет много трудностей.
image

Вкратце о соревнованиях

Довольно подробно задание «Робокросса» описано в статье команды «АВРОРА», заслуженно занявшей первое место в конкурсе «Мул».
На «Робокроссе» задание «Мул» было взято с прошлогоднего Eurathlon. Робот должен в автономном режиме следовать за какой-либо меткой (не радиомаяком), затем вернуться в точку старта, объезжая динамические и статические препятствия на трассе.
На Eurathlon было задание «Автономная навигация» — заранее неизвестная дорога в горном лесу, даны координаты нескольких ключевых точек, которые необходимо проехать. Склоны и овраги в комплекте.

Приношу извинения за размеры фотографий, с моим интернетом они полдня заливались, с постоянными обрывами. Снова этого не вынесу! Спасибо, экс-ёта.

Механика

В качестве шасси был выбран китайский электрический квадроцикл Simbel Mini Q eco, который подарил некоторое количество проблем.
image
Первая — он кривой. В прямом смысле этого слова. При повороте колёс на некоторый угол одно из них отрывалось от земли.
Вторая — штатный привод ведущих колёс не приспособлен под задний ход как механически, так и электрически. Это стало большим сюрпризом (перед покупкой, естественно, не удалось ничего выяснить, в документации были вес, габариты, максимальная скорость и рекламная вода).
Третья — привод не оказывал никакого сопротивления качению при остановке. А при разбивке бюджета и техническом проектировании не был заложен привод тормоза. Это принесло массу радости и креатива, но много позже.
В качестве рулевого агрегата был использован линейный шаговый актуатор от НПФ Электропривод, тогда это казалось отличным решением — он должен был выдавать абсолютное значение перемещения штока, что позволяло (в теории) однозначно задать положение руля.
На практике оказалось, что при некотором сопротивлении привод пропускает шаги и не всегда держит заданное положение. Это усугубилось после того, как на «Робокроссе» один сильный человек повернул колёса вручную под нагрузкой.
Вся механическая часть, крепления всего оборудования и прочее были выполнены без привлечения промышленного оборудования (его просто не было) с помощью ручных инструментов и большого количества непечатных выражений примерно за две недели.

Электрика

В состав робота входили следующие «электроприборы»:

  • real-time controller National Instruments cRIO-9118 с набором модулей ввода-вывода;
  • промышленный контроллер Advantech  UNO-2184G под Windows;
  • лидар HOKUYO UTM-30LX-EW c углом обзора 270°;
  • лидар ближнего радиуса HOKUYO UBG-04LX-F01 с углом обзора 240°;
  • Wi-Fi точка доступа Ubiquiti RocKet M2 с антенной Ubiquiti AirMax Omni 2G13;
  • купольная сетевая камера Axis M3114-R;
  • БИНС КомпаНав;
  • 3G роутер промышленного стандарта с внешними антеннами;
  • DC-DC преобразователи;
  • свинцовые аккумуляторы на 52Ач;
  • провода, кнопки, тумблеры, витая пара, клеммные колодки и прочая мелочёвка.

image
Пре-альфа версия электропроводки

В этой части тоже не обошлось без сюрпризов — лидар ближнего радиуса проработал несколько часов и отключился навсегда. Планировалось, что он должен снимать рельеф дороги, поэтому для «Мула» на «Робокроссе» его наличие было некритично, а к осени обещали отремонтировать. Не отремонтировали, но об этом позже.
Весьма интересно было, что всё сетевое оборудование питалось от PoE 24 В, а купольная камера — от 48 В.
imageimage
imageimage

Программы и алгоритмы

Всё программное обеспечение было реализовано на графическом языке программирования National Instruments LabVIEW.
Система управления была разделена на две части, «верхнюю» и «нижнюю».
«Верхняя» — Advantech  UNO-2184G, на котором обрабатывались данные с лидаров и камеры, решалась глобальная задача навигации, выработки требуемой траектории движения.
«Нижняя» — cRIO-9118, там решалась локальная задача навигации и управления движением (приём и обработка данных с БИНС, определение положение робота в пространстве, хранение требуемой траектории движения и алгоритмы следования по ней, управление приводами). В самом общем случае робот мог действовать в режиме телеуправления или следования по координатам без привлечения контроллера верхнего уровня.

С нижним уровнем всё просто, что-либо новое и интересное там найти трудно, хотя будут вопросы — могу расписать.

Верхний уровень на «Муле» решал две отдельные задачи: следования за меткой и возвращения тем же путём с объездом препятствий.

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

После предварительной обработки изображения выполнялся поиск метки, затем поворотная камера центрировалась на ней. Принцип работы следящей головки самонаведения реализован в самом классическом виде. Система показала высокую защищенность от изменения условий освещения. На выходе этого модуля получались углы поворота камеры и масштаб найденного объекта относительно заданного паттерна, что позволило однозначно установить расстояние до метки.
Далее определялся горизонтальный угол наведения с помощью матрицы поворотов и передавался на уровень локальной навигации для следования за меткой на определённом расстоянии. Если метка оказывалась слишком близко, слишком далеко или терялась, робот останавливался и менялся режим работы сирены (по правилам была необходима световая и звуковая сигнализация при движении), поэтому «поводырь» мог, не оборачиваясь, понять, что происходит с роботом. При движении сохранялись координаты точек, по которым прошел робот для возврата по траектории.
На втором этапе робот возвращался по записанной траектории, объезжая препятствия, которые судейская команда разместила на поле.
Здесь использовался следующий принцип: алгоритм стремился оказаться в максимально близкой окрестности точки, при этом, по данным с лидара, строилась картина препятствий и определялись веса свободных участков, оценивались их размеры и близость к требуемому вектору движения. В результате получался заданный курс, максимально близкий к требуемому, но проходящий через свободное пространство. При достижении максимально возможного приближения к текущей заданной точке маршрута робот переключался на следующую.
На квалификационных заездах произошел интересный казус: в финишной зоне собралось много людей, которых робот не счёл возможным объехать, он развернулся, и выполнил маршрут с самого начала, заново проехав трассу в обе стороны. Позже оказалось, что это произошло из-за ошибки в определении индекса заданных координат в массиве с маршрутом, вылезло только в условиях невозможности достигнуть конечную точку, но выглядело интересно. «Я лучше уйду, чем поеду на людей! Слава великому Айзеку!»

Во время соревнований произошла неприятность из-за того, что не были предусмотрены некоторые аспекты работы с лидаром, первая попытка не была засчитана, хотя робот прошел половину маршрута (следование). В зоне промежуточного финиша (откуда робот должен вернуться автономно) он просто отказался ехать. Даже не пытался тронуться. Разбор полётов показал, что люди в этой зоне подняли столько пыли (очень мелкодисперсной и прилипчивой), что она, осев на лидаре, изображала непреодолимую стену. Естественно, защита от столкновений не позволила роботу двигаться! В результате в обработку данных с лидара добавилось игнорирование всех препятствий, расположенных внутри границ робота, а лидар протирался тряпочкой перед каждым заездом. В процессе тестов пыль поднималась позади робота, а в финишной зоне было значительно меньше людей, поэтому такого и не случалось. Всё не предусмотреть, кое с чем надо встретиться…

Вся система была продумана так, что после включения робот практически не требовал настройки, разве что контроля, что всё правильно, да выставки БИНС. Он выставлялся и автоматически, но для этого необходимо было проехать метров двадцать-тридцать по прямой в условиях неопределённого направления. При включении робот автоматически калибровал рулевой привод и переходил в режим телеуправления. После этого нажатием на одну из управляющих кнопок на корпусе запускался режим следования за меткой, робот начинал искать метку и следовать за ней. Затем, по нажатию следующей кнопки, включался режим возврата к точке старта. Получился дружественный к пользователю интерфейс и вполне автономный робот, даже безо всякой речи имевший некоторую связь с человеком.
Помимо прочего, робот показал впечатляющую энерговооруженность, 4-6 часов непрерывных тестов не разрядили аккумуляторы и наполовину. Да и зацепившегося человека он по асфальту вполне тащил (случилась такая оказия в начале отработки).

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

Eurathlon

В этом году в соревнованиях участвовало 13 команд из Евросоюза и одна из России.

Известие, что второго лидара так и не будет, было несколько обескураживающим, без него затея почти не имела смысла. Попытки применить Kinect показали, что он не считает препятствием всё, что засвечено ярким солнцем. Но вещи собраны, дорога оплачена, оставалось одно — бороться и искать, найти и перепрятать…

В дорогу я отправился больным, поэтому первые два дня посвятил почти исключительно температуре под 39, парацетамолу и чаю. Ну, немного погулял, конечно, потусил на площадке будущих соревнований. Но был выключен из процесса работы. Впрочем, ничего не пропустил — мы ждали, когда отзвонится водитель, который привёз ящик с роботом. Водитель так и не отзвонился, хотя робота привёз ещё раньше нас. В результате такого дальнобойного раздолбайства работы на месте были начаты на два дня позже, когда ящик нашли организаторы. Но это, как говорится, рабочие моменты. Ещё рабочий момент, в первый день организаторы сказали, что на старте будет электричество, значительно позже оказалось, что командам его не дадут, нужно всё своё иметь. Это добавило креатива в наш ЦУП, запитка скрутками от двух запасных аккумуляторов плюс красный скотч вместо синей изоленты. Мы не сдаёмся!

В Берхтесгадене было красиво, пиво было немецким и вкусным, а английский понимали практически все, так что командировка удалась. Но сейчас не об этом.
Городок оказался совсем небольшим, поэтому купить инвертор для питания ноутбуков от аккумулятора не получилось, хотя это был интересный квест. С помощью телефонного гуглопереводчика перевели требуемую фразу на немецкий, не доверяя местному знанию английского, показывали магическую надпись многим найденным продавцам, но тщетно. Пришлось ноутбукам работать от своих аккумуляторов. Местные симки для 3G-интернета тоже искали долго, оказалось, самый широкий выбор на заправках, имейте в виду!

При первой возможности, пройдя пешком десяток горных километров, изучили тестовую трассу и выяснили, что она представляет собой асфальтированную либо посыпанную щебнем дорогу в лесу. Тут же родилась идея спасения. Находить по картинке с камеры растительность и стремиться ехать туда, где её нет, не забывая о направлении на заданные точки. По счастью, ямы и обрывы тоже поросли травой, была вероятность, что робот их объедет. Да и по обочинам росла высокая трава, один из лидаров никто не отменял. Начался период интенсивных экспериментов с распознаванием растительности. Стереозрением до этого не баловались, поэтому решили не пытаться прикрутить его за пару дней. После долгих экспериментов и мозговых штурмов (даже с руганью, не без этого) было отсеяно много вариантов и я нашел более-менее работающее решение. Невзирая на освещённость и состояние неба, отношение цветовых компонент в лесу и на дороге значительно отличалось, особенно синей и зелёной. В результате родился следующий топорно-костыльный алгоритм: после квадратно-гнездового блюра отношения красной и синей компонент к зелёной брались с определёнными коэффициентами и по рассчитанной средней границе разделялись. Получались зоны «леса» и «не леса». Затем это ещё раз блюрилось, чтобы убить всякие опавшие листья и строились зоны, в которых необходимо стараться двигаться относительно текущего положения. Ну а далее — стремление к следующей точке координат, стараясь не съехать с дороги. Естественно, ограничения привода квадроцикла не позволили реализовать выход из тупиков задним ходом, так что оставалось только положиться на удачу.
image

В последний вечер перед стартом была реализована цифровая карта с текущим положением робота. Фотография имени гуглокарт с нанесённой сверху координатной сеткой и текущим положением робота. Выглядело просто прекрасно!
Ещё дома была реализована возможность мониторить и даже управлять роботом через интернет, с помощью сервера, оставленного трудиться. Даже двух, в разных местах (мало ли что). При проверке в Германии задержка была 100-150 мс, не так уж и плохо. А то, говорят, в лесу WiFi не очень. Но всё оказалось куда веселее.
image
Ещё одним интересным открытием стала полная неспособность тормозить двигателем при движении с горки (а уклоны там бывали те ещё). Решилось это (а мы всё равно не сдаёмся!) затягиванием тормоза с помощью пары презервативов. Отличная резина, не рвётся и с хорошей упругостью! Правда, тормозной диск и электропривод грелись весьма и весьма, но нам недолго плясать было нужно.
image

Пару слов о конкурентах

Победившим роботом был Фольксваген Туарег с обвесом из 3D-лидара, поворотной стереокамеры, двух профессиональных GPS-приёмников с уберантеннами и много-чего-ещё внутри. Стоимость только оборудования превосходила нашу минимум на порядок. Плюс разработка велась с 2008 года в институте под эгидой военных. Так что не обидно было им продуть с нашей поделкой за 25 килоевро, выполненной за лето.
image
Да и другие были не хуже, одно гусеничное шасси, выполненное на танковом заводе (не шутка) чего стоит!
image
В общем, мы рассчитывали, скорее, на почётное участие, чем на реальную конкуренцию с этими монстрами.

Соревнования

В день соревнований погода не задалась. Шел дождь, было холодно. Пришлось кустарно гидроизолировать привод руля (снова привет красному скотчу).image
Утром мы проверили все системы и выдвинулись на старт. Там прикрутили к доске антенну WiFi, проверили 3G и несколько выпали в осадок — в зоне старта не было покрытия. Когда об этом было сказано организатору, тот радостно сообщил, что это был один из критериев выбора места старта. Высокогорная площадка, вокруг склоны, да ещё на границе Германии и Австрии, которую не покрывали соты всё же нашлась, нам на радость.
А вот и наша очередь. Включение… Нет связи с контроллером верхнего уровня! Снимаемся со старта и срочно ищем монитор. Благо, нашли. Оказалось, что, унюхав инет, винда радостно обновилась утром при проверке связи через 3G и обновление стало конфликтовать с некоторыми драйверами. Epic fail. По-быстрому откатив обновления и отключив их нафиг (забыли, ёпрст) стали угрюмо мёрзнуть в ожидании старта «после всех».
Снова наша очередь. Проверка, калибровка руля… Механизм подклинивает в одном из крайних положений (помните про неприятность с проворотом колёс под нагрузкой на «Робокроссе»?). Вроде-бы, удаётся раскачать. Но всё зыбко и грустно. Поглядев, что дорога идёт, в основном, в горку, решаем ослабить кондомно-тормозную систему. Выходим на точку старта… Поехали!
Робот стартовал, будто взлететь собирался. Тормоз ослабили, а регулятор управления скоростью движения остался настроен на значительное тормозное усилие. Ой.
Тем не менее, выписывая опасные миллиметражи возле поросших травой ям и ухабов, робот нёсся вперёд. Алгоритм цветового распознавания листвы, обкатанный в солнечную погоду, прекрасно справился с пасмурным лесом.
В этот момент хочется воспеть Ubiquiti самыми прекрасными словами. Вайфай прекрасно продирался через 100, 200, ещё немного метров леса. Хорошо, что дорога была со стороны старта не слишком заросшей. Остановить это сверхмощное чудо смогли только пара метров земли, так то.
Тем не менее, проезжая по краю очередные заросли, робот неудачно сманеврировал и привод руля заклинился окончательно. Это было видно по телеметрии — требуемый угол поворота колёс максимальный, а движемся мы строго прямо. Это было начало конца. Кое-как проехав ещё часть маршрута, точнее пролетев пулей, мы снялись с дистанции и я вернул игрушку на старт в режиме телеуправления (Ubiquiti!), раскачав привод и примерно выставив среднее положение.
image
Команда в сборе. Слева направо:
Лунёв Андрей, МГТУ им. Н.Э. Баумана;
Поляков Сергей, НАМТ;
Дубовицкий Владимир, МГТУ им. Н.Э. Баумана (это я);
Кудряшов Игорь, НАМТ, капитан команды.


После этого забега, судье (здесь была опечатка «судьбе») были продемонстрированы живое видео, цифровая карта и прочие плюшки, за которые добавлялись призовые очки. Мы выключились, погрузились и отправились на базу. Упаковали и отправили робота домой, а сами стали ждать решения судей, не надеясь ни на что.

Судьи совещались долго. Но, уже в темноте, вывесили-таки результаты. Мы пошли смотреть, сколько очков набрал наш питомец. Со стороны это выглядело так: «Пошли в дальнюю часть шатра, к стенду с объявлениями. Посмотрели там, что да как, и начали ржать на весь шатёр!» Третье! Третье место по очкам! (Привет карте и живому видео!) Сказать, что это было неожиданно — значит просто промолчать. Весь вечер предавались отупевшему, усталому и радостному удивлению. Ну и немецкому пиву, куда же без него.
На следующий день было награждение. Сияя, как начищенные медные чайники, мы отправились ждать. Получили сертификат о третьем месте. И — новые сюрпризы — награду за самую креативную разработку по итогам голосования команд. На заездах краем уха слышал, что робота назвали «perfect simple technology». Видимо, впечатлились. И, наверное, они как-то прознали про тормоз.
В общем, вот всё, что мы увезли с соревнований:
image
image
image

Дальше была закупка сувениров и неспешный отъезд домой.

Было весело!

Автор: cattheblack

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js