Вектор состояния БПЛА
возвращает вектор состояния для заданной модели наведения БПЛА. Вектор всегда заполнен нулями. Используйте эту функцию, чтобы убедиться, что у вас есть правильный размер для вектора состояния. Используйте вектор состояния как вход в 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,:))
Постройте график изменения положения Y и Z. При заданном угле тяги и крена мультиротор должен перелететь и потерять некоторую высоту. Положительное значение для Z ожидается, так как положительное Z меньше.
figure plot(simOut.y(2,:)); hold on plot(simOut.y(3,:)); legend('Y-position','Z-position') hold off
Можно также построить график мультироторной траектории с помощью 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])
В этом примере показано, как использовать 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,:))
Можно также построить график траектории фиксированного крыла с помощью 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
uavGuidanceModel
- модель наведения БПЛАfixedwing
| объекта multirotor
объектМодель наведения БПЛА, заданная как fixedwing
или multirotor
объект.
stateVec
- Вектор состоянияzeros(7,1)
| zeros(13,1)
Вектор состояния, возвращенный как вектор с семью или тринадцатью элементами. Вектор всегда заполнен нулями. Используйте эту функцию, чтобы убедиться, что у вас есть правильный размер для вектора состояния.
Для фиксированных БПЛА состояние представляет собой вектор с восемью элементами:
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
в Ньютонах.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.