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