Изменяющееся во времени MPC управление инвертированным маятником на корзине

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

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

Этот пример требует, чтобы программное обеспечение Simulink® симулировало нелинейную модель маятника.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink (R) is required to run this example.')
    return
end

Блок маятника/Корзины

Объект для этого примера является следующим блоком маятника/корзины, где z является положением корзины, и тета является углом маятника.

Переменная, которой управляют, для этой системы является переменной силой F действующий на корзину. Область значений силы между-100 и 100. Контроллер должен сохранить маятник вертикально при перемещении корзины в новое положение или когда маятник пошагово перемещает вперед импульсное воздействие dF примененный в верхнем конце инвертированного маятника.

Управляйте целями

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

  • Корзина является стационарной в z = 0.

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

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

  • Корзина может быть перемещена в новое положение между -20 и 20 с изменением заданного значения шага.

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

  • Когда импульсное воздействие величины 4 применяется к маятнику, корзина и маятник должны возвратиться к своему исходному положению с маленьким смещением.

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

Выбор изменяющегося во времени MPC

В Управлении Инвертированного Маятника на Корзине один контроллер MPC может переместить корзину в новое положение между -10 и 10. Однако, если вы увеличиваете изменение заданного значения шага в 20, маятнику не удается восстановить его вертикальное положение во время перехода.

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

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

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

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

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

Управляющая структура

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

  • Одна переменная, которой управляют: Переменная сила F.

  • Два измеренных выходных параметров: положение z Корзины и угловая тета маятника.

mdlMPC = 'mpc_pendcartLTVMPC';
open_system(mdlMPC);

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

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

Линейные изменяющиеся во времени модели объекта управления

В каждом интервале управления LTV MPC требует линейной модели объекта управления для каждого шага прогноза с текущего времени k ко времени k+p, где p горизонт прогноза.

В этом примере, корзине и динамической системе маятника описан первой принципиальной моделью. Эта модель состоит из набора дифференциальных и алгебраических уравнений (ДАУ), заданные в pendulumCT функция. Для получения дополнительной информации смотрите pendulumCT.m.

Блок Successive Linearizer в модели Simulink генерирует модели LTV во время выполнения. На каждом шаге прогноза блок получает матрицы пространства состояний ABC, и D использование якобиана в непрерывное время, и затем преобразует их в значения дискретного времени. Начальный объект утверждает, что x (k) непосредственно измеряются от объекта. Входная последовательность объекта содержит оптимальные перемещения, сгенерированные контроллером MPC в предыдущем интервале управления.

Адаптивный проект 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 корзины, и второй вес сопоставлен с угловой тетой.

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);

Смотрите также

Похожие темы