Планируемое по усилению 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.

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

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

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

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

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

Выбор запланированного по усилению MPC

При управлении перевернутым маятником на тележке один контроллер MPC может переместить тележку в новое положение между -10 и 10. Однако, если вы увеличиваете изменение уставки шага до 15, маятник не восстанавливает свое вертикальное положение во время перехода.

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

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

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

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

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

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

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

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

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

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

mdlMPC = 'mpc_pendcartGSMPC';
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');

Создайте спецификации для следующих трех рабочих точек, где и тележка, и маятник являются стационарными:

  • Маятник находится в 80 степенях, указывая вправо (theta = -4*pi/9)

  • Маятник вертикальный (theta = 0)

  • Маятник находится в 80 степенях, указывая налево (theta = 4*pi/9)

angles = [-4*pi/9 0 4*pi/9];
for ct=1:length(angles)

Создайте спецификацию рабочей точки.

    opspec(ct) = operspec(mdlPlant);

Первое состояние - положение тележки x.

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

Вторым состоянием является скорость тележки x_dot (не в установившемся состоянии).

    opspec(ct).States(2).SteadyState = false;

Третье состояние - это угол theta маятника.

    opspec(ct).States(3).Known = true;
    opspec(ct).States(3).x = angles(ct);

Четвертое состояние является скоростью вращения theta_dot (не в установившемся состоянии).

    opspec(ct).States(4).SteadyState = false;
end

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

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

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

plants = linearize(mdlPlant,op,io);
bdclose(mdlPlant)

Несколько проектов MPC

В каждой рабочей точке проектируйте контроллер MPC с соответствующей линейной моделью объекта управления.

status = mpcverbosity('off');
for ct=1:length(angles)

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

    plant = plants(:,:,ct);
    plant.InputName = {'dF'; 'F'};
    plant.OutputName = {'x'; 'theta'};

Объект имеет два входа, 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);

Задайте номинальные входные и выходные значения на основе рабочей точки.

    mpcobj.Model.Nominal.Y = [0;opresult(ct).States(3).x];
    mpcobj.Model.Nominal.X = [0;0;opresult(ct).States(3).x;0];
    mpcobj.Model.Nominal.DX = [0;opresult(ct).States(2).dx;0;opresult(ct).States(4).dx];

Существует ограничение на то, какую силу мы можем применить к тележке, которое задается как жесткие ограничения на манипулируемую переменную 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);

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

    disturbance_model = getoutdist(mpcobj);
    setoutdist(mpcobj,'model',disturbance_model*10);

Сохраните контроллер MPC в рабочем пространстве MATLAB.

    assignin('base',['mpc' num2str(ct)],mpcobj);
end
mpcverbosity(status);

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

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

open_system([mdlMPC '/Scope'])
sim(mdlMPC)
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

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

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

bdclose(mdlMPC)

См. также

Похожие темы