主要内容

无人机场景教程

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

介绍

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

使用多边形建筑网格创建场景

A.乌瓦塞纳里奥对象是由一组静态障碍物和可移动对象组成的模型,称为平台。用UAV平台对象来模拟固定翼无人机,多电位器和场景中的其他对象。该示例构建由接地平面和11个建筑物组成的场景,如挤出的多边形。装入建筑物的多边形数据并用于添加多边形网格。

%创建无人机场景。场景=uavScenario(“更新速率”2,“推荐”,[75 -46 0]);%添加一个地面平面。color.Gray=0.651*one(1,3);color.Green=[0.3922 0.8314 0.0745];color.Red=[1 0];addMesh(场景,“多边形”,{[-250-150;200-150;200180;-250180],-40]},颜色.灰色)%负载建筑多边形。装载(“buildingData.mat”);%将多边形组添加为挤出网格,从10-30的不同高度。addMesh(场景,“多边形”,{buildionData {1}(1:4,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildingData{2}(2:5,:),[0 30]},color.Green)addMesh(场景,“多边形”,{buildingData{3}(2:10,:),[0 30]},color.Green)addMesh(场景,“多边形”,{buildionData {4}(2:9,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildionData {5}(1:end-1,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildionData {6}(1:端1,:),[0 15]},Color.Green)AddMesh(场景,“多边形”,{buildingData{7}(1:end-1,:),[0 30]},color.Green)addMesh(场景,“多边形”,{buildionData {8}(2:结束-1,:),[0 10]},color.green)addmesh(场景,“多边形”,{buildionData {9}(1:端1,:),[0 15]},Color.Green)AddMesh(场景,“多边形”,{buildionData {10}(1:end-1,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildingData{11}(1:end-2,:),[0 30]},color.Green)%显示了方案。show3D(场景);xlim([-250 200])ylim([-150 180])zlim([0 50])

图包含轴对象。轴对象包含12个类型的贴片物体。

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

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

将飞行数据加载到工作区中,并使用NED参考帧创建四轮电机平台。根据加载的飞行日志数据指定初始位置和方向。UAV Body Frame Orients的配置x-轴为正向正时Y-轴为右正,而Z-轴向下正。

装载(“flightData.mat”)%搭建平台平台= Uavplatform(“uav”,场景,“参考框架”,“ned”,...“初始位置”,位置(::,1),“初始方向”,Eul2quat(方向(:,:,1)));%设置平台网格。添加旋转以将网格定向到无人机机身框架。更新(平台,“四转子”,{10},color.Red,[0 0],eul2quat([0 0 pi]))

您可以选择安装不同的传感器,例如INS传感器,GPSSensor.uavLidarPointCloudGenerator系统对象到您的UAV。安装LIDAR点云发生器和一个无人机传感器包含激光雷达传感器型号的对象。指定传感器相对于无人机机身框架的安装位置。

lidarmodel=uavLidarPointCloudGenerator(“azimuthresolution”,0.3324099,...“高度限制”,[-20 20],“海拔挑解”,1.25,...“最大范围”,90,“更新速率”2,“哈罗格兰灭绝”,真);激光雷达=无人机传感器(“激光雷达”,平台,利达莫德,“mountinglocation”,[0,0,-1]);

沿预定义轨迹驾驶UAV平台并收集点云传感器读数

沿着预定义的轨迹移动UAV,并沿途收集LIDAR传感器读数。该数据可用于测试基于LIDAR的映射和本地化算法。

预先分配traj.散点图线图,然后指定特定于绘图的数据源。在模拟期间乌瓦塞纳里奥,请使用提供的plotframs.从场景输出作为父轴,以在正确的坐标帧中可视化您的传感器数据。

可视化场景。

[AX,PlotFrams] = Show3D(场景);

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

xlim([-250 200])ylim([-150 180])zlim([0 50])视图([-110 30])轴相同的持有

创建轨迹的直线图。首先使用Plot3.,然后手动修改绘图的数据源属性。这将提高绘图的性能。

Traj = Plot3(Nan,Nan,Nan,“颜色”,[1 1 1],“行宽”,2);traj.XDataSource=位置(:,2,1:idx+1);traj.ydatasource =位置(:,1,1:idx+1);traj.zdatasource =-位置(:,3,1:idx+1);

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

彩色地图(“喷射”)pt = pointcloud(nan(1,1,3));散点图=散射3(NaN,NaN,NaN,1,[0.3020 0.7451 0.9333],...“父母”无人机、激光雷达);scatterplot.XDataSource=“重塑(Pt.Location(::,1),[],1)”;scaysplot.ydatasource =重塑(零件位置(:,:,2),[],1);scatterplot.ZDataSource=“重塑(pt.location(::,:3),[],1)”;scatterplot.CDataSource=“重塑(零件位置(:,:,3),[],1)-min(重塑(零件位置(:,:,3),[],1))”;

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

设置(场景)对于idx=0:size(position,3)-1[isupdated,lidarSampleTime,pt]=read(lidar);如果更新%使用快速更新移动平台可视化框架。show3D(场景,“时间”,lidarSampleTime,“快速更新”符合事实的“父母”,斧头);%刷新所有绘图数据并可视化。立即刷新数据限制终止%提前场景模拟时间和移动平台。推进(场景);移动(平台,[位置(:,idx + 1),零(1,6),eul2quat(方向(:,:,idx + 1)),零(1,3)])%更新场景中的所有传感器。更新传感器(场景)终止持有离开

图中包含一个Axis对象。Axis对象包含15个patch、District和line类型的对象。