Робофест-2016. За кулисами Rokkit. Часть 2

Продолжение cool-story о нашем участии в Робофесте.

IMG_20160414_111034 (1)

Первый день на стенде

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

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

Мне стало не по себе. Если это чудище выйдет из-под контроля на тренировке, от нашего робота может остаться буквально груда пластика и переломанные платы. Впрочем, сценарий явно надуманный, так как ребята были приветливыми, на роботе красовалась Большая Красная Кнопка ®, которая должна была усмирить его пыл при нажатии.

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

Вылезли неожиданные подробности. В регламенте ничто прямо не указывало на то, что лабиринт будет ограничен стенками изнутри. Удивительно. Я ещё попробую перечитать регламент, но почему-то все команды знали это и были подготовлены соответственно, а я представлял себе это совсем иначе. Мне виделся плоский полигон с выделенной цветом дорогой, со знаками, светофором и домами, как это бывает в городе. Однако, это оказался сомнительно плоский полигон из линолеума (который местами шёл волнами и задирался на стыках, из-за чего у нас и у некоторых других команд были проблемы с движением). Границы дороги определялись небольшими сценическими тумбами, обёрнутыми по периметру обрезками баннеров. Эта обёртка, разумеется, была жуткой и неровной. Цвет баннеров и цвет линолеума оказались почти неразличимыми для фильтра Собеля, поэтому навигация по камере накрылась. Но самая большая проблема оказалась не в этом.

Тумбы имели высоту порядка 60 см. (На них было удобно сидеть, как на лавочках). Наш робот просто терялся между ними. А знаки и светофор, как выяснилось, должны были располагаться сверху, на этих тумбах. С тем, что бортовую камеру мы расположили поначалу в плоскости третьего этажа робота, знаки мы просто не видели — как если бы вы попытались с земли рассмотреть знак, стоящий на плоской крыше двухэтажного дома.

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

За отказом от навигации по камере прилетело предложение ориентироваться по дальномерам, направленным к стенкам, для чего нужно было переставить сонары и подключить их к контроллеру.

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

Второй день

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

Первый заезд отменили, так как большинство команд банально не были к нему готовы. Что ж, нам на руку. Каким-то нечеловеческим усилием нам даже удалось заставить робота ездить к вечеру, но на первый заезд мы всё-таки не попали, прошляпив срок сдачи роботов в «карантин» — зону, недоступную для команд на время расстановки знаков на полигоне.

Так как подавляющая часть работ была более-менее закончена, мы разошлись сразу после закрытия павильона и отправились отсыпаться.

Третий день

Первый заезд дня мы пропустили по очень глупой причине. Мы не успели нормально наладить запуск робота без ноутбука, но и не сдали ноутбук вместе с роботом в карантин. Судьи потребовали отключить ноутбук и робот, разумеется, не стартовал. Дима страшно злился по этому поводу. Впрочем, в этот день к нам приехал Богдан, который спас положение и накатал скрипт для автономной работы программ без необходимости поддержания SSH-соединения.

Дима отлаживал прошивку, я решил проблему с дальномером. Робот стал работать великолепно. К вечернему заезду Дима и Нина уехали, оставив на стенде меня, Богдана и Ваню.

В вечернем заезде мы всё-таки стартовали, и робот отработал безукоризненно. Мы набрали рекордные 600 очков за заезд, взлетев на третью позицию. (На самом деле, мне совершенно непонятна логика оценивания заездов, но это тема для отдельного отзыва). Тем не менее, мы крепко воодушевились результатом.

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

День четвёртый

Финал. Пан или пропал. Дима с Ваней проработали всю ночь, но так и не получили адекватно работающий алгоритм. Их код всё больше походил на набор заклинаний. За прошедший вечер я подключил третий дальномер и сделал в бинарном интерфейсе контроллера функцию получения данных с сонаров.

Оставшиеся перед заездом три часа были очень напряжёнными. Ребята не спали, поэтому были рассеянными и раздражительными. Кое-как мы попытались написать простой алгоритм «правой руки» с учётом знаков. К сожалению, протестировать его на поле мы не успели из-за досадной ошибки с моей стороны — я забыл убрать часть «заглушек» из отладочной модели, и робот упорно не хотел стартовать. Кое-как это исправив и убедившись, что бот начинает двигаться после команды, мы сдали его в карантин и стали ждать.

На перестановку поля ушло где-то полчаса. Для нас они тянулись как вечность. Мы нервничали. Единственным шансом остаться на третьей позиции для нас был провал остальных сильных команд. Но нет, одна из команд набрала 400 баллов и опередила нас. Для победы нам надо было набрать всего около 200 баллов — правильно проехать под два знака. Другого шанса не будет. И вот, спустя миллион лет после сдачи робота — наш заезд. Мы с Богданом вышли запускать бота.

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

Так мы оказались на четвёртом месте.

Резюме

Может выглядеть так, как будто мы расстроились из-за итогового результата.

А вот ни разу. Всё же в приподнятом настроении мы всей командой вышли из павильона.

Несмотря ни на что, я считаю, что отработали мы идеально. Активная подготовка длилась у нас всего чуть больше недели, перемежаясь с авралами в университете. За десяток дней толпа из пятерых студентов подготовила робота, способного выполнить задачи состязания AutoNet-18+. При этом работа шла большей частью параллельно, мы почти не зависили друг от друга с самого начала. И в результате нам нужно было всего парой дней больше, чтобы заставить робота нормально ездить.

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

Я очень благодарен всей нашей команде. Мы очень хорошо поработали. Надеюсь, что это только начало.

Оставить комментарий