Качающееся управление маятником с использованием нелинейного прогнозирующего управления моделью

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

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

Этот пример требует Optimization Toolbox™ программного обеспечения, чтобы предоставить решатель нелинейного программирования по умолчанию для нелинейного MPC, чтобы вычислить оптимальные перемещения управления на каждом контрольном интервале.

if ~mpcchecktoolboxinstalled('optim')
    disp('Optimization Toolbox is required to run this example.')
    return
end

Маятник/Сборка тележки

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

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

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

  • Тележка является стационарной в z = 0.

  • Маятник находится в положении нисходящего равновесия, где theta = -pi.

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

  • Управление качанием: Первоначально качайте маятник до перевернутого положения равновесия, где z = 0 и theta = 0.

  • Положение тележки отслеживания уставки: Переместите тележку в новое положение с изменением уставки шага, сохраняя маятник инвертированным.

  • Балансировка маятника: Когда импульсное нарушение порядка величины 2 применяется к перевернутому маятнику, сохраняет маятник сбалансированным и возвращает тележку в исходное положение.

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

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

В этом примере нелинейный контроллер MPC имеет следующее строение ввода-вывода.

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

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

Два других состояния, скорость тележки (zdot) и скорость вращения маятника (thetadot), не поддаются измерению.

В то время как уставка положения тележки, z, может варьироваться, уставка угла маятника, theta, всегда 0 (инвертированное положение равновесия).

Создайте нелинейный контроллер MPC

Создайте нелинейный контроллер MPC с соответствующими размерностями с помощью nlmpc объект. В этом примере модель предсказания имеет 4 состояния, 2 выходы и 1 вход (MV).

nx = 4;
ny = 2;
nu = 1;
nlobj = nlmpc(nx, ny, nu);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.

Модель предсказания имеет шаг расчета 0.1 секунд, что совпадает со шагом расчета контроллером.

Ts = 0.1;
nlobj.Ts = Ts;

Установите горизонт предсказания равным 10, что достаточно долго, чтобы захватить большую динамику на объекте, но не так долго, чтобы это вредит вычислительной эффективности.

nlobj.PredictionHorizon = 10;

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

nlobj.ControlHorizon = 5;

Задайте нелинейную модель объекта управления

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

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

nlobj.Model.StateFcn = "pendulumDT0";

Чтобы использовать модель в дискретном времени, установите Model.IsContinuousTime свойство контроллера, чтобы false.

nlobj.Model.IsContinuousTime = false;

Модель предсказания использует необязательный параметр, Ts, для представления шага расчета. Использование этого параметра означает, что, если вы измените шаг расчета предсказания во время проекта, вы не должны изменять pendulumDT0 файл.

nlobj.Model.NumberOfParameters = 1;

Два выхода объекта являются первым и третьим состояниями в модели, положением тележки и углом маятника, соответственно. Соответствующая выходная функция определяется в pendulumOutputFcn функция.

nlobj.Model.OutputFcn = 'pendulumOutputFcn';

Наилучшей практикой является предоставление аналитических якобианских функций по возможности, поскольку они значительно улучшают скорость симуляции. В этом примере предоставьте якобиан для выходной функции, используя анонимную функцию.

nlobj.Jacobian.OutputFcn = @(x,u,Ts) [1 0 0 0; 0 0 1 0];

Поскольку вы не предоставляете Якобиан для функции состояния, нелинейный контроллер MPC оценивает функцию состояния Якобиан во время оптимизации с помощью численного возмущения. Это замедляет симуляцию до некоторой степени.

Определение затрат и ограничений

Как и линейный MPC, нелинейный MPC решает ограниченную задачу оптимизации на каждом контрольном интервале. Однако, поскольку модель объекта управления является нелинейной, нелинейный MPC преобразует оптимальную задачу управления в нелинейную задачу оптимизации с нелинейной функцией затрат и нелинейными ограничениями.

Функция затрат, используемая в этом примере, является такой же функцией стандартных затрат, используемой линейным MPC, где применяются выходные отслеживания уставки и манипулируемое подавление перемещения. Поэтому задайте стандартные веса настройки MPC.

nlobj.Weights.OutputVariables = [3 3];
nlobj.Weights.ManipulatedVariablesRate = 0.1;

Положение тележки ограничено областью значений -10 на 10.

nlobj.OV(1).Min = -10;
nlobj.OV(1).Max = 10;

Сила имеет область значений между -100 и 100.

nlobj.MV.Min = -100;
nlobj.MV.Max = 100;

Валидация нелинейного контроллера MPC

После разработки нелинейного объекта контроллера MPC лучшей практики проверить функции, которые вы определили для модели предсказания, функции состояния, выходной функции, пользовательских затрат и пользовательских ограничений, а также их якобианов. Для этого используйте validateFcns команда. Эта функция обнаруживает любые размерные и числовые несоответствия в этих функциях.

