Этот пример показывает, как управлять нестабильным самолетом с насыщающими приводами.
Для примера, который управляет тем же объектом с помощью явного контроллера 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);
Манипулируемыми переменными являются углы лифта и flaperon. Углы атаки и тангажа являются измеренными выходами, которые будут регулироваться.
Разомкнутый контур реакция системы нестабилен.
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 не имеют размерности и применяются к масштабированным значениям MV и 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] P. Kapasouris, M. Athans, and G. Stein, «Проект систем управления с обратной связью для нестабильных объектов с насыщающими приводами», Proc. IFAC Symp. on Nonlinear Control System Design, pp.302-307, 1990
[2] A. Bemporad, A. Casavola, and E. Mosca, «Нелинейное управление ограниченными линейными системами через прогнозирующее эталонное управление», IEEE ® Trans. Automatic Control, vol. AC-42, no. 3, pp. 340-349, 1997.
bdclose(mdl)