Урок Пропорциональный регулятор. Основные понятия использования пропорционального регулятора для движения вдоль линии


Пропорциональный регулятор
Более 100 лет назад в теории автоматического управления был разработан регулятор (P-regulator, или просто пропорциональный регулятор), способный решить описанную выше проблему. В случае его использования управляющее воздействие на моторы робота не постоянно, как в релейном регуляторе (именно такие регуляторы использовались в алгоритмах "ЗигЗаг" и "Волна"), а изменяется пропорционально отклонению от линии. Другими словами, чем больше отклонение, тем активнее должен поворачивать робот. При небольшом отклонении следует выполнить небольшое "подруливание". Если отклонение больше, то и "подруливание" больше. 
Назначение P-регулятора — в поддержании заданного значения x0 некоторой величины x с помощью изменения другой величины u.
Значение x0 в технике называется заданным значением (или уставкой), а разность e = (x0 − x) — невязкой (или ошибкой регулирования,  рассогласованием или отклонением величины от заданной. 
Один датчик освещенности
В случае использования P-регулятора при движении робота вдоль линии c одним датчиком в момент времени t управляющее воздействие u(t) на моторы  вычисляется по формуле 
u(t) = kp*e(t),
где:
e(t) = x0 - x(t) - ошибка отклонения,
x0 - цвет границы (чаще всего рассчитывается как среднее арифметическое между белым и черным),
x(t) - текущее показание датчика освещенности,
kp - коэффициент пропорциональности (чем больше коэффициент - тем быстрее будет происходить возвращение робота на требуемую траекторию, но движения при этом станут более резкими. Чаще всего коэффициент подбирается экспериментальным путем).
Очевидно, что ошибка отклонения может быть как положительная (если датчик находится на черной линии), так и отрицательная (если мы отъехали от линии дальше, чем необходимо). Таким образом, управляющее воздействие u(t) тоже может быть как положительным, так и отрицательным.
Пусть leftPower(t) - мощность левого мотора в момент в момент времени t, а rightPower(t) - мощность правого мотора. Для их вычисления воспользуемся формулами: 
leftPower(t) = aPower - u(t), rightPower(t) = aPower + u(t), 
где:
aPower - мощность, с которой должны крутиться оба мотора, если отклонение от курса равно нулю (например, это может быть число 123 - средняя мощность),u(t) - вычисленное вышеуказанным способом управляющее воздействие на моторы.
Два датчика освещенности
Использование двух датчиков позволяет более чётко разграничить отклонение датчиков от линии и позволяет легко отфильтровывать/подсчитывать перекрёстки или сложные повороты на траектории.
В этом случае ошибка отклонения e(t) в момент времени t вычисляется по формуле:
e(t) = x1(t) - x2(t) - ошибка отклонения,
x1(t) - текущее показание левого датчика освещенности,
x2(t) - текущее показание правого датчика освещенности.