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

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

Квадроторная модель

Квадротор имеет четыре ротора, которые направлены вверх. От центра масс квадротора роторы помещаются в квадратную формацию с равным расстоянием. Математическая модель для квадроторной динамики получена из уравнений Эйлера-Лагранжа [1].

Двенадцать состояний квадротора:

[x,y,z,ϕ,θ,ψ,x˙,y˙,z˙,ϕ˙,θ˙,ψ˙],

где

  • [x,y,z]обозначить положения в инерционной системе координат

  • Угловые положения [ϕ,θ,ψ] находятся в порядке крена, тангажа и рыскания

  • Остальные состояния являются скоростями положений и углов

Управляющими входами для квадротора являются квадратные скорости вращения четырех роторов:

[ω12,ω22,ω32,ω42].

Эти входы управления создают силу, крутящий момент и тягу в направлении тела z-ось. В этом примере каждое состояние поддается измерению, и входы управления ограничены в пределах [0,12] (rads)2.

Функция состояния и функция Якобиана состояния модели построены и выведены с помощью программного обеспечения Symbolic Math Toolbox™.

getQuadrotorDynamicsAndJacobian;
ans = function_handle with value:
    @QuadrotorStateFcn

ans = function_handle with value:
    @QuadrotorStateJacobianFcn

The getQuadrotorDynamicsAndJacobian скрипт генерирует следующие файлы:

  • QuadrotorStateFcn.m - Функция состояния

  • QuadrotorStateJacobianFcn.m - Государственная якобианская функция

Для получения дополнительной информации о любой функции откройте соответствующий файл.

Проектируйте нелинейный прогнозирующий контроллер модели

Создайте нелинейный объект MPC с 12 состояниями, 12 выходами и 4 входы. По умолчанию все входы являются управляемыми переменными (MV).

nx = 12;
ny = 12;
nu = 4;
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.

Задайте функцию состояния модели предсказания с помощью имени функции. Можно также задать функции с помощью указателя на функцию.

nlobj.Model.StateFcn = "QuadrotorStateFcn";

Задайте якобиан функции состояния с помощью указателя на функцию. Лучшая практика - предоставить аналитический якобиан для модели предсказания. Это значительно повышает эффективность симуляции.

nlobj.Jacobian.StateFcn = @QuadrotorStateJacobianFcn;

Проверьте свою модель предсказания, пользовательские функции и их якобианцы.

rng(0)
validateFcns(nlobj,rand(nx,1),rand(nu,1));
Model.StateFcn is OK.
Jacobian.StateFcn is OK.
No output function specified. Assuming "y = x" in the prediction model.
Analysis of user-provided model, cost, and constraint functions complete.

Задайте шаг расчета 0.1 секунд, горизонта предсказания 18 шагов и управляющего горизонта 2 шага.

Ts = 0.1;
p = 18;
m = 2;
nlobj.Ts = Ts;
nlobj.PredictionHorizon = p;
nlobj.ControlHorizon = m;

Ограничьте все четыре входов управления в области значений [0,12].

nlobj.MV = struct('Min',{0;0;0;0},'Max',{12;12;12;12});

Функция стоимости по умолчанию в нелинейном MPC является стандартной квадратичной функцией стоимости, подходящей для отслеживания уставки и подавления помех. В этом примере первые 6 состояний [x,y,z,ϕ,θ,ψ] требуются для следования по заданной эталонной траектории. Поскольку количество MV (4) меньше, чем количество эталонных выходных траекторий (6), недостаточно степеней свободы для отслеживания желаемых траекторий для всех выходных переменных (OV).

nlobj.Weights.OutputVariables = [1 1 1 1 1 1 0 0 0 0 0 0];

В этом примере MV также имеют номинальные цели, чтобы сохранить квадротор плавающим, что может привести к конфликту между MV и OV отслеживания уставки целями. Чтобы определить приоритеты целей, установите средний приоритет отслеживания MV ниже, чем средний приоритет отслеживания OV.

nlobj.Weights.ManipulatedVariables = [0.1 0.1 0.1 0.1];

Кроме того, наказать агрессивные действия управления путем определения настроечных весов для скоростей изменения MV.

