uavPlatform

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

Описание

The uavPlatform объект представляет собой платформу беспилотного летательного транспортного средства (БПЛА) в заданном сценарии БПЛА. Используйте платформу, чтобы определить и отследить траекторию БПЛА в сценарии. Чтобы симулировать показания датчика для платформы, монтируйте такие датчики, как 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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

Свойства

расширить все

Идентификатор платформы БПЛА, заданный как строковый скаляр или вектор символов.

Пример: "uav1"

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

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

Примечание

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

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

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

Корпус платформы БПЛА mesh в виде extendedObjectMesh объект. Mesh тела описывает 3-D модель платформы в целях визуализации.

Корпус платформы БПЛА mesh цвет при отображении в сценарии, заданный как триплет RGB.

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

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

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

Монтаж датчиков на платформе БПЛА, заданный как массив uavSensor объекты.

Ограничения геофенции для платформы БПЛА, заданные как массив структур с этими полями:

  • Geometry - An extendedObjectMesh объект, представляющий трехмерное пространство для геофенции в системе координат сценария.

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

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

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

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

Примеры

свернуть все

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

Введение

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

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

A 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. The axes contains 12 objects of type patch.

Определите платформу БПЛА и датчик монтажа

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

Загрузите данные о рейсе в рабочую область и создайте квадроторную платформу с помощью опорной системы координат NED. Задайте начальное положение и ориентацию на основе загруженных рейсов журнала данных. Строение каркаса кузова БПЛА ориентирует ось 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 Системные объекты вашего БПЛА. Монтируйте лидар облака точек генератор и uavSensor объект, который содержит модель датчика лидара. Укажите место установки датчика относительно каркаса кузова БПЛА.

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]);

Полет платформы БПЛА по предварительно определенной траектории и сбор показаний датчика облака точек

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

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

% Visualize the scene
[ax,plotFrames] = show3D(scene);

% Update plot view for better visibility.
xlim([-250 200])
ylim([-150 180])
zlim([0 50])
view([-110 30])
axis equal
hold on

% Create a line plot for the trajectory.
traj = plot3(nan,nan,nan,"Color",[1 1 1],"LineWidth",2);
traj.XDataSource = "position(:,1,1:idx+1)";
traj.YDataSource = "position(:,2,1:idx+1)";
traj.ZDataSource = "position(:,3,1:idx+1)";

% Create a scatter plot for the  point cloud.
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))";

% Start Simulation
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. The axes contains 15 objects of type patch, scatter, line.

Введенный в R2020b