Робототехника
PID-контроллер
Почти каждый технический объект вокруг управляется PID: термостат в доме, круиз-контроль в машине, стабилизатор квадрокоптера, промышленный манипулятор. За 80 лет существования три слагаемых - P, I, D - не устарели. Почему? Потому что они элегантно решают три разных аспекта управления: ошибку сейчас, ошибку в прошлом, ошибку в будущем.
- **Квадрокоптеры:** отдельный PID на каждую из 6 осей (x, y, z, roll, pitch, yaw)
- **Промышленные роботы:** PID в каждом суставе, частота обновления 1-10 кГц
- **Температурный контроль:** печи, 3D-принтеры, системы охлаждения серверов
- **Cruise control:** сотни миллионов автомобилей по всему миру
P-регулятор: пропорциональная часть
Квадрокоптер должен держаться на высоте 10 метров. Сейчас он на 8 метрах - ошибка e = 10 - 8 = 2 м. Самый простой регулятор: дать тягу, пропорциональную ошибке. Чем больше отклонение, тем сильнее коррекция. Это и есть **P-регулятор**: u(t) = Kp * e(t).
**Steady-state error:** P-регулятор часто не убирает постоянную ошибку. Чтобы держать квадрокоптер на 10 м против гравитации, нужна постоянная тяга u0. Но e=0 -> u=0. Значит реальное равновесие устанавливается при e = u0/Kp > 0. Именно это устраняет I-составляющая.
P-регулятор с Kp=10 и ошибкой e=0.5 выдаёт управление u =
I-составляющая и windup
P-регулятор оставляет стационарную ошибку, потому что не «помнит» историю. Если квадрокоптер постоянно находится чуть ниже setpoint, это означает, что суммарная накопленная ошибка большая. **Интегральная часть** именно это и измеряет: сумму всех прошлых ошибок.
u_I(t) = Ki * integral(e(tau), 0, t). Накопленная ошибка растёт, пока e != 0, и толкает управление в нужную сторону до тех пор, пока setpoint не будет достигнут точно. При e=0 интеграл перестаёт расти - равновесие достигнуто.
**Integral windup** - классическая ловушка: если система долго насыщена (e.g., мотор крутится на максимуме), интеграл накапливает огромное значение. Когда насыщение снимается, контроллер выдаёт большой импульс и система уходит в сильные колебания. Anti-windup - обязательная мера в реальных системах.
Integral windup возникает когда:
D-составляющая и шум
P-регулятор реагирует на текущую ошибку, I - на накопленную историю. Но оба не знают, **в каком направлении движется** ошибка. Если ошибка 2 и уменьшается - хорошо, не нужно сильно корректировать. Если ошибка 2 и быстро растёт - плохо, нужно действовать агрессивнее. **D-составляющая** это и учитывает.
u_D(t) = Kd * de/dt. Производная ошибки предсказывает будущее: если e уменьшается с высокой скоростью, D добавляет «тормоз», предотвращая перерегулирование. Это делает систему более плавной. Главная проблема: производная **усиливает шум** в измерениях.
**Derivative on measurement vs derivative on error:** при резком изменении setpoint производная ошибки даёт огромный спайк (setpoint step -> ошибка скачет мгновенно). Derivative on measurement вычисляет -d(measurement)/dt и не реагирует на скачки setpoint. Это более распространённая практика.
Зачем применять low-pass filter к D-составляющей PID?
Настройка PID: метод Циглера-Никольса
Выбрать Kp, Ki, Kd из воздуха сложно. Метод **Циглера-Никольса** (1942) - систематический подход: сначала находят критические параметры системы экспериментально, затем вычисляют коэффициенты по таблице.
- Установить Ki=0, Kd=0. Только P-регулятор.
- Постепенно увеличивать Kp до тех пор, пока система не начнёт устойчиво осциллировать с постоянной амплитудой. Это критическое усиление **Ku**.
- Измерить период осцилляций **Tu** (время одного полного цикла).
- Вычислить Kp, Ki, Kd по таблице Циглера-Никольса.
| Тип | Kp | Ki | Kd | Характеристика |
|---|---|---|---|---|
| P | 0.5 Ku | 0 | 0 | Быстро, но со steady-state error |
| PI | 0.45 Ku | 0.54 Ku/Tu | 0 | Убирает error, чуть медленнее |
| PID | 0.6 Ku | 1.2 Ku/Tu | 0.075 Ku*Tu | Быстро + без error, но шумнее |
В методе Циглера-Никольса Ku называют критическим усилением. Что происходит при Kp > Ku?
PID-контроллер
- P: u = Kp*e - реагирует на текущую ошибку, оставляет steady-state error
- I: u += Ki*integral(e) - убирает steady-state error, опасен windup при насыщении
- D: u += Kd*de/dt - предсказывает будущее, усиливает шум - нужна фильтрация
- Anti-windup: ограничивать интеграл при насыщении актуатора
- Derivative on measurement: -d(y)/dt вместо d(e)/dt - убирает спайки при step setpoint
- Метод Циглера-Никольса: экспериментально найти Ku и Tu, затем применить таблицу
Связанные темы
PID - классика управления. Современные методы расширяют его возможности для нелинейных и многомерных систем.
- Кинематика и динамика робота — Объект управления для PID
- Modern Control Theory: LQR и MPC — Оптимальные методы управления, превосходящие PID в сложных системах
- Датчики и сенсорное слияние — Откуда берётся measurement для PID
Вопросы для размышления
- Почему integral windup особенно опасен в системах безопасности (e.g., авиация)?
- Как D-составляющая помогает при управлении системами с инерцией (маховик, корабль)?
- В каких случаях PID перестаёт справляться и нужны более сложные методы управления?