Олимпиада «Программирование мобильных роботов — 2010» [25.05.2010­-27.05.2010]

воскресенье, 4 июля 2010, Yuriy Bogomolov

В конце апреля чуть ли не случайно я узнал, что меня включили в команду ВНТУ по робототехнике, которая в конце мая будет участвовать во Всеукраинской олимпиаде по программированию мобильных роботов. На меня была возложена задача съездить в Киев, в представительство компании Festo, привезти искомого робота к нам, в Винницу, обучить товарищей по команде (призера многочисленных олимпиад по спортивному программированию Невидомого Виталия и студента 3-го круса специальности интеллектуальных систем Зозовского Александра) азам работы с этим роботом, смотаться по-быстрому в Севастополь всей командой, занять там призовое место и вернуться домой. Задача ясна? Принять к исполнению :)

Робот, за которым я ездил, называется Robotino. Это закрытая аппаратно-программная платформа под управлением собственного легковесного дистрибутива Linux. Краткие характеристики этого робота следующие:

  • 37 см в диаметре, 11 кг веса;
  • WiFi, при помощи которого осуществляется управление роботом и заливка в его память написанных программ;
  • двигатель OmniDrive, который позволяет как управлять каждым из трех колес-роликов по отдельности, так и управлять всем роботом как единым целым;
  • веб-камера Logitech для получения видеоданных об окружающей среде;
  • 9 инфракрасных датчиков средней чувствительности;
  • бампер, который выдает сигнал 0/1 в зависимости от того, было ли столкновение;
  • дополнительные оптоволоконные и инфракрасные датчики, о характеристиках которых ничего не скажу, т.к. банально не дошли руки с ними разобраться.

Внешний вид Роботино таков:

Стоимость робота — чуть больше 7000 евро. Как мне кажется — несколько дороговато; за эти деньги можно было бы купить несколько наборов Lego NXT, которые гораздо гибче и легче кастомизируются.

Программируется это чудо либо при помощи RobotinoView II — среды «визуального программирования», либо при помощи API на C/C++, Java, C#, VB.NET, Mathlab, Simulink, Labview.

Среду RobotinoView II (см. ниже) мы, как настоящие парни, отвергли сразу и решили писать на чистом С++.

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

Сама олимпиада проводилась под крышей Севастопольского Национального Технического Университета и Festo-Didactic. В первый день, 25 мая, проводилась регистрация и расселение участников, а также мастер-класс по программированию Роботино, во второй день — непосредственно олимпиада, а в последний день было награждение победителей и экскурсия по Севастополю.

Всего участвовали: мы (Винница), команда из Донецка, две команды из Севастополя, включая организаторов соревнований (!), и команда из Киева.

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

В результате, список заданий выглядел так:

  1. Езда по лабиринту при помощи джойстика: глядя на робота — 10 баллов, ориентируясь на показания камеры — 20 баллов.
  2. «Воротца и маячки»: потушить 3 раноцветных маячка при помощи инфракрасного луча — 10 баллов, проехать между двумя парами ворот — 20 баллов, описать воьсмерку — 30 баллов, описать восьмерку-триплекс — 40 баллов.
  3. Езда по линии: просто следовать линии — 10 баллов, объехать два перпятствия — 20 баллов.
  4. Домашнее задание — до 50 баллов.

В нашем распоряжении было 5 роботов Роботино, из которых два с более новым железом и прошивкой, два — более старых. Что было неприятного: роботов постоянно тасовали, поэтому программу приходилось постоянно калибовать заново, что было значительной тратой времени и нервов.

Наша команда: Зозовский Александр, Богомолов Юрий, Невидомый Виталий и наш тренер — Месюра Владимир Иванович

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

Наша команда в процессе выполнения первого задания:

Следующим нашим заданием был лабиринт; описывать тут особо и нечего — натренированный в Need For Speed Виталий Невидомый показал второй по времени результат и первый — по чистоте езды :) Баллы начислялись за занятое место по времени, от них отнимались штрафные баллы за касание стенок. У нас был лучший результат по чистоте — 0 касаний при езде глядя, и 1 касание при езде вслепую. Киевляне пролетели лабиринт глядя быстрее всех, но с семью касаниями. Команда Севастополь-1 (организаторы) была, вроде бы, на третьем месте.

Лабиринт выглядел так:

На этом же полигоне мы сразу продемонстрировали наше домашнее задание — автоматическое прохождение лабиринта по правилу левой руки, получив за него максимум (50) баллов.

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

Попытки объехать препятствие:

В результате предварительного подведения итогов были получены такие результаты: Севастополь-1 — первое место (кто бы сомневался :), мы — второе место, Киев — третье место. На этом официальные соревнования закончились.

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

Итого, места и награды:

  • Первое место в командном зачете: первая команда СевНТУ.
  • Второе место в командном зачете: команда ВНТУ.
  • Третье место в командном зачете: команда КПИ.

Места индивидуального зачета, увы, не помню.

После награждения была небольшая экскурсия по Festo-Didactic и свободное время, которое мы полностью посвятили экскурсии по Херсонесу:

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


Ищите нас в интернетах!

Комментарии

Свежие вакансии