Соревнования роботов LEGO-NXT

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

Тестовый этап соревнований проходил в университете и занял три дня. От МГТУ им. Н.Э.Баумана выступало две команды — 3-й и 5-й курс кафедры РК-10, которые и состязались друг с другом в тестовых заданиях. В арсенале команд было по одному роботу LEGO-NXT, в состав которого входит: три двигателя, два датчика цвета, два датчика света, два ультрозвуковых датчика, кучка деталек LEGO, блок управления. Кроме робота была получена среда Brick Command Center. Среда вызывала все дни гнев и ничего больше, о чем более подробно будет сказано ниже.

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

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

Задание второго дня - сборка мусора. В определенной местности прямоугольной формы набрасывается мусор LEGO и его нужно сгребать в указанную зону. Командой задание было воспринято на ура и выполнено блестяще (вспоминаются роботы-пылесосы).

Задание третьего дня — выезд из лабиринта. Лабиринт представляет собой квадратную решетку из кубиков с гранями скотча черного цвета; некоторые из элементов этой решетки являются стенками, через которые нельзя проехать. В качестве тестового полигона немцы соорудили карту с циклом посередине — т.е. с квадратом, в который нельзя въехать — этот квадрат может внести сложность в решение задачи и зациклить вашего робота, если вы, например, решите держаться левой или правой стены. Место старта в лабиринте также неизвестно. На выезд из лабиринта дается две попытки. Также в качестве бонуса предлагается посчитать и издать звук на каждом новом квадрате, в котором был робот. Пример кусочка лабиринта указан на картинке.

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

Финальные дни соревнований. В финале команды получили доступ к новому оборудованию — положению и ориентации робота с сенсора Kinnect. Данные читались с компа через Bluetooth. Игровое поле было разделено на 4 квадрата - два белых и два черных. На квадратах были кубики, красные и зеленые соответственно. Задача — разбросать по 3 кубика - красные на черный, зеленые на белый. Задача последнего дня была аналогичной — но команда в ней толком не участвовала.

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

  • Чудо среда — такого я никогда не видел. Чтобы документ правильно компилировался, его нужно сохранить, иначе получается не пойми что.
  • Чудо среда — можно компилировать только главный файл. Не думайте об удобных библиотеках и подсистемах; максимум, что мы из него выжали - .h файлы с реализацией функций.
  • Чудо среда — программирование на недо-пере С. Обрезанный и в тоже время со своими избыточными конструкциями язык.
  • Чудо среда — некоторые объекты языка можно объявить только глобально в количестве несколько или одна штука, это относится к mutex; локальное объявление теоретически возможно, но это отказывается работать в любом простейшем виде.
  • Чудо среда — ужасное средство поиска ошибок, вместо ошибки показывается совсем не та строка и не тот блок кода.
  • Чудо среда — убогий редактор в стиле AVR Studio 4, который при некоторой комбинации клавиш отказывается печатать.
  • Чудо среда — зачем нам отладчик.
  •  Чудо среда — пару раз при прошивке у меня возникал синий экран смерти. Здесь свою лепту внес чудо драйвер под Windows.
  • Чудо компилятор — размер кода сильно ограничен, много написать можно, но это почему-то не работает и все.
  • Чудо среда — писать нормально не получается физически.
  • Чудо среда — не прошивайте если робот не подключен, иначе придется перезапускать.
  • Чудо среда — после удаления оставляет мусор в реестре и ассоциации с типами файлов.

О чудо среде можно говорить бесконечно, она неповторима =). Непонятно, почему именно это было предложено в качестве средства разработки. Существует замечательная среда ROBOTC - с триальной версией на 30 дней. Среда позволяет писать на С, к ней имеется эмулятор, который позволяет отлаживать робота. Развитием и продажей продукта занимается  Robomatter, Inc с использованием наработок Carnegie Mellon Robotics Academy. Лично меня от части проблем спасал внешний текстовый редактор Notepad++. Именно работая с этой средой, я вспоминал то, что читал в книгах старых вояк программирования и разработки и раньше не понимал — их воспоминания об ужасных средствах, борьба с которыми отнимала ценное время разработчика. Вспоминал Страуструпа, который писал, что средства разработки должны быть удобными и должны помогать, а не мешать вам работать. После чудо среды я стал гораздо сильнее любить vim, cmake, gcc и console =)

  • Чудо робот — качество сенсоров оставляет желать лучшего. Фильтры спасают, но не сильно.
  • Чудо робот — особенно разочаровывала конструкция, которая разваливалась каждые 30 минут, все время нужно что-то подтыкать, прижимать - иначе робот развалится. Собрать, надежно закрепить винтами или заклепками не получится.
  • Чудо сенсор — данные о положении и угле поворота робота обновлялись раз в 3-15 секунд.

Если вы когда-то делали роботов на нормальных контроллерах в удобной среде или с использованием бортового компьютера со всеми его плюсами, то разработка под LEGO вас будет убивать. Нормальным разработчикам LEGO NXT противопоказан. Неясно, почему в соревновании задействовали студентов — эти задачи решаются школьниками. На одном таком занятии автор присутствовал во время соревнований Eurobot-2010 в Швейцарии. Еще не очень было организовано тестирование для команд. На 15-16 команд было всего два тестовых полигона — это несколько минут в час на тестирование.

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

Все материалы соревнований правила, исходники выкладываю на github - http://github.com/proydakov/germans-nxt.
Желающие могут смотреть и развлекаться.

Среда, драйверы и материалы немцев http://github.com/proydakov/germans-ide.

Сайт среды http://bricxcc.sourceforge.net.

Далее нас ждет короткий фоторепортаж, материалы которого были любезно предоставлены студентами третьего курса РК-10.

Робот LEGO NXT

Пятый курс РК-10

Третий курс РК 10

Помощник немецкого профессора

Немецкий профессор, доктор Пфлёгер

Игровое поле предпоследнего дня

Тележка, привезенная и боготворимая немцами

Мне безумно понравился манипулятор

Leave a Reply

You must be logged in to post a comment.