exponenta event banner

Управление ПДК с запланированным усилением перевернутого маятника на тележке

В этом примере для управления перевернутым маятником на тележке используется контроллер прогнозирования модели с запланированным коэффициентом усиления.

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

В этом примере требуется программное обеспечение 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.

Цели контроля:

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

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

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

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

Выбор MPC с планированием усиления

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

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

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

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)

  • Маятник вертикальный (тета = 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;

Третье состояние - маятниковый угол тета.

    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

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

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;

Перед проектированием весов рекомендуется масштабировать входные и выходные данные установки. В этом случае, поскольку диапазон манипулируемой переменной больше, чем диапазон выходов установки на два порядка, масштабировать вход СН на 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);

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

    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)

См. также

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