Руководство по сценарию БПЛА

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

Введение

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

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

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.

Для просмотра документации необходимо авторизоваться на сайте