вторник, 20 марта 2012 г.

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

Задание в средней возрастной группе Международных Состязаний Роботов в 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 миллисекунд), но не дает хорошей индикации при появлении горки.

2 комментария:

Related Posts Plugin for WordPress, Blogger...