主要内容

用于机场地面监视的激光雷达扩展目标跟踪

停机坪是机场内为容纳飞机装卸旅客、邮件或货物、加油、停车或维修而划定的区域。机场停机坪通常是高度动态和异质性的环境,停机坪人员和车辆相互靠近操作。由于停机坪的这种性质,涉及飞机和地面人员的地面操作事故的风险更高。摘要基于激光雷达的围护区监测系统是一种改善围护区现状的有效方法,也是缓解围护区[2]高风险的有效措施。

这个示例向您展示了如何使用GGIW-PHD (Gamma Gaussian Inverse Wishart PHD)扩展目标跟踪器模拟机场交通场景和跟踪地面交通的激光雷达数据。

设置场景

在本例中,您将模拟飞机进入登机口区域的场景。飞机由三名编组员引导进入其停车场,飞机两侧各一名,前方各一名。模拟飞机停车点附近的地面交通。飞机停放后,地面交通和编组员开始向飞机移动。除了飞机进入登机口区域外,还可以模拟已经停在登机口的两架飞机。本例中使用的场景是使用跟踪场景设计师并导出到MATLAB®函数,与下游功能连接。在MATLAB中对导出的函数进行了修改,以确定属性为每个平台和完成轨迹到场景结束时间。的财产的平台允许您定义用于激光雷达模拟的平台的几何形状。在本例中,您将飞行器的几何形状指定为tracking.scenario.airplaneMesh.场景中的其他物体用长方体表示。有关如何创建场景的详细信息,请参阅创建场景函数在本例末尾。

场景= createScenario;

要感知现场,你要使用一个360度视野的激光雷达传感器monostaticLidarSensor系统对象™. 传感器有64个仰角通道,安装在距离地面8米的终端上。传感器的方位分辨率定义为0.32度。在此配置下,传感器每次扫描总共产生72000个点。此高分辨率数据点集通常称为点云。来自t通过指定更新的传感器。

创建一个激光雷达传感器激光雷达= monostaticLidarSensor (...“SensorIndex”,1,...“UpdateRate”5,...“之内”,真的,...“AzimuthLimits”(-180 180),...“ElevationLimits”, -10年[27],...“AzimuthResolution”, 0.32,...“提升分辨率”, 0.5781,...“DetectionCoordinates”,“情景”,...“MountingLocation”(-15 8),...“MountingAngles”(-90 0 0),...“MaxRange”, 150,...“测距精度”, 0.002);%获得终端平台的访问权限终端= scenario.Platforms {1};在平台上安装激光雷达终端。传感器=激光雷达;

在下面的动画中,你可以从鸟瞰以及从航站楼的屋顶观察场景和模拟激光雷达数据。点云由有颜色的点表示,颜色随高度从蓝色变为黄色。请注意,激光雷达返回包含来自环境的反射,如地面。

您还可以在动画中观察到,激光雷达传感器返回每个对象的多个测量值。传统的多目标跟踪器,如trackerGNN(GNN)跟踪器,trackerJPDA(JPDA)跟踪器假设每个传感器报告一个测量对象。为了使用传统的跟踪器利用激光雷达跟踪目标,潜在目标的点云通常被预处理并聚类成新型的测量值。这些新的测量通常定义对象的位置和维度方面,例如,边界盒测量。有关使用带有激光雷达数据的传统跟踪器的完整工作流,请参阅用激光雷达追踪车辆:从点云到轨迹表的例子。这种将激光雷达数据分割并聚类成包围盒的工作流程,当目标距离太近时,容易出现聚类缺陷。在停机坪环境中尤其如此。使用激光雷达数据跟踪目标的另一种方法是使用扩展目标跟踪器。与传统跟踪器不同,扩展目标跟踪器被设计用于跟踪每个传感器产生多个测量值的对象。

设置扩展对象跟踪器和性能指标

扩展目标跟踪器

在本例中,您使用了一个概率假设密度(PHD)跟踪器的GGIW (Gamma Gaussian Inverse Wishart)实现。该GGIW模型使用三种分布来指定目标模型:高斯分布描述目标运动中心的位置和速度等运动学;用逆Wishart (IW)分布描述目标的椭球面范围;伽马分布用来描述来自目标的预期测量数。有关GGIW-PHD过滤器的更多细节,请参阅[3]。

扩展对象PHD跟踪器使用分区算法处理输入测量集。一个分割算法负责为传感器测量指定多个可能的分割假设。由于分割的总假设数通常是非常大的,近似技术,如距离分割(见partitionDetections)、预测划分和期望最大化(EM)是[3]的常用方法。距离划分算法的工作原理类似于基于距离的聚类技术,不同之处在于它会产生多个可能的分区。预测-划分和EM算法使用来自跟踪器的关于目标的预测来帮助将测量数据划分为多个可能的簇。当物体在空间上彼此接近时,例如在一个围裙环境中,这种使用跟踪器预测的技术是必不可少的。在本例中,您使用了一个助手类helperPartitioningAlgorithm使用跟踪器的预测来划分测量集。你可以利用predictTracksToTime的函数trackerPHD

一个句柄对象,用于将预测的轨迹传递给分区算法瓜分者= helperPartitioningAlgorithm;%将检测作为输入并返回分区的函数partitioningFcn = @(检测)partitionDetections(分割者,检测);

要设置PHD跟踪器,首先使用trackingSensorConfiguration对象。使用模拟激光雷达传感器的属性来指定配置的属性。您还可以定义一个函数初始化过滤器,初始化一个恒定速度ggiwphd过滤器。这个函数围绕着initcvggiwphd提高了目标的Gamma分布和逆Wishart分布的确定性。通过指定,它还将过滤器配置为工作于大量检测MaxNumDetectionsggiwphd滤波器的特性。

传感器的视场定义与返回的顺序相同%由传感器的变换功能= [lidar.AzimuthLimits;lidar.ElevationLimits;0];传感器分辨率的定义顺序与极限相同sensorResolution = [lidar.AzimuthResolution; lidar.ElevationResolution lidar.MaxRange];通过变换函数变换轨道状态的参数。trackToSensorTransform =结构(“帧”,“球形”,...“OriginPosition”lidar.MountingLocation (:)...“定位”rotmat(四元数(激光雷达。MountingAngles,“欧勒德”,“ZYX”,“帧”),“帧”),...“IsParentToChild”,真的,...“HasVelocity”、假);%该传感器启动PHD滤波器的功能filterInitFcn = @initFilter;配置= trackingSensorConfiguration (1,...“IsValidTime”,真的,...在每个步骤调用上用传感器更新“FilterInitializationFcn”filterInitFcn,...函数用于初始化PHD筛选器“传感器转换FCN”,@cvmeas,...从状态到az,el,r的转换函数“SensorTransformParameters”trackToSensorTransform,...%变换函数的参数“SensorLimits”sensorLimits,...“SensorResolution”sensorResolution,...“DetectionProbability”, 0.95...侦测目标的机率);

接下来,组装这些信息并使用trackerPHD系统对象™。

追踪= trackerPHD (“传感器配置”,config,...“PartitioningFcn”,分区,...“AssignmentThreshold”30岁的...% -log-likelihood,超过这个值测量单元将初始化新组件“确认阈值”, 0.9,...%将组件称为已确认跟踪的阈值“提取阈值”,0.75,...将组件调用为跟踪的阈值“MergingThreshold”25岁的...%合并具有相同标签的组件的阈值“三重标签”,[1.1 0.1 0.05]);%防止track-splitting

韵律学

接下来,使用trackGOSPAMetric类来评估跟踪器的性能。GOSPA指标旨在通过提供单一成本值来分析跟踪器的性能。成本值越低,跟踪性能越好。为了使用GOSPA度量,在轨道和真值之间定义了一个距离函数。这个距离函数计算为彼此分配轨迹和真值的代价。它也用于表示估计的定位或轨迹级精度。在这个例子中,轨迹和真值之间的距离是用“自定义”距离函数trackTruthDistance,包括在金宝app支持功能在下面。在GGIW-PHD跟踪器估计几何中心时,自定义距离函数使用平台几何中心的位置来定义位置误差。

gospaObj=轨道gospaametric(“距离”,“自定义”,“DistanceFcn”,@tracktruth距离);

您可以使用一个助手类helperAirportTrackingDisplay可视化地面实况、模拟数据和估计轨迹。

显示= helperAirportTrackingDisplay;

运行场景和跟踪器

接下来,运行场景,模拟激光雷达传感器的返回,并使用跟踪器处理它们。您还可以使用可用的地面真实值计算轨道的GOSPA度量。本例假设已经对激光雷达数据进行预处理,以去除来自地面和终端等环境的激光雷达回波。因此,使用激光雷达返回的模拟中可用的地面真实信息从环境中返回。

%初始化跟踪confTracks=struct.empty(0,1);%用于度量的地面真理平台= scenario.Platforms;trackable平台=平台(cellfun(@(x)x. classid,平台)> 0);初始化度量值gospaMetrics = 0 (0, 4);%音轨记录的MATLAB vs MEXnumTrackML=零(0,1);%预先设想提前(场景)时间=场景.SimulationTime;%在终端上调用lidarDetect模拟点云返回。[ptCloud,~,groundTruthIdx]=激光雷达(终端,时间);% Pack返回为objectDetection。包含在支持功能中金宝appdetections = packAsObjectDetection(ptCloud, groundTruthIdx, time);%为预测分区提供预测轨道如果isLocked(tracker) predictedTracks = predictTracksToTime(tracker,“所有”、时间);瓜分者。PredictedTrackList = predictedTracks;结束%使用检测和时间调用跟踪器步骤confTracks = tracker(检测,时间);%计算OSPA度量truthStruct=cellfun(@(x)x.pose,可跟踪平台);[~,gospa,~,loc,missT,falseT]=gospaObj(confTracks,可跟踪平台);gospaMetrics(end+1,:)=[gospa loc missT falseT];% #好< SAGROW >%更新显示显示(场景、ptCloud confTracks);结束

结果

接下来,您将使用可视化和定量度量来评估每个跟踪器的性能。在下面的动画中,轨道由蓝色方块表示,并根据它们的身份进行了注释(曲目识别).T物体周围的椭球描述了由GGIW-PHD滤波器估计的范围。

跟踪维护

在飞机停好之前,跟踪器能够跟踪所有物体,除了飞机右侧的编组员。这是因为编组器在初始位置时没有被传感器发现。飞行器停好后,跟踪器能够对物体的运动做出反应,以估计其位置和速度。该跟踪器能够对所有物体保持跟踪长达约34秒。在那之后,左边的编组器被阻挡在飞机喷气发动机后面,它的轨迹被跟踪器因为多次失误而丢弃。当地面交通接近飞机时,跟踪器能够将它们作为单独的物体进行跟踪,不会将它们的测量值混淆。这是可能的,因为跟踪器对对象的预测有助于正确划分测量集。

您还可以使用GOSPA指标及其组件定量地分析跟踪器的性能。注意,度量的假轨道分量仍然为零,这表明没有确认假轨道。非零缺失目标组件表示未检测到的编组程序。注意,一旦跟踪器在该对象上建立了一个跟踪,组件就会降到零。错过的目标分量再次上升到一个非零值,这表示由于目标遮挡造成的轨迹下降。

图;订单= [“总GOSPA”,“定位”,“错过了目标”,“假轨迹”];I = 1:4 ax = subplot(2,2, I);情节(gospaMetrics(:,我)“线宽”2);标题(订单(i));包含(“时间”);ylabel (“指标”);网格;结束

图中包含4个轴对象。标题为Total GOSPA的轴对象1包含一个类型为line的对象。标题为本地化的轴对象2包含一个类型为line的对象。带有标题Missed Target的轴对象3包含一个类型为line的对象。标题为False Tracks的轴对象4包含一个类型为line的对象。

Track-level准确性

轨迹级精度是指对每个物体的位置、速度和尺寸等状态的估计精度。你可以观察到这些轨迹是真实存在于地面上的物体。当物体开始运动时,速度矢量被绘制出来,表示速度的方向和大小。注意,估计的速度与物体的运动方向相同。GGIW-PHD滤波器假设来自目标的测量值分布在目标估计的椭球面范围内。这导致过滤器使用对象的可观察区域或非遮挡区域来估计对象的大小。注意,在停放的地面车辆的轨道有一个偏移,在他们的位置对可观察的侧面。

还可以使用GOSPA度量的定位分量定量估计航迹级不准确度。总GOSPA度量是其所有分量的组合度量,因此可以捕获定位精度、未命中目标和假航迹的影响。

总结

在这个示例中,您了解了如何模拟停机坪场景的激光雷达数据,并使用扩展对象GGIW-PHD跟踪器处理它。您还了解了如何使用GOSPA指标及其相关组件评估跟踪器的性能。

金宝app支持功能

packAsObjectDetection

函数检测=PackagesObjectDetection(ptCloud、groundTruthIdx、time)%从单元格数组中获取x,y,z位置loc=ptCloud{1}';%不相交的点反射那些不与任何光线相交的光线%的对象nanPoints =任何(isnan (loc), 1);% groundTruthIdx{1}表示点的地面真值。第一个%列表示PlatformID,第二列表示ClassID。环境的% ClassID指定为0。envPoints=groundTruthIdx{1}(:,2)=0;% nanPoints或envPoints被删除toRemove=nanPoints | envPoints';保持有效收益loc = loc (:, ~ toRemove);%将每个返回值打包为objectDetection。n=总和(~toRemove);%分配内存检测= repmat ({objectDetection ((0, 0, 0),“MeasurementNoise”, 1依照*眼(3))},n, 1);%填充测量i=1:n次检测{i}。测量=loc(:,i);结束结束

创建场景

函数场景= createScenario%创建场景场景= trackingScenario;场景。UpdateRate = 0;planeMesh = tracking.scenario.airplaneMesh;%建立平台终端=平台(场景中,“ClassID”,0); 终端。维度=结构(...“长度”, 100,...“宽度”29岁的...“高度”, 20岁,...“OriginOffset”, [0 0 10]); 飞机=平台(场景,“ClassID”,1,“网”, planeMesh);飞机。尺寸=结构(...“长度”39岁的...“宽度”34岁的...“高度”, 13.4,...“OriginOffset”, [39/2 0 13.4/2]); 飞机.签名{1}=...rcsSignature (...“模式”, [20 20;20 20],...“方位角”(-180 180),...“高度”(-90; 90),...“频率”[0 1 e + 20]);飞机。Trajectory = waypointTrajectory(...[73.2829 -80.5669 0;60.7973 -37.3337 0],...[0, 11.25]...“水平”(8; 0),...“课程”[106.1085, 106.1085],...“定位”,四元数([106.1085 0 0;106.1085 0 0],“欧勒德”,“ZYX”,“帧”));delayTrajectory(飞机,0.1,70);地面=平台(场景中,“ClassID”, 0);Ground.Trajectory.Position = [0 0 0];地面。尺寸=结构(“长度”, 500,...“宽度”, 500,...“高度”,1,...“OriginOffset”[0 0 -0.5]);飞机=平台(场景中,“ClassID”,1,“网”, planeMesh);飞机。尺寸=结构(...“长度”现年40岁的...“宽度”30岁的...“高度”10...“OriginOffset”, [0 0 5]);飞机。{1} =签名...rcsSignature (...“模式”, [20 20;20 20],...“方位角”(-180 180),...“高度”(-90; 90),...“频率”[0 1e+20]);平面轨迹位置=[-11-50.30];平面.轨迹.方向=四元数([90 0],“欧勒德”,“zyx”,“帧”); Marshall=平台(场景,“ClassID”6);马歇尔。尺寸=结构(...“长度”, 0.24,...“宽度”, 0.45,...“高度”, 1.7,...“OriginOffset”, [0 0.85]);S = [57.3868 -25.5244 0;59.41 -32.53 0];S2 = [57.3868 -25.5244 0;60.5429 -36.4531 0];马歇尔。Trajectory = waypointTrajectory(...s2,...[0; 8],...“课程”(-75; -75),...“水平”(0, 0),...“ClimbRate”(0, 0),...“定位”,四元数([0.793353340291235 00 -0.608761429008721;0.793353340291235 00 -0.608761429008721]);delayTrajectory(马歇尔,70);Marshall1 =平台(场景中,“ClassID”6);Marshall1。尺寸=结构(...“长度”, 0.24,...“宽度”, 0.45,...“高度”, 1.7,...“OriginOffset”, [0 0 0.85]); Marshall1.轨迹=航路点轨迹(...[50 -100 0; 56.5 - -89.3 0; 56.8 - -73.6 0; 60.9 - -59.5 0],...(0; 6.28880678506828; 14.2336975651715; 38.5523666710762),...“课程”, (52.5692412453125; 71.0447132029417; 101.247131543705; 107.567935050594),...“水平”,(2; 2; 2。0),...“ClimbRate”, (0, 0, 0, 0),...“定位”,四元数([0.896605327597113 0 0 0.442830539286162;0.813888868238491 0 0 0.581020576363237;0.634412633965184 0 0 0.772994572985708;0.590831447702589 0 0 0.806795017588522]));delayTrajectory (Marshall1 12 70);Marshall2 =平台(场景中,“ClassID”6);Marshall2。尺寸=结构(...“长度”, 0.24,...“宽度”, 0.45,...“高度”, 1.7,...“OriginOffset”, [0 0.85]);Marshall2。Trajectory = waypointTrajectory(...(135.1 - -87.7 0; 118.3 - -87.7 0; 112.2 - -73.3 0; 80.8 - -47.6 0],...[0, 10.3490919743252; 18.1872070129823; 42),...“课程”, [155.957629971433;124.12848387907;114.734795167842;153.606988602699],...“水平”,(2; 2; 2。0),...“ClimbRate”, (0, 0, 0, 0),...“定位”,四元数([0.896605327597113 0 0 0.442830539286162;0.813888868238491 0 0.581020576363237;0.634412633965184 0 0 0.7729945728;0.5908314477025890 0.806795017588522]);延迟轨迹(2,12,70);加载器=平台(场景,“ClassID”2);加载程序。尺寸=结构(...“长度”10...“宽度”4...“高度”4...“OriginOffset”, [0 0 2]);加载程序。Trajectory = waypointTrajectory(...[25.2 -42.2 0;39.4500 -42.3000 0;53.7 -42.4 0],...[0、5、10)...“课程”(-0.4021; -0.4021; -0.4021),...“定位”(四元数((-0.4021 0 0),“欧勒德”,“ZYX”,“帧”);四元数([-0.4021 0 0],“欧勒德”,“ZYX”,“帧”);四元数([-0.4021 0 0],“欧勒德”,“ZYX”,“帧”)),...“水平”(0、5.8、0),...“ClimbRate”(0, 0, 0),...“AutoPitch”假的,...“自动银行”、假);delayTrajectory(装载机、70);Loader2 =平台(场景中,“ClassID”2);Loader2。尺寸=结构(...“长度”10...“宽度”4...“高度”4...“OriginOffset”, [0 0 2]);Loader2。Trajectory = waypointTrajectory(...[27.142823040363762 -75 0;42.5614 -71.9000 0;57.98 -68.8 0],...[0、5、10)...“课程”(11.368107148451321; 11.368107148451321; 11.368107148451321),...“定位”,四元数([11.368107148451321 0 0;11.368107148451321 0 0;11.368107148451321 0 0]),“欧勒德”,“ZYX”,“帧”),...“水平”(0、5.824096001626275、0),...“ClimbRate”(0, 0, 0),...“AutoPitch”假的,...“自动银行”、假);delayTrajectory (Loader2、50、70);功率=平台(场景中,“ClassID”,2); Power.Dimensions=struct(...“长度”5,...“宽度”2,...“高度”, 1...“OriginOffset”, [0 0 0.5]); 动力轨迹=航路点轨迹(...[27.2312963703295 -20.7687036296705 0;40.1656 -27.6344 0;53.1 -34.5 0],...[0、5、10)...“课程”(-27.9596882700088; -27.9596882700088; -27.9596882700088),...“定位”(四元数((-27.9596882700088 0 0),“欧勒德”,“ZYX”,“帧”);四元数([-27.9596882700088 0],“欧勒德”,“ZYX”,“帧”);四元数([-27.9596882700088 0],“欧勒德”,“ZYX”,“帧”)),...“水平”(0、5.8574、0),...“ClimbRate”(0, 0, 0),...“AutoPitch”假的,...“自动银行”,假);延迟轨迹(功率,20,70);加油机=平台(场景,“ClassID”,2); 加油机尺寸=结构(...“长度”7...“宽度”3,...“高度”2,...“OriginOffset”, [0 0 1]);汽油加油车。Trajectory = waypointTrajectory(...[92.3 -31.6 0;83.3 -36.7 0;74.3 -41.8 0],...[0、5、10)...“课程”(-150.4612; -150.4612; -150.4612),...“定位”(四元数((-150.4612 0 0),“欧勒德”,“ZYX”,“帧”);四元数([-150.4612 0 0],“欧勒德”,“ZYX”,“帧”);四元数([-150.4612 0 0],“欧勒德”,“ZYX”,“帧”)),...“水平”(0、4.137825515896000、0),...“ClimbRate”(0, 0, 0),...“AutoPitch”假的,...“自动银行”、假);delayTrajectory(汽油加油车,70);车=平台(场景中,“ClassID”2);的车。尺寸=结构(...“长度”, 4.7,...“宽度”, 1.8,...“高度”, 1.4,...“OriginOffset”, [0 0 0.7]);的车。Trajectory = waypointTrajectory(...[111.1 -44.8 0;93.8100 -48.1725 0;76.5200 -51.5450],...[0;7.046336423986581;14.092672847973162],...“课程”(-169.250904745059; -169.250904745059; -169.250904745059),...“定位”(四元数((-169.250904745059 0 0),“欧勒德”,“ZYX”,“帧”);四元数([-169.250904745059 0 0],“欧勒德”,“ZYX”,“帧”);四元数([-169.250904745059 0 0],“欧勒德”,“ZYX”,“帧”)),...“水平”(0; 5。0),...“ClimbRate”(0, 0, 0),...“AutoPitch”假的,...“自动银行”、假);delayTrajectory(车,70);Plane1 =平台(场景中,“ClassID”,1,“网”,平面网格);平面1.尺寸=结构(...“长度”现年40岁的...“宽度”30岁的...“高度”10...“OriginOffset”, [0 0 5]);Plane1。{1} =签名...rcsSignature (...“模式”, [20 20;20 20],...“方位角”(-180 180),...“高度”(-90; 90),...“频率”[0 1 e + 20]);Plane1.Trajectory。Position = [110 0 0];Plane1.Trajectory。方向=四元数([180 0 0],“欧勒德”,“zyx”,“帧”);函数delayTrajectory(plat, tooffset, tEnd) = plat. trajectory;wp = traj.Waypoints;toa = traj.TimeOfArrival;g = traj.GroundSpeed;c = traj.Course;cr = traj.ClimbRate;o = traj.Orientation;往往= max (toa(结束),往往);wp = [repmat (wp (1:), 1, 1), wp; repmat (wp(最终:),1,1)];toa = [0;toa + tOffset;tEnd]; g = [0;g;0]; c = [c(1);c;c(end)]; cr = [0;cr;0]; o = [repmat(o(1),1,1);o;repmat(o(end),1,1)]; newTraj = waypointTrajectory(wp,toa,...;“课程”c...“水平”, g,...“ClimbRate”、铬、...“定位”啊,);平台。Trajectory = newTraj;结束结束

初始化过滤器

函数filter = initFilter (varargin)%此函数在两个签名中与跟踪器交互% filter = initFilter()在添加预测阶段被调用%组件到PHD。%% filter = initFilter(检测)在添加的修正阶段被调用从具有低可能性的检测集到PHD的%组件%对现有轨道。输入中的所有检测都有假设%归属于同一目标。%在预测阶段增加零分量过滤器= initcvggiwphd(变长度输入宗量{:});%如果使用检测调用如果输入参数个数= = 1得到预期尺寸expSize = filter.ScaleMatrices /(过滤器。DegreesOfFreedom - 4);自由度越大,尺寸确定性越大景深= 50;过滤器。DegreesOfFreedom =景深;过滤器。ScaleMatrices = (dof-4) * expSize;%获取预期的检测次数expNumDets=filter.Shapes/filter.Rates;% shape/rate^2 =不确定性;不确定性= (expNumDets / 4) ^ 2;过滤器。形状= expNumDets ^ 2 /不确定性;过滤器。率= expNumDets /不确定性;结束% GammaForgettingFactors的作用类似于过程噪声测量率%过滤。GammaForgettingFactors(:)=1.03;%时间衰减作用像过程噪声%的维度。衰减越小,方差增加越高过滤器。TemporalDecay = 500;%指定MaxNumDetections过滤器。MaxNumDetections = 10000;结束

trackTruthDistance

函数dist = trackTruthDistance(track, truth)轨迹估计物体的中心。计算原点位置rOriginToCenter=-truth{1}.Dimensions.OriginOffset(:);rot=四元数([truth{1}.Orientation],“欧勒德”,“ZYX”,“帧”);actPos = true {1}.Position(:) + rotatepoint(rot,rOriginToCenter')';估计航迹位置estPos = track.State(1:2:结束);%误差距离是位置之间的距离。dist = norm(actPos(:) - estPos);结束

参考文献

[1] 韦伯,路德维希。国际民用航空组织Kluwer Law International BV,2017年。

[2] Mund, Johannes, Lothar Meyer, Hartmut Fricke。机场停机坪点云风险缓解的激光雷达性能要求和优化传感器定位第六届国际航空运输研究会议论文集.2014.

[3] Granström, Karl等。“使用PHD滤波器进行扩展目标跟踪。”(2012)。