exponenta event banner

государство

Вектор состояния БПЛА

Описание

пример

stateVec = state(uavGuidanceModel) возвращает вектор состояния для указанной модели наведения БПЛА. Вектор всегда заполняется нулями. Эта функция используется для обеспечения правильного размера вектора состояния. Использовать вектор состояния в качестве входных данных для derivative функция или при моделировании БПЛА с помощью ode45.

Примеры

свернуть все

В этом примере показано, как использовать multirotor модель наведения для имитации изменения состояния БПЛА за счет ввода команды.

Создайте многороторную модель управления.

model = multirotor;

Создание структуры состояния. Укажите местоположение в мировых координатах.

s = state(model);
s(1:3) = [3;2;1];

Укажите команду управления, u, которые определяют крен и тягу мультиротора.

u = control(model);
u.Roll = pi/12;
u.Thrust = 1;

Создание среды по умолчанию без ветра.

e = environment(model);

Вычислите производную состояния по времени, заданную текущим состоянием, управляющей командой и средой.

sdot = derivative(model,s,u,e);

Моделирование состояния БПЛА с помощью ode45 интеграция. y поле выводит состояния многороторного БПЛА в виде матрицы 13 на n.

simOut = ode45(@(~,x)derivative(model,x,u,e), [0 3], s);
size(simOut.y)
ans = 1×2

          13        3536

Постройте график изменения угла крена на основе выходных данных моделирования. Угол крена (угол Эйлера X) - это 9-й ряд simOut.y выход.

plot(simOut.y(9,:))

Figure contains an axes. The axes contains an object of type line.

Постройте график изменения позиций Y и Z. При заданных угле тяги и крена мультиротор должен пролететь и потерять некоторую высоту. Положительное значение для Z ожидается, так как положительное значение Z падает.

figure
plot(simOut.y(2,:));
hold on
plot(simOut.y(3,:));
legend('Y-position','Z-position')
hold off

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Y-position, Z-position.

Можно также построить многороторную траекторию с помощью plotTransforms. Создайте векторы перемещения и вращения из моделируемого состояния. Понизить (каждый 300-й элемент) и транспонировать simOut элементы и преобразуют углы Эйлера в кватернионы. Укажите сетку в качестве multirotor.stl файл и положительное направление Z как "down". На отображаемом виде показан БПЛА, переводящий в направлении Y и теряющий высоту.

translations = simOut.y(1:3,1:300:end)'; % xyz position
rotations = eul2quat(simOut.y(7:9,1:300:end)'); % ZYX Euler
plotTransforms(translations,rotations,...
    'MeshFilePath','multirotor.stl','InertialZDirection',"down")
view([90.00 -0.60])

Figure contains an axes. The axes contains 48 objects of type patch, line.

В этом примере показано, как использовать fixedwing модель наведения для имитации изменения состояния БПЛА за счет ввода команды.

Создайте модель наведения крыла.

model = fixedwing;

Задайте воздушную скорость транспортного средства путем изменения конструкции из state функция.

s = state(model);
s(4) = 5; % 5 m/s

Укажите команду управления, u, которая поддерживает скорость воздуха и дает угол крена pi/12.

u = control(model);
u.RollAngle = pi/12;
u.AirSpeed = 5;

Создание среды по умолчанию без ветра.

e = environment(model);

Вычислите производную состояния по времени, заданную текущим состоянием, управляющей командой и средой.

sdot = derivative(model,s,u,e);

Моделирование состояния БПЛА с помощью ode45 интеграция. y на поле выводятся состояния БПЛА на основе данного моделирования.

simOut = ode45(@(~,x)derivative(model,x,u,e), [0 50], s);
size(simOut.y)
ans = 1×2

     8   904

Постройте график изменения угла крена на основе выходных данных моделирования. Угол крена - это 7-й ряд simOut.y выход.

plot(simOut.y(7,:))

Figure contains an axes. The axes contains an object of type line.

Можно также построить график траектории на крыле с помощью plotTransforms. Создайте векторы перемещения и вращения из моделируемого состояния. Понизить (каждый 30-й элемент) и транспонировать simOut элементы и преобразуют углы Эйлера в кватернионы. Укажите сетку в качестве fixedwing.stl файл и положительное направление Z как "down". На отображаемом виде показан БПЛА, выполняющий постоянный поворот на основе постоянного угла крена.

downsample = 1:30:size(simOut.y,2);
translations = simOut.y(1:3,downsample)'; % xyz-position
rotations = eul2quat([simOut.y(5,downsample)',simOut.y(6,downsample)',simOut.y(7,downsample)']); % ZYX Euler
plotTransforms(translations,rotations,...
    'MeshFilePath','fixedwing.stl','InertialZDirection',"down")
hold on
plot3(simOut.y(1,:),-simOut.y(2,:),simOut.y(3,:),'--b') % full path
xlim([-10.0 10.0])
ylim([-20.0 5.0])
zlim([-0.5 4.00])
view([-45 90])
hold off

Figure contains an axes. The axes contains 125 objects of type patch, line.

Входные аргументы

свернуть все

Модель наведения БПЛА, указанная как fixedwing или multirotor объект.

Выходные аргументы

свернуть все

Вектор состояния, возвращаемый как семиэлементный или тринадцатиэлементный вектор. Вектор всегда заполняется нулями. Эта функция используется для обеспечения правильного размера вектора состояния.

Для БПЛА с фиксированным крылом состояние представляет собой восьмиэлементный вектор:

  • Север - положение в северном направлении в метрах.

  • Восток - Положение в восточном направлении в метрах.

  • Высота - высота над землей в метрах.

  • AirSpeed - скорость относительно ветра в метрах в секунду.

  • Угол - угол между скоростью земли и направлением на север в радианах.

  • «FlireImageAngle» - угол между скоростью земли и северо-восточной плоскостью в радианах.

  • Угол поворота - угол поворота вдоль оси x тела в радианах.

  • RollAneyRate - угловая скорость вращения вдоль оси x тела в радианах в секунду.

Для многороторных БПЛА состояние является тринадцатиэлементным вектором в следующем порядке:

  • Положение в мире - [x y z] в метрах.

  • Мировая скорость - [vx vy vz] в метрах в секунду.

  • Эйлер Энглс (ZYX) - [psi theta phi] в радианах.

  • Угловые скорости тела - [p q r] в радианах в секунду.

  • Тяга - F в Ньютонсе.

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2018b