ПИД-регулятор: пропорция, интеграл, производная
Сердце стабилизации — регулятор, который по ошибке угла вычисляет команду на моторы.
ПИД-регулятор формирует управляющий сигнал из трёх частей: пропорциональной ошибке, её интегралу и её производной.
Что такое ошибка
Пусть автопилот хочет крен 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 — демпфирование.
- Контуры считаются отдельно по крену, тангажу, рысканию.