Самолеты с нестабильными полюсами

Этот пример показывает, как управлять нестабильным самолетом с насыщающими приводами.

Для примера, который управляет тем же объектом с помощью явного контроллера 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

Создайте контроллер MPC с указанной моделью объекта управления, шагом расчета и горизонтами.

Ts = 0.05;          % Sample time
p = 10;             % Prediction horizon
m = 2;              % Control horizon
mpcobj = mpc(plant,Ts,p,m,Weights,MV,OV);

Симулируйте с использованием Simulink

®

Чтобы запустить этот пример, требуется 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)

См. также

|

Похожие темы