主要内容

UAV方案教程

创建一种情况来模拟一组建筑物之间的无人驾驶飞行(UAV)航班。示例恶魔音符在开环模拟中更新UAV姿势。使用UAV方案可视化UAV飞行并生成模拟点云传感器读数。

介绍

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

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

一个Uavscenario.对象是由一组静态障碍物和可移动对象组成的模型,称为平台。采用Uavplatform.对象以模拟Fixed-Wing UVS,MultiOrotors和方案中的其他对象。该示例构建由接地平面和11个建筑物组成的场景,如挤出的多边形。装入建筑物的多边形数据并用于添加多边形网格。

%创建UAV方案。场景= UAVSCENARIO(“updaterate”2,“推荐”,[75-46 0]);%添加一个地面平面。color.gray = 0.651 *那些(1,3);color.green = [0.3922 0.8314 0.0745];color.red = [1 0 0];addmesh(场景,“多边形”,{[ -  250 -150;200 -150;200180;-250 180],[ -  4 0]},color.gray)%负载建筑多边形。加载(“buildingdata.mat”);%将多边形添加为挤出网格,从10-30之间的不同高度。addmesh(场景,“多边形”,{buildingdata {1}(1:4,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildionData {2}(2:5,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildionData {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(场景,“多边形”,{buildingdata {6}(1:end-1,:),[0 15]},color.green)addmesh(场景,“多边形”,{buildingdata {7}(1:end-1,:),[0 30]},color.green)地址(场景,“多边形”,{buildionData {8}(2:结束-1,:),[0 10]},Color.Green)AddMesh(场景,“多边形”,{buildingdata {9}(1:end-1,:),[0 15]},color.green)addmesh(场景,“多边形”,{buildionData {10}(1:end-1,:),[0 30]},color.green)addmesh(场景,“多边形”,{buildionData {11}(1:端2,:),[0 30]},color.green)%显示了方案。show3d(现场);XLIM([ -  250 200])ylim([ -  150 180])zlim([0 50])

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

定义UAV平台和安装传感器

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

将飞行数据加载到工作区中,并使用NED参考帧创建四轮电机平台。根据加载的飞行日志数据指定初始位置和方向。UAV Body Frame Orient的配置X-axis作为前瞻性,y- 轴是右阳性的,而且Z.-axis向下积极。

加载(“flightdata.mat”%设置平台平台= UAVPLATFORM(“uav”,场景,“参考范围”“ned”......“初始位置”,位置(::,1),“初始化”,Eul2quat(方向(:,:,1)));%设置平台网格。添加旋转以使网格定向到UAV车身框架。更新(平台,“Quadrotor”,{10},color.red,[0 0],Eul2quat([0 0 pi]))

您可以选择安装不同的传感器,例如担任者GPSSensor., 或者UavlidarPointCloudGenerator.系统对象到您的UAV。安装LIDAR点云发生器和一个uavsensor包含LIDAR传感器模型的对象。指定相对于UAV车身帧的传感器的安装位置。

Lidarmodel = UavlidarPointCloudGenerator(“azimuthresolution”,0.3324099,......“升降边缘”,[ -  20 20],“海拔资格”,1.25,......“maxrange”90,“updaterate”2,“哈罗格兰灭绝”,真的);LIDAR = Uavsensor(“lidar”,平台,lidarmodel,“mountinglocation”,[0,0,-1]);

沿预定义的轨迹飞行UAV平台并收集点云传感器读数

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

预先匹配这一点traj.散点图线条图然后指定特定于绘图的数据源。在模拟期间Uavscenario.,使用提供的绘图框架从场景输出作为父轴以在正确的坐标帧中可视化传感器数据。

%可视化场景[Ax,PlotFrams] = Show3D(场景);%更新绘图视图以获得更好的可见性。XLIM([ -  250 200])ylim([ -  150 180])zlim([0 50])视图([ -  110 30])轴平等的抓住%为轨迹创建一个线绘图。traj = plot3(南,南,南,“颜色”,[1 1 1],“行宽”,2);traj.xdatasource =“位置(:,1,1:IDX + 1)”;traj.ydatasource =“位置(:,2,1:IDX + 1)”;traj.zdatasource =“位置(:,3,1:IDX + 1)”;%为点云创建一个散点图。Colormap(“喷射”)pt = pointcloud(nan(1,1,3));散点图=散射3(NaN,NaN,NaN,1,[0.3020 0.7451 0.9333],......“父母”,plotframes.uav.lidar);scaysplot.xdatasource =“重塑(Pt.Location(::,:1),[],1)”;scatterplot.ydatasource =.“重塑(Pt.Location(:,:,2),[],1)”;scaysplot.zdatasource =.“重塑(Pt.Location(::,:3),[],1)”;scaysplot.cdatasource =“重塑(Pt.Location(::,3),[],1) -  min(重塑(pt.location(pt.location(:,:3),[],1))”;%开始模拟设置(场景)为了idx = 0:大小(位置,3)-1 [iSupdated,lidarsampleTime,pt] =读取(lidar);如果iSupdated.%使用快速更新来移动平台可视化帧。show3d(场景,“时间”,Lidarsampletime,“fastupdate”,真的,“父母”,斧头);%刷新所有绘图数据并可视化。Refreshdata绘制了限制结尾%提前场景仿真时间和移动平台。推进(场景);移动(平台,[位置(:,:,idx + 1),零(1,6),eul2quat(方向(::,:,idx + 1)),零(1,3)])%更新场景中的所有传感器。更新(场景)结尾抓住离开

图包含轴。轴包含15个类型的贴片物体,散射,线。