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

Нисходящее положение равновесия является stabl, e, и инвертированное положение равновесия нестабильно, который делает управление колебания более сложным для одного линейного контроллера, который нелинейный 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)

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

|

Похожие темы