exponenta event banner

Явное управление 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 безразмерны и применяются к масштабированным значениям 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-контроллера из традиционного 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.

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

Чтобы получить структуру параметров, в которой можно указать, какое сечение 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 установите свойство Явный контроллер MPC в значение mpcobjExplicitSimplified.

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

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

Ссылки

[1] P. Kapasouris, M. Athans и G. Stein, «Проектирование систем управления с обратной связью для неустойчивых установок с исполнительными механизмами насыщения», Proc. IFAC Symp., on Nonlinear Control System Design, Pergamon Press, pp.302-307, 1990

[2] А. Бемпорад, А. Казавола и Е. Моска, «Нелинейное управление линейными системами с ограничением посредством управления прогностическими ссылками», IEEE ® Trans. Automatic Control, том AC-42, № 3, стр. 340-349, 1997.

bdclose(mdl)

Связанные темы