Производная времени состояний UAV
stateDerivative = derivative(uavGuidanceModel,state,control,environment)
Эта функция требует, чтобы вы установили Библиотеку UAV для Robotics System Toolbox™. Чтобы установить дополнения, используйте roboticsAddons
и выберите желаемое дополнение.
определяет производную времени состояния модели руководства UAV использование текущего состояния, команд управления и экологических входных параметров. Используйте состояние и производную времени с stateDerivative
= derivative(uavGuidanceModel
,state
,control
,environment
)ode45
, чтобы моделировать UAV.
Этот пример показывает, как использовать модель руководства multirotor
, чтобы моделировать изменение в состоянии UAV из-за ввода команд.
Примечание: Чтобы использовать алгоритмы UAV, ou должен установить Библиотеку UAV для Robotics System Toolbox®. Чтобы установить, используйте roboticsAddons
.
Создайте модель руководства мультиротора.
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. С заданной тягой и углом вращения, мультиротор должен пролететь и потерять некоторую высоту. positve значение для Z ожидается, когда положительный Z снижается.
figure plot(simOut.y(2,:)); hold on plot(simOut.y(3,:)); legend('Y-position','Z-position') hold off
Можно также построить траекторию мультиротора с помощью plotTransforms
. Создайте векторы перевода и вращения из моделируемого состояния. Субдискретизируйте (каждый 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 из-за ввода команд.
Примечание: Чтобы использовать алгоритмы UAV, необходимо установить Библиотеку UAV для Robotics System Toolbox®. Чтобы установить, используйте roboticsAddons
.
Создайте модель руководства фиксированного крыла.
model = fixedwing;
Установите воздушную скорость автомобиля путем изменения структуры от функции state
.
s = state(model);
s(4) = 5; % 10 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
. Создайте векторы перевода и вращения из моделируемого состояния. Субдискретизируйте (каждый 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
.
state
— Вектор состоянияВектор состояния, заданный как вектор с тринадцатью элементами или с восемью элементами. Вектор всегда заполнен нулями. Используйте эту функцию, чтобы гарантировать, что у вас есть соответствующий размер для вашего вектора состояния.
Для БПЛА фиксированного крыла состояние является вектором с восемью элементами:
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 - [r p q]
в радианах в секунду.
Thrust - F
в ньютонах.
environment
— EnvironmentalЭкологические входные параметры, возвращенные как структура. Чтобы сгенерировать эту структуру, используйте environment
.
Для БПЛА фиксированного крыла полями структуры является WindNorth
, WindEast
, WindDown
и Gravity
. Скорости ветра исчисляются в метрах в секунду, и отрицательная точка скоростей в противоположном направлении. Сила тяжести исчисляется в метрах в секунду в квадрате (9.81
по умолчанию).
Для БПЛА мультиротора единственным элементом структуры является Gravity
(9.81
по умолчанию) в метрах в секунду придал квадратную форму.
control
— Управляйте командами для UAVУправляйте командами для UAV, заданного как структура. Чтобы сгенерировать эту структуру, используйте control
.
Для БПЛА мультиротора модель руководства аппроксимирована как отдельные контроллеры PD для каждой команды. Элементы структуры являются командами управления:
Roll
- Угол вращения в радианах.
Pitch
- Передайте угол в радианах.
YawRate
- Уровень отклонения от курса в радианах в секунду. (D = 0. P только контроллер)
Thrust
- Вертикальная тяга UAV в Ньютонах. (D = 0. P только контроллер)
Для БПЛА фиксированного крыла модель принимает, что UAV летит при условии скоординированного поворота. Уравнения Модели Руководства принимают нулевой занос. Элементы шины:
Высота-
Высота над землей в метрах.
Airspeed
- Скорость UAV относительно ветра в метрах в секунду.
RollAngle
- Угол вращения вдоль тела передает ось в радианах. Из-за условия скоординированного поворота направляющийся угловой уровень основан на углу вращения.
stateDerivative
— Производная времени состоянияПроизводная времени состояния, возвращенного как вектор. Вектор производной времени имеет ту же длину как вход state
.
control
| derivative
| environment
| ode45
| plotTransforms
| roboticsAddons
| state
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.