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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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