Найти в Дзене

Движение по линии. П-регулятор. 1 датчик.

Статья про релейный регулятор тут. Продолжаем серию статей по теме автоматического управления роботом при движении по черной (и не только) линии. Сегодня на повестке дня - П-регулятор или пропорциональный регулятор. Его смысл в оказании воздействия на исполнительные устройства, пропорционально отклонения от установки. Иными словами, мы будем крутить колесами тем сильнее, чем дальше будем отклоняться от установленного значения, чтобы вернуться назад. Все в принципе просто. Но когда дело доходит до практики, модель может не ехать, от слова никак. Посмотрим на блок схему данного алгоритма. В самом начале мы как обычно должны определиться с переменными. В блок схеме не указаны переменные для подключения к драйверу моторов. Это уж сами с усами. Давайте перечислим то, что мы прописали в схеме. Давайте сперва остановимся на калибровке. В предыдущем алгоритме мы следили за тем над каким цветом мы находимся, а в этот раз нам понадобиться следить за так называемым пограничным значением "серог

Статья про релейный регулятор тут.

Продолжаем серию статей по теме автоматического управления роботом при движении по черной (и не только) линии. Сегодня на повестке дня - П-регулятор или пропорциональный регулятор.

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

Посмотрим на блок схему данного алгоритма.

Блок схема движения на П-регуляторе
Блок схема движения на П-регуляторе

В самом начале мы как обычно должны определиться с переменными. В блок схеме не указаны переменные для подключения к драйверу моторов. Это уж сами с усами. Давайте перечислим то, что мы прописали в схеме.

  • sensor_pin - куда подключен датчик
  • sensor_intens - здесь будем хранить данные о текущем значении с датчика
  • base_speed - базовая скорость наших моторов
  • setpoint - установка к которой мы должны стремиться. (здесь значение серого)
  • Р - значение регулятора или ошибка регулирования
  • кР - усиливающий коэффициент для регулятора

Давайте сперва остановимся на калибровке. В предыдущем алгоритме мы следили за тем над каким цветом мы находимся, а в этот раз нам понадобиться следить за так называемым пограничным значением "серого." Что это такое? Посмотрим на картинку.

-2

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

Для этого проводят калибровку. Это можно сделать с помощью монитора порта, передав в него значение с датчика на белом и черном. Затем проводим расчет по указанной в блок-схеме формуле и записываем результат в переменную setpoint. На этом калибровка закончена. Следует помнить, что это значение может меняться по ряду причин: из-за освещенности, разницы в отражающей поверхности поля, разницы в используемых датчиках и т.д.

Далее, в бесконечном цикле происходит опрос датчика, расчет ошибки и вызов функции управления моторами. Все просто, но может не работать. Почему?

Во-первых, нужен тщательный подбор коэффициента кР и скорости - как начальной так и максимально возможной. Наш робот обладает довольно большой инерцией при движении в поворотах. Он может просто не успевать отреагировать на показания датчика.

Во-вторых, какая у вас ширина черной линии? Может она просто узкая и роботу трудно её выдерживаться.

В-третьих, нужно внимательно проследить за тем, что передаёт наш датчик. Выведите его показания в порт и проследите за значениями. Может быть происходят ложные срабатывания и некоторые цифры выбиваются из общего потока. Можно попробовать добавить программный фильтр.

В-четвертых, моторы могут быть разными. Это Китай нормально , что установленные мотор-редукторы могут вращаться с разной скоростью (даже из одного заказа). На это следует обратить внимание при движении по полю как по часовой стрелке, так и против неё. Возможно в одну из сторон робот будет двигаться лучше. Следует ввести корректирующие коэффициенты для моторов (домножив на них скорость моторов), чтобы заставить их вращаться одинаково. Также для определения разницы скорости вращения можно пустить робота по прямой, без регулятора. Так мы увидим в какую сторону его уводит.

Теперь перейдем к коду.

Специально написал побольше комментариев для понимания алгоритма. Все также как в блок-схеме. Различие в том, что изначально скорости моторов задаются в процентах. Для перерасчета в числовые значения написана функция calc_max_power.

Подписывайтесь на канал. Продолжение следует...