uavPlatform

Платформа UAV для датчиков в сценарии

Описание

uavPlatform объект представляет платформу беспилотного воздушного транспортного средства (UAV) в данном сценарии UAV. Используйте платформу, чтобы задать и отследить траекторию UAV в сценарии. Чтобы симулировать показания датчика для платформы, смонтируйте датчики, такие как gpsSensor, insSensor, и uavLidarPointCloudGenerator Система object™ на платформу как uavSensor объекты. Добавьте mesh тела в платформу для визуализации с помощью updateMesh объектная функция. Установите ограничения геозонирования с помощью addGeoFence возразите и проверяйте те пределы с помощью checkPermission объектная функция.

Создание

Описание

platform = uavPlatform(name,scenario) создает платформу с указанным именем name и добавляет его в сценарий в виде uavScenario объект. Задайте аргумент имени как строковый скаляр. Аргумент имени устанавливает Name свойство.

пример

platform = uavPlatform(name,scenario,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение". Можно задать свойства как аргументы пары "имя-значение" также. Например, uavPlatform("UAV1",scene,'StartTime',10) устанавливает начальное время для траектории платформы к 10 секундам. Заключите каждое имя свойства в кавычки

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'StartTime',10 устанавливает начальное время траектории платформы к 10 секундам.

Начальное время траектории платформы в виде разделенной запятой пары, состоящей из 'StartTime' и скаляр в секундах.

Типы данных: double

Начальное положение платформы для UAV в виде разделенной запятой пары, состоящей из 'InitialPosition' и вектор из формы [x y z]. Только задайте эту пару "имя-значение", не задав свойство Trajectory.

Типы данных: double

Начальная ориентация платформы для UAV в виде разделенной запятой пары, состоящей из 'InitialOrientation' и вектор из формы [w x y z], представление кватерниона. Только задайте эту пару "имя-значение", не задав свойство Trajectory.

Типы данных: double

Начальная скорость платформы для UAV в виде разделенной запятой пары, состоящей из 'InitialVelocity' и вектор из формы [vx vy vz]. Только задайте эту пару "имя-значение", не задав свойство Trajectory.

Типы данных: double

Начальное ускорение платформы для UAV в виде разделенной запятой пары, состоящей из 'InitialAcceleration' и вектор из формы [ax ay az]. Только задайте эту пару "имя-значение", не задав свойство Trajectory.

Типы данных: double

Начальная скорость вращения платформы для UAV в виде разделенной запятой пары, состоящей из 'InitialAngularVelocity' и трехэлементный вектор из формы [x y z]. Величина вектора задает угловую скорость в радианах в секунду. xyz - координаты задают ось по часовой стрелке вращения. Только задайте эту пару "имя-значение", не задав свойство Trajectory.

Типы данных: double

Траектория для движения платформы UAV в виде waypointTrajectory объект. По умолчанию платформа принята, чтобы быть стационарной и в начале координат. Чтобы переместить платформу в каждый шаг симуляции сценария, используйте move объектная функция.

Примечание

uavPlatform объект должен задать тот же ReferenceFrame свойство как заданный waypointTrajectory объект.

Система координат для вычисления движения платформы UAV в виде строкового скаляра, который совпадает с любой системой координат в uavScenario. Все движение платформы вычисляется относительно этой инерционной системы координат.

Типы данных: string

Свойства

развернуть все

Идентификатор для платформы UAV в виде строкового скаляра или вектора символов.

Пример: "uav1"

Типы данных: string | char

Траектория для движения платформы UAV в виде waypointTrajectory объект. По умолчанию объект принимает, что платформа является стационарной и в начале координат сценария. Чтобы переместить платформу в каждый шаг симуляции сценария, используйте move объектная функция.

Примечание

uavPlatform объект должен задать тот же ReferenceFrame свойство как заданный waypointTrajectory объект.

Система координат для вычисления движения платформы UAV в виде строкового скаляра или вектора символов, который совпадает с любой системой координат в uavScenario. Объект вычисляет все движение платформы относительно этой инерционной системы координат.

Типы данных: string | char

Тело платформы UAV сцепляется в виде extendedObjectMesh объект. Mesh тела описывает 3-D модель платформы в целях визуализации.

Цвет сетки тела платформы UAV, когда отображено в сценарии в виде триплета RGB.

Типы данных: double

Преобразуйте между телом платформы UAV и системой координат mesh в виде гомогенной матрицы преобразования 4 на 4, которая сопоставляет точки в системе координат mesh платформы к точкам в системе координат тела.

Типы данных: double

Датчики монтируются на платформе UAV в виде массива uavSensor объекты.

Ограничения геозабора для платформы UAV в виде массива структур с этими полями:

  • GeometryextendedObjectMesh объект, представляющий трехмерное пространство для геозабора в системе координат сценария.

  • Permission — Логический скаляр, который указывает, разрешена ли платформа в геозаборе (true) или не разрешенный (false).

Типы данных: double

Функции объекта

moveПереместите платформу UAV в сценарий
readСчитайте вектор движения UAV
updateMeshОбновите mesh тела для платформы UAV
addGeoFenceДобавьте географическое ограждение в платформу UAV
checkPermissionПроверяйте разрешение платформы UAV на основе геозонирования

Примеры

свернуть все

Создайте сценарий, чтобы симулировать рейсы беспилотного воздушного транспортного средства (UAV) между набором созданий. Пример демонстрирует обновление положения UAV в симуляциях разомкнутого контура. Используйте сценарий UAV, чтобы визуализировать рейс UAV и сгенерировать симулированные показания датчика облака точек.

Введение

Чтобы протестировать автономные алгоритмы, сценарий UAV позволяет вам сгенерировать тесты и сгенерировать данные о датчике из среды. Можно задать препятствия в рабочей области, обеспечить траектории БПЛА в глобальных координатах и преобразовать данные между координатными системами координат. Сценарий UAV позволяет вам визуализировать эту информацию в системе координат среды.

Создайте сценарий с сетками создания многоугольника

uavScenario объект является моделью, состоящей из набора статических препятствий, и подвижные объекты вызвали платформы. Используйте uavPlatform объекты смоделировать БПЛА фиксированного крыла, мультироторы и другие объекты в рамках сценария. Этот пример создает сценарий, состоящий из наземной плоскости и 11 созданий как вытесненными многоугольниками. Данные о многоугольнике для созданий загружаются и используются, чтобы добавить сетки многоугольника.

% Create the UAV scenario.
scene = uavScenario("UpdateRate",2,"ReferenceLocation",[75 -46 0]);

% Add a ground plane.
color.Gray = 0.651*ones(1,3);
color.Green = [0.3922 0.8314 0.0745];
color.Red = [1 0 0];
addMesh(scene,"polygon",{[-250 -150; 200 -150; 200 180; -250 180],[-4 0]},color.Gray)

% Load building polygons.
load("buildingData.mat");

% Add sets of polygons as extruded meshes with varying heights from 10-30.
addMesh(scene,"polygon",{buildingData{1}(1:4,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{2}(2:5,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{3}(2:10,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{4}(2:9,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{5}(1:end-1,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{6}(1:end-1,:),[0 15]},color.Green)
addMesh(scene,"polygon",{buildingData{7}(1:end-1,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{8}(2:end-1,:),[0 10]},color.Green)
addMesh(scene,"polygon",{buildingData{9}(1:end-1,:),[0 15]},color.Green)
addMesh(scene,"polygon",{buildingData{10}(1:end-1,:),[0 30]},color.Green)
addMesh(scene,"polygon",{buildingData{11}(1:end-2,:),[0 30]},color.Green)

% Show the scenario.
show3D(scene);
xlim([-250 200])
ylim([-150 180])
zlim([0 50])

Figure contains an axes object. The axes object contains 12 objects of type patch.

Задайте платформу UAV и смонтируйте датчик

Можно задать uavPlatform в сценарии как несущая ваших моделей датчика и управляют ими через сценарий, чтобы собрать симулированные данные о датчике. Можно сопоставить платформу с различными сетками, такими как fixedwing, quadrotor, и cuboid сетки. Можно задать заданные единицы пользовательской mesh, представленные вершинами и поверхностями. Задайте систему координат для описания движения вашей платформы.

Загрузите полетные данные в рабочую область и создайте quadrotor платформу с помощью системы координат NED. Задайте исходное положение и ориентацию на основе загруженных данных логов рейса. Настройка системы координат тела UAV ориентирует ось X, столь же положительную форварду, ось Y как правильно-положительный, и нисходящая положительная ось z.

load("flightData.mat")

% Set up platform
plat = uavPlatform("UAV",scene,"ReferenceFrame","NED", ...
    "InitialPosition",position(:,:,1),"InitialOrientation",eul2quat(orientation(:,:,1)));

% Set up platform mesh. Add a rotation to orient the mesh to the UAV body frame.
updateMesh(plat,"quadrotor",{10},color.Red,[0 0 0],eul2quat([0 0 pi]))

Можно принять решение смонтировать различные датчики, такие как insSensor, gpsSensor, или uavLidarPointCloudGenerator Системные объекты к вашему UAV. Смонтируйте генератор облака точек лидара и uavSensor объект, который содержит модель датчика лидара. Задайте монтирующееся местоположение датчика, который является относительно системы координат тела UAV.

lidarmodel = uavLidarPointCloudGenerator("AzimuthResolution",0.3324099,...
    "ElevationLimits",[-20 20],"ElevationResolution",1.25,...
    "MaxRange",90,"UpdateRate",2,"HasOrganizedOutput",true);

lidar = uavSensor("Lidar",plat,lidarmodel,"MountingLocation",[0,0,-1]);

Управляйте платформой UAV вдоль предопределенной траектории и соберите показания датчика облака точек

Переместите UAV вдоль предопределенной траектории и соберите показания датчика лидара по пути. Эти данные могли использоваться, чтобы протестировать основанные на лидаре алгоритмы отображения и локализации.

Предварительно выделите traj и scatterPlot линейные графики и затем задают специфичные для графика источники данных. Во время симуляции uavScenario, используйте обеспеченный plotFrames выведите от сцены как родительские оси, чтобы визуализировать ваши данные о датчике в правильных координатных системах координат.

Визуализируйте сцену.

[ax,plotFrames] = show3D(scene);

Обновите представление графика для лучшей видимости.

xlim([-250 200])
ylim([-150 180])
zlim([0 50])
view([-110 30])
axis equal
hold on

Постройте график для траектории. Сначала создайте график с plot3, затем вручную измените свойства источника данных графика. Это улучшает производительность графического вывода.

traj = plot3(nan,nan,nan,"Color",[1 1 1],"LineWidth",2);
traj.XDataSource = "position(:,2,1:idx+1)";
traj.YDataSource = "position(:,1,1:idx+1)";
traj.ZDataSource = "-position(:,3,1:idx+1)";

Создайте график рассеивания для облака точек. Обновите свойства источника данных снова.

colormap("jet")
pt = pointCloud(nan(1,1,3));
scatterplot = scatter3(nan,nan,nan,1,[0.3020 0.7451 0.9333],...
    "Parent",plotFrames.UAV.Lidar);
scatterplot.XDataSource = "reshape(pt.Location(:,:,1),[],1)";
scatterplot.YDataSource = "reshape(pt.Location(:,:,2),[],1)";
scatterplot.ZDataSource = "reshape(pt.Location(:,:,3),[],1)";
scatterplot.CDataSource = "reshape(pt.Location(:,:,3),[],1) - min(reshape(pt.Location(:,:,3),[],1))";

Настройте симуляцию. Затем выполните итерации через положения и покажите сцене каждый раз обновления датчика лидара. Усовершенствуйте сцену, переместите платформу UAV и обновите датчики.

setup(scene)
for idx = 0:size(position, 3)-1
    [isupdated,lidarSampleTime, pt] = read(lidar);
    if isupdated
        % Use fast update to move platform visualization frames.
        show3D(scene,"Time",lidarSampleTime,"FastUpdate",true,"Parent",ax);
        % Refresh all plot data and visualize.
        refreshdata
        drawnow limitrate
    end
    % Advance scene simulation time and move platform.
    advance(scene);
    move(plat,[position(:,:,idx+1),zeros(1,6),eul2quat(orientation(:,:,idx+1)),zeros(1,3)])
    % Update all sensors in the scene.
    updateSensors(scene)
end
hold off

Figure contains an axes object. The axes object contains 15 objects of type patch, scatter, line.

Смотрите также

Функции

Объекты

Введенный в R2020b