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