主要内容

无人机场景教程

创建一个场景来模拟无人驾驶飞行器(UAV)在一组建筑物之间飞行。该实例演示了在开环仿真中更新无人机姿态。使用无人机场景可视化无人机飞行并生成模拟点云传感器读数。

简介

为了测试自主算法,UAV场景允许您生成测试用例并从环境中生成传感器数据。您可以在工作空间中指定障碍物,在全局坐标中提供无人机的轨迹,并在坐标帧之间转换数据。UAV场景使您能够在环境的参考框架中可视化此信息。

用多边形构建网格创建场景

一个uavScenario物体是由一组静态障碍物和可移动物体(称为平台)组成的模型。使用uavPlatform对象来建模固定翼无人机,多旋翼和场景中的其他对象。这个示例构建了一个场景,由一个地面平面和11个挤压多边形组成。建筑物的多边形数据被加载并用于添加多边形网格。

创建UAV场景。scene = uavScenario(“UpdateRate”2,“ReferenceLocation”,[75 -46 0]);添加一个接平面。颜色。灰度= 0.651*ones(1,3);颜色。绿色= [0.3922 0.8314 0.0745];颜色。红色= [1 0 0];addMesh(场景,“多边形”, {(-250 -150;200 -150;200 180;-250 180],[-4 0]},color.Gray)加载构建多边形。负载(“buildingData.mat”);添加一组多边形作为挤压网格,高度从10-30不等。addMesh(场景,“多边形”, {buildingData {1} (1:4,:), 30 [0]}, color.Green) addMesh(场景,“多边形”, {buildingData {2} (2:5,:), 30 [0]}, color.Green) addMesh(场景,“多边形”,{buildingData{3}(2:10,:),[0 30]},color.Green)“多边形”, {buildingData {4} (2:9,:), 30 [0]}, color.Green) addMesh(场景,“多边形”,{buildingData{5}(1:end-1,:),[0 30]},color.Green)“多边形”,{buildingData{6}(1:end-1,:),[0 15]},color.Green)“多边形”,{buildingData{7}(1:end-1,:),[0 30]},color.Green)“多边形”,{buildingData{8}(2:end-1,:),[0 10]},color.Green)“多边形”,{buildingData{9}(1:end-1,:),[0 15]},color.Green)“多边形”,{buildingData{10}(1:end-1,:),[0 30]},color.Green)“多边形”, {buildingData {11} (1: end-2,:), 30 [0]}, color.Green)显示场景。show3D(现场);Xlim ([-250 200]) ylim([-150 180]) zlim([0 50])

图中包含一个轴对象。axis对象包含12个patch类型的对象。

定义无人机平台和安装传感器

你可以定义一个uavPlatform在场景中作为传感器模型的载体,并通过场景驱动它们来收集模拟传感器数据。您可以将平台与各种网格相关联,例如fixedwingquadrotor,长方体网格。您可以定义一个自定义网格定义的顶点和面表示。指定描述平台运动的参考系。

将飞行数据加载到工作空间,并使用NED参考框架创建一个四旋翼平台。根据装载的飞行日志数据指定初始位置和方向。无人机机体框架的配置方向x-轴为正,则y-轴为正,而z设在downward-positive。

负载(“flightData.mat”%搭建平台plat = uavPlatform(“无人机”场景,“ReferenceFrame”“内德”...“InitialPosition”位置(:,:1),“InitialOrientation”, eul2quat(取向(::1)));设置平台网格。添加一个旋转,以定位网格到无人机机体框架。updateMesh(平台,“quadrotor”{10},颜色。红色,[0 0 0],eul2quat([0 0 pi]))

您可以选择挂载不同的传感器,例如insSensorgpsSensor,或uavLidarPointCloudGenerator系统对象到你的无人机。安装一个激光雷达点云发生器和一个uavSensor对象,该对象包含激光雷达传感器模型。指定传感器相对于无人机机体框架的安装位置。

lidarmodel = uavLidarPointCloudGenerator“AzimuthResolution”, 0.3324099,...“ElevationLimits”20 [-20],“ElevationResolution”, 1.25,...“MaxRange”, 90,“UpdateRate”2,“HasOrganizedOutput”,真正的);激光雷达“激光雷达”、平台、lidarmodel“MountingLocation”[0, 0, 1]);

飞行无人机平台沿预先定义的轨迹和收集点云传感器读数

沿着预先定义的轨迹移动无人机,并沿途收集激光雷达传感器读数。这些数据可用于测试基于激光雷达的测绘和定位算法。

Preallocate的traj而且散点图绘制图形,然后指定特定于图形的数据源。在仿真过程中uavScenario,使用提供的plotFrames来自场景的输出作为父轴,以在正确的坐标框架中可视化传感器数据。

想象场景。

[ax,plotFrames] = show3D(场景);

更新图视图以获得更好的可视性。

Xlim ([-250 200]) ylim([-150 180]) zlim([0 50])视图([-110 30])轴平等的持有

为轨迹创建一个线形图。首先创建情节plot3,然后手动修改图的数据源属性。这提高了绘图的性能。

Traj = plot3(nan,nan,nan,“颜色”,[11 11 1],“线宽”2);traj。XDataSource =“位置(:2 1:idx + 1)”;traj。YDataSource =“位置(:,1,1:idx + 1)”;traj。ZDataSource =“-安置(:3 1:idx + 1)”

为点云创建散点图。再次更新数据源属性。

colormap (“喷气机”) pt = pointCloud(nan(1,1,3));Scatterplot = scatter3(nan,nan,nan,1,[0.3020 0.7451 0.9333],...“父”, plotFrames.UAV.Lidar);散点图。XDataSource =“重塑(pt.Location(:,: 1),[], 1)”;散点图。YDataSource =“重塑(pt.Location(:,: 2),[], 1)”;散点图。ZDataSource =“重塑(pt.Location(:,:, 3),[], 1)”;散点图。CDataSource =“重塑(pt.Location (:,:, 3), [], 1) - min(重塑(pt.Location(:,:, 3),[], 1))”

设置模拟。然后,迭代位置,并在每次激光雷达传感器更新时显示场景。推进场景,移动无人机平台,更新传感器。

设置(场景)idx = 0:size(position, 3)-1 [isupdated,lidarSampleTime, pt] = read(lidar);如果isupdated使用快速更新来移动平台可视化框架。show3D(场景,“时间”lidarSampleTime,“FastUpdate”,真的,“父”、ax);刷新所有绘图数据并可视化。refreshdata drawnowlimitrate结束%提前场景模拟时间和移动平台。推进(现场);(移动平台,位置(:,:,idx + 1), 0 (1,6), eul2quat(取向(:,:,idx + 1)), 0(1、3)))更新场景中的所有传感器。updateSensors(场景)结束持有

图中包含一个轴对象。axis对象包含patch、scatter、line类型的15个对象。

Baidu
map