Опубликован: 10.09.2014 | Уровень: для всех | Доступ: платный | ВУЗ: Оренбургский государственный педагогический университет
Лекция 9:

Управление движением робота при помощи системы с отрицательной обратной связью

< Лекция 8 || Лекция 9: 12
Аннотация: Задача управления является очень актуальной в современной науке и технике. Пусть имеется система (объект управления), которую мы должны поддерживать в заданном состоянии. Для этого у нас имеется регулятор, который (1) производит сбор информации о текущем состоянии системы в момент времени t и (2) вычисляет управляющий сигнал U(t). Этот сигнал подается объекту управления, возвращая его в заданное состояние. Такая схема носит название системы с отрицательной обратной связью, поскольку при отклонении от равновесия регулятор стремится вернуть систему в нормальное состояние. В этой теме мы рассмотрим два вида регуляторов: более простой релейный и более устойчивый пропорциональный. Цель: научиться строить систему управления автономным роботом на основе простейшего релейного и пропорционального регуляторов, рассмотреть одну из задач соревновательной робототехники и изучить возможности использования датчика оборотов.

Релейный регулятор

Пример 9.1. Движение робота вдоль стены.

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

Следует заранее продумать положение датчика ультразвука. Как упоминалось выше (см. с. 38), этот датчик медленный. Поэтому его следует располагать чуть впереди корпуса робота. Кроме этого, его следует сместить как можно дальше от стены (см. Рис. 9.1), потому что на малых расстояниях (5 - 7 см) показания датчика ультразвука становятся слишком неточными. Далее мы увидим, что направление датчика также следует подкорректировать.

Примерное расположение датчика ультразвука

увеличить изображение
Рис. 9.1. Примерное расположение датчика ультразвука

Алгоритм движения робота, записанный в словесной форме, может быть примерно таким (Рис. 9.2):

  1. двигаться прямо;
  2. если расстояние до стены больше заданного, то повернуть к стене;
  3. если расстояние до стены меньше заданного, то повернуть от стены;
  4. повторять шаги 2 - 3 бесконечно (или до наступления некоторого события).
Иллюстрация алгоритма движения вдоль стены

увеличить изображение
Рис. 9.2. Иллюстрация алгоритма движения вдоль стены

Одним из самых очевидных решений этой задачи является релейный регулятор.

Реле в электротехнике - это замыкатель с автоматическим возвратом в исходное состояние (хотя существует множество других разновидностей). Другими словами, при превышении сигналом (например, током) некоторого предельного значения происходит замыкание реле. Как только ток снизится, реле размыкается. В нашем случае определение релейный по отношению к регулятору означает лишь то, что мы описываем поведение системы лишь для двух случаев: значение сигнала (1) меньше заданного и (2) больше заданного.

Для определённости примем в качестве заданного расстояния 20 см. Получим следующую программу (Рис. 9.3):

Реализация релейного алгоритма

увеличить изображение
Рис. 9.3. Реализация релейного алгоритма

Как видно из текста программы, после включения обоих моторов запускается бесконечный цикл, в котором реализован вышеописанный словесный алгоритм. Хорошо заметной особенностью этого подхода является "рыскающее" движение: робот всегда поворачивает с одной и той же интенсивностью, независимо от того, насколько далеко или близко он оказался по отношению к стене. Поэтому траектория всегда будет зигзагообразной, так как во время поворотов робот всегда будет "прыгать" вокруг среднего значения 20 см. Так как датчик ультразвука является "медленным", в цикле используется небольшая задержка (0,1 с) для того, чтобы показания датчика успевали обрабатываться блоком NXT. Величина задержки фактически определяет время, в течение которого робот будет двигаться в неизменном направлении. Другими словами, увеличивая время задержки мы получим более крупные "зубцы" траектории. Как отмечалось ранее, делать задержку меньше 0,06 с не имеет смысла, потому что в этом случае датчик ультразвука просто не успеет провести измерения.

При использовании релейного регулятора возможны частые уходы робота с дистанции. Одна из причин состоит в том, что при выбранном нами расположении датчика ультразвука робот не сможет различать положения, симметричные относительно нормального положения. То есть два положения, показанные на Рис. 9.4 будут идентичными, и расстояние до стены в обоих случаях окажутся больше 20 см. В соответствии с вторым шагом алгоритма робот должен повернуть к стене (влево). И если для второго положения это верно, то для первого - ошибочно: робот ещё больше уйдёт с трассы.

Куда теперь поворачивать?

увеличить изображение
Рис. 9.4. Куда теперь поворачивать?

Эту проблему можно решить, если расположить датчик не перпендикулярно к направлению движения (т. е. строго влево), а под углом 45° к направлению движения (Рис. 9.5).

Разворот датчика ультразвука под углом 45° к направлению движения

увеличить изображение
Рис. 9.5. Разворот датчика ультразвука под углом 45° к направлению движения

Так нам удастся избежать случая, показанного на Рис. 9.4. Действительно, при подруливании влево расстояние до стены будет (при небольших углах поворота < 45°) уменьшаться, а при поворотах вправо, наоборот, увеличиваться. Однако не стоит рассчитывать, что наш робот сможет проехать вдоль стены любой формы. Даже простой поворот на 90° может вызвать у него неожиданные трудности. Таким образом, наиболее значимым достоинством релейного регулятора в нашем случае является простота его алгоритма. В следующем разделе мы рассмотрим более интересный алгоритм управления.

Задание 9.1. Запрограммируйте движение робота вдоль стены с разными положениями датчика ультразвука. В каком случае движение более устойчиво?

Задание 9.2. Сравните это решение с примером 4.1 на с. 48. Реализуйте релейный алгоритм движения вдоль стены без использования ветвления.

Задание 9.3. Реализуйте релейный алгоритм движения по линии с использованием ветвления.

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 будет прямая (см. Рис. 9.6):

График для P-регулятора: зависимость U от E

увеличить изображение
Рис. 9.6. График для 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 выглядит так:

Подпрограмма вычисления ошибки отклонения от заданного расстояния

Рис. 9.7. Подпрограмма вычисления ошибки отклонения от заданного расстояния

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

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

Рис. 9.8. Подпрограмма вычисления управляющего воздействия U(t)

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

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

Рис. 9.9. Подпрограмма вычисления P-регулятора

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

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

увеличить изображение
Рис. 9.10. Пример программы движения вдоль стены с использованием 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], где подробно рассмотрены эти и другие интереснейшие задачи.

< Лекция 8 || Лекция 9: 12
Наталья Смольянинова
Наталья Смольянинова
Россия, г. Воронеж
Юлия Нажимова
Юлия Нажимова
Россия, Тюменская область