Немного соревнований автономных дронов, рассчитанных на взрослых разработчиков и организации, проводятся в России. В статье расскажу о нашем участии в Аэробот-2020. Мы и без соревнований работаем с актуальными технологиями локализации дрона в помещении, планирования движения и картографии (exploration), детекции объектов (perception) и оптимального управления движением. В условиях соревнования были задачи как раз из этой области.
Наша команда состояла из сотрудников Центра компетенций НТИ по направлению «Технологии компонентов робототехники и мехатроники» на базе Университета Иннополис и студентов университета.
Под катом много увлекательных полетов и падений дронов.
С одной стороны, мы хотим забыть об этом как о страшном сне, а с другой, это интересный опыт. Так что, чтобы оставить эти воспоминания в 2020 году, эта статья достается из черновиков.
Соревновательная робототехника
Если спортивное программирование и индустриальная разработка уже во многих случаях весьма далеки друг от друга, то в робототехнике зачастую крупные соревнования становятся драйверами развития целых направлений. Пожалуй, самый яркий пример — DARPA Grand Challenge, которые предопределили бурное развитие автономных автомобилей. Основатель DJI начинал свою работу по БПЛА с соревнований ABU Robocon в составе команды гонконгского университета HKUST.
Среди современных крупных конкурсов в области воздушной робототехники я выделю:
The DARPA Subterranean (SubT) Challenge (хотя там и наземные роботы), где роботы должны строить карту, двигаясь автономно в шахте;
AlphaPilot — Lockheed Martin AI Drone Racing Innovation Challenge. Участники создают искусственный интеллект, способный опередить человека-пилота в гонках FPV дронов;
Mohamed Bin Zayed International Robotics Challenge (MBZIRC). Здесь тоже воздушные и наземные роботы и их взаимодействие; кстати, объявлено начало приема заявок на 2023-й год;
Соревнования проводятся также в рамках конференций IROS, ICRA, NeurIPS (Game of Drones) и других.
А что в России?
В России робототехника вообще становится популярна, есть кружки, курсы и много STEM-education-движухи. Соревнования дронов в основном проводятся среди школьников и студентов. Мы их и сами проводим. Конкурсов, ориентированных на организации и более сложные задачи, немного (хотя порой и современные школьники делают удивительные вещи). Когда-то компания КРОК проводила интересный конкурс, с тех пор мало подобного было. Пример недавнего конкурса для производителей БПЛА — конкурс от ПАО «Газпром нефть» и AeroNet по перевозке груза, имитирующего пробы нефти. Однако, там задачи больше по аппаратной составляющей БПЛА, чем по планированию движения и обработке сенсорных данных. Можно упомянуть еще Copter Hack, но это конкурс проектов, а не соревнования в которых команды соревнуются в выполнении одних и тех же заданий.
Аэробот-2020
Соревнования Aerobot проводятся в России второй год и как раз ориентированы на развитие решений «в области разработки, создания и эксплуатации перспективных робототехнических комплексов (систем) гражданского, военного, специального и двойного назначения воздушного базирования» (sic!). Как видите, даже название пропитано духом двойного назначения, что не случайно: соревнования проходят при поддержке ФПИ, призванного быть российским аналогом DARPA. При этом задания вполне интересные, даже если вы пацифист или опасаетесь военной бюрократии, как я.
Заданий в этом году было 3:
Инспекция помещения и поиск объектов в нем с указанием их координат (жизненный аналог — поисковые операции в разрушенном здании, например);
Движение по QR-код (получается этакий дрон для складской инвентаризации, вот похожий проект от коллег из Сколково);
Гонки дронов — максимально быстро пролететь между воротами и обойти препятствия между ними.
Эти соревнования проводились во второй раз. В этот раз организатором выступила наша с @GigaFlopsis (и еще нескольких теперешних иннополисян) alma mater — НИИ робототехники и процессов управления Южного федерального университета (НИИ РиПУ), г. Таганрог.
Команды-участники
Соревнования проводились в два этапа. Для первого, отборочного, был сделан симулятор на базе Gazebo с клёвыми обоями (я просил добавить ковры на стены, но это, видимо, оставили для следующих версий). Второй этап проходил на специальном полигоне.
Из-за коронавируса в этом году команд было меньше, чем в прошлом, но уровень был выше: у всех дроны летали и все делали попытки выполнения заданий. Еще порадовало, что команды были гибридные — представители академических институтов и индустрии. Список и краткая инфа о командах:
RaccoonLab, Университет Иннополис — это мы;
ФИЦ ИУ РАН (Москва), в составе разработчики из Fast Sense Studio. Они делают бортовые компьютеры для мобильных роботов и дроны для складской инспекции;
ИПУ РАН (Москва) использовали дрон стартапа Airspector по промышленной инспекции при помощи БПЛА;
С305, ДВФУ (Владивосток), Центр проектной деятельности студентов;
QuadroZ, НИИ РиПУ (Таганрог), команда организатора соревнований;
Альтаир, студенты ЮФУ (Таганрог);
Команда ВИТ Эра (Анапа).
Состав нашей команды
Дмитрий Девитт — главный заводила, знает вкус победы предыдущих соревнований Аэробот-2019. Видели Noize MC, обвешанного гитарой и укулеле с сэмплером и клавишами? Вот примерно так работает Дима при тестах: в одной руке ноутбук, в другой пульт ручного управления для подстраховки;
Дмитрий Пономарев — программист, реализовал фьюзинг нескольких реалсенсов для локализации, генерировал миры в Gazebo;
Илья Севостьянов — студент Университета Иннополис, работал над детекцией полосы и посадочной площадки;
Юрий Сухоруков — студент, много занимался сборкой кошерного дрона, 3D-печатью, сделал ворота и параллельно порадовал сайд-проектом по детекции масок с дрона;
Роман Федоренко — я, каким-то волшебным образом собрал эту мега-команду и наблюдаю за успехом (спокойствие все же только видимое).
Следующие сотрудники большой команды нашей лаборатории не были в официальном составе соревнований (по регламенту не больше 5 человек с российским гражданством), однако их наработки были очень полезны:
Виктор Массагуе — алгоритм инспекции;
Гисара Пратхап — сегментация на облаке точек, создание миров в Gazebo;
Никита Ермоленко — алгоритмы CV для детекции ворот.
Отборочный этап
Хотя, как я уже говорил, отборочный этап проходил в режиме симуляции, он был очный. Организаторы предоставили каждой команде мощный компьютер, на котором мы запускали как симулятор, так и код выполнения заданий. Зачетные попытки демонстрировались на большом экране. Перед зачетными попытками организаторы загружали новые сцены, слегка отличающиеся от предоставленных для тренировки.
Все три задания от третьего к первому на симуляторе (этап 1) в таймлапсе:
На отборочном этапе наша команда заняла первое место с заметным отрывом, но расслабляться было рано.
Разбор решений
Approach
Общий подход у нас и у других команд состоял в классической структуре системы управления с разделением на функциональные блоки локализации и картографии, управления, планирования движения, восприятия окружающей среды, планирования миссии. End-2-end и подобное никто не делал, хотя элементы такого подхода в третьем задании напрашиваются.
Железо
Все летали на опенсорс автопилоте PX4 (слава ему).
По бортовым компьютерам: Nvidia Jetson (Nano/NX/Xavier) или Raspberry Pi или свой компьютер у FastSense.
Из сенсоров для восприятия мира, как правило, есть камеры глубины Realsense D435, многие летают также с использованием RPLIDAR плюс обычные камеры (вебки) для детекции объектов.
Локализация
Здесь две доминирующие идеи: 2D SLAM на Google Cartographer (мы использовали только на этапе симуляциий) c RPLIDAR и tracking камеры Realsense T265.
Последние при хорошей удаче закрывают вопрос локализации полностью причем на аппаратном уровне. Однако, как и вся визуальная одометрия, могут «плыть» (особенно в условиях вибраций на дроне). Мы пробовали делать комплексирование двух камер одновременно — одна вниз, другая вперед или вверх, например, но это тоже не всегда работает, так как сами камеры могут давать неверную ковариацию.
Картография
Первые две задачи соревнований включают в себя по сути задачу инспекции, то есть автоматическое обследование дроном заданной территории для быстрого поиска объекта. В первом задании нужно находить кубы с логотипом и возвращать их координаты, во втором — QR-коды и выбирать дальнейшие действия по данным в них.
Мы использовали свою наработку в этой области, основанную на модифицированном алгоритме NBV (next-best-view), а также библиотеке voxblox для представления карты.
Алгоритм строит 3d карту (цветной mesh) в реальном времени на борту дрона, зная только предполагаемые размеры области инспекции. При планировании также выполняется обход препятствий, пролет в окно для инспекции следующего помещения также планирует этот алгоритм.
Как это выглядит в реальных тестах:
Почитать подробнее можно, например, здесь.
Траекторное управление и обход препятствий
Пожалуй это одна из самых интересных и важных частей проекта. Нам нужно было обеспечивать максимально безопасную, но в тоже время быструю траекторию движения дрона, избегая заранее неизвестные препятствия. К тому же необходимость планирования в трехмерном пространстве добавляет вычислительную сложность.
Изначально планировщик знает положение дрона, целевую точку (или несколько), а также карту в виде облака точек. Помимо этого мы настраиваем максимальные скорости и ускорения дрона.
На основе облака точек формируется новая карта с дополнительными границами вокруг препятствий (т.н. inflation). По этой карте находится оптимальный маршрут, используя несколько алгоритмов (для быстрого поиска — сильно модифицированный elastic band planner, в сложных случаях дополнительно используется A*).
На выходе мы получаем набор координат, через которые нужно построить траекторию дрона. Для генерации физичной траектории используются сплайны. Существует много хороших открытых решений от крутых лабораторий, например mav_trajectory_generation от Autonomous Systems Lab (ETH, Цюрих), B-traj от HKUST Aerial Robotics Group (Гонконг) и множество реализаций minimum snap и jerk генераторов траекторий (btw, jerk и snap это названия соответственно третьей и четвертой производных перемещения по времени, по-русски толчок и рывок). Мы интегрировали решение от HKUST Aerial Robotics Group. Результатом работы данного модуля является гладкое движение дрона с отклонением от препятствий.
Один из примеров полёта у нас в подвале:
Еще один пример работы планировщика уже в симуляторе Gazebo:
Восприятие
В задачи восприятия, которых мы касаемся здесь, входят детекция (и локализация)
кубиков с логотипом (задача 1);
посадочной площадки (все задания);
QR-кодов (задание 2);
препятствий и ворот (задание 3).
Для детекцией кубиков хватило базовых методов OpenCV: SIFT + Homography + PnP. Т.к. мы знали паттерн на сторонах куба, достаточно было определить точное положение этого паттерна относительно камеры, а дальше можно получить позицию относительно любой системы координат. Для этого был написан простой пакет под ROS на python.
Для QR кодов помимо координат необходимо было произвести расшифровку кода. На python с этим отлично справляется библиотека zbar.
Забавно было с детекцией ворот и препятствий. На этапе симулятора мы заюзали кластеризацию облаков точек на базе https://github.com/PRBonn/depth_clustering. Ворота сегментировались как один кластер и мы задавали траекторию полета через его центр. Если вместо ворот были препятствия, их облетал алгоритм траекторного управления с обходом препятствий (см. выше).
На этапе полигона мы, конечно, от этого ушли :)
Ad hoc vs унифицированные подходы
Общефилософское отступление в целом о соревнованиях. С одной стороны, соревнования направлены на стимулирование развитие технологий для практического применения. С другой, искусственность соревнований обуславливает то, что более простые решения, работающие для конкретных условий, выигрывают в сравнении с более общими подходами, которые к тому же требуют более длительной разработки. Вообще, это называется «костыли», но, говорят, есть более научный термин: Ad hoc.
В нашем случае, у нас были в заготовке еще до соревнований некоторые универсальные средства: планировщики, сегментация облаков, конструкция дрона, программная инфраструктура. С другой стороны, воля к победе требует в процессе отладке во время соревнований применять и некоторые «оптимизации» и упрощения.
Хорошим примером здесь будет наш планировщик для первого задания. Можно делать универсальный алгоритм с NBV, оптимизацией движения с целью максимального захвата камерой неисследованного объема, а можно, зная размеры комнат и что они имеют простую форму, задать несколько рандомных точек в каждой. Также можно задавать направление движения, зная что карта устроена для движения по или против часовой стрелки. Еще забавный момент — если предположить, что организаторы расставили объекты поиска в точки с целыми координатами (или с координатами кратными 0.5), что свойственно человеку, можно довести точность их определения дроном до абсолютной простым округлением :)
Отступление 2
Читайте регламент заранее и рассчитывайте на худший сценарий. Если заметили неточность, предлагайте уточнение.
Отступление 3
Все кто делают дронов, рассчитывайте на тройное резервирование, бюджеты умножьте на 3 и не соглашайтесь на меньшее :) Дроны падают.
Обещанное видео падений:
И еще. Делайте бэкапы. У нас, например, накрылась флешка со всей системой на бортовом компьютере и это стоило нам дня соревнований и ночи восстановления.
Полигон и летающая звезда Давида
Технополис Эра
Эра — это военный Технополис. Круто, что он у моря. «Расположение Технополиса на морском побережье создает комфортные условия для работы и жизни.» — сказано на сайте Технополиса :)
И да, у них свой пирс с вертолётной площадкой.
Особенностью работы в военном Технополисе является отсутствие Интернета, в том числе мобильного из-за экранирования. Поступали так:
А это мобильная базовая станция
Полигон
Полигон в его вариантах для разных заданий выглядел так:
Железо
Дроны других участников
Технология тряпочки
Надеюсь, ребята из Fast Sense Studio не поругают меня за разглашение ноу-хао с тряпочкой, т.к. это яркий пример того, с чем приходится сталкиваться при работе с реальным железом, особенно если сравнивать с симулятором.
Итак, уважаемые знатоки, внимание, вопрос: для чего нужна тряпочка на взлетно-посадочной площадке?
Ответ в спойлере
Всё просто — на тряпочке много «фич» по сравнению с гладким полом, и визуальной одометрии есть за что «зацепиться» в момент взлёта, когда камера только поверхность под дроном и видит.
Наш дрон
Про звезду Давида мы не специально (кажется). Просто такая форма получилась достаточно жесткой.
Вообще, конструкция сделана модульная, с расчетом на ремонтопригодность, изготовление на базе стандартных карбоновых трубой и 3D-печатных деталей.
Последних мы взяли с собой мешочек про запас. Питстоп по замене сломанного крепления двигателя — не более 60 секунд:
Полёты
Репортаж о соревнованиях и дронах, у которых есть имена (источник):
Победила дружба
По результатам соревнований судейской коллегией было принято решение не выявлять победителей, т.к. ни одной командой не были пройдены задания второго тура целиком. По итогу: 1) потрачено много запчастей и нервов, 2) было весело, собрались интересные ребята, 3) победила дружба. Следующие соревнование организаторы планируют проводить с теми же заданиями. А мы занимаемся прикладной разработкой и поглядываем на MBZIRC. Привет участникам и организаторам!