exponenta event banner

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;

Задание нелинейной модели установки

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

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

  • Маятник находится в положении равновесия вниз, тета = -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 на панели инструментов оптимизации.

Укажите параметр модели прогнозирования с помощью 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 команда. Можно использовать либо решатель внутренних точек (IP), либо решатель последовательного квадратичного программирования (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);

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, подключенный к 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 соответственно. В зависимости от конкретных нелинейных характеристик завода и требований к управлению, подробные данные внедрения могут значительно отличаться. Основные задачи проектирования включают в себя:

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

  • Проектирование нелинейного оценщика состояния

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

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

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

Оба nlmpcmoveCodeGeneration с помощью программного обеспечения панели управления Model Predictive Control Toolbox и nlmpcmoveForces команда от формирования кода поддержки FORCES PRO в MATLAB. Как нелинейный блок MPC из программного обеспечения Model Predictive Control Toolbox, так и FORCES Nonlinear MPC блок из создания кода поддержки FORCES PRO в Simulink.

bdclose(mdl)

См. также

|

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