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

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

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

Блок маятника/Тележки

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

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

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

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

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

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

  • Управление Swing: Первоначально качайте маятник до инвертированного положения равновесия где z = 0 и theta = 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;

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

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

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

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

Можно легко использовать сторонний решатель нелинейного программирования вместе с нелинейным объектом MPC созданное с использованием программное обеспечение Model Predictive Control Toolbox. Например, если у вас есть программное обеспечение FORCESPRO от установленного Embotech, можно использовать их Плагин Тулбокса MPC, чтобы сгенерировать эффективный пользовательский решатель 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 FORCESPRO 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

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

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

mdl = 'mpc_pendcartNMPC';
open_system(mdl)

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

Чтобы использовать дополнительные параметры в модели предсказания, модели соединили блок Simulink Bus с params входной порт блока Nonlinear MPC Controller. Сконфигурировать этот блок шины, чтобы использовать 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 и маятник к инвертированному положению равновесия.

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

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

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

Заключение

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

  • Выбор соответствующих горизонтов, границ и весов

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

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

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

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

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

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

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте