суббота, 14 мая 2011 г.

Новый блок от HiTechnic для управления моторами. Часть I

Компания HiTechnic делает не только всевозможные примочки для NXT, но также публикует свои собственные разработки для среды программирования NXT-G. Недавно, они опубликовали новый блок "HiTechnic Motor PID Block".

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

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

    Единственный входной параметр для этого блока задает, то положение двигателя, к которому нужно переместиться.
    Выходной параметр (2) выставляется в True, когда блок достигает необходимого положения.
  2. Настройка

    1. Устанавливает мотор для движения
    2. Положение двигателя, к которому нужно переместиться (Set Point)
    3. Задает максимальную скорость, с которой мотор может двигаться
    4. Если установлен, то блок не будет передавать управление, до тех пор пока мотор не достигнет заданного положения - Set Point.
    5. Выполнять движение к заданному положению (Power Toward Set Point) или определять точку отсчета (см. ниже).
    6. Если необходимо, позволяет задать коэфициенты PID регулятора.
  3. Установка точки отсчета
    Для некоторых роботов является важным установить точку осчета для использования в данном блоке. Точка отсчета по своей сути начало координат, место, относительно которого будут расчитываться все остальные движения.

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

    Motor PID Block поддерживает четыре способа установки точки отсчета:
    • Reset at Current Position – текущая позиция мотора и есть точка осчета. Полезно, когда позиция выставляется вручную или в ходе движения по рекации на какой-нибудь датчик, например, касания.
    • Reset at Forward Limit – мотор будет двигаться вперед до тех пор, пока движение возможно, пока не будет заблокирован механическим ограничением движения. То положение двигателя, в котором движение прекратилось становится точкой отсчета.
    • Reset at Backward Limit - мотор будет двигаться назад тех пор, пока движение возможно, пока не будет заблокирован механическим ограничением движения. То положение двигателя, в котором движение прекратилось становится точкой отсчета.
    • Reset at Mid-point of Limits – сначала мотор двигается вперед, пока движение возможно, затем назад, пока движение возможно. Середина между этими позициями становится точкой отсчета. Удобно использовать, например, в тележке с управляемым поворотным колесом: среднее положение, обозначающее движение прямо, вычисляется автоматически и не требует каждый раз ручной установки.
Так какого же функциональное отличие этого блока от обычного Motor?

Что происходит когда мы подаем на блок Motor значение в 90 градусов? Заданный мотор вращается на 90 градусов вперед. А если потом подать еще 90? Еще на 90 вперед. Затем, если подать -270 градусов – мотор провернется назад на 270 градусов.

Motor PID Block действует по другому – он использует заданное значение не как количество движения, а как место, на координатной прямой (или круге, если угодно) куда он должен попасть, место, определяемое относительно точки отсчета.
Например, если передать ему значение 90 градусов, то он действительно повернется на 90 градусов.

Если затем, передать 45 градусов, то его назначением относительно точки отсчета будет место не "впереди" текущего положения (90 градусов), а сзади. Поэтому мотор повернется не вперед, а назад.

Передача параметра в -180 градусов приведет в результате к повороту назад на 225 градусов, но финальное положение окажется на 180 градусов повернуто относительно начальной точки отсчета.

А последующее движение к точке 180 градусов вызовет поворот мотора на 360 градусов вперед.

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

Зачем же ПИД (PID) регулятор в данном блоке?
А затем, чтобы достич максимального точного приближения к заданной точке.

Вспомните, при управлении такими блоками как Motor или Move, довольно оптимистично ожидать, что моторы повернуться именно на то количество градусов, которое задано. Чаще всего мотор недокручивается или наоборот, "проезжает" назначенную точку.

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

Например,


В результате будет видно, что показания заданного угла поворота и фактического угла поворота совпадают. Что как раз и делает честь этому блоку.

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

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

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

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

Related Posts Plugin for WordPress, Blogger...