Явное MPC управление инвертированным маятником на тележке

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

Требования к продукту

Этот пример требует, чтобы программное обеспечение Simulink ® Control Design™ задало структуру MPC путем линеаризации нелинейной модели Simulink.

if ~mpcchecktoolboxinstalled('slcontrol')
    disp('Simulink Control Design is required to run this example.')
    return
end

Маятник/Сборка тележки

Объект для этого примера является следующей тележкой/маятником, где x - положение тележки, а theta - угол маятника.

Управление этой системой осуществляется путем приложения переменной силы F к тележке. Контроллер должен держать маятник вертикально во время перемещения тележки в новое положение или когда маятник подталкивается вперед импульсным нарушением порядка dF, приложенным к верхнему концу перевернутого маятника.

Этот объект моделируется в Simulink с обычно используемыми блоками.

mdlPlant = 'mpc_pendcartPlant';
load_system(mdlPlant)
open_system([mdlPlant '/Pendulum and Cart System'],'force')

Цели управления

Примите следующие начальные условия для тележки/маятника в сборе:

  • Тележка стационарная x = 0.

  • Инвертированный маятник является стационарным в вертикальном положении theta = 0.

Целями управления являются:

  • Тележка можно переместить в новую позицию между -10 и 10 с изменением уставки шага.

  • При отслеживании такого изменения уставки время нарастания должно быть менее 4 секунд (для эффективности), а перерегулирование должно быть меньше 5 процент (для робастности).

  • Когда импульсное нарушение порядка величины 2 применяется к маятнику, тележка должна вернуться в исходное положение с максимальным перемещением 1. Маятник должен также вернуться в вертикальное положение с пиковым перемещением угла 15 степени (0.26 радиан).

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

Структура управления

В данном примере используйте один контроллер MPC с:

  • Одна манипулируемая переменная: переменная сила F.

  • Два измеренных выхода: Положение тележки x и угол маятника theta.

  • Одно неизмеренное нарушение порядка: Импульсное нарушение порядка dF.

mdlMPC = 'mpc_pendcartExplicitMPC';
open_system(mdlMPC)

Несмотря на то, что x_dot скорости тележки и theta_dot скорости вращения маятника доступны из модели объекта управления, чтобы сделать проектный случай более реалистичным, они исключаются как измерения MPC.

В то время как уставка положения тележки изменяется (вход шага), уставка угла маятника постоянна (0 = вертикальное положение).

Линейная модель объекта управления

Поскольку контроллер MPC требует линейного инвариантного по времени ( LTI) модели объекта управления для предсказания, линеаризируйте модели объекта управления Simulink в начальной рабочей точке.

Задайте входную и выходные точки линеаризации

io(1) = linio([mdlPlant '/dF'],1,'openinput');
io(2) = linio([mdlPlant '/F'],1,'openinput');
io(3) = linio([mdlPlant '/Pendulum and Cart System'],1,'openoutput');
io(4) = linio([mdlPlant '/Pendulum and Cart System'],3,'openoutput');

Создайте спецификации рабочих точек для начальных условий объекта.

opspec = operspec(mdlPlant);

Первое состояние является положением х тележки, которое имеет известное начальное состояние 0.

opspec.States(1).Known = true;
opspec.States(1).x = 0;

Третьим состоянием является угол theta маятника, который имеет известное начальное состояние 0.

opspec.States(3).Known = true;
opspec.States(3).x = 0;

Вычислите рабочую точку, используя эти спецификации.

options = findopOptions('DisplayReport',false);
op = findop(mdlPlant,opspec,options);

Получите линейную модель объекта управления в заданной рабочей точке.

plant = linearize(mdlPlant,op,io);
plant.InputName = {'dF';'F'};
plant.OutputName = {'x';'theta'};

Осмотрите полюса линеаризированного объекта.

pole(plant)
ans =

         0
  -11.9115
   -3.2138
    5.1253

Объект имеет интегратор и нестабильный полюс.

bdclose(mdlPlant)

Традиционный (неявный) проект MPC

Объект имеет два входа, dF и F, и два выхода, x и theta. В этом примере dF задается как неизмеренное нарушение порядка, используемое контроллером MPC для лучшего подавления помех. Установите типы сигналов объекта.

