state

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

Описание

пример

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 интегрирование. The 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. Создайте векторы смещения и поворота из моделируемого состояния. Downsample (каждый 300-й элемент) и транспонируйте simOut элементы и преобразуйте углы Эйлера в кватернионы. Задайте mesh как 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 интегрирование. The 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. Создайте векторы перемещения и поворота из моделируемого состояния. Downsample (каждый 30-й элемент) и транспонируйте simOut элементы и преобразуйте углы Эйлера в кватернионы. Задайте mesh как 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 объект.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

  • World Position - [x y z] в метрах.

  • World Velocity - [vx vy vz] в метрах в секунду.

  • Euler Angles (ZYX) - [psi theta phi] в радианах.

  • Body Angular Rates - [p q r] в радианах в секунду.

  • Thrust - F в Ньютонах.

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2018b