ДО курс по робототехнике

4 апреля 2013 г.

Робот для состязаний: Робот "Ван Гог"

(С)NiNoXT

Задание в старшей группе Международных Состязаний Роботов названо в честь одного из величайших художников-постмодернистов Винсента Ван Гога.
Участникам состязания необходимо создать робота который сможет окрасить столбы на поле надевая на них полые кубики соответствующего цвета.


Lasse Deleuran - преподаватель из Дании. Для того, чтобы помочь своим ученикам начать готовить роботов для данного задания, он создал пример устройства, которое частично выполняет это задание.



Изюминка здесь заключается в том, что он выложил на своем сайте в свободный доступ инструкции по сборке для данного робота, а также программу на языке NXT-G.

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

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





Аналогичным образом, возникает необходимость, после того как кубик надет на один из столбиков, переместиться к следующему кубику. Если принять во внимание, что за первым кубиком ехать не надо – очевидно, что его легче взять сразу после старта робота, то от каждого из 4 столбиков робот должен знать маршрут до каждого из 3 столбиков.




Соответственно, возникает вопрос, а можно ли как-то упростить поведение робота, так чтобы не закладывать в робота 29 различных маршрутов (1 маршрут для первого кубика + 16 + 12)?

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



  • Первый маршрут – прямо и налево (зеленая и красная стрелочки)
  • Второй маршрут – прямо и направо (зеленая и синяя стрелочки)

Очевидно, что маршрутов возврата от столбиков к центру тоже два.

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



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

Если внимательно изучить поле для состязаний в старшей группе, то можно обратить внимание на деталь, которая позволит несколько соптимизировать программу для робота.
Такой деталью является расстояние от бортика до черной боковой линии. Правилами здесь заложено всего лишь 13 сантиметров.



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



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

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

Для программирования перемещения робота "Ван Гог" по полю имеет смысл назначить код каждой позиции, откуда и куда робот должен приехать.
Назначим цифры от 0 до 3 каждой позиции, где кубики изначально установлены, и также от 0 до 3 для каждого столбика. Цифры назначаются каждой позиции не случайным образом, а в соответствии с определнной логикой.



Позиции с установленными кубиками пронумерованы в соответствии, например, с порядком их обхода. Сначала робот идет в позицию 0, затем в 1 и т.д. На самом деле здесь ничего не мешает задать нам произвольный порядок обхода, главное, чтобы он был. Тем, как позиций закодированы на схеме выше, однозначно определяется как роботу передвигаться. Например, из позиции 0 роботу перемещатся в центр поля, по такой же траектории как и из позиции 3. Другой пример, то что из центра поля траектории перемещения до позиций 1 и 2 будут одинаковыми.

Такой же логике подчиняется нумерация позиций со столбиками. До 0 и 2 столбиков тракетории движения из центра поля – одинаковые, тоже самое и для 1 и 3 столбика. 

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

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

ШАГ = 0;
Захватить кубик в позиции 0;
Начало Цикла
    Определить цвет и записать в ЦВЕТКУБИКА;
    //Робот едет в центр
    Если ШАГ = 0 или ШАГ = 3, тогда
        Едем прямо до перекрестка;
        Поворачиваем налево;
    Иначе
        Едем прямо до перекрестка;
        Поворачиваем направо;
    Едем к центру;
    //Робот поворачивается к нужным столбикам
    Если ЦВЕТКУБИКА < 2, тогда
        Поворачиваем в сторону базового лагеря;
    Иначе
        Поворачиваем в сторону противоположную базовому лагерю;
    //Робот едет к кубикам
    Если Остаток(ЦВЕТКУБИКА/2) = 0, тогда
        Едем прямо и налево;
    Иначе
        Едем прямо и направо;
    Выгружаем кубик;
    //Возвращаемся в центр
    Если Остаток(ЦВЕТКУБИКА/2) = 0, тогда
        Едем справа и прямо;
    Иначе
        Едем слева и прямо;
    ШАГ = ШАГ + 1;
    Если ШАГ > 3, тогда
        Прервать цикл;
    //Едем к кубику
    Если ШАГ = 3, тогда
        Едем прямо до перекрестка;
        Поворачиваем направо;
    Иначе
        Едем прямо до перекрестка;
        Поворачиваем налево;
    Едем к центру
    Захватить кубик;
Конец Цикла

Как видно из описания алгоритма, кодировки позиций, где лежат кубики хранятся в переменной ШАГ, а цвет кубика, захваченного роботом, хранится вЦВЕТКУБИКА.

По значению переменной ШАГ определяется каким образом робот передвигается до центра поля и наоборот – из центра.

Значение ЦВЕТКУБИКА используется первый раз (ЦВЕТКУБИКА < 2) для обозначения в какую сторону роботу необходимо выполнить поворот от центральной линии. Второй раз оно появляется в выраженияхОстаток(ЦВЕТКУБИКА/2) = 0, что по сути обозначает есть ли остаток от деления на 2. В зависимости от этого выбирается слева или справа относительно робота, находящегося в центре поля, расположены столбцы для кубиков.

Преподаватель Лего-кружка школы №135 г. Снежинска Дмитрий Сергеевич Нецветаев выложил в публичный доступ интересный материал: Логистический анализ работы робота "Ван Гога". В нем рассмотрены несколько стратегий поведения робота на поле в зависимости от количества захватываемых кубиков.

Lasse Deleuran, чье имя упоминалось в самой первой заметке цикла, закончил программирование своего робота и выложил программу на NXT-G у себя насайте.

Комментариев нет:

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