P-регулятор

Трудности использования релейного регулятора, о которых говорилось в п. 9.1, требуют поиска более приемлемого решения задачи управления. Одним из вариантов является пропорциональный регулятор (или P-регулятор). В этом случае управляющее воздействие на моторы робота не постоянно, как в релейном регуляторе, а изменяется пропорционально отклонению от заданного расстояния до стены. Другими словами, чем больше отклонение, тем активнее должны работать моторы, выравнивая траекторию робота. В идеале робот должен ехать прямо, если датчик регистрирует заданное расстояние. При небольшом отклонении следует небольшое подруливание. Если отклонение больше, то и подруливание больше. Алгоритм P-регулятора является классическим в теории систем автоматического управления.

Пример 9.2. Управление движением вдоль стены на основе P-регулятора.
Для P-регулятора управляющее воздействие U(t) на моторы робота в момент времени t вычисляется по формуле:
U(t) = K_p \cdot E(t), ( 9.1)

где

  • E(t) = X_0 - X(t) - отклонение робота от заданного положения (другими словами, ошибка, Error, или ещё говорят невязка);
  • X_0 - заданное расстояние до стены (у нас 20 см);
  • X(t) - текущее показание датчика;
  • K_p - усиливающий коэффициент (коэффициент пропорциональности). Всегда положительный.
Очевидно, графиком для расчёта управляющего воздействия U в зависимости от ошибки E будет прямая:
График для P-регулятора: зависимость U от E

Из графика очень просто определить коэффициент K_p. Выберем произвольную точку на графике. В нашем случае это точка A(1; 2). Тогда

K_p = U_A / E_A = 2/1 = 2.

Ошибка может быть как положительная (если мы ближе к стене, чем надо), так и отрицательная (если мы отъехали от стены дальше, чем необходимо). Таким образом, управляющее воздействие U(t) тоже может быть как положительным, так и отрицательным.

Пусть мы имеем P-регулятор для робота, движущегося вдоль стены. Тогда мощность моторов PowerB(t) и PowerC(t) в момент времениt вычисляется по формулам:
PowerB(t) = Nm + U(t) ( 9.2)
PowerC(t) = Nm - U(t), ( 9.3)

где

  • Nm - нормальная мощность моторов: мощность, с которой должны крутиться оба двигателя, если отклонение от курса равно нулю. В нашей программе можно положить Nm = 50;
  • U(t) - управляющее воздействие на моторы, вычисляемое по формуле (9.1).
Знаки перед U(t) для Вашего робота могут поменяться на противоположные в зависимости от того, какой мотор находится слева, а какой справа.

Рассмотрим смысл коэффициента пропорциональности K_p. Как видно, поворот производится в силу того, что от мощности одного мотора управляющее воздействие вычитается, тогда как к другому - прибавляется. Таким образом коэффициент K_p может усиливать или ослаблять воздействие регулятора на моторы: если он больше единицы, то происходит усиление, а если меньше - ослабление. Большой K_p сделает робот очень чутким к ошибкам, что приведёт к резким рывкам для исправления траектории. Малый K_p сделает движения робота плавнее, но на крутых поворотах робот может потерять стену и сойти с траектории. Конкретные значения коэффициента K_p, наиболее подходящие в каждом конкретном случае, будут зависеть от конструктивных особенностей робота, скорости движения (нормальной мощности), сложности трассы, используемых датчиков. Величины PowerB(t) и PowerC(t) должны лежать в диапазоне [0; 100]. Поэтому при больших ошибках (и, соответственно, больших управляющих сигналах) мощность моторов будет ограничиваться так, чтобы она не выходила из указанного диапазона. В этом случае пропорциональный регулятор не будет работать корректно, поскольку не сможет скомпенсировать большие ошибки. Таким образом, одной из особенностей P-регулятора является адекватная работа только при небольших ошибках. Для того, чтобы учесть это в нашей задаче нужно иметь стену без резких поворотов и двигаться с небольшой скоростью.

Слишком расплывчатые фразы "резкие повороты" и "небольшая скорость" используются здесь намеренно. Конкретные значения этим нечётким величинам можно придать в результате проведения экспериментов с конкретным роботом в конкретных условиях.

Реализуем алгоритм P-регулятора согласно приведённым формулам при помощи вложенных процедур (My blocks) на языке NXT-G.

Блок вычисления отклонения (ошибки) от заданного расстояния, который мы назовём Error, имеет следующие параметры:
  • входные - текущее показание датчика расстояния X(t);
  • выходные - ошибка E(t)).
Блок Error на языке NXT-G выглядит так:
Подпрограмма вычисления ошибки отклонения от заданного расстояния

Мы используем его в подпрограмме для вычисления управляющего воздействия U(t). Она имеет следующие параметры:

  • входные - текущее показание датчика X(t);
  • выходные - управляющее воздействие на моторы.
Подпрограмма вычисления управляющего воздействия U(t)

Этот блок мы используем для разработки блока P-регулятора. Он будет иметь следующие параметры:

  • входные - текущее показание датчика;
  • выходные - мощность моторов B и C.
Подпрограмма вычисления P-регулятора

Наконец, полная программа, реализующая бесконечное движение вдоль стены, получается с использованием блока P-регулятора и формул (9.2) и (9.3):

Пример программы движения вдоль стены с использованием P-регулятора

Задание 9.4. Реализуйте предложенный алгоритм движения вдоль стены с использованием P-регулятора. Проверьте его работу. Настройте регулятор при помощи подбора коэффициента K_p.

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

Задание 9.5. Реализуйте алгоритм следования по линии с использованием P-регулятора. Настройте регулятор, добиваясь наиболее уверенного прохождения роботом крутых поворотов.

Задание 9.6. Проведите соревнование в своей группе да скоростное прохождение трассы.
Задание 9.7. После того, как робот стал двигаться по линии более или менее уверенно, попробуйте (1) увеличить подобранный коэффициент K_p вдвое; (2) уменьшить подобранный коэффициент K_p вдвое. Как изменяется характер движения робота? Удаётся ли ему пройти трассу? Какие участки наиболее проблемны?
Задание 9.8. Реализуйте алгоритм следования за рукой с использованием P-регулятора (см. задание 5.4 на с. 63). Настройте регулятор так, чтобы движение робота стало как можно более плавным.
Тем не менее, использование P-регулятора не позволяет решить задачу полностью: движение робота будет сильно зависеть от его конструкции, настроек регулятора и пр. Чтобы движение стало ещё стабильнее, нужно обратиться к более интеллектуальным алгоритмам. В первую очередь здесь следует назвать пропорционально-дифференциальный (PD) и пропорционально-интегрально-дифференциальный (PID) регуляторы. В настоящем пособии начального уровня указанные алгоритмы изучаться не будут. Интересующихся мы отсылаем к книге С. А. Филиппова [6], где подробно рассмотрены эти и другие интереснейшие задачи.