Проект Eurobot 2011


Задача: Создать робота отвечающего требованиям регламента соревнований Eurobot 2011.

 

В 2010 году по регламенту соревнований Евробот 2010 лиги профессионал нашей команде предстояло создать автономного мобильного робота играющего в особенные шахматы. Игровой стол соревнований выглядел так:

Игровой стол для Eurobot 2011

Автономные мобильные роботы, стартовавшие из углов разного цвета: красного и синего, в течении 90 секунд должны были самостоятельно расставлять игровые фигуры на клетки своего цвета, строить башни разной высоты, объезжать противника. В 2011 году соревнования были как никогда зрелищными, регламент способствовал этому. Коротко о правилах: на поле присутствуют объекты трех типов короли — высокие большие фигуры, королевы — большие фигуры поменьше, пешки — плоские цилиндры. За постановку пешки на клетку своего цвета робот получал 10 очков, за королеву 20, короля 30. За постановку двухэтажных башен очки короля/королевы удваиваются, за постановку на две пешки — утраиваются. Более подробно ознакомиться с правилами можно в русском переводе или английском варианте.

Выполнение поставленной задачи:

 

Участие в 2011 году в соревновании это наш второй опыт, после прошлого года мы набравшись опыта подошли к выполнению задачи с научным подходом. Теперь робот состоит из множества контроллеров управляющих сервоприводами, двигателями, снимающими данные с датчиков, управляющих компрессором. Во главе всего стоит материнская плата на базе процессора x86 с операционной системой Linux. Мы использовали дистрибутив openSUSE 11.3 в связи с его удобством и нашими познаниями в этом дистрибутиве. На этих соревнованиях нашей командой был изучен и опробован протоков Modbus, как для плат с микроконтроллерами AVR — slave устройства, так и для компьютера — master устройство. Вот так выглядит робот 2011 года:

В движение робота приводили два двигателя постоянного тока производства Maxon. С игровым миром робот взаимодействовал благодаря четырем манипуляторам. Два по бокам для сбора и расстановки пешек, один внизу чтобы собирать пешки и становиться на веселую фигуру в конце раунда, и один спереди чтобы двигать и перемещать пешки, большие фигуры и собирать башни. Результаты финала показали, что конструкторы угадали эффективное направление конструкции. Роботы, прошедшие в финал отличались от нашего наличием второго бокового манипулятора с каждой стороны. В этом году наша команда создала систему объезда препятствий,  достойную соревнований — робот блестяще прошел все процедуры допуска. Также команда имела в запасе вариант глобальной маяковой системы навигации, которая не использовалась из-за малой полосы пропускания. Данные обновлялись с частотой 1 Гц, что было недостаточно. Но система имеет потенциал к доработке.

Механика робота 2011 года была разработана в SolidWorks. Детали робота изготавливались лазерной резкой на заказ и в лаборатории РК9 на станках с ЧПУ. Для деталей, которые изготавливались в нашей лаборатории были написаны управляющие программы с использованием SprutCAM. В проекте не было изготовлено ни одного бумажного чертежа. Все детали, включая электронные платы производились по электронной документации, были построены детальные 3д модели.  Все части робота прошли полный цикл проектирования.

Robot TurboT_02

В рамках этого проекта была разработана первая версия программного обеспечения для управления роботом, включающая: управление исполнительными механизмами, отработка простых заданий( взять объект, следовать по линии), система распознавания объектов вокруг робота с использованием дальномеров Sharp, система удаленного управления по wifi, управление с джойстика, простейших эмулятор робота на поле. Ближе к концу года большая часть устройств прошивались и отлаживались удаленно — это позволяло сразу нескольким людям работать с роботом, занимаясь каждому своим делом.

Изначально вся логика робота была реализована в моделлере. По мере готовности софта методы заменялись на работающие с реальным оборудованием.

Для чего потребовался промышленный протокол?

1. Необходимо было стандартизовать и отработать этот уровень, чтобы полностью отделить разработчиков верхнего и нижнего уровня. Теперь "хардвер" проектирует и отлаживает электронное  устройство робота, а в руки программиста попадает уже рабочий образец, на котором он тестирует свой код. При этом у разработчика нижнего уровня появилось еще одно средство отладки, так как готовых пакетов программ для работы с ModBus оказалось достаточно.

2. Нужно было повысить надежность передачи данных, выявлять отключения периферийных устройств или их некорректную работу. Восстанавливать соединение. Как ни странно, это происходит довольно часто и теперь автоматически. Сохранить полную работоспособность такой распределенной системы сложно, но она восстанавливает себя при необходимости, либо сообщает о невозможности это сделать. Кроме того, так можно выяснить наиболее "больные" платы робота.

3. Стандартизовав протокол, мы позволили быстро разобраться с платами сторонним разработчикам.

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

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

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

Результаты:

