environment

Входы окружающей среды для БПЛА

Описание

пример

envStruct = environment(uavGuidanceModel) возвращает структуру, которая захватывает все соответствующие переменные среды для указанной модели руководства БПЛА. Используйте эту функцию, чтобы убедиться, что у вас есть соответствующие поля для параметров окружающей среды. Используйте входы среды в качестве входов derivative функция для получения производной по времени состояния БПЛА.

Примеры

свернуть все

В этом примере показано, как использовать 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 объект.

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

свернуть все

Входные параметры среды, возвращенные как структура.

Для БПЛА постоянного назначения поля структуры WindNorth, WindEast, WindDown, и Gravity. Скорость ветра составляет в метрах в секунду, а отрицательная скорость указывает в противоположном направлении. Gravity в метрах в секунду за секунду (по умолчанию 9.81).

Для мультироторных БПЛА единственным элементом структуры является Gravity (по умолчанию 9.81) в метрах в секунду.

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

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

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