понедельник, 29 ноября 2010 г.

NXT-G: плавное движение робота

Данный материал является продолжением советов по использованию блоков Move и Motor, а также является трансформированным переводом недавно опубликовонной статьи на legoleaguecoaching.org.

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



Давайте сперва рассмотрим как это "запинающееся" движение запрограммировано. Предположим, есть два блока Move для поворота двигателей на 200 градусов (каждый блок) с мощностью 50%:

Если запустить эту программу, робот запнется при переходе от одного блока к другому.

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

Поскольку первая программа задавала суммарное движение в 400 градусов, то в новой необходимо сделать тоже самое. В первом блоке условие окончания ожидания будет "до тех пор пока на сенсоре не станет больше 200 градусов".

Но поскольку блоки Wait отсчитывают количество оборотов на двигателе с начала выполнения программы, поэтому во втором блоке, условие уже будет другое - "до тех пор пока на сенсоре не станет больше 400 градусов".


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


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

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

  1. Интересный способ. Как раз, к WRO 2013 понадобилась такая штука.

    ОтветитьУдалить
    Ответы
    1. Ну как раз для этого все статьи и пишутся - для применения на практике :)

      Удалить

Related Posts Plugin for WordPress, Blogger...