Явное 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

Спроектируйте контроллер MPC

Чтобы получить Явный контроллер MPC, необходимо сначала спроектировать традиционный (неявный) прогнозирующий контроллер модели, который может достигнуть целей управления.

Ограничения мВ

Обе переменные, которыми управляют, ограничиваются между +/-25 градусов. Поскольку вводы и выводы объекта имеют различные порядки величины, вы также используете масштабные коэффициенты, чтобы упростить настройку MPC. Типичным выбором масштабного коэффициента является верхнее / нижний предел или рабочий диапазон.

MV = struct('Min',{-25,-25},'Max',{25,25},'ScaleFactor',{50,50});

Ограничения OV

Оба объекта выходные параметры имеют ограничения, чтобы ограничить отклонение от номинала на первом шаге горизонта прогноза. Кроме того, задайте масштабные коэффициенты для выходных параметров.

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);

Сгенерируйте явный контроллер MPC

Явный MPC выполняет эквивалентную явную кусочную аффинную версию закона о MPC управлении, заданного традиционным контроллером MPC. Чтобы сгенерировать явный контроллер MPC от традиционного диспетчера MPC, необходимо указать диапазон для каждого состояния контроллера, ссылочного сигнала, управлял переменным и измеренным воздействием. Выполнение так гарантирует, что мультипараметрическая задача квадратичного программирования решена в пространстве параметров, заданном этими областями значений.

Получите структуру области значений для инициализации

Чтобы получить структуру области значений, где можно указать диапазон для каждого параметра, используйте generateExplicitRange команда.

range = generateExplicitRange(mpcobj);
-->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.

Укажите диапазоны для состояний контроллера

Контроллер MPC состояния включает состояния от модели объекта управления, возмущения и шумовой модели, в том порядке. Установка области значений переменной состояния иногда затрудняет, когда состояние не соответствует физическому параметру. В этом случае несколько запусков симуляции объекта разомкнутого цикла с типичной ссылкой и сигналами воздействия рекомендуются для того, чтобы собрать данные, которые отражают области значений состояний.

range.State.Min(:) = -10000;
range.State.Max(:) = 10000;

Укажите диапазоны для ссылочных сигналов

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

range.Reference.Min = [-1;-11];
range.Reference.Max = [1;11];

Укажите диапазоны для переменных, которыми управляют,

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

range.ManipulatedVariable.Min = [MV(1).Min; MV(2).Min] - 1;
range.ManipulatedVariable.Max = [MV(1).Max; MV(2).Max] + 1;

Создайте явный контроллер MPC

Используйте generateExplicitMPC команда, чтобы получить явный контроллер MPC с ранее заданными областями значений параметра.

mpcobjExplicit = generateExplicitMPC(mpcobj, range);
display(mpcobjExplicit)

Regions found / unexplored:      483/       0

 
Explicit MPC Controller
---------------------------------------------
Controller sample time:    0.05 (seconds)
Polyhedral regions:        483
Number of parameters:      10
Is solution simplified:    No
State Estimation:          Default Kalman gain
---------------------------------------------
Type 'mpcobjExplicit.MPC' for the original implicit MPC design.
Type 'mpcobjExplicit.Range' for the valid range of parameters.
Type 'mpcobjExplicit.OptimizationOptions' for the options used in multi-parametric QP computation.
Type 'mpcobjExplicit.PiecewiseAffineSolution' for regions and gain in each solution.

Чтобы соединить пары областей, соответствующие усиления которых являются тем же самым и чье объединение является выпуклым набором, используйте simplify команда с 'exact' метод. Эта практика может уменьшать объем потребляемой памяти явного контроллера MPC, не жертвуя производительностью.

mpcobjExplicitSimplified = simplify(mpcobjExplicit, 'exact');
display(mpcobjExplicitSimplified)

Regions to analyze:      471/     471

 
Explicit MPC Controller
---------------------------------------------
Controller sample time:    0.05 (seconds)
Polyhedral regions:        471
Number of parameters:      10
Is solution simplified:    Yes
State Estimation:          Default Kalman gain
---------------------------------------------
Type 'mpcobjExplicitSimplified.MPC' for the original implicit MPC design.
Type 'mpcobjExplicitSimplified.Range' for the valid range of parameters.
Type 'mpcobjExplicitSimplified.OptimizationOptions' for the options used in multi-parametric QP computation.
Type 'mpcobjExplicitSimplified.PiecewiseAffineSolution' for regions and gain in each solution.

Количество кусочных аффинных областей было сокращено.

Постройте кусочный аффинный раздел

Можно рассмотреть любой 2D раздел кусочного аффинного раздела, заданного Явным законом о MPC управлении.

Получите структуру параметра графика для инициализации

Чтобы получить структуру параметра, где можно задать который 2D раздел построить, используйте generatePlotParameters функция.

params = generatePlotParameters(mpcobjExplicitSimplified);

Задайте параметры для 2D графика

В этом примере вы строите угол подачи (4-я переменная состояния) по сравнению с ее ссылкой (2-й ссылочный сигнал). Все другие параметры должны быть зафиксированы в значениях в их соответствующих областях значений.

Зафиксируйте другие переменные состояния.

params.State.Index = [1 2 3 5 6];
params.State.Value = [0 0 0 0 0];

Зафиксируйте другие ссылочные сигналы.

params.Reference.Index = 1;
params.Reference.Value = 0;

Зафиксируйте переменные, которыми управляют.

params.ManipulatedVariable.Index = [1 2];
params.ManipulatedVariable.Value = [0 0];

Постройте 2D раздел

Используйте plotSection команда, чтобы построить 2D раздел, заданный ранее.

plotSection(mpcobjExplicitSimplified,params);
axis([-10 10 -10 10])
grid
xlabel('Pitch angle (x_4)')
ylabel('Reference on pitch angle (r_2)')

Симулируйте Используя Simulink®

Чтобы запустить этот пример, Simulink® требуется.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end

Симулируйте управление с обратной связью линейной модели объекта управления в Simulink. Для этого для блока MPC Controller, набор свойство Explicit MPC Controller к mpcobjExplicitSimplified.

mdl = 'empc_aircraft';
open_system(mdl)
sim(mdl)

Ответ с обратной связью идентичен традиционному контроллеру MPC, спроектированному в Самолете с Нестабильными полюсами.

Ссылки

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

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

bdclose(mdl)

Похожие темы