主要内容

无人机场景教程

创建一个场景来模拟一组建筑物之间的无人机(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(场景,“多边形”,{buildingData{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(场景,“多边形”,{buildingData{4}(2:9,:),[0 30]},color.Green)addMesh(场景,“多边形”,{buildingData{5}(1:end-1,:),[0 30]},color.Green)addMesh(场景,“多边形”,{buildingData{6}(1:end-1,:),[0 15]},color.Green)addMesh(场景,“多边形”,{buildingData{7}(1:end-1,:),[0 30]},color.Green)addMesh(场景,“多边形”,{buildingData{8}(2:end-1,:),[0 10]},color.Green)addMesh(场景,“多边形”,{buildingData{9}(1:end-1,:),[0 15]},color.Green)addMesh(scene,“多边形”,{buildingData{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平台在场景中作为传感器模型的载体,并驱动它们在场景中收集模拟传感器数据。可以将平台与各种网格关联,例如固定翼,四转子长方体网格。可以定义由顶点和面表示的自定义网格定义的网格。指定用于描述平台运动的参考框架。

将飞行数据加载到工作空间中,并使用NED参考框架创建四旋翼平台。根据加载的飞行日志数据指定初始位置和方向。UAV机身框架的配置将引导x-轴为正向正时Y-轴为右正,而Z-轴向下正。

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

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

lidarmodel=uavLidarPointCloudGenerator(“方位角解”,0.3324099,...“高度限制”,[-20 20],“提升分辨率”,1.25,...“最大范围”,90,“更新速率”2.“已组织输出”,真);激光雷达=无人机传感器(“激光雷达”,平台,利达莫德,“安装位置”,[0,0,-1]);

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

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

预先分配特拉伊散点图线图,然后指定特定于图的数据源乌瓦塞纳里奥,请使用提供的图框将场景输出为父轴,以在正确的坐标帧中可视化传感器数据。

将场景形象化。

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

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

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

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

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=点云(nan(1,1,3));散点图=散点3(nan,nan,nan,1,[0.3020 0.7451 0.9333],...“家长”无人机、激光雷达);scatterplot.XDataSource=重塑(零件位置(:,:,1),[],1);scatterplot.YDataSource=重塑(零件位置(:,:,2),[],1);scatterplot.ZDataSource=重塑(零件位置(:,:,3),[],1);scatterplot.CDataSource=“重塑(零件位置(:,:,3),[],1)-min(重塑(零件位置(:,:,3),[],1))”;

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

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

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