主要内容

uavPlatform

用于场景传感器的无人机平台

描述

uavPlatform对象代表给定无人机场景中的无人机平台。利用该平台在场景中定义和跟踪无人机的轨迹。为了模拟平台的传感器读数,安装传感器,如gpsSensorinsSensor,uavLidarPointCloudGenerator平台的系统对象™为uavSensor对象。控件向平台添加一个主体网格,以实现可视化updateMesh对象的功能。属性设置地理围栏限制addGeoFence对象检查这些限制checkPermission对象的功能。

创建

描述

平台= uavPlatform (的名字场景创建具有指定名称的平台的名字并将其添加到指定为uavScenario对象。将name参数指定为字符串标量。name参数设置的名字财产。

例子

平台= uavPlatform (的名字场景名称,值使用一个或多个名称-值对参数指定选项。您还可以将属性指定为名称-值对参数。例如,uavPlatform(“UAV1”场景,“开始时间”,10)将平台轨迹的初始时间设置为10秒。将每个属性名用引号括起来

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“开始时间”,10将平台轨迹的初始时间设置为10秒。

平台轨迹的初始时间,指定为由逗号分隔的对组成“开始时间”一个以秒为单位的标量。UAV平台在弹道中第一个航路点的时间加上平台的开始时间开始跟随弹道。

数据类型:

UAV的初始平台位置,指定为逗号分隔的对,由“InitialPosition”和这个形式的向量[x y z].属性时,只指定此名-值对轨迹财产。

数据类型:

UAV的初始平台方向,指定为逗号分隔的对,由“InitialOrientation”和这个形式的向量[w x y z]表示四元数。属性时,只指定此名-值对轨迹财产。

数据类型:

无人机的初始平台速度,指定为逗号分隔的对,由“InitialVelocity”和这个形式的向量[vx vy vz].属性时,只指定此名-值对轨迹财产。

数据类型:

无人机的初始平台加速度,指定为逗号分隔的对,由“InitialAcceleration”和这个形式的向量[ax ay az].属性时,只指定此名-值对轨迹财产。

数据类型:

无人机的初始平台角速度,指定为逗号分隔的对,由“InitialAngularVelocity”和这样的三元素向量[x y z].矢量的大小以弧度/秒为单位定义角速度。的xyz-coordinates定义顺时针旋转的轴。属性时,只指定此名-值对轨迹财产。

数据类型:

无人机平台运动轨迹,指定为awaypointTrajectory对象。默认情况下,平台是静止的,在原点处。若要在场景的每个模拟步骤中移动平台,请使用移动对象函数。

请注意

uavPlatform对象必须指定相同的参数ReferenceFrame属性。waypointTrajectory对象。

计算无人机平台运动的参考系,指定为字符串标量,该参考系与uavScenario.所有平台运动都是相对于惯性系计算的。

数据类型:字符串

属性

全部展开

无人机平台的标识符,指定为字符串标量或字符向量。

例子:“uav1”

数据类型:字符串|字符

无人机平台运动轨迹,指定为awaypointTrajectory对象。默认情况下,对象假定平台是静止的,并且位于场景原点。若要在场景的每个模拟步骤中移动平台,请使用移动对象函数。

请注意

uavPlatform对象必须指定相同的参数ReferenceFrame属性。waypointTrajectory对象。

计算无人机平台运动的参考系,指定为字符串标量或字符向量,它匹配中的任何参考系uavScenario.物体计算相对于这个惯性系的所有平台运动。

数据类型:字符串|字符

无人机平台体网,指定为extendedObjectMesh对象。主体网格描述了平台的三维模型,以实现可视化。

无人机平台主体网格颜色在场景显示时,指定为RGB三元组。

数据类型:

UAV平台主体和网格框架之间的转换,指定为将平台网格框架中的点映射到主体框架中的点的4 × 4齐次变换矩阵。

数据类型:

传感器安装在无人机平台上,指定为阵列uavSensor对象。

无人机平台的地理围栏限制,指定为具有这些字段的结构数组:

  • 几何——一个extendedObjectMesh对象,表示场景框架中地理围栏的三维空间。

  • 许可-逻辑标量,指示平台是否允许进入地理围栏(真正的)或不允许().

数据类型:

对象的功能

移动 移动场景中的无人机平台
读取无人机运动矢量
updateMesh 更新无人机平台的机身网格
addGeoFence 为无人机平台增加地理围栏
checkPermission 基于地理围栏的无人机平台权限检查

例子

全部折叠

创建一个场景来模拟无人驾驶飞行器(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个对象。

版本历史

R2020b中介绍