- Подробности
-
Автор: Коновалов Игорь
Эта статья является логическим продолжением статьи о пропорциональном регуляторе . Эта тема уже ни раз поднималась в литературе, но моя цель - объяснить ее понятным языком начинающим преподавателям робототехники и ребятам - самоучкам, у которых либо нет возможности обучаться в кружках робототехники, либо нет желания.
Напомню, регулятор мы применяем к роботу Lego Mindstorms EV3, проезжающего по черной линии с помощью 1 датчика цвета (хотя можно и двумя, суть не поменяется). Можно применить данный регулятор к чему угодно, требующему автоматическое регулирование, меняя датчик цвета на любой другой в зависимости от задачи.

В прошлой статье мы говорили о том, что ошибка - разность текущего показания датчика и нормального (идеального). А что если ввести кроме термина "ошибка" еще и "скорость изменения ошибки", то есть то число, которое показывает, насколько быстро меняется ошибка? Тогда можно было бы придавать роботу дополнительное управляющее воздействие, когда скорость изменения ошибки растет. Когда может возникнуть такая ситуация резкого увеличения скорости ошибки? Приведу наглядный пример: робот спокойно едет по границе между черным и белым, ошибка при этом имеет небольшое значение по модулю, недалеко уходящее от 0, так как текущие показания датчика и идеальные почти одинаковы. Но впереди робота ждет некоторая стрессовая ситуация - поворот трассы на 90 градусов. Ошибка резко возрастет, робот попытается ее исправить и, возможно, проедет нормально. А с помощью дифференциальной составляющей мы можем помочь роботу выравняться, ведь робот сможет распознать стрессовую ситуацию, так как скорость изменения ошибки вырастит.
Разберемся, как же робот сможет посчитать скорость изменения ошибки. Нужно вычесть из текущей ошибки (той, которая посчиталась роботом именно сейчас) прошлую. А что же такое прошлая ошибка? Все просто: это та же текущая ошибка, только на прошлом шаге.
В прошлой статье мы говорили, что нужно использовать коэффициент k для пропорциональной составляющей. Сегодня же мы назовем его k1, так как появляется второй коэффициент (k2) у дифференциальной составляющей. Как его выбрать? Обычно это довольно больше число (относительно k1) в пределах примерно от 2 до 20.
Рассмотрим подробный алгоритм пропорционально-дифференциального регулятора.
(Все действия в цикле)
1) Найти ошибку
2) Пропорциональная составляющая = ошибка * k1
3) Дифференциальная составляющая = (ошибка - старая_ошибка)*k2
4) старая ошибка = ошибка
5) Управляющее воздействие = Пропорц. составл-я + Дифференц. составл-я
6) Управляющее воздействие отправить в рулевое управление.