plant = setmpcsignals(plant,'ud',1,'mv',2);

Чтобы управлять нестабильным объектом, шаги расчета контроллера не могут быть слишком большими (плохие подавления помех) или слишком маленькими (чрезмерная вычислительная нагрузка). Точно так же горизонт предсказания не может быть слишком длинным (доминировал бы нестабильный режим объекта) или слишком коротким (нарушения ограничений были бы непредвиденными). Используйте следующие параметры для этого примера:

Ts = 0.01;
PredictionHorizon = 50;
ControlHorizon = 5;
mpcobj = mpc(plant,Ts,PredictionHorizon,ControlHorizon);
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
   for output(s) y1 and zero weight for output(s) y2 

Существует ограничение на то, какую силу мы можем применить к тележке, которое задается как жесткие ограничения на манипулируемую переменную F.

mpcobj.MV.Min = -200;
mpcobj.MV.Max = 200;

Перед разработкой весов рекомендуется масштабировать входные и выходные входы объекта. В этом случае, поскольку область значений манипулируемой переменной больше, чем область значений выходов объекта на два порядка величины, масштабируйте вход MV на 100.

mpcobj.MV.ScaleFactor = 100;

Чтобы улучшить робастность контроллера, увеличьте вес на скорости изменения СН с 0.1 на 1.

mpcobj.Weights.MVRate = 1;

Для достижения сбалансированной эффективности отрегулируйте веса на выходах объекта. Первый вес связан с положением х тележки, а второй вес связан с углом theta.

mpcobj.Weights.OV = [1.2 1];

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

Обновите входную модель возмущения.

disturbance_model = getindist(mpcobj);
setindist(mpcobj,'model',disturbance_model*10);
-->Converting model to discrete time.
-->The "Model.Disturbance" property of "mpc" object is empty:
   Assuming unmeasured input disturbance #1 is integrated white noise.
   Assuming no disturbance added to measured output channel #1.
-->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.

Обновите модель выхода возмущения.

disturbance_model = getoutdist(mpcobj);
setoutdist(mpcobj,'model',disturbance_model*10);
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
-->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

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

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

range = generateExplicitRange(mpcobj);
range.State.Min(:) = -20;   % largest range comes from cart position x
range.State.Max(:) = 20;
range.Reference.Min = -20;  % largest range comes from cart position x
range.Reference.Max = 20;
range.ManipulatedVariable.Min = -200;
range.ManipulatedVariable.Max = 200;
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Сгенерируйте явный контроллер MPC для заданных областей значений.

mpcobjExplicit = generateExplicitMPC(mpcobj,range);

Regions found / unexplored:       92/       0

Чтобы использовать явный контроллер MPC в Simulink, укажите его в диалоговом окне блока Explicit MPC Controller в модели Simulink.

Симуляция замкнутой системы

Проверьте проект MPC с помощью симуляции с обратной связью в Simulink.

open_system([mdlMPC '/Scope'])
sim(mdlMPC)

В нелинейной симуляции все цели управления успешно достигаются.

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

Обсуждение

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

Чтобы достичь большего расстояния за то же время нарастания, контроллер прикладывает больше силы к тележке в начале. В результате маятник смещается из своего вертикального положения на больший угол, такой как 60 степени. При таких углах динамика объекта значительно отличается от прогнозирующей модели LTI, полученной при theta = 0. В результате ошибки в предсказании поведения объекта превышают то, что может обрабатывать встроенная робастность MPC, и контроллер не выполняет правильно.

Простым решением, чтобы избежать падения маятника, является ограничение перемещения маятника путем добавления мягких выходных ограничений к theta и уменьшения веса ECR при смягчении ограничений.

mpcobj.OV(2).Min = -pi/2;
mpcobj.OV(2).Max = pi/2;
mpcobj.Weights.ECR = 100;

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

Чтобы достичь больших расстояний в течение одного и того же времени нарастания, контроллеру нужны более точные модели под разным углом, чтобы улучшить предсказание. Другой пример Gain-Scheduled MPC Control of a Inverted Mendulum on a Cart показывает, как использовать MPC табличного управления для достижения больших расстояний.

Закройте модель Simulink.

bdclose(mdlMPC)

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте