Создать сценарий для имитации полетов беспилотных летательных аппаратов (БЛА) между комплексом зданий. Пример демонстрирует обновление позы БПЛА при моделировании с разомкнутым контуром. Использовать сценарий БПЛА для визуализации полета БПЛА и формирования смоделированных показаний датчиков облаков точек.
Введение
Для тестирования автономных алгоритмов сценарий БПЛА позволяет генерировать тестовые примеры и генерировать данные датчиков из окружающей среды. Можно задать препятствия в рабочем пространстве, предоставить траектории БПЛА в глобальных координатах и преобразовать данные между координатными кадрами. Сценарий БПЛА позволяет визуализировать эту информацию в опорной системе окружения.
Создание сценария с помощью полигональных строительных сетей
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])Определение платформы БПЛА и монтируемого датчика
Можно определить uavPlatform в сценарии в качестве носителя моделей датчиков и прогонять их по сценарию для сбора смоделированных данных датчиков. Платформу можно связать с различными сетками, например: fixedwing, quadrotor, и cuboid сетки. Можно определить пользовательские определяемые сети, представленные вершинами и гранями. Укажите опорную рамку для описания движения платформы.
Загрузите полетные данные в рабочее пространство и создайте квадроторную платформу с помощью системы координат NED. Укажите исходное положение и ориентацию на основе загруженных данных полетного журнала. Конфигурация корпуса БПЛА ориентирует ось X как прямую положительную, ось Y как правую положительную, а ось Z - вниз положительную.
Можно установить различные датчики, например, insSensor, gpsSensor, или uavLidarPointCloudGenerator Система возражает против вашего БПЛА. Монтаж генератора облака точек лидара и uavSensor объект, содержащий модель лидарного датчика. Укажите место установки датчика относительно корпуса БПЛА.
Полет платформы БПЛА по заданной траектории и сбор показаний датчика облака точек
Переместите БПЛА по заранее заданной траектории и по пути соберите показания датчика лидара. Эти данные можно использовать для тестирования алгоритмов отображения и локализации на основе лидара.
Предварительно распределить 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