Этот пример показывает, как управлять инвертированным маятником на тележке с помощью линейного изменяющегося во времени прогнозирующего контроллера модели (LTV MPC).
Этот пример требует, чтобы программное обеспечение Simulink ® имитировало нелинейную модель маятника.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink (R) is required to run this example.') return end
Объект для этого примера является следующим узлом маятника/тележки, где z - положение тележки, а theta - угол маятника.
Манипулированная переменная для этой системы является переменной силой F, действующей на тележку. Область значений силы находится между -100 и 100. Контроллер должен держать маятник вертикально во время перемещения тележки в новое положение или когда маятник подталкивается вперед импульсным нарушением порядка dF, приложенным к верхнему концу перевернутого маятника.
Примите следующие начальные условия для маятника/тележки в сборе:
Тележка является стационарной в z = 0
.
Инвертированный маятник является стационарным в вертикальном положении theta = 0
.
Целями управления являются:
Тележка можно переместить в новую позицию между -20
и 20
с изменением уставки шага.
При отслеживании такого изменения уставки время нарастания должно быть менее 4 секунд (для эффективности), а перерегулирование должно быть меньше 10
процент (для робастности).
Когда импульсное нарушение порядка величины 4
наносится на маятник, тележка и маятник должны возвращаться в исходное положение с небольшим перемещением.
Вертикальное положение является нестабильным равновесием для перевернутого маятника, что делает задачу управления более сложной.
При управлении перевернутым маятником на тележке один контроллер MPC может переместить тележку в новое положение между -10
и 10
. Однако, если вы увеличиваете уставку шага, меняйте ее на 20
маятник не восстанавливает свое вертикальное положение во время перехода.
Чтобы достичь большего расстояния за то же время нарастания, контроллер прикладывает больше силы к тележке в начале. В результате маятник смещается из своего вертикального положения на больший угол, такой как 60
степени. При таких углах динамика объекта значительно отличается от прогнозирующей модели LTI, полученной при theta = 0
. В результате ошибки в предсказании поведения объекта превышают то, что может обрабатывать встроенная робастность MPC, и контроллер не выполняет правильно.
Чтобы избежать падения маятника, простое решение состоит в том, чтобы ограничить перемещение маятника путем добавления мягких выходных ограничений к theta и уменьшения веса ECR при смягчении ограничений.
mpcobj.OV(2).Min = -pi/2; mpcobj.OV(2).Max = pi/2; mpcobj.Weights.ECR = 100;
Однако с этими новыми настройками контроллера больше невозможно достичь большего расстояния в течение необходимого времени нарастания. Другими словами, эффективность контроллера жертвуется, чтобы избежать нарушения ограничений мягкого выхода.
Перемещение тележки в новое положение между -20
и 20
сохраняя то же время нарастания, контроллер должен иметь более точные модели под различными углами, так что контроллер может использовать их для лучшего предсказания. Адаптивный MPC позволяет вам решить нелинейную задачу управления путем обновления линейных изменяющихся во времени моделей объекта управления во время исполнения.
В данном примере используйте один контроллер LTV MPC с:
Одна манипулируемая переменная: Переменная сила F.
Два измеренных выхода: Положение тележки z и угол маятника theta.
mdlMPC = 'mpc_pendcartLTVMPC';
open_system(mdlMPC);
Поскольку все состояния объекта измеримы, они непосредственно используются как пользовательские оцененные состояния в блоке Adaptive MPC.
В то время как уставка положения тележки изменяется (вход шага), уставка угла маятника постоянна (0
= вертикальное положение).
На каждом контрольном интервале LTV MPC требует линейную модель объекта управления для каждого шага предсказания от текущего времени k
во временной k+p
, где p
- горизонт предсказания.
В этом примере динамическая система тележки и маятника описывается первой моделью принципа. Эта модель состоит из множества дифференциальных и алгебраических уравнений (ДАУ), заданных в pendulumCT
функция. Для получения дополнительной информации смотрите pendulumCT.m
.
Блок Последующий Линеаризатор в модели Simulink генерирует модели LTV во время исполнения. На каждом шаге предсказания блок получает матрицы пространства состояний A
, B
, C
, и D
использование якобиана в непрерывном времени, а затем преобразует их в значения дискретного времени. Начальные состояния объекта x (k) измеряются непосредственно с объекта. Входная последовательность объекта содержит оптимальные ходы, сгенерированные контроллером MPC в предыдущем контрольном интервале.
Контроллер MPC спроектирован в своей номинальной рабочей точке равновесия.
x0 = zeros(4,1); u0 = zeros(1,1);
Аналитически получите линейную модель объекта управления с помощью ОДУ.
[~,~,A,B,C,D] = pendulumCT(x0, u0);
plant = ss(A,B,C([1 3],:),D([1 3],:)); % position and angle
Чтобы управлять нестабильным объектом, шаги расчета контроллера не могут быть слишком большими (плохие подавления помех) или слишком маленькими (чрезмерная вычислительная нагрузка). Точно так же горизонт предсказания не может быть слишком длинным (доминировал бы нестабильный режим объекта) или слишком коротким (нарушения ограничений были бы непредвиденными). Используйте следующие параметры для этого примера:
Ts = 0.01; PredictionHorizon = 60; ControlHorizon = 3;
Создайте контроллер MPC.
mpcobj = mpc(c2d(plant,Ts),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 = -100; mpcobj.MV.Max = 100;
Перед разработкой весов рекомендуется масштабировать входные и выходные входы объекта. В этом случае, поскольку область значений манипулируемой переменной больше, чем область значений выходов объекта на два порядка величины, масштабируйте вход MV по 100
.
mpcobj.MV.ScaleFactor = 100;
Чтобы улучшить робастность контроллера, увеличьте вес на скорости изменения СН с 0.1
на 1
.
mpcobj.Weights.MVRate = 1;
Для достижения сбалансированной эффективности отрегулируйте веса на выходах объекта. Первый вес связан с положением тележки z, а второй вес связан с углом theta.
mpcobj.Weights.OV = [0.6 1.2];
Используйте коэффициент усиления в качестве выходной модели возмущения для угла маятника. Это представляет быструю краткосрочную изменчивость.
setoutdist(mpcobj,'model',[0;tf(1)]);
Используйте пользовательскую оценку состояния, так как все состояния объекта измеримы.
setEstimator(mpcobj,'custom');
Проверьте проект MPC с помощью симуляции с обратной связью в Simulink.
open_system([mdlMPC '/Scope']);
sim(mdlMPC)
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
В нелинейной симуляции все цели управления успешно достигаются.
bdclose(mdlMPC);