Это вторая, завершающая часть опубликованной ранее на Хабре статьи про MIMO LQR/LQG регуляторы.

В первой части мы:

  • Синтезировали линейно квадратичный регулятор  (LQR) для управления связанными параметрами — температурой и давлением в автоклаве.

  • Реализовали линейно квадратичный оценщик  (LQE) в виде линейного дискретного фильтра Калмана рекурсивного типа для очистки  процессных и измерительных гауссовских шумов.

  • Базируясь на принципе разделения , объединили их в  линейно гауссовский регулятор (LQG) и даже провели небольшой анализ влияния начальной инициализации фильтра Калмана на переходные процессы.

Но "упустили" одну важную деталь:

  • Стандартный LQR (u = -Kx) по своей сути является пропорциональным регулятором (P-регулятором в терминах PID).

  • Он не обладает "памятью" о прошлых состояниях. Поэтому при наличии постоянного внешнего возмущения (теплопотерь, утечек давления для автоклава или постоянного ветра, уклонов для иных объектов управления) система в установившемся режиме (steady state) сходится не к нулю, а к некоторой статической ошибке x_{ss} \neq 0.

  • В этой точке управляющее воздействие u_{ss} = -K x_{ss} лишь компенсирует возмущение, но не может вернуть переменную точно к уставке.

Аналогия из жизни: Вспомните тяжелые деревянные маятниковые двери в исторических вестибюлях метро. Обычно после прохода человека они закрываются точно по дверному проему. Но если включена напорная вентиляция (постоянное возмущение), двери приоткрываются и остаются в таком положении. Пружина (пропорциональный регулятор) уравновешивает давление воздуха, но не может закрыть дверь до конца.

В системах управления такое поведение недопустимо. Существует несколько способов решения этой проблемы.

Способы устранения статической ошибки LQR

Для устранения статической ошибки и учета ограничений используют несколько подходов различных степеней сложности и строгости.

1. Масштабирование уставки

Простейший способ убрать статическую ошибку в идеализированной модели — умножить задающее воздействие на компенсационный коэффициент.

  • Плюсы: не повышает порядок системы, не вносит фазовую задержку, сохраняет динамику LQR.

  • Минусы: не робастен, работает только при точном совпадении модели с объектом и не компенсирует реальные возмущения.

2. Внешний интегратор (PI + LQR)  

К оптимальному LQR добавляется внешняя интегральная ветвь по ошибке выхода (PI над выходом с LQR в роли «P»).

  • Плюсы: инженерно прост, привычен, хорошо убирает статическую ошибку при постоянных возмущениях.

  • Минусы: потеря оптимальности: K_I подбирается эвристически, математическая связь с функционалом стоимости теряется, анализ устойчивости MIMO-контуров усложняется.

3. Augmented LQR (LQR с расширенным состоянием, в которое добавлен интегратор)  

Интеграл ошибки вводится как дополнительное состояние, и задача LQR решается для расширенной системы.

  • Плюсы: сохраняет оптимальность и строгую связь с функционалом стоимости, интегральный усилитель  K_I получается из уравнения Риккати; при управляемости расширенной системы обеспечивает нулевую статическую ошибку и гарантированную устойчивость.

  • Минусы: увеличивает размерность модели и накладывает требования к аккуратной защите интегратора от насыщения, чтобы избежать разгона интегральных состояний.

4. Наблюдатель возмущений (Disturbance Observer, DOB / ESO)  

Оценивает суммарное возмущение  \hat d по измерениям и динамике модели и вводит компенсирующее действие в управление, так что LQR фактически видит номинальный объект без возмущений.

  • Плюсы: повышает робастность к неопределённостям и внешним воздействиям, позволяет сохранить линейный LQR как основной регулятор.  

  • Минусы: требует модели или допущений о динамике возмущений, чувствителен к шумам измерений, добавляет отдельный контур, который нужно настраивать.

5. Model Predictive Control (MPC)  

Решает задачу оптимального управления на скользящем горизонте, явно учитывая ограничения на состояние и управление; в линейном случае близок к LQR на бесконечном горизонте.

  • Плюсы: естественно учитывает насыщения и ограничения, обеспечивает высокое качество управления и хорошую робастность.  

  • Минусы: высокая вычислительная сложность: требуется решение QP-задачи в реальном времени; внедрение на  микроконтроллерах затруднено, хотя существуют варианты explicit MPC.

6. Обучение с подкреплением (Reinforcement Learning)  

Использует накопленные данные взаимодействия «агент–среда» для обучения политики управления, иногда — для автонастройки матриц Q, R для LQR.

  • Плюсы: может адаптироваться к нелинейностям и неопределённости без точной модели, пригоден для сложных режимов.  

  • Минусы: отсутствие строгих гарантий устойчивости и интерпретируемости; реализация и инференс нейросетей на микроконтроллерах проблематичны, ограничено применимы в критических  системах.

В этой работе мы реализуем третий подход, который  позволяет внедрить интегратор непосредственно внутрь структуры LQR, превращая его в полноценный PI-регулятор, но с оптимальными, автоматически рассчитанными коэффициентами.

Как обычно, ссылка на код в конце статьи.

Примеры похожих решений демонстрируются в, показавшихся нам интересными, двух статьях 2025 года.

1. В этой статье LQG используется для координации группы роботов в условиях процессных и измерительных шумов, влиянии внешних возмущений и ограничений на схему связи. Авторы предлагают распределенный контроллер, где каждый агент решает свою локальную задачу LQG. Для этого они используют расширенный вектор состояния (Augmented State), добавляя интеграл ошибки согласования (consensus error) в динамику системы. В статье утверждается, что даже в распределенном случае (когда нет центрального контроллера) добавление интеграторов позволяет устранить постоянные составляющие ошибок рассогласования между роботами. Сам LQG синтезируется из распределенных LQR и фильтра Калмана с обоснованием на основе принципа разделения (Separation Principle).

2. Эта статья посвящена управлению Differential Drive Robot с помощью LQR. Проблема в том, что при наклоне поверхности или смещении груза происходит накопление интегральной ошибки. Она решается путем добавления интегратора через расширение вектора состояния.

Построение модели в расширенном пространстве состояний

Пусть исходная дискретная модель системы описывается уравнениями:

x_{k+1} = A_d x_k + B_d u_k

 y_k = C_d x_k

Для устранения статической ошибки введем новый вектор состояния z_k, представляющий собой дискретный интеграл ошибки регулирования e_k = r_k - y_k:

z_{k+1} = z_k + (r_k - y_k) \Delta t

Поскольку уставка r_k является внешним входом, в матрице динамики A_{aug} мы учитываем только зависимость от состояния системы -y_k = -C_d x_k.

Подставляя y_k = C_d x_k (в задаче стабилизации r_k часто принимается за ноль или учитывается отдельно), получаем динамику интегратора, зависящую от основного состояния:

z_{k+1} = z_k - (C_d \Delta t) x_k

Объединим основной вектор состояния x_k и вектор интегралов z_k в единый расширенный вектор состояния \xi_k = [x_k^T, z_k^T]^T.

Динамика новой системы описывается блочными матрицами, сформированными в функции build_augmented_model:

\underbrace{\begin{bmatrix} x_{k+1} \\ z_{k+1} \end{bmatrix}}_{\xi_{k+1}} = \underbrace{\begin{bmatrix} A_d & 0 \\ -C_d \Delta t & I \end{bmatrix}}_{A_{aug}} \underbrace{\begin{bmatrix} x_k \\ z_k \end{bmatrix}}_{\xi_k} + \underbrace{\begin{bmatrix} B_d \\ 0 \end{bmatrix}}_{B_{aug}} u_k

Где:

  • A_{aug} — расширенная матрица системы размером (n_x + n_y) \times (n_x + n_y). Блок -C_d \Delta t обеспечивает связь между текущим выходом и накоплением ошибки.

  • B_{aug} — расширенная матрица управления. Управляющее воздействие u_k влияет на интеграл z только косвенно, через изменение x. Размерность нулевого блока в B_{aug}: (n_y \times n_u).

  • I — единичная матрица, обеспечивающая "память" интегратора.

Для синтеза регулятора формируется расширенная весовая матрица Q_{aug} :

Q_{aug} = \text{diag}(Q_{state}, Q_{integral})

Это позволяет явно задать приоритеты: Q_{state} отвечает за демпфирование и быстродействие, а Q_{integral} — за скорость устранения статической ошибки.

Таким образом, мы получили систему 4-го порядка, где:

  • верхний левый блок (2 \times 2) — это  старая физика - в зеленой рамке на рисунке 1.

  • нижний правый блок (2 \times 2) — это единичная матрица, означающая, что интеграторы помнят своё предыдущее значение (z_{k+1} = z_k + \dots) - в кирпичной рамке на рисунке 1.

  • нижний левый блок (-C_d \cdot dt)— это именно тот механизм, который на каждом шаге "закачивает" невязку (ошибку) в интегратор.

  • нулевой верхний правый блок говорит о том, что будущее состояние объекта x_{k+1} зависит только от его текущего состояния и управления. То, какое число накопилось в интеграторе (z_k), само по себе не может влиять на нагрев и наддув.

Рисунок 1. Матрицы системы, управления и коэффициентов обратной связи.
Рисунок 1. Матрицы системы, управления и коэффициентов обратной связи.

Синтез оптимального регулятора LQR

Задача синтеза управления для расширенной системы сводится к минимизации квадратичного функционала стоимости J, который теперь явно включает штраф за накопленную ошибку:

J = \sum_{k=0}^{\infty} \left( \xi_k^T Q_{aug} \xi_k + u_k^T R u_k \right)

где R — матрица весов управляющих воздействий, а Q_{aug} — расширенная матрица весов состояний, имеющая блочно-диагональную структуру:

Q_{aug} = \begin{bmatrix} Q_x & 0 \\ 0 & Q_z \end{bmatrix}

Такая структура матрицы Q_{aug} позволяет инженеру раздельно настраивать поведение системы:

  • Q_x (State Weight): определяет требования к переходному процессу (время нарастания, демпфирование) основных физических переменных (T, P).

  • Q_z (Integral Weight): определяет "агрессивность" интегральной составляющей. Увеличение элементов Q_z приводит к более быстрому устранению статической ошибки, но может увеличить перерегулирование.

Оптимальная матрица коэффициентов обратной связи K_{aug} находится путем решения дискретного алгебраического уравнения Риккати (DARE) для пары матриц (A_{aug}, B_{aug}):

P = A_{aug}^T P A_{aug} - (A_{aug}^T P B_{aug})(R + B_{aug}^T P B_{aug})^{-1}(B_{aug}^T P A_{aug}) + Q_{aug}

K_{aug} = (R + B_{aug}^T P B_{aug})^{-1} B_{aug}^T P A_{aug},

где:

  • P — положительно определенная симметричная матрица, являющаяся стабилизирующим решением уравнения Риккати. Она характеризует минимальную "стоимость" перевода системы из текущего состояния в равновесие.

  • R — матрица весов управления (штраф за расход энергии исполнительными механизмами).

  • Q_{aug} — расширенная матрица весов состояний, задающая приоритеты точности регулирования. Q_x имеет размерность (n_x \times n_x), Q_z имеет размерность (n_y \times n_y) (так как количество интеграторов равно количеству выходов).

  • A_{aug}, B_{aug} — матрицы динамики и управления расширенной системы (включающей интеграторы).

Полученная матрица K_{aug} размерности [n_u \times (n_x + n_z)] автоматически разделяется на две функциональные части (желтые рамки на рисунке 1):

K_{aug} = [K_P, K_I]

Таким образом, итоговый закон управления реализует структуру MIMO PI-регулятора, где коэффициенты не подбираются вручную, а являются математически оптимальными для заданных весов:

u_k = -K_P x_k - K_I z_k

Где x_k — вектор текущих физических состояний (полученный от наблюдателя), а z_k — вектор состояния интеграторов, вычисляемый внутри контроллера.

Такой подход гарантирует, что в устойчивой замкнутой системе состояние интеграторов z_k сходится к постоянной величине, что математически неизбежно влечёт обнуление ошибки регулирования (e_k \to 0).

Полученные коэффициенты K_{aug} не являются результатом изолированной настройки P и I каналов. Оптимизация происходит глобально, с участием всех параметров задачи:

  • Матрицы Q и R задают "правила игры": требования к затратам (энергия + ошибка).

  • Матрицы A и B вносят в решение физический контекст: инерцию объекта, перекрестные связи между каналами и эффективность исполнительных механизмов.

Решение уравнения Риккати позволяет получить из этих данных матрицу P - карту потенциальных затрат для состояний системы. Из которой, в свою очередь, рассчитываются оптимальные усиления K_P и K_I.

Тип оптимальности здесь — линейно-квадратичный: мы ищем минимум квадратичной функции затрат (энергия + ошибка) для линейной модели объекта.

Оценка состояния: почему мы не повторяем вывод LQE?

В  первой части статьи про LQR/LQG полный синтез системы управления строился по схеме LQG = LQR + LQE. То есть мы отдельно синтезируем регулятор и отдельно — наблюдатель (Фильтр Калмана).

В этой статье мы подробно разобрали синтез LQR для расширенной модели. Но почему  не повторяем построение наблюдателя?

Всё дело в структуре нашего нового вектора состояния \xi_k = [x_k^T, z_k^T]^T:

1.  Физическая часть (x_k): это реальные температура и давление. Они измеряются зашумленными датчиками, и для них необходим наблюдатель.

2.  Интегральная часть (z_k): Это виртуальная переменная, которая вычисляется внутри контроллера по формуле z_{k+1} = z_k + e_k \Delta t. Она детерминирована, не содержит измерительного шума и всегда известна точно.

Поскольку z_k не измеряется, а вычисляется, строить для него наблюдатель бессмысленно. Задача оценки состояния сводится к оценке только физической части x_k.

Это означает, что Фильтр Калмана остается абсолютно идентичным тому, что был бы в системе без интеграторов. Матрицы наблюдателя зависят только от физики объекта (A_d, C_d) и характеристик шума датчиков.

При наличии интереса и желания можно самостоятельн�� реализовать полный контур управления (LQG), просто взяв блок наблюдателя из первой статьи и объединив его выход с вычисленным  z_{calc} :

 u_k = - \begin{bmatrix} K_P & K_I \end{bmatrix} \begin{bmatrix} \hat{x}_{kalman} \\ z_{calc} \end{bmatrix}

Где \hat{x}_{kalman} — оценка состояния от "старого" фильтра Калмана, а z_{calc} — накопленная сумма ошибок. Принцип разделения (Separation Principle) гарантирует, что такая комбинация будет работать оптимально.

Визуализация и анализ результатов

Для проверки предложенного метода мы провели серию симуляций. Были протестированы две конфигурации весовых матриц, чтобы показать, как можно менять "характер" интегральной части регулятора.

Пути сохранения параметров циклов моделирования:

/content/sim_sessions/..._Baseline/config.json  

/content/sim_sessions/..._AggressiveTuning/config.json

Рисунок 2. Диаграммы для базового сценария.
Рисунок 2. Диаграммы для базового сценария.

Сценарий 1. Сбалансированная настройка

На графиках  показана работа системы с умеренными весами интегратора (Q_z = [0.5, 0.5]).

  • Температура (T): мы видим классический апериодический переходный процесс без существенного перерегулирования. График управления плавный.

  • Давление (P): управление наддувом имеет сходный характер.

  • Статическая ошибка: полностью устранена. На графике "Вклад интегратора" (справа внизу) видно, как интегральные компоненты демонстрируют рост, а затем стабилизируются на уровне, точно компенсирующем теплопотери и утечки.

Рисунок 3. Диаграммы для агрессивного сценария.
Рисунок 3. Диаграммы для агрессивного сценария.

Сценарий 2. Агрессивная настройка

Здесь  мы существенно увеличили штраф за интегральную ошибку (Q_z = [10.0, 15.0]), требуя от системы большей точности.

  • Переходный процесс: стал значительно быстрее, но появилось заметное перерегулирование  по обоим каналам.

    Вывод: Настройка значений (Q_z)позволяет управлять переходным процессом интегратора.

Главный итог: Регулятор не требует ручного подбора коэффициентов K_p и K_i. Задавая приоритеты в матрице Q_z (что важнее для интегратора: плавность или скорость), мы получаем оптимальные коэффициенты усиления, рассчитанные математически в уравнении Риккати.

Анализ полученных коэффициентов обратной связи

Пути сохранения файлов matrices_report.txt:

/content/sim_sessions/..._Baseline/matrices_report.txt  

/content/sim_sessions/..._AggressiveTuning/matrices_report.txt

Самое ценное в LQR — это возможность заглянуть "под капот" и увидеть, как математика трансформировала наши пожелания (веса Q) в конкретные коэффициенты усиления (K).

Ниже приведено сравнение итоговых матриц обратной связи K_{aug} для двух сценариев. Напомним, что вектор управления вычисляется как u = -K_{aug} \cdot [x, z]^T.

1. Базовая настройка

K_{balance} =\begin{bmatrix}\mathbf{1.89} & 0.01 & \mathbf{-0.39} & -0.00 \\0.00 & \mathbf{0.99} & 0.00 & \mathbf{-0.24}\end{bmatrix}

  • Коэффициент по температуре (K_P \approx 1.89) умеренный.

  • Интегральный коэффициент (K_I \approx -0.39) достаточно мал, чтобы интеграл накапливался плавно, не вызывая перерегулирования.

2. Агрессивная настройка

K_{aggressive} =\begin{bmatrix}\mathbf{3.25} & 0.01 & \mathbf{-1.71} & -0.00 \\0.00 & \mathbf{2.43} & 0.00 & \mathbf{-1.30}\end{bmatrix}

  • Пропорциональная часть выросла в ~1.5–2.5 раза (1.89 \to 3.25 и 0.99 \to 2.43). Система стала жестче реагировать на мгновенные отклонения.

  • Интегральная часть выросла в ~4–5 раз (-0.39 \to -1.71 и -0.24 \to -1.30). Именно этот скачок объясняет перерегулирование на графиках: интегратор стал настолько "сильным", что при малейшей ошибке вбрасывает бОльшую корректировку в управление.

Обратите внимание: Перекрестные связи (например, влияние давления на нагрев 0.01) остались малыми. Это подтверждает, что физически каналы управления в нашей модели развязаны, и LQR это корректно распознал (нули в матрицах A и B остались нулями и в K).

Больше данных для анализа можно получить с помощью интегральных метрик производительности и метрик стоимости. Так, как это делалось в первой части статьи.

Выводы

Внедрение интегрального действия в структуру MIMO LQR регулятора через метод расширения пространства состояний (Augmented State) позволило  устранить статическую ошибку в условиях постоянных по величине внешних возмущений.

Основные результаты модификации:

1. Астатизм системы: модифицированный регулятор обеспечивает нулевую ошибку регулирования температуры и давления в установившемся режиме, полностью компенсируя влияние неучтенных в модели факторов (теплопотери, утечки давления).

2. Сохранение оптимальности: коэффициенты усиления (K_P, K_I) получены в рамках единой процедуры синтеза (решение уравнения Риккати), что гарантирует согласованность каналов управления и устойчивость замкнутой системы.

3. Архитектурная эффективность: примененный подход не требует изменения структуры наблюдателя. В соответствии с принципом разделения (Separation Principle), синтез регулятора и синтез фильтра Калмана (LQG) производятся независимо. Поэтому во второй части интеграция с фильтром Калмана не приводится: введение интегратора изменяет лишь способ использования оценки состояния \hat{x}, но не сам алгоритм её получения.

4. Практическая применимость: дополнение делает систему пригодной для реальных астатических приложений.


Ссылка на код.


Сергей Сюр