ПИД-регулятор: пропорция, интеграл, производная

Сердце стабилизации — регулятор, который по ошибке угла вычисляет команду на моторы.

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

Что такое ошибка

Пусть автопилот хочет крен 0°, а датчики говорят, что аппарат завалился на 8°. Ошибка — это разница: $e = \theta_{\text{цель}} - \theta_{\text{текущ}}$. Задача регулятора — командой на моторы свести ошибку к нулю. Управляющий сигнал:

$$ u = K_p\,e + K_i\!\int e\,dt + K_d\,\frac{de}{dt} $$

Три части по-человечески

  • P (пропорциональная): «чем больше отклонение сейчас, тем сильнее реагирую». Основная сила. Слишком большая — раскачка.
  • I (интегральная): «накопленная за время ошибка». Убирает маленькое постоянное отклонение (например, от лёгкого перекоса центра тяжести), которое одна P не дожимает.
  • D (дифференциальная): «как быстро меняется ошибка». Гасит скорость приближения, работает как демпфер, убирает перелёт и колебания.
Kp, Ki, Kd = 4.0, 0.5, 1.2
setpoint = 0.0       # хотим крен 0
angle = 8.0          # а он завалился на 8 град
rate = -2.0          # и движется к нулю со скоростью 2 град/с
integral_e = -1.5    # накоплено за прошлые шаги
e = setpoint - angle
deriv_e = -rate      # de/dt = -dangle/dt
u = Kp * e + Ki * integral_e + Kd * deriv_e
print("Ошибка e =", e)
print("P-часть:", round(Kp * e, 2))
print("I-часть:", round(Ki * integral_e, 2))
print("D-часть:", round(Kd * deriv_e, 2))
print("Управляющий сигнал u =", round(u, 2))

Вывод:

Ошибка e = -8.0
P-часть: -32.0
I-часть: -0.75
D-часть: 2.4
Управляющий сигнал u = -30.35

Ошибка отрицательна (перекренило в плюс), P даёт сильную обратную команду, а D её чуть смягчает, потому что аппарат и так уже движется к нулю — демпфер не даёт «перелететь» через ноль.

Как работает под капотом

Регулятор считается отдельно для крена, тангажа и рыскания — три независимых контура. Каждый выдаёт свою поправку, и дальше эти поправки превращаются в команды конкретным моторам через микширование (следующий урок). Весь ПИД пересчитывается каждый цикл управления (сотни раз в секунду).

Частые ошибки

  • Ставить только P без D: аппарат раскачивается вокруг уставки.
  • Большой I без ограничения: интеграл «разбухает» (windup), и регулятор надолго перелетает цель.
  • Путать знак производной: $de/dt = -d\theta/dt$ при постоянной уставке.

Итог

  • ПИД: $u=K_p e+K_i\int e\,dt+K_d\,de/dt$ по ошибке угла.
  • P — сила реакции, I — устранение постоянного смещения, D — демпфирование.
  • Контуры считаются отдельно по крену, тангажу, рысканию.
Проверьте себя
1. За что в ПИД-регуляторе отвечает дифференциальная (D) составляющая?
AУсиливает реакцию на большую ошибку
BДемпфирует: гасит скорость изменения ошибки, убирает перелёт и колебания
CНакапливает ошибку за время
DЗадаёт целевой угол
2. Зачем нужна интегральная (I) составляющая?
AУскоряет реакцию
BУбирает маленькое постоянное отклонение, которое P не дожимает
CМеряет высоту
DГасит колебания