Нашей команде посчастливилось поучавствовать в открытом чемпионате в Германии, который проходил в городке Ludwigshafen, чемпионат в Германии позволил нам выявить сладые места в системе и потренироваться. В Германии команда заняла 7 место из 11 команд. Подробный отчет по этой теме можно прочесть в обзоре поездки.

На финале соревнований Eurobot 2011, проходившем в России в Астрахани, наша команда заняла третье место в Российском этапе и 27 место из 40 команд на чемпионате мира. Мы улучшили прошлогодний результат.

Соревновательный матч на международном этапе. Игра с Бельгийской командой.

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

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

Выводы:

Этот год принес много опыта. Теперь мы имеем скелет системы на всех уровнях. Думаю, каждому стало интереснее работать над проектом. Мы стали использовать системы контроля версий. Стало понятно, как организовать работу более правильно. Мы стали устанавливать сроки, стараясь их выполнять ( не всегда получалось из-за неопытности). В конце концов, мы сформировали огромный лог доработок, который я скопирую в этот раздел:

Основные проблемы и планы на следующий год:

  1. Система отладочной информации
  2. Подробное планирование заданий по времени для разработчиков.
  3. Составление тестов для разработчиков устройства пользователями заранее.
  4. Межличностные конфликты. Самодисциплина.
  5. Разработка прототипов
  6. Разработка модели для отладки логики
  7. Высоконадежные разъемы
  8. Стартовые кнопки
  9. Красная кнопка коммутирует силовую часть
  10. Горячая замена аккумуляторов
  11. Порядок на рабочем месте наводить самостоятельно
  12. Не наводить порядок на чужом месте
  13. Продумать возможность зарядки на борту
  14. Анализ регламента соревнований. Внимательно прочитать. Учитывать ограничения
  15. Надежность системы
  16. Монитор
  17. Срок отладки не менее 2 месяцев
  18. Спонсоры. Сделать рассылку. Комплектующие – двигатели, энкодеры, дольномеры, компрессор, EtherCat
  19. Увеличить скорость робота
  20. Качество покрытия стола
  21. Присоски с гофрой
  22. Система питания – качественная (речь идет о силовом питании)
  23. Укладка проводов в корпус
  24. Корпуса для плат
  25. Корпус для матери с учетом – сменного аккумулятора, своего питания, EtherCat(либо планшет)
  26. Визуальная индикация питания(присутствовало в этом году, будет заменено на другое устройство).
  27. Контроль питания
  28. Общий образ виртуальной машины
  29. Наличие жесткой логики(на всякий случай)
  30. Коробка для робота
  31. Индикация и тестирование на старте
  32. Перекрытие частот с вражескими маяками(ликвидировать)
  33. Смена частоты УЗ
  34. На малых (менее 20 см) расстояниях УЗ не работает(выровнять высоту приемника и излучателя)
  35. Коробка для маяков. маяк закрыт
  36. Колебательность движения робота уменьшить
  37. Autotuning ПИД коэффициентов. Измерение параметров переходного процесса.
  38. Определения максимального ускорения, при котором начинается проскальзывание.
  39. Определение максимальной скорости, с которой система движется устойчива
  40. Распознование столкновений
  41. Надежное распознование взятия объектов
  42. USB-переходники. Длинные провода.
  43. Разные типы серв
  44. Новый релиз маяковой системы
  45. Колебательность в поворотах уменьшить
  46. Взаимодействие конструктора и стратега
  47. Отладка в условиях соревнований (имеется в виду вывод отладочной информации во время работы на экран)
  48. Чемоданчик для маяков
  49. Таймер 90с на роботе
  50. Тест системы перед стартом
  51. Автоматическое определение цвета
  52. Балансировка питания
  53. Сменный блок батарей
  54. Многожильные провода
  55. Однотипность устройств(серв)
  56. Приложение не должно падать при отказе устройств. Иметь возможность реконекта. (реконнект на транспортном уровне есть, необходим реконнект на физическом)
  57. Шарниры подпружинены
  58. Дверки могут открыться во время матча (ликвидировать)
  59. Колеса более широкие, чтобы обеспечить высокое стартовое ускорение.
  60. Квота на 3D принтер
  61. Командный дух
  62. Габариты электроники уменьшить
  63. Габариты робота стараться также уменьшать.

Макрозадачи:

- Решение задачи прокладывания траектории (алгоритм А*)

- Построение уровня планирования (ИИ)

- Осваивание широкополосного лазерного дальномера и системы распознавания на его основе (координаты и классификация объекта)

- Осваивание сетевого протокола гарантированной доставки по времени EtherCat

- Новый релиз всей маяковой системы (замена блока батарей, замена питания, замена радиомодуля)

P.S. Я думаю, стоит попробовать еще раз. Практика показала, участие в Евроботе - пока самое эффективное средство развития себя, как разработчика.