Управление 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)

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

|

Похожие темы