Вектор состояния UAV
возвращает вектор состояния для заданной модели руководства UAV. Вектор всегда заполнен нулями. Используйте эту функцию, чтобы гарантировать, что у вас есть соответствующий размер для вашего вектора состояния. Используйте вектор состояния в качестве входа к stateVec
= state(uavGuidanceModel
)derivative
функционируйте или при симуляции использования UAV ode45
.
В этом примере показано, как использовать multirotor
модель руководства, чтобы симулировать изменение в состоянии UAV из-за ввода команд.
Создайте модель руководства мультиротора.
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);
Симулируйте состояние UAV использование ode45
интегрирование. y
поле выводит фиксированное крыло состояния UAV как 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"
. Отображенное представление показывает перевод UAV в направлении 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
модель руководства, чтобы симулировать изменение в состоянии UAV из-за ввода команд.
Создайте модель руководства фиксированного крыла.
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);
Симулируйте состояние UAV использование ode45
интегрирование. y
поле выводит фиксированное крыло состояния UAV на основе этой симуляции.
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"
. Отображенное представление показывает UAV, делающий постоянный поворот на основе постоянного угла вращения.
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
— Модель руководства UAVfixedwing
возразите | multirotor
объектМодель руководства UAV в виде fixedwing
или multirotor
объект.
stateVec
— Вектор состоянияzeros(7,1)
| zeros(13,1)
Вектор состояния, возвращенный как вектор с тринадцатью элементами или с семью элементами. Вектор всегда заполнен нулями. Используйте эту функцию, чтобы гарантировать, что у вас есть соответствующий размер для вашего вектора состояния.
Для БПЛА фиксированного крыла состояние является вектором с восемью элементами:
North - Положение в северном направлении в метрах.
East - Положение в восточном направлении в метрах.
Высота- Высота над землей в метрах.
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
в Ньютонах.
control
| derivative
| environment
| ode45
| plotTransforms
| state
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.