Как прошел конкурс летающих роботов: полёты и ошибки

в 5:42, , рубрики: Без рубрики

image
Установка дрона на стартовую позицию

Год назад начался конкурс летающих роботов с призом в 1 миллион рублей. На старте было 536 заявок. На первой контрольной точке осталось 237 участников, на второй — 204, на третьей — 72. До финала дошли 29 сильнейших участников. Но только 14 команд и 4 индивидуальных участника добрались до полигона КРОК 24 и 25 августа и сражались за приз. Общее время финальных полетов их 18 дронов — около 5 часов. Задача – автоматически пролететь через небольшой лабиринт от маркера взлёта до маркера посадки, сесть, а затем вернуться, по пути облетая выступ-препятствие.

Самым болезненным было читать письма в последнюю неделю с темой «Всё. Я разбил робота». Самым приятным – видеть, как первая же команда показала такой уровень подготовки, который мы и ждали.

И да, ниже фотоотчёт – осторожно, трафик.
image
Летали в дождь

image
Открываем первый день. Слева направо: Виталий Полянский из жюри (заместитель по научной работе декана факультета «Робототехнические и интеллектуальные системы» Московского авиационного института), затем я и Алексей Добровольский (директор по разработке ПО КРОК).

image
Донастройка перед полётом

image
Установка на стартовый маркер

Если вы пропустили предыдущие серии

Вот здесь мы рассказывали про конкурс, а вот здесь – про то, как собирали своего робота и с каким трудом он когда-то летал.

Как прошел конкурс летающих роботов: полёты и ошибки
Схема полигона

Наша команда летала в дни финала вне конкурса, с роботом, которого мы делали для наращивания опыта в направлении робототехники вне обычных проектов. Мой рассказ будет именно с точки зрения участника. И, пожалуй, больше всего внимания уделю ошибкам в полётах: знать такие вещи очень полезно.

image
Участник готовится к старту

Полёты шли два дня, и адреналина было просто море. Вот участники, которые участвовали в этих финальных полетах и их результаты:

image

image
Внешняя стена полигона

image
Как выглядел лабиринт

image
Зрительные места до начала соревнований

Полёт на камерах

Итак, самая первая команда 2engineers показала просто прекрасный полёт в самом начале. Половину пути они прошли как по маслу и были просто в полушаге от того чтобы первым же полетом всех порвать и взять конкурс с первой попытки. Они летели строго по камере. Алгоритм был допилен так, что они на максимальной скорости по идеальной глиссаде вошли в поворот, сразу распознали маркер, хорошо сели – но на возвращении врезались в перегородку. Алгоритм они отлично заточили под конкретный полигон. Что помешало – непонятно. Может, какая-то тень случайная, но сразу за перегородкой их робот упал. Обидно, но после аварии робот на вторую попытку даже не взлетел – внутри что-то просто посыпалось.

«Потерянный на полигоне»

Робот команды «Robodem» здорово летал, и тоже здорово находил маркеры. Садился очень точно, из 5 тестовых попыток до турнира – все 5 идеально. Они – единственные, кто досрочно прошел четвертую контрольную точку, ещё на тестовых полетах. Еще за несколько месяцев до финала робот ровно шел по нарисованной на полу восьмерке. Но на финале была небольшая проблема с распознаванием, и поэтому он трижды садился на финишную площадку, затем разворачивался около стен – и возвращался обратно на этот маркер, потом заново пытался улететь. Через 6 минут он все-таки увидел «свет в конце туннеля», нашел поворот, увидел стартовый маркер и сел на него.

Проблемы c Wi-Fi

У примерно половины участников робот не считал всё на борту, а передавал картинку на ноутбук по Wi-Fi. Проблема была в том, что никто из участников не ждал, что Wi-Fi сеть будет зашумлена большим количеством естественного трафика от городских сетей вокруг (не помех, за этим мы следили). Например, все коптеры ArDrone отправляли на «землю» видеопоток и получали от «сервера» команды как от пульта (всё-таки маленький робот, да и платформа закрытая, много чего не поставить просто) – и вот здесь-то участников и ждали лаги. Например, первый канал Wi-Fi занимало 8-9 домашних и офисных сетей.

Ещё проблемы

  • Railab (Политехнический музей) хорошо летел, но вернуться не смог – вроде, аккумулятор неожиданно подвёл, не дав роботу чуть долететь.
  • «Авиа Инжинеринг» показывал отличную технологическую базу во время тестовых полетов, но их все же подвела винтомоторная группа, и они не смогли принять участие в финале. Но молодцы, приехали как зрители вместе со своим аппаратом.
  • «iKar» здорово перемещался по полигону, но его резко подвело распознавание посадочных площадок. Возможно, из-за того, что у него информация о результатах распознавания передавалась по радиолинку на частоте 915 МГц. Так как у нас на крыше стоит радиорелейному оборудованию базовой станции, то на этом канале могли быть помехи. Если я не ошибаюсь, на отладке у их робота стоял другой передатчик, а новый не был протестирован по месту.
  • Все, кто ориентировался по магнитометру, то есть компасу, получили проблемы из-за железобетонных конструкций здания. К сожалению, далеко не всем это было понятно задолго до начала конкурса. Роботы заканчивали попытку полётом прямо в ближайшую стену – сказывался сбой ориентировки. С другой стороны, вот, например, «Универсальный механизм» летали чисто на гироскопах и очень точно.
  • Команда из Владивостока не смогла поднять робота в воздух с первой попытки и даже не стали пытаться это делать во второй раз. Причину назвать не могу, но видимо, они поняли, что поправить что-то быстро не получится.
  • Возможные блики на асфальте после дождя, кажется, расстроили тех, кто летал с optic flow, а не сонаром – ведь это как оптической мышкой по зеркалу водить.

Наш полёт

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

  • Алгоритм не должен быть заточен под полигон: нужно универсальным образом решать класс задач, а не конкретно эту.
  • Никакого GPS: предполагается, что робот в будущем будет применяться там, где сигнал может быть искажен или отсутствовать.
  • Все вычисления должны осуществляться на борту робота (работа без связи с наземной станцией, с нее подается только единственный сигнал – на старт).

image
Это мы

image
Это наш робот

У нас было 8 аккумуляторов (благо мы могли себе это позволить), дорогой лидар и – на всякий случай – второй такой же робот, который был нужен, чтобы не сойти с дистанции, если разобьём своего первого в тестах. На последних прогонах перед турниром наш дрон пролетал лабиринт и обратно стабильно за время от 3,58 минут до 4,2 минуты. Мы были просто уверены в том, что всё с ним будет отлично, и он пройдёт дистанцию.
К нашему огромному удивлению, первую попытку полностью провалили – робот просто никуда не полетел.

Как выяснили в перерыве между попытками, причина совершенно банальна — мы не предусмотрели дублирование канала передачи данных. Вся обработка данных у нас делается на борту, поэтому роботу нужно передать только команду на старт. Уже потом мы с него потом получаем телеметрию. Когда мы пришли на первую попытку, считали себя абсолютно готовыми. У нас был запущен весь софт на роботе, развёрнут софт на ноутбуке, роутер — онлайн, но по какой-то причине команда с ноутбука на робот просто не передалась. Будь у нас второй ноутбук или пульт, мы бы экстренно передали команду с них.

На второй попытке после перезагрузки ноутбука робот полетел успешно.

Мы пролетели за 4 минуты и 1 секунду.

Вот видео первого дня полетов –

с 2:09:45 – наша успешная попытка

Раньше я писал, как мы намучились с датчиком optic flow, поскольку наш лидар не добивал до стен. На предполетных тестах выяснилось, что лидара хватает на всем протяжении полигона и optic flow просто не нужен. У лидара получается точнее измерение, все, этого хватает.

Еще у нас была проблема с алгоритмом, он очень критичен к разному виду освещения. То есть если светит яркое солнце, падает на стены, то они получаются ярче, чем сама мишень. Чтобы робот не врезался в стены, мы модифицировали алгоритм таким образом, чтобы откидывать их не учитывать при распознавании. На тестах мы пробовали показывать роботу множество ярких вещей с контрастными объектами внутри – он видел, например, три цели, и останавливался в воздухе, ожидая, пока две пропадут. В итоге мы играли фильтрами оптического входа до тех пор, пока не получили более-менее рабочие параметры.

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

Вот ролики об этом. Дополнительные перегородки:

И мы в виде дополнительных препятствий:

image
Перед самым полётом мы забраковали вот такую раму: очень тяжелая. Зато придумали замечательный обвес из хула-хупа, который нас, кстати, спас — немножечко коснулись стены. Да, это первый раз за все время наших полетов, когда дрон коснулся чего-то. Тоже случайность.

image
А вот мы счастливые, с нашим роботом и запасной рамой.

Общие впечатления

На последних тестах до турнира очень порадовало, что все команды были настроены достаточно благодушно друг к другу, совершенно спокойно делились информацией. Кто-то советовал, например, поставить камеру на заднюю часть коптера, чтобы не делать лишний поворот при поиске маркера. Одна из команд успела реализовать это до финала.

Вторая неделя тестовых полётов была вся забита. У нас полигон работал официально с 10:00 до 20:00, но практически каждый день полёты шли до 10 вечера, причём на полигоне по 5 команд одновременно.

image

image
Было много девушек

image
Обратите внимание, какие все позитивные

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

Вообще, лучше всех летали те команды, которые изначально озаботились компьютерным моделированием поведения своего робота. Именно у этих команд появились возможности отладить алгоритмы навигации, распознавания, не разбив роботов, и не приезжая на полигон. Были и те, кто использовал для симуляции собственноручно написанный симулятор. Это команда «2engineers» — они просто взяли и разработали свой собственный симулятор — они гейм-девелоперы, для них, это видимо, это не составило особого труда. Я помню, что когда мне показывали этот симулятор, я поначалу даже сказал: «Нет, зачем вы мне показываете видео с камеры? Покажите мне симулятор». А они: «Это и есть симулятор» Издалека он был неотличим от того, что реально робот передает со своей камеры. Они просто приехали, сняли наш полигон на камеру и все текстуры наложили на свою модель. И на этом уже отлаживали свой безумный вираж и алгоритм распознавания, и все-все-все.

У многих было искушение дописать код между попытками или поменять параметры. Мы их предостерегали и просили ничего не трогать, лететь вторую попытку на том же самом. Лучшее – враг хорошего, это как раз тот случай, стоит внести исправления в одну строчку кода и все сломается. Ведь времени на то, чтобы проверить и вообще осознать, что ты сделал, не будет.

image
На стойке регистрации

image
Команда-победитель перед полетами, еще серьезные и переживающие за то, как все сложится

image
Команда «Авиа инженеринг» и их робот, который подвел в последний момент

image
Погода в финальные дни подкачала, грелись пледами и как могли )

image
Робота команды АСА мы про себя назвали летучим голландцем

image
Один из АСовцев устанавливает робота на стартовую площадку

image
А здесь 2engineers готовятся нажать кнопку «Старт»

image
Это индивидуальный участник, Виталий Агалаков. К сожалению, справиться с задачей в одиночку оказалось непросто

image
Видимо, по мнению участников команды «Railab», робот с глазами летает лучше. Почти помогло :)

image
Болельщики греются пледами во время перерыва на дождь

image
Капитан команды СОЮЗ, за лучшую видеопрезентацию по итогам третьей контрольной точки они получили от нас ноутбук. Выбирали зрители.

image
Робот команды Колибри

image
И сами участники с роботом у пресс-волла с множеством логотипов инфопартнеров конкурса

image
Операция по защите себя от дождя

image
Участник из iKar устанавливает своего «голландца»

image
Фото на память команды «AA robots» с беспилотником и на полигоне

image
Так и не полетевший гость из Владивостока

image
Команда 607 приехала к нам прямиком из солнечного на тот момент Ростова-на-Дону

image
Команда 3 guys 1 bot, последние шаманства перед решающей попыткой

Результаты

Вот детальнее про тех, кто прошел в финал. Из них 10 представителей Москвы и Области и по одному — из Северной столицы, Брянска, Красноярска, Томска, Казани, Ростова-на-Дону, Бийска и Владивостока.

А это комментарий жюри первого дня финала конкурса, Виталия Полянского, заместителя по научной работе декана факультета «Робототехнические и интеллектуальные системы» Московского авиационного института (МАИ):

«Я не первый год работаю в области беспилотных систем и даже занимаюсь организацией кружков по робототехнике в средних учебных заведениях и МАИ. Но прошедший финал конкурса, судить который мне довелось, действительно удивил и порадовал. Участники смогли за год, совмещая разработку роботов со своей основной деятельностью в учебных заведениях и профильной работой, сделать из традиционно управляемых посредством пульта коптеров совершенно автономных дронов. А некоторые и вовсе построили роботов с нуля, создав уникальные конструкции. И это все исключительно на энтузиазме! Их глаза горят, а значит, конкурс был затеян не зря».

Призовой миллион забрала команда «Robodem» из Сергиева Посада. Дрон победителя выполнил конкурсное задание за 6 минут и 45 секунд.

На этом же видео первого дня полетов начиная с 32:20 можно увидеть их победный полет:

Вот тут можно посмотреть видео второго дня полетов.

Эти видео можно было смотреть онлайн, оба дня шла трансляция, в ходе которой конкурс посмотрели почти две тысячи человек. Вот, например, статистика первого дня:
image

image
Победители после полёта

Автор: AVY

Источник

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


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