Этот пример показывает, как управлять нестабильным самолетом с насыщением приводов с помощью явного образцового прогнозирующего управления.
Для примера, который управляет тем же объектом с помощью традиционного контроллера 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, необходимо сначала разработать традиционный (неявный) образцовый прогнозирующий контроллер, который может достигнуть целей управления.
Ограничения мВ
Обе переменные, которыми управляют, ограничиваются между +/-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, необходимо указать, что область значений для каждого состояния контроллера, ссылочного сигнала, управляла переменным и измеренным воздействием. Выполнение так гарантирует, что мультипараметрическая проблема квадратичного программирования решена в пространстве параметров, заданном этими областями значений.
Получите структуру области значений для инициализации
Чтобы получить структуру области значений, где можно задать область значений для каждого параметра, используйте команду 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® требуется.
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)