В этом примере показано, как использовать контроллер MPC, чтобы управлять нестабильным самолетом с насыщением приводов.
Для примера, который управляет тем же объектом с помощью явного контроллера MPC, смотрите Явное MPC управление Самолетом с Нестабильными полюсами.
Линеаризовавшая модель разомкнутого контура самолета продольная динамика имеет следующие матрицы пространства состояний:
A = [-0.0151 -60.5651 0 -32.174; -0.0001 -1.3411 0.9929 0; 0.00018 43.2541 -0.86939 0; 0 0 1 0]; B = [-2.516 -13.136; -0.1689 -0.2514; -17.251 -1.5766; 0 0]; C = [0 1 0 0; 0 0 0 1]; D = [0 0; 0 0];
Создайте объект и задайте начальные состояния как нуль.
plant = ss(A,B,C,D); x0 = zeros(4,1);
Переменные, которыми управляют, являются углами флаперона и лифтом. Углами нападения и тангажа являются измеренные выходные параметры, которые будут отрегулированы.
Ответ разомкнутого контура системы нестабилен.
pole(plant)
ans = -7.6636 + 0.0000i 5.4530 + 0.0000i -0.0075 + 0.0556i -0.0075 - 0.0556i
Обе переменные, которыми управляют, ограничиваются между +/-25 градусов. Поскольку вводы и выводы объекта имеют различные порядки величины, вы также используете масштабные коэффициенты, чтобы упростить настройку MPC. Типичным выбором масштабного коэффициента является верхнее / нижний предел или рабочий диапазон.
MV = struct('Min',{-25,-25},'Max',{25,25},'ScaleFactor',{50,50});
Оба объекта выходные параметры имеют ограничения, чтобы ограничить отклонения от номинала на первом горизонте предсказания. Вы также задаете масштабные коэффициенты для выходных параметров.
OV = struct('Min',{[-0.5;-Inf],[-100;-Inf]},... 'Max',{[0.5;Inf],[100;Inf]},... 'ScaleFactor',{1,200});
Задача управления состоит в том, чтобы получить нулевое смещение для кусочно-постоянных ссылок при предотвращении нестабильности из-за входной насыщенности. Поскольку и переменные MV и OV уже масштабируются в контроллере MPC, веса MPC являются безразмерными и применились к масштабированному мВ и значениям OV. В этом примере вы штрафуете эти два выходных параметров наравне с теми же весами OV.
Weights = struct('MV',[0 0],'MVRate',[0.1 0.1],'OV',[10 10]);
Создайте контроллер MPC с заданной моделью объекта управления, шагом расчета и горизонтами.
Ts = 0.05; % Sample time p = 10; % Prediction horizon m = 2; % Control horizon mpcobj = mpc(plant,Ts,p,m,Weights,MV,OV);
Чтобы запустить этот пример, Simulink® требуется.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink(R) is required to run this example.') return end
Симулируйте управление с обратной связью линейной модели объекта управления в Simulink. Для этого для блока MPC Controller, набор свойство MPC Controller к mpcobj
.
mdl = 'mpc_aircraft';
open_system(mdl)
sim(mdl)
-->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->Assuming output disturbance added to measured output channel #2 is integrated white noise. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
Ответ с обратной связью показывает хорошую эффективность отслеживания заданного значения.
[1] П. Кэпэзоурис, М. Атэнс и Г. Стайн, "Проект систем управления с обратной связью для нестабильных объектов с насыщением приводов", Proc. IFAC Symp. на Нелинейном Проекте Системы управления, Pergamon Press, стр 302 - 307, 1990
[2] А. Бемпорэд, А. Касавола и Э. Моска, "Нелинейное управление ограниченных линейных систем через прогнозирующее ссылочное управление", IEEE® Trans. Автоматическое управление, издание AC-42, № 3, стр 340-349, 1997.
bdclose(mdl)