Обратная связь по состоянию и размещение полюсов
Управляем не по ошибке выхода, а по всему вектору состояния.
Обратная связь по состоянию формирует воздействие из всего вектора состояния:
u = -K·x. Подбирая K, можно разместить полюса замкнутой системы там, где мы хотим.
Идея управления по состоянию
ПИД смотрит только на ошибку выхода. Но если мы знаем весь вектор состояния (например, и позицию, и скорость), можно управлять умнее — учитывать всё сразу. Обратная связь по состоянию задаёт воздействие как u = -K·x, где K — строка коэффициентов усиления по каждому состоянию. Для массы-пружины это u = -(k1·позиция + k2·скорость): первый коэффициент тянет к нулю позицию, второй гасит скорость (демпфирование). По сути это обобщение ПД-регулятора на произвольные системы.
Размещение полюсов
Главная сила метода: подбором K можно поставить полюса замкнутой системы в любые желаемые места (если система управляема). Хотим быстрый отклик без колебаний — выбираем полюса далеко слева на действительной оси и вычисляем K, дающий именно их. Это называется размещение полюсов (pole placement). Вместо «крутить коэффициенты на ощупь» мы прямо задаём желаемую динамику. Расчёт K по заданным полюсам делают формулой Аккермана или численно — мы рассмотрим идею обзорно.
Как работает под капотом: гасим колебания по состоянию
Возьмём массу-пружину без демпфера (она бы колебалась вечно) и стабилизируем её обратной связью по состоянию. Коэффициенты K подобраны так, чтобы система быстро и без раскачки пришла в ноль.
m, kc = 1.0, 4.0
A = [[0.0, 1.0], [-kc/m, 0.0]] # демпфера нет -> чистые колебания
B = [0.0, 1.0/m]
K = [6.0, 5.0] # обратная связь u = -(K0*x + K1*v)
dt = 0.05
x = [1.0, 0.0] # стартовое отклонение: позиция=1
print(" t позиция скорость u")
for step in range(0, 61):
u = -(K[0]*x[0] + K[1]*x[1])
if step % 6 == 0:
print(f"{step*dt:4.2f} {x[0]:7.3f} {x[1]:8.3f} {u:7.2f}")
dx0 = A[0][0]*x[0] + A[0][1]*x[1] + B[0]*u
dx1 = A[1][0]*x[0] + A[1][1]*x[1] + B[1]*u
x[0] += dx0*dt; x[1] += dx1*dt
print("система пришла в ноль без вечных колебаний")Вывод:
t позиция скорость u 0.00 1.000 0.000 -6.00 0.30 0.736 -1.476 2.96 0.60 0.324 -1.085 3.48 0.90 0.079 -0.477 1.91 1.20 -0.012 -0.116 0.65 1.50 -0.026 0.018 0.06 1.80 -0.017 0.039 -0.09 2.10 -0.006 0.024 -0.08 2.40 -0.001 0.010 -0.04 2.70 0.001 0.002 -0.01 3.00 0.001 -0.001 0.00 система пришла в ноль без вечных колебаний
Без обратной связи эта система колебалась бы бесконечно (нет демпфера). Обратная связь по состоянию u = -K·x создала искусственное демпфирование и притянула систему в ноль. Меняя K, мы напрямую управляем тем, насколько быстро и плавно это произойдёт — это и есть размещение полюсов в действии.
Управляемость
Не любую систему можно стабилизировать обратной связью по состоянию. Свойство управляемости (controllability) говорит, можем ли мы воздействием u дотянуться до всех состояний. Если какое-то состояние «оторвано» от входа, разместить его полюс мы не сможем. Управляемость проверяют по специальной матрице (Калмана) — но идея проста: вход должен влиять, прямо или косвенно, на каждое состояние.
Добавляем интегральное действие
У чистой обратной связи по состоянию u = -Kx есть та же слабость, что у P-регулятора: при постоянном возмущении остаётся статическая ошибка. Лекарство то же — интеграл. К вектору состояния добавляют новое искусственное состояние — интеграл ошибки слежения, и размещают полюса уже расширенной системы. Получается обратная связь по состоянию с интегральным действием, которая и быстра (благодаря размещению полюсов), и точна (благодаря интегралу). Это прямое обобщение ПИД на многомерные системы и стандартный приём в современном проектировании: сначала строим обратную связь по состоянию для нужной динамики, затем достраиваем интегратор для нулевой установившейся ошибки. Так классическая ПИД-интуиция переносится в матричный мир.
Частые ошибки
- Применять u=-Kx, не зная состояния. Метод требует знать ВЕСЬ вектор состояния; если что-то не измеряется, нужен наблюдатель (следующий раздел).
- Ставить полюса слишком далеко влево. Очень быстрый отклик требует огромного воздействия — привод насытится.
- Игнорировать управляемость. Для неуправляемой системы размещение полюсов невозможно в принципе.
Итоги
- Обратная связь по состоянию: u=-K·x — воздействие из всего вектора состояния.
- Подбором K размещают полюса замкнутой системы в желаемых местах (pole placement).
- Метод требует знать всё состояние и управляемости системы.