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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В то время как заданное значение положения тележки, z, может варьироваться, заданным значением угла маятника, теты, всегда является 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;

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

nlobj.Model.OutputFcn = @(x,u,Ts) [x(1); x(3)];

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

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.

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

Симуляция с обратной связью в 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 входной порт блока 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 и маятник к инвертированному положению равновесия.

Ни один nlmpc объект, ни блок Nonlinear MPC Controller поддерживают генерацию кода.

Заключение

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

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

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

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

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

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

bdclose(mdl)

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

|

Похожие темы