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

4 апреля 2013 г.

Робот для состязаний: Робот "Колумб"

(С)NiNoXT
Задание в средней возрастной группе Международных Состязаний Роботов в 2012 году позволяет почувствовать конструкторов и программистов роботов первооткрывателями.
Им нужно построить робота который способен к исследованию сложного ландшафта в поисках полезных ресурсов, а после того как они найдены возвращения с ними домой.
Конечно, ландшафт в случае состязаний - условность, он задается усложняющими элементами на поле:


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

В этом задании, как видно минимум явных опознавательных элементов поля (черных линий, цветных квадратов и т.п.), поэтому основная трудность робота - правильно позиционировать себя. Особенно остро встает вопрос позиционирования, когда робот уже поднялся на возвышение. Иначе робот рискует съехать одним из колес в "море", либо разогнавшись вылететь с обрыва.

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

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

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

Для начало надо собрать "экспериментального робота" и разместить на нем сенсоры.


Программа для сбора данных будет простая:
* робот включает двигатели и едет на маленькой скорости вперед
* пока робот едет, в цикле опрашиваются сенсор расстояния и цветовой сенсор, показания сенсоров записываются в файл
* пауза между соседними замерами примерно 40 милисекунд
* как только 75 измерений сделано, моторы выключаются.
task main() {
    SetSensorLowspeed(IN_4);
    SetSensorColorRed(IN_3);
    ClearScreen();

    Wait(500);
    OnFwd(OUT_BC, -20);

    int dataUS=0;
    int dataLI=0;
    long t0, time;
    byte fh;
    short bw;
    string write, tmp;

    t0=CurrentTick();
    
    DeleteFile("data.csv");
    CreateFile("data.csv", 4096, fh);

    for(int i; i<75; i++) {
        dataUS=SensorUS(IN_4);
        dataLI=Sensor(IN_3);
        time=CurrentTick()-t0;
        write=StrCat(NumToStr(time), ";",
                NumToStr(dataUS), ";", NumToStr(dataLI));
        WriteLnString(fh, write, bw);
        Wait(40);
    }
    CloseFile(fh);

    Off(OUT_BC);
}
В ходе двух прогонов на разной конфигурациях возвышенности (см. фотографии выше), получаются две таблицы. В каждой из них есть показания с обоих сенсоров. Для большей наглядности, удобно построить графики:

График показаний сенсоров при подъезде к спуску с горки:


График показаний сенсоров при подъезде к обрыву:


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

Нельзя сказать, что трасса в средней группе основной категории Международных Состязаний Роботов в этом году простая.
Практически сразу после старта робот по пандусу должен заехать на возвышение и довольно большое время проводить там, время от времени съезжая за "товарами" или наоборот, чтобы выгрузить их. Конструкция робота должна позволять ему без последствий подниматься и опускаться по горкам (наклон - 18 градусов). Также робот должен уметь аккуратно передвигаться уже по мосткам, без боязни упасть вниз.

Попробуем рассмотреть те особенности конструкции, которые необходимо иметь в виду при разработке механизма робота.

I. Центр тяжести.

Когда идет речь о Lego Mindstorms NXT роботах, то самыми тяжелыми частями конструкции являются NXT блок и моторы. Если из-за ошибки в проектировании, расположить эти детали неверным образом, то центр тяжести робота будет может оказаться смещенным в сторону "носа" или "кормы" робота. Это приведет к тому, что при заезде на горку сила тяжести будет опрокидывать механизм.



На этой схеме, показано, что блок находится в задней части тележки, что является следствием к смещению центра тяжести к "корме". Если теперь блок сместить вперед, то конкретно эта проблема решается.



Но ведь роботу также придется, затем, и съезжать вниз. Тогда из-за смещенного к "носу" центра тяжести, робот опять опрокидывается.



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

II. Ось поворота.

Скорее всего большинство конструкций в состязании будут стремиться к тому, чтобы занять конструкцией робота весь разрешенный объем: 25 см. в ширину, 25 см. в длину и 25 см. в высоту. В то же самое время, площадки на мостках имеют вид квадрата стороной 30 см. Это означает, что выполнения поворотов создатели, скорее всего, предпочтут поворот сразу двумя колесами вокруг оси поворота - ему нужно меньше места для разворота и выполняется он быстрее.

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




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


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

Например, робот успешно заезжает по горке на мостки и останавливается вот в такой позиции:



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



К концу разворота, не только два поддерживающих колеса свешиваются с возвышения, но и одно из ведущих колес тоже "ушло" с площадки.



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

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

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

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