пятница, 6 декабря 2013 г.

EV3: выполняем повороты с помощью датчика-гироскопа. Часть I

Сложные траектории движения - частоиспользуемые техники изменения положения робота на поле. Робот должен проехать по квадрату или завернуть за угол лабиринта, объехать препятствие по дуге. На LEGO Mindstorms RCX и NXT роботов расчет траектории для таких передвижений был нетривиально вещью. Приходилось либо вручную подбирать значения, насколько нужно повернуться каждому из моторов, либо выводить сложную формулу зависящую от диаметра колеса и ширины колесной базы робота.
Но в любом случае, как только вы меняли базу робота, или ставили бОльшие колеса, всю работу приходилось начинать сначала.

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

Например, самая простая программа для выполнения роботом поворота на 90 градусов вокруг своей оси будет выглядеть следующим образом:


Если прочитать эту программу человеческим языком, то она будет выглядеть следующим образом:
  • Включить моторы на выполнение вращения вокруг своей оси и перейти к следующему блоку
  • Ждать пока на датчике-гироскопа не станет больше 90 градусов
  • Остановить моторы
Если вы поменяете теперь колеса на бОльшие по диаметру, робот все равно будет останавливаться примерно в той же позиции, что и со старыми колесами. Тоже самое касается изменения колесной базы.

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


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

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

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

Это неудобство можно избежать, если использовать режим ожидания изменения в блоке, вместо режима сравнения:


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

Тогда новая программа будет выглядеть вот таким образом:


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

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

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

Related Posts Plugin for WordPress, Blogger...