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

Проектирование контроллера 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 не имеют размерности и применяются к масштабированным значениям 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);

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

Явный 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:      476/       0

 
Explicit MPC Controller
---------------------------------------------
Controller sample time:    0.05 (seconds)
Polyhedral regions:        476
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:      465/     465

 
Explicit MPC Controller
---------------------------------------------
Controller sample time:    0.05 (seconds)
Polyhedral regions:        465
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.

Количество кусочно-аффинных регионов уменьшено.

Построение кусочно-аффинной перегородки

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

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

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

params = generatePlotParameters(mpcobjExplicitSimplified);

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

В этом примере вы строите график угла тангажа (переменная 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];

Постройте график 2-D раздела

Использование plotSection команда для построения графика 2-D сечения, определенного ранее.

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

Похожие темы