exponenta event banner

Явное управление 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.

  • Перевернутый маятник неподвижен в вертикальном положении тета = 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);

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

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

Третье состояние - маятниковый угол тета, который имеет известное начальное состояние 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;

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

mpcobj.MV.ScaleFactor = 100;

Для повышения надежности контроллера увеличьте вес изменения MV от 0.1 кому 1.

mpcobj.Weights.MVRate = 1;

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

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, укажите его в диалоговом окне Явный контроллер MPC в модели Simulink.

Моделирование с замкнутым контуром

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

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

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

По сравнению с результатами функции «Управление перевернутым маятником на тележке» неявные и явные контроллеры MPC обеспечивают такую же производительность, как и ожидалось.

Обсуждение

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

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

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

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

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

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

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

bdclose(mdlMPC)

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