nlobj.Weights.ManipulatedVariablesRate = [0.1 0.1 0.1 0.1];

Симуляция замкнутой системы

Симулируйте систему в течение 20 секунд с целевой траекторией для следования.

% Specify the initial conditions
x = [7;-10;0;0;0;0;0;0;0;0;0;0];
% Nominal control that keeps the quadrotor floating
nloptions = nlmpcmoveopt;
nloptions.MVTarget = [4.9 4.9 4.9 4.9]; 
mv = nloptions.MVTarget;

Симулируйте систему с обратной связью с помощью nlmpcmove функция, установка опций симуляции с помощью nlmpcmove объект.

Duration = 20;
hbar = waitbar(0,'Simulation Progress');
xHistory = x';
lastMV = mv;
uHistory = lastMV;
for k = 1:(Duration/Ts)
    % Set references for previewing
    t = linspace(k*Ts, (k+p-1)*Ts,p);
    yref = QuadrotorReferenceTrajectory(t);
    % Compute the control moves with reference previewing.
    xk = xHistory(k,:);
    [uk,nloptions,info] = nlmpcmove(nlobj,xk,lastMV,yref',[],nloptions);
    uHistory(k+1,:) = uk';
    lastMV = uk;
    % Update states.
    ODEFUN = @(t,xk) QuadrotorStateFcn(xk,uk);
    [TOUT,YOUT] = ode45(ODEFUN,[0 Ts], xHistory(k,:)');
    xHistory(k+1,:) = YOUT(end,:);
    waitbar(k*Ts/Duration,hbar);
end
close(hbar)

Визуализация и результаты

Постройте график результатов и сравните плановые и фактические траектории замкнутой системы.

plotQuadrotorTrajectory;

Figure States contains 6 axes. Axes 1 with title Qruadrotor x position contains 2 objects of type line. These objects represent actual, reference. Axes 2 with title Qruadrotor y position contains 2 objects of type line. These objects represent actual, reference. Axes 3 with title Qruadrotor z position contains 2 objects of type line. These objects represent actual, reference. Axes 4 with title Qruadrotor phi angle contains 2 objects of type line. These objects represent actual, reference. Axes 5 with title Qruadrotor theta angle contains 2 objects of type line. These objects represent actual, reference. Axes 6 with title Qruadrotor psi angle contains 2 objects of type line. These objects represent actual, reference.

Figure Control Inputs contains 4 axes. Axes 1 with title Input 1 contains 2 objects of type stair, line. These objects represent actual, reference. Axes 2 with title Input 2 contains 2 objects of type stair, line. These objects represent actual, reference. Axes 3 with title Input 3 contains 2 objects of type stair, line. These objects represent actual, reference. Axes 4 with title Input 4 contains 2 objects of type stair, line. These objects represent actual, reference.

Поскольку количество MV меньше, чем количество эталонных выходных траекторий, недостаточно степеней свободы для отслеживания желаемых траекторий для всех OV.

Как показано на рисунке для состояний [x,y,z,ϕ,θ,ψ] и управляющие входы,

  • Состояния [x,y,z] очень близко соответствовать ссылка траектории в течение 7 секунд.

  • Состояния [ϕ,θ,ψ] приводятся к окрестностям нулей в течение 9 секунд.

  • Входы управления приводятся к целевому значению 4,9 около 10 секунд.

Можно анимировать траекторию квадротора. Квадротор перемещается близко к «целевому» квадротору, который перемещается по ссылке траектории в течение 7 секунд. После этого квадротор тесно следует по ссылке траектории. Анимация заканчивается через 20 секунд.

animateQuadrotorTrajectory;

Figure QuadrotorAnimation contains 2 axes. Axes 1 contains 22 objects of type line, patch, text. Axes 2 contains 22 objects of type line, patch, text.

Заключение

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

Ссылки

[1] Т. Луукконен, Моделирование и управление квадрокоптером, Независимый исследовательский проект в прикладной математике, Университет Эспоо: Аалто, 2011.

[2] Е. Цораколефтеракис, и Т. Д. Мерфи. Итерационный контроль последовательного действия для стабильного, основанного на модели управления нелинейными системами. Транзакции IEEE по автоматическому контролю (2018).

См. также

| |

Похожие темы

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