Установка дрона на стартовую позицию
Год назад начался конкурс летающих роботов с призом в 1 миллион рублей. На старте было 536 заявок. На первой контрольной точке осталось 237 участников, на второй — 204, на третьей — 72. До финала дошли 29 сильнейших участников. Но только 14 команд и 4 индивидуальных участника добрались до полигона КРОК 24 и 25 августа и сражались за приз. Общее время финальных полетов их 18 дронов — около 5 часов. Задача – автоматически пролететь через небольшой лабиринт от маркера взлёта до маркера посадки, сесть, а затем вернуться, по пути облетая выступ-препятствие.
Самым болезненным было читать письма в последнюю неделю с темой «Всё. Я разбил робота». Самым приятным – видеть, как первая же команда показала такой уровень подготовки, который мы и ждали.
И да, ниже фотоотчёт – осторожно, трафик.
Летали в дождь
Открываем первый день. Слева направо: Виталий Полянский из жюри (заместитель по научной работе декана факультета «Робототехнические и интеллектуальные системы» Московского авиационного института), затем я и Алексей Добровольский (директор по разработке ПО КРОК).
Донастройка перед полётом
Установка на стартовый маркер
Если вы пропустили предыдущие серии
Вот здесь мы рассказывали про конкурс, а вот здесь – про то, как собирали своего робота и с каким трудом он когда-то летал.
Схема полигона
Наша команда летала в дни финала вне конкурса, с роботом, которого мы делали для наращивания опыта в направлении робототехники вне обычных проектов. Мой рассказ будет именно с точки зрения участника. И, пожалуй, больше всего внимания уделю ошибкам в полётах: знать такие вещи очень полезно.
Участник готовится к старту
Полёты шли два дня, и адреналина было просто море. Вот участники, которые участвовали в этих финальных полетах и их результаты:
Внешняя стена полигона
Как выглядел лабиринт
Зрительные места до начала соревнований
Полёт на камерах
Итак, самая первая команда 2engineers показала просто прекрасный полёт в самом начале. Половину пути они прошли как по маслу и были просто в полушаге от того чтобы первым же полетом всех порвать и взять конкурс с первой попытки. Они летели строго по камере. Алгоритм был допилен так, что они на максимальной скорости по идеальной глиссаде вошли в поворот, сразу распознали маркер, хорошо сели – но на возвращении врезались в перегородку. Алгоритм они отлично заточили под конкретный полигон. Что помешало – непонятно. Может, какая-то тень случайная, но сразу за перегородкой их робот упал. Обидно, но после аварии робот на вторую попытку даже не взлетел – внутри что-то просто посыпалось.
«Потерянный на полигоне»
Робот команды «Robodem» здорово летал, и тоже здорово находил маркеры. Садился очень точно, из 5 тестовых попыток до турнира – все 5 идеально. Они – единственные, кто досрочно прошел четвертую контрольную точку, ещё на тестовых полетах. Еще за несколько месяцев до финала робот ровно шел по нарисованной на полу восьмерке. Но на финале была небольшая проблема с распознаванием, и поэтому он трижды садился на финишную площадку, затем разворачивался около стен – и возвращался обратно на этот маркер, потом заново пытался улететь. Через 6 минут он все-таки увидел «свет в конце туннеля», нашел поворот, увидел стартовый маркер и сел на него.
Проблемы c Wi-Fi
У примерно половины участников робот не считал всё на борту, а передавал картинку на ноутбук по Wi-Fi. Проблема была в том, что никто из участников не ждал, что Wi-Fi сеть будет зашумлена большим количеством естественного трафика от городских сетей вокруг (не помех, за этим мы следили). Например, все коптеры ArDrone отправляли на «землю» видеопоток и получали от «сервера» команды как от пульта (всё-таки маленький робот, да и платформа закрытая, много чего не поставить просто) – и вот здесь-то участников и ждали лаги. Например, первый канал Wi-Fi занимало 8-9 домашних и офисных сетей.
Ещё проблемы
- Railab (Политехнический музей) хорошо летел, но вернуться не смог – вроде, аккумулятор неожиданно подвёл, не дав роботу чуть долететь.
- «Авиа Инжинеринг» показывал отличную технологическую базу во время тестовых полетов, но их все же подвела винтомоторная группа, и они не смогли принять участие в финале. Но молодцы, приехали как зрители вместе со своим аппаратом.
- «iKar» здорово перемещался по полигону, но его резко подвело распознавание посадочных площадок. Возможно, из-за того, что у него информация о результатах распознавания передавалась по радиолинку на частоте 915 МГц. Так как у нас на крыше стоит радиорелейному оборудованию базовой станции, то на этом канале могли быть помехи. Если я не ошибаюсь, на отладке у их робота стоял другой передатчик, а новый не был протестирован по месту.
- Все, кто ориентировался по магнитометру, то есть компасу, получили проблемы из-за железобетонных конструкций здания. К сожалению, далеко не всем это было понятно задолго до начала конкурса. Роботы заканчивали попытку полётом прямо в ближайшую стену – сказывался сбой ориентировки. С другой стороны, вот, например, «Универсальный механизм» летали чисто на гироскопах и очень точно.
- Команда из Владивостока не смогла поднять робота в воздух с первой попытки и даже не стали пытаться это делать во второй раз. Причину назвать не могу, но видимо, они поняли, что поправить что-то быстро не получится.
- Возможные блики на асфальте после дождя, кажется, расстроили тех, кто летал с optic flow, а не сонаром – ведь это как оптической мышкой по зеркалу водить.
Наш полёт
Пожалуй, стоит рассказать немного про нашего робота. Наша команда шла вне конкурса, поскольку наша же компания его и организовывала. Мы поставили для себя три важных ограничения (они же отчасти усложнения):
- Алгоритм не должен быть заточен под полигон: нужно универсальным образом решать класс задач, а не конкретно эту.
- Никакого GPS: предполагается, что робот в будущем будет применяться там, где сигнал может быть искажен или отсутствовать.
- Все вычисления должны осуществляться на борту робота (работа без связи с наземной станцией, с нее подается только единственный сигнал – на старт).
Это мы
Это наш робот
У нас было 8 аккумуляторов (благо мы могли себе это позволить), дорогой лидар и – на всякий случай – второй такой же робот, который был нужен, чтобы не сойти с дистанции, если разобьём своего первого в тестах. На последних прогонах перед турниром наш дрон пролетал лабиринт и обратно стабильно за время от 3,58 минут до 4,2 минуты. Мы были просто уверены в том, что всё с ним будет отлично, и он пройдёт дистанцию.
К нашему огромному удивлению, первую попытку полностью провалили – робот просто никуда не полетел.
Как выяснили в перерыве между попытками, причина совершенно банальна — мы не предусмотрели дублирование канала передачи данных. Вся обработка данных у нас делается на борту, поэтому роботу нужно передать только команду на старт. Уже потом мы с него потом получаем телеметрию. Когда мы пришли на первую попытку, считали себя абсолютно готовыми. У нас был запущен весь софт на роботе, развёрнут софт на ноутбуке, роутер — онлайн, но по какой-то причине команда с ноутбука на робот просто не передалась. Будь у нас второй ноутбук или пульт, мы бы экстренно передали команду с них.
На второй попытке после перезагрузки ноутбука робот полетел успешно.
Мы пролетели за 4 минуты и 1 секунду.
Вот видео первого дня полетов –
с 2:09:45 – наша успешная попытка
Раньше я писал, как мы намучились с датчиком optic flow, поскольку наш лидар не добивал до стен. На предполетных тестах выяснилось, что лидара хватает на всем протяжении полигона и optic flow просто не нужен. У лидара получается точнее измерение, все, этого хватает.
Еще у нас была проблема с алгоритмом, он очень критичен к разному виду освещения. То есть если светит яркое солнце, падает на стены, то они получаются ярче, чем сама мишень. Чтобы робот не врезался в стены, мы модифицировали алгоритм таким образом, чтобы откидывать их не учитывать при распознавании. На тестах мы пробовали показывать роботу множество ярких вещей с контрастными объектами внутри – он видел, например, три цели, и останавливался в воздухе, ожидая, пока две пропадут. В итоге мы играли фильтрами оптического входа до тех пор, пока не получили более-менее рабочие параметры.
Когда мы добились того, что наш робот уже мог выполнять конкурсное задание, мы усложнили задачу: установили дополнительные перегородки на полигоне, и даже экспериментировали с облетом появившихся препятствий в виде людей. Причем мы были настолько уверены в своих силах, что становились спиной к подлетающему роботу и дожидались, пока он нас облетит.
Вот ролики об этом. Дополнительные перегородки:
И мы в виде дополнительных препятствий:
Перед самым полётом мы забраковали вот такую раму: очень тяжелая. Зато придумали замечательный обвес из хула-хупа, который нас, кстати, спас — немножечко коснулись стены. Да, это первый раз за все время наших полетов, когда дрон коснулся чего-то. Тоже случайность.
А вот мы счастливые, с нашим роботом и запасной рамой.
Общие впечатления
На последних тестах до турнира очень порадовало, что все команды были настроены достаточно благодушно друг к другу, совершенно спокойно делились информацией. Кто-то советовал, например, поставить камеру на заднюю часть коптера, чтобы не делать лишний поворот при поиске маркера. Одна из команд успела реализовать это до финала.
Вторая неделя тестовых полётов была вся забита. У нас полигон работал официально с 10:00 до 20:00, но практически каждый день полёты шли до 10 вечера, причём на полигоне по 5 команд одновременно.
Было много девушек
Обратите внимание, какие все позитивные
Тех, кто неплохо шел дистанцию можно поровну поделить на тех, у кого были готовые ArDrone с вычислителями на «земле» и мощными алгоритмами обработки видеопотока, и половина кастомных решений, которые везли на себе разные датчики.
Вообще, лучше всех летали те команды, которые изначально озаботились компьютерным моделированием поведения своего робота. Именно у этих команд появились возможности отладить алгоритмы навигации, распознавания, не разбив роботов, и не приезжая на полигон. Были и те, кто использовал для симуляции собственноручно написанный симулятор. Это команда «2engineers» — они просто взяли и разработали свой собственный симулятор — они гейм-девелоперы, для них, это видимо, это не составило особого труда. Я помню, что когда мне показывали этот симулятор, я поначалу даже сказал: «Нет, зачем вы мне показываете видео с камеры? Покажите мне симулятор». А они: «Это и есть симулятор» Издалека он был неотличим от того, что реально робот передает со своей камеры. Они просто приехали, сняли наш полигон на камеру и все текстуры наложили на свою модель. И на этом уже отлаживали свой безумный вираж и алгоритм распознавания, и все-все-все.
У многих было искушение дописать код между попытками или поменять параметры. Мы их предостерегали и просили ничего не трогать, лететь вторую попытку на том же самом. Лучшее – враг хорошего, это как раз тот случай, стоит внести исправления в одну строчку кода и все сломается. Ведь времени на то, чтобы проверить и вообще осознать, что ты сделал, не будет.
На стойке регистрации
Команда-победитель перед полетами, еще серьезные и переживающие за то, как все сложится
Команда «Авиа инженеринг» и их робот, который подвел в последний момент
Погода в финальные дни подкачала, грелись пледами и как могли )
Робота команды АСА мы про себя назвали летучим голландцем
Один из АСовцев устанавливает робота на стартовую площадку
А здесь 2engineers готовятся нажать кнопку «Старт»
Это индивидуальный участник, Виталий Агалаков. К сожалению, справиться с задачей в одиночку оказалось непросто
Видимо, по мнению участников команды «Railab», робот с глазами летает лучше. Почти помогло :)
Болельщики греются пледами во время перерыва на дождь
Капитан команды СОЮЗ, за лучшую видеопрезентацию по итогам третьей контрольной точки они получили от нас ноутбук. Выбирали зрители.
Робот команды Колибри
И сами участники с роботом у пресс-волла с множеством логотипов инфопартнеров конкурса
Операция по защите себя от дождя
Участник из iKar устанавливает своего «голландца»
Фото на память команды «AA robots» с беспилотником и на полигоне
Так и не полетевший гость из Владивостока
Команда 607 приехала к нам прямиком из солнечного на тот момент Ростова-на-Дону
Команда 3 guys 1 bot, последние шаманства перед решающей попыткой
Результаты
Вот детальнее про тех, кто прошел в финал. Из них 10 представителей Москвы и Области и по одному — из Северной столицы, Брянска, Красноярска, Томска, Казани, Ростова-на-Дону, Бийска и Владивостока.
А это комментарий жюри первого дня финала конкурса, Виталия Полянского, заместителя по научной работе декана факультета «Робототехнические и интеллектуальные системы» Московского авиационного института (МАИ):
«Я не первый год работаю в области беспилотных систем и даже занимаюсь организацией кружков по робототехнике в средних учебных заведениях и МАИ. Но прошедший финал конкурса, судить который мне довелось, действительно удивил и порадовал. Участники смогли за год, совмещая разработку роботов со своей основной деятельностью в учебных заведениях и профильной работой, сделать из традиционно управляемых посредством пульта коптеров совершенно автономных дронов. А некоторые и вовсе построили роботов с нуля, создав уникальные конструкции. И это все исключительно на энтузиазме! Их глаза горят, а значит, конкурс был затеян не зря».
Призовой миллион забрала команда «Robodem» из Сергиева Посада. Дрон победителя выполнил конкурсное задание за 6 минут и 45 секунд.
На этом же видео первого дня полетов начиная с 32:20 можно увидеть их победный полет:
Вот тут можно посмотреть видео второго дня полетов.
Эти видео можно было смотреть онлайн, оба дня шла трансляция, в ходе которой конкурс посмотрели почти две тысячи человек. Вот, например, статистика первого дня:
Победители после полёта
Автор: AVY