В этом примере показано, как спроектировать и реализовать пользовательскую оценку состояния, которая эквивалентна встроенному фильтру Калмана, автоматически разработанному линейным контроллером MPC.
Линейный контроллер MPC, предоставляемый программным обеспечением Model Predictive Control Toolbox, включает в себя оценку состояния по умолчанию, чтобы облегчить реализацию контроллера. Для линейного инвариантного по времени (LTI) MPC контроллера, чья модель предсказания никогда не изменяется во время выполнения, оценщиком состояния по умолчанию является фильтр Калмана LTI. Этот фильтр автоматически проектируется с использованием модели предсказания, заданной в объекте MPC, и обычно он работает для многих приложений MPC. Однако для достижения удовлетворительных результатов в некоторых случаях необходимо настроить или заменить фильтр Калмана. Для этого можно выполнить оценку состояния custome; то есть обойти встроенный оценщик и предоставить предполагаемые состояния непосредственно контроллеру MPC в качестве сигналов во время выполнения x[k|k],
.
Одним из распространенных подходов к разработке пользовательской оценки состояния является первая реализация такой, которая эквивалентна встроенному фильтру Калмана. Затем можно использовать его как начальная точка для индивидуальной настройки, для примера путем изменения его структуры или настройки его параметров. В этом примере вы сначала исследуете простой контроллер LTI MPC, чтобы понять, как генерируется встроенный фильтр Калмана. Затем вы реализуете эквивалентную оценку в Simulink, используя либо основные блоки Simulink, либо блок Фильтр Калмана, включенный в программное обеспечение Control System Toolbox.
Предположим, что у вас есть нелинейный объект с непрерывным временем и одним выходом. Объект имеет два состояния, и вы хотите спроектировать контроллер LTI MPC в установившейся рабочей точке.
Задайте состояние, вход и выходные значения в этой рабочей точке.
x0 = [1.6931; 4.3863]; u0 = 7.7738; y0 = 0.5;
Можно получить линейную модель объекта управления в рабочей точке семиугольными способами, такими как система идентификации и линеаризация. В данном примере предположим, что G
является полученной линейной моделью объекта управления.
G = ss([-2 1;-9.7726 -1.3863],[0;1],[0.5 0],0);
Чтобы использовать объект для пользовательской оценки состояния, дискретизируйте модель объекта управления со шаг расчета 0,1.
Ts = 0.1; Gd = c2d(G,Ts);
Создайте контроллер LTI MPC с помощью модели объекта управления lienar.
mpcobj = mpc(G,Ts);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10. -->The "ControlHorizon" property of the "mpc" object is empty. Assuming 2. -->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000. -->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000. -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
Установите номинальные значения внутренней модели объекта управления, чтобы отразить установившуюся рабочую точку.
mpcobj.Model.Nominal.Y = y0; mpcobj.Model.Nominal.U = u0; mpcobj.Model.Nominal.X = x0;
Сделайте контроллер менее агрессивным, уменьшив выходной вес настройки с 1 до 0,2. Используйте значения по умолчанию для других параметров контроллера.
mpcobj.Weights.OutputVariables = 0.2;
В качестве контроллера обратной связи одной важной задачей контроллера MPC является полное отклонение нарушений порядка во время исполнения, то есть установившаяся ошибка на выходе объекта равна нулю в присутствии нарушения порядка. Контроллеры MPC используют модель возмущения, чтобы определить нарушение порядка, которая будет отклонена. Состояния модели возмущения отражают наличие такого нарушения порядка во время исполнения.
Поскольку наиболее распространенным нарушением порядка является подавленное нарушение порядка, добавленное на выходе объекта, контроллер MPC сконфигурирован, чтобы отклонить такое нарушение порядка по умолчанию. Более конкретно, MPC использует интегратор в дискретном времени с безразмерным коэффициентом усиления в качестве выхода возмущения по умолчанию. Его вход, w
, является белым шумом с нулевым средним и единичным отклонением. Можно изучить модель возмущения по умолчанию, используя getoutdist
функция.
God = getoutdist(mpcobj);
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Другими словами, MPC рассчитывает отклонить случайное ступенчатое нарушение порядка на выходе объекта с ожидаемой величиной 1 (после масштабирования). В этом примере сохраните этот выход возмущения по умолчанию.
Чтобы получить общую модель предсказания, используемую контроллером MPC, Gpred
, увеличить модель объекта управления с помощью модели возмущения. Измеренный выход, видимый MPC, теперь становится суммой выхода объекта и выхода модели возмущения. Имейте в виду, что входное значение белого шума w
не является входом в модель предсказания, потому что w
не измеряется.
A = blkdiag(Gd.A,God.A); Bu = [Gd.B; 0]; Cm = [Gd.C God.C]; D = Gd.D; Gpred = ss(A,Bu,Cm,D,Ts);
Поскольку контроллер MPC все еще должен знать все состояния модели предсказания во время исполнения, включая состояние интегратора из выходной модели возмущения, фильтр Калмана LTI автоматически проектируется, чтобы оценить три состояния во время исполнения.
В проекте по умолчанию наблюдатель, используемый фильтром Калмана, является:
x[k+1] = A*x[k] + w[k]
y[k] = Cm*x[k] + v[k]
Контроллер MPC также принимает шум измерения на выходе y
- белый шум с нулевым средним и единичным отклонением после масштабирования. Поэтому модель шума измерения по умолчанию является Gmn
показано ниже:
Gmn = ss(1,'Ts',Ts);
В этом сценарии в проекте фильтра Калмана присутствуют три аддитивных шума: (1) технологический шум, добавленный к манипулируемой переменной; (2) технологический шум, добавленный к входу God
; (3) измерительный шум, добавленный к входу Gmn
:
Gd.B(1) 0 0 wn1 w[k] = [ Gd.B(2) 0 0 ] * [ wn2 ] = B_est * white noise 0 God.B 0 wn3
v[k] = [ Gd.D God.D Gmn.D ] * wn4 = D_est * white noise
B_est = [[Gd.B;0] [0;0;God.B] [0;0;0]]; D_est = [Gd.D God.D Gmn.D];
Поэтому, чтобы получить шумовые ковариационные матрицы Q
, R
, и N
, используйте следующие уравнения.
Q = Expectation{w*ctranspose(w)} = B_est * ctranspose(B_est)
R = Expectation{v*ctranspose(v)} = D_est * ctranspose(D_est)
N = Expectation{w*ctranspose(v)} = B_est * ctranspose(D_est)
Q = B_est*B_est'; R = D_est*D_est'; N = B_est*D_est';
Вы можете получить усиления, L
и {M}, используя kalman
функция.
G = eye(3); H = zeros(1,3); [~, L, ~, M] = kalman(ss(A,[Bu G],Cm,[D H],Ts),Q,R,N);
Этот процесс проекта фильтра Калмана по умолчанию происходит автоматически, когда вы создаете объект контроллера MPC. Чтобы получить результат проекта по умолчанию, используйте getEstimator
функция.
[L1,M1,A1,Cm1,Bu1] = getEstimator(mpcobj);
Эти параметры оценщика идентичны таковым вы ранее вывели вручную.
На данной точке можно создать свой собственный фильтр Калмана в Simulink (tm). Один из способов создать этот фильтр - использовать основные блоки Simulink на основе L
, M
, A
, Cm
, и Bu
.
mdl = 'mpc_KalmanFilter'; load_system(mdl) open_system([mdl '/State Estimator'])
Также можно использовать блок Фильтр Калмана, предоставляемый программным обеспечением Control System Toolbox. Этот блок использует Gpred
модель как системная модель, а также шумовые ковариационные матрицы Q
, R
, и N
.
Поскольку фильтр Калмана разработан в номинальной рабочей точке и использует переменные отклонения, номинальные значения необходимо вычесть из входных сигналов u
и y
и добавили к выходу сигналу x[k|k]
.
Модель Simulink содержит три циклов MPC управления, которые управляют одним и тем же объектом.
open_system(mdl);
Создайте второй контроллер MPC, который использует пользовательскую оценку состояния.
mpcobjCSE = mpcobj;
setEstimator(mpcobjCSE,'custom')
Симулируйте модель.
sim(mdl); open_system([mdl '/Output']); open_system([mdl '/Input']);
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Этот результат симуляции показывает, что встроенный оценщик состояния и пользовательские оценки состояния дают один и тот же результат.
Вы можете применить деривацию оценки состояния в этом примере к объектам MIMO. В сложение, при использовании адаптива линейно-изменяющегося (LTV) MPC, встроенный фильтр Калмана является LTV где L
, M
и ковариационную матрицу ошибок P
стать изменяющимся во времени. Поэтому пользовательская оценка состояния будет более сложной.
getEstimator
| mpc
| setEstimator