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

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

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

Создайте контроллер 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] П. Кэпэзоурис, М. Атэнс и Г. Стайн, "Проект систем управления с обратной связью для нестабильных объектов с насыщением приводов", Proc. IFAC Symp. на Нелинейном Проекте Системы управления, Pergamon Press, стр 302 - 307, 1990

[2] А. Бемпорэд, А. Касавола и Э. Моска, "Нелинейное управление ограниченных линейных систем через прогнозирующее ссылочное управление", IEEE® Trans. Автоматическое управление, издание AC-42, № 3, стр 340-349, 1997.

bdclose(mdl)

Смотрите также

|

Похожие темы