Симуляция выхода угла на уставку

Соберём ПИД и простую модель аппарата в один цикл и увидим, как угол выходит на заданное значение.

Переходный процесс — то, как угол приближается к уставке во времени: быстро или медленно, с перелётом (перерегулированием) или плавно.

Модель и цикл

Представим простую модель: управляющий сигнал создаёт угловое ускорение, а у вращения есть демпфирование. На каждом шаге считаем ошибку, ПИД даёт сигнал, сигнал меняет угловую скорость, скорость — угол. Цель — выйти на крен 10°.

Kp, Ki, Kd = 6.0, 1.0, 3.0
setpoint = 10.0
angle = 0.0; rate = 0.0; integral = 0.0
prev_err = setpoint
dt = 0.02
snapshots = {}
for i in range(400):
    err = setpoint - angle
    integral += err * dt
    deriv = (err - prev_err) / dt
    u = Kp * err + Ki * integral + Kd * deriv
    prev_err = err
    # модель: ускорение = u, демпфирование вращения 2.0
    rate += (u - 2.0 * rate) * dt
    angle += rate * dt
    if i in (0, 25, 50, 100, 200, 399):
        snapshots[i * dt] = round(angle, 2)
for t, a in snapshots.items():
    print("t =", round(t, 2), "с -> угол =", a, "град")

Вывод:

t = 0.0 с -> угол = 0.02 град
t = 0.5 с -> угол = 3.88 град
t = 1.0 с -> угол = 7.59 град
t = 2.0 с -> угол = 10.53 град
t = 4.0 с -> угол = 10.98 град
t = 8.0 с -> угол = 10.47 град

Что видно из чисел

Угол быстро растёт, около двух секунд достигает уставки, слегка её перелетает (перерегулирование до ~11°) и плавно возвращается к 10°. Небольшое перерегулирование — нормально; D-составляющая не дала ему стать большим. Без D угол перелетел бы сильнее и раскачивался дольше.

Настройка коэффициентов

Подбор $K_p,K_i,K_d$ — это поиск баланса: быстро выйти на уставку, не перелететь, не раскачиваться. Типичный приём: поднимать $K_p$ до лёгкой раскачки, затем добавить $K_d$, чтобы её погасить, и в конце немного $K_i$, чтобы убрать остаточное смещение. На реальном аппарате это делают осторожно, на привязи или в защищённом помещении.

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

Наша модель упрощена (один контур, линейная динамика), но логика та же, что в настоящем автопилоте. Реальная динамика нелинейна (помним квадрат тяги по оборотам), есть задержки датчиков и насыщение моторов — поэтому реальную настройку проверяют в полёте и иногда используют автонастройку.

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

  • Гнаться за нулевым перерегулированием — обычно платят медленной реакцией.
  • Тюнить P, I, D хаотично, не по одному; так не понять, что на что влияет.
  • Игнорировать насыщение моторов: реальный сигнал ограничен, модель об этом «забывает».

Итог

  • ПИД + модель аппарата дают переходный процесс: выход на уставку с небольшим перерегулированием.
  • D гасит перелёт и колебания; I убирает остаточное смещение.
  • Настройка — баланс скорости, перерегулирования и устойчивости; проверяется в полёте.
Проверьте себя
1. Что в симуляции означает перерегулирование (перелёт угла выше 10°)?
AОшибку в коде
BУгол на время превысил уставку перед тем, как вернуться к ней
CАппарат разбился
DРегулятор отключился
2. Какой коэффициент в первую очередь добавляют, чтобы погасить раскачку после подъёма Kp?
AKi
BKd
CУставку
Ddt