x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj,x0,u0,[],{Ts});
Model.StateFcn is OK.
Model.OutputFcn is OK.
Jacobian.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Оценка состояния

В этом примере могут быть измерены только два состояния объекта (положение тележки и угол маятника). Поэтому вы оцениваете четыре состояния объекта с помощью расширенного фильтра Калмана. Его функция перехода к состоянию задана в pendulumStateFcn.m и его функция измерения определена в pendulumMeasurementFcn.m.

EKF = extendedKalmanFilter(@pendulumStateFcn, @pendulumMeasurementFcn);

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

®

Задайте начальные условия для симуляций путем установки начального состояния объекта и выходных значений. Кроме того, задайте начальное состояние расширенного фильтра Калмана.

Начальные условия областей симуляции следуют.

  • Тележка является стационарной в z = 0.

  • Маятник находится в положении нисходящего равновесия, theta = -pi.

x = [0;0;-pi;0];
y = [x(1);x(3)];
EKF.State = x;

mv - оптимальный ход управления, вычисленный на любом контрольном интервале. Инициализация mv в ноль, поскольку сила, приложенная к тележке, равна нулю в начале.

mv = 0;

На первом этапе симуляции маятник качается вверх из положения нисходящего равновесия в положение инвертированного равновесия. Все ссылки на состояние для этого этапа равны нулю.

yref1 = [0 0];

Во время 10 секунд, тележка перемещается с позиции 0 на 5. Установите ссылки на состояние для этой позиции.

yref2 = [5 0];

Использование nlmpcmove команда, вычисление оптимальных перемещений управления на каждом контрольном интервале. Эта функция создает нелинейную задачу программирования и решает ее, используя fmincon функция из Optimization Toolbox.

Задайте параметр модели предсказания с помощью nlmpcmoveopt и передайте этот объект в nlmpcmove.

nloptions = nlmpcmoveopt;
nloptions.Parameters = {Ts};

Запустите симуляцию для 20 секунд.

Duration = 20;
hbar = waitbar(0,'Simulation Progress');
xHistory = x;
for ct = 1:(20/Ts)
    % Set references
    if ct*Ts<10
        yref = yref1;
    else
        yref = yref2;
    end
    % Correct previous prediction using current measurement.
    xk = correct(EKF, y);
    % Compute optimal control moves.
    [mv,nloptions,info] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions);
    % Predict prediction model states for the next iteration.
    predict(EKF, [mv; Ts]);
    % Implement first optimal control move and update plant states.
    x = pendulumDT0(x,mv,Ts);
    % Generate sensor data with some white noise.
    y = x([1 3]) + randn(2,1)*0.01;
    % Save plant states for display.
    xHistory = [xHistory x]; %#ok<*AGROW>
    waitbar(ct*Ts/20,hbar);
end
close(hbar)

Постройте график обратной связи.

figure
subplot(2,2,1)
plot(0:Ts:Duration,xHistory(1,:))
xlabel('time')
ylabel('z')
title('cart position')
subplot(2,2,2)
plot(0:Ts:Duration,xHistory(2,:))
xlabel('time')
ylabel('zdot')
title('cart velocity')
subplot(2,2,3)
plot(0:Ts:Duration,xHistory(3,:))
xlabel('time')
ylabel('theta')
title('pendulum angle')
subplot(2,2,4)
plot(0:Ts:Duration,xHistory(4,:))
xlabel('time')
ylabel('thetadot')
title('pendulum velocity')

График угла маятника показывает, что маятник успешно качается вверх за две секунды. В процессе качания тележка перемещается с пиковым отклонением -1, и вернулся к своему исходному положению около времени 2 секунд.

График положения тележки показывает, что тележка успешно переходит к z = 5 за две секунды. Во время движения тележки маятник перемещается с пиковым отклонением 1 радиан (57 степени) и вернулся в перевернутое равновесное положение около времени 12 секунд.

Симуляция с обратной связью с решателем FORCES PRO в MATLAB

Можно легко использовать сторонний решатель нелинейного программирования вместе с нелинейным объектом MPC, разработанным с помощью программного обеспечения Model Predictive Control Toolbox. Например, если у вас установлено программное обеспечение FORCES PRO от Embotech, можно использовать их плагин MPC Toolbox, чтобы сгенерировать эффективный пользовательский решатель NLP от вашего nlmpc объект и используйте решатель для симуляции и генерации кода.

Во-первых, сгенерируйте пользовательский решатель, используя nlmpcToForces команда. Можно выбрать использование решателя Interior-Point (IP) или решателя Sequential Quadratic Programming (SQP) с помощью nlmpcToForcesOptions команда.

options = nlmpcToForcesOptions();
options.SolverName = 'MyIPSolver';
options.SolverType = 'InteriorPoint';
options.Parameter = Ts;
options.x0 = [0;0;-pi;0];
options.mv0 = 0;
[coredata, onlinedata] = nlmpcToForces(nlobj,options);

The nlmpcToForces функция генерирует пользовательскую MEX-функцию nlmpcmove_MyIPSolver, который можно использовать, чтобы ускорить симуляцию с обратной связью.

x = [0;0;-pi;0];
mv = 0;
EKF.State = x;
y = [x(1);x(3)];
hbar = waitbar(0,'Simulation Progress');
xHistory = x;
for ct = 1:(20/Ts)
    % Set references
    if ct*Ts<10
        onlinedata.ref = repmat(yref1,10,1);
    else
        onlinedata.ref = repmat(yref2,10,1);
    end
    % Correct previous prediction using current measurement.
    xk = correct(EKF, y);
    % Compute optimal control moves using FORCES PRO solver.
    [mv,onlinedata,info] = nlmpcmove_MyIPSolver(xk,mv,onlinedata);
    % Predict prediction model states for the next iteration.
    predict(EKF, [mv; Ts]);
    % Implement first optimal control move and update plant states.
    x = pendulumDT0(x,mv,Ts);
    % Generate sensor data with some white noise.
    y = x([1 3]) + randn(2,1)*0.01;
    % Save plant states for display.
    xHistory = [xHistory x]; %#ok<*AGROW>
    waitbar(ct*Ts/20,hbar);
end
close(hbar)

Как ожидалось, реакция с обратной связью аналогична реакции, полученной с помощью fmincon как и ожидалось.

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

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

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

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

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

mdl = 'mpc_pendcartNMPC';
open_system(mdl)

В этой модели блок Nonlinear MPC Controller сконфигурирован, чтобы использовать ранее разработанный контроллер, nlobj.

Чтобы использовать дополнительные параметры в модели предсказания, модель имеет блок Simulink Bus, соединенный с params входной порт блока нелинейного контроллера MPC. Чтобы сконфигурировать этот блок шины для использования Ts параметр, создайте объект Bus в рабочем пространстве MATLAB и сконфигурируйте блок Bus Creator, чтобы использовать этот объект. Для этого используйте createParameterBus функция. В этом примере назовите объект Bus 'myBusObject'.

createParameterBus(nlobj,[mdl '/Nonlinear MPC Controller'],'myBusObject',{Ts});
A Simulink Bus object "myBusObject" created in the MATLAB Workspace, and Bus Creator block "mpc_pendcartNMPC/Nonlinear MPC Controller" is configured to use it.

Запустите симуляцию для 30 секунд.

open_system([mdl '/Scope'])
sim(mdl)

Нелинейное моделирование в Simulink дает одинаковые результаты отслеживания качания и положения тележки по сравнению с симуляцией MATLAB. Кроме того, толчок (импульсное нарушение порядка dF) применяется к инвертированному маятнику во время 20 секунд. Нелинейный контроллер MPC успешно отвергает нарушение порядка и возвращает тележку к z = 5 и маятник в перевернутое равновесное положение.

Симуляция замкнутой системы с решателем FORCES PRO ® в Simulink

Можно также использовать блок FORCES Nonlinear MPC из программного обеспечения Embotech FORCES PRO, чтобы симулировать нелинейный MPC с помощью сгенерированного пользовательского решателя NLP.

Если у вас установлено программное обеспечение FORCES PRO, откройте mpc_pendcartFORCESPRO модель и запустить ее до завершения. Реакция с обратной связью подобна той, которая использует fmincon.

Заключение

Этот пример иллюстрирует общий рабочий процесс разработки и симуляции нелинейного MPC в MATLAB и Simulink с помощью nlmpc объект и нелинейный блок MPC Controller, соответственно. В зависимости от конкретных нелинейных характеристик объекта и требований к управлению, детали реализации могут значительно варьироваться. Основные задачи проекта включают:

  • Выбор правильных горизонтов, границ и весов

  • Разработка оценщика нелинейного состояния

  • Разработка пользовательской нелинейной функции затрат и ограничительной функции

  • Выбор опций решателя или выбор пользовательского решателя NLP

Можно использовать функции и модель Simulink в этом примере в качестве шаблонов для других нелинейных задач проектирования и симуляции MPC.

Оба nlmpcmoveCodeGeneration команда из программного обеспечения Model Predictive Control Toolbox и nlmpcmoveForces команда от генерации кода поддержки FORCES PRO в MATLAB. И блок Nonlinear MPC из программного обеспечения Model Predictive Control Toolbox, и FORCES Nonlinear MPC блок от генерации кода поддержки FORCES PRO в Simulink.

bdclose(mdl)

См. также

|

Похожие темы