В этом примере показано, как спроектировать и реализовать пользовательский модуль оценки состояния, эквивалентный встроенному фильтру Калмана, автоматически созданному линейным контроллером MPC.
Линейный контроллер MPC, предоставляемый программным обеспечением Model Predictive Control Toolbox, включает в себя устройство оценки состояния по умолчанию для облегчения реализации контроллера. Для контроллера MPC линейного инвариантного по времени (LTI), модель прогнозирования которого никогда не изменяется во время выполнения, оценщиком состояния по умолчанию является фильтр Калмана LTI. Этот фильтр автоматически создается с использованием модели прогнозирования, указанной в объекте MPC, и обычно работает для многих приложений MPC. Однако для достижения удовлетворительных результатов в некоторых случаях необходимо настроить или заменить фильтр Калмана. Для этого можно выполнить оценку состояния клиента; то есть обходить встроенный оценщик и предоставлять оценочные состояния непосредственно контроллеру MPC в виде сигналов времени выполнения, x[k|k].
Один из распространенных подходов к разработке пользовательского оценщика состояния состоит в том, чтобы сначала реализовать тот, который эквивалентен встроенному фильтру Калмана. Затем ее можно использовать в качестве отправной точки для адаптации, например, путем изменения ее структуры или настройки ее параметров. В этом примере сначала рассматривается простой MPC-контроллер LTI, чтобы понять, как создается встроенный фильтр Калмана. После этого в Simulink будет реализован эквивалентный оценщик с использованием основных блоков Simulink или блока Kalman Filter, включенного в состав программного обеспечения Control System Toolbox.
Предположим, что имеется нелинейная установка непрерывного времени с одним входом и одним выходом. Установка имеет два состояния, и требуется разработать контроллер MPC LTI в установившейся рабочей точке.
Укажите состояние, входные и выходные значения в этой рабочей точке.
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);
Создайте контроллер LPI 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 использует интегратор дискретного времени с безразмерным единичным усилением в качестве модели выходного возмущения по умолчанию. Его вход, 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 wn3v[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. Кроме того, при использовании адаптивного линейно-изменяющегося во времени (ЛТВ) ПДК встроенным фильтром Калмана является ЛТВ, где L, Mи матрица ковариации ошибок P становятся изменяющимися во времени. Поэтому пользовательский оценщик состояния будет сложнее.
getEstimator | mpc | setEstimator