主要内容

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

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

此示例显示了如何使用GGIW-PHD(Gamma Gaussian Overse Phd)扩展对象跟踪器来模拟围裙流量场景和跟踪地面流量的LIDAR数据。

设置场景

在本例中,您模拟了一个场景,其中一架飞机正在进入登机口区域。飞机由三个marshallers引导到它的停车位,一个在飞机的两边,一个在飞机的前面。你在飞机停机位附近模拟地面交通。飞机停好后,地面交通和指挥人员开始向飞机移动。除了飞机进入登机口区域,您还模拟已经停在登机口的两架飞机。此示例中使用的场景是通过使用跟踪方案设计师并导出到MATLAB®函数,与下游功能连接。在MATLAB中对导出的函数进行了修改,以确定每个平台的属性以及完成方案结束时间的轨迹。这财产的财产平台允许您定义LIDAR模拟平台的几何图形。在此示例中,您可以指定飞机的几何形状tracking.scenario.airplaneMesh.场景中的其他物体用长方体表示。有关如何创建场景的详细信息,请参阅createScenario函数。

场景= createScenario;

要感知现场,请使用360度查看激光雷达传感器使用单声道人传感器系统对象™。传感器有64个仰角通道,安装在离地面8米高的终端上。传感器的方位角分辨率定义为0.32度。在这种配置下,传感器每次扫描总共产生72,000个点。这种高分辨率的数据点集通常被称为点云。在5hz的频率下,通过指定UpdateRate的传感器。

创建一个激光雷达传感器激光雷达= monostaticLidarSensor (...“SensorIndex”,1,...“UpdateRate”,5,...'hasins',真的,...“AzimuthLimits”(-180 180),...“ElevationLimits”,[ -  10 27],...“AzimuthResolution”, 0.32,...“ElevationResolution”, 0.5781,...“DetectionCoordinates”“场景”...'mountinglocation'(-15 8),...'mountingangles',[ -  90 0 0],...“MaxRange”,150,...“RangeAccuracy”, 0.002);%访问终端平台终端=方案.platforms {1};%安装平台上的LIDAR终端。传感器=激光雷达;

您可以观察鸟瞰图的场景和模拟LIDAR数据以及下面的动画中的终端的屋顶。点云用彩色点表示,其中颜色从蓝色变为黄色,高度为黄色。请注意,LIDAR退货包含来自地面等环境的反射。

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

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

扩展对象跟踪

在此示例中,您可以使用概率假设密度(PHD)跟踪器的GGIW(Gamma高斯逆不热)实现。该GGIW模型使用三个分布来指定目标模型:高斯分布来描述目标运动中心的运动学,例如其位置和速度;反向愿望(IW)分布来描述目标的椭圆形程度;伽玛分布描述目标的预期测量次数。有关GGIW-PHD滤波器的更多详细信息,请参阅[3]。

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

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

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

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

接下来,您可以使用此信息组装此信息并使用“扩展对象PHD跟踪器”trackerPHD系统对象™。

追踪= trackerPHD (“SensorConfigurations”配置,...“PartitioningFcn”partitioningFcn,...'AssignmentThreshold'30岁的...% -log-likelihood,超过这个值测量单元将初始化新组件“ConfirmationThreshold”,0.9,...%将组件调用为确认跟踪的阈值“ExtractionThreshold”, 0.75,...%阈值调用组件作为轨道“MergingThreshold”25岁的...%合并具有相同标签的组件的阈值“LabelingThresholds”[1.1 0.1 0.05]);%防止跟踪分裂

指标

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

gospaObj = trackGOSPAMetric (“距离”“自定义”“DistanceFcn”, @trackTruthDistance);

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

display = helperairporttrackingdisplay;

运行场景和跟踪器

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

%初始化曲目confTracks = struct.empty (0,1);公制的%地面真相平台= scenario.Platforms;trackable平台=平台(cellfun(@(x)x. classid,平台)> 0);初始化度量值Gospametrics =零(0,4);Matlab录制的曲目数量vs mexnumTrackML = 0 (0, 1);%推进情况尽管advance(scenario) time = scenario. simulationtime;%在终端上调用lidarDetect模拟点云返回。[ptCloud, ~, groundTruthIdx] = lidarDetect(terminal,time);% Pack返回为objectDetection。包含在支持功能中金宝appdetections = packAsObjectDetection(ptCloud, groundTruthIdx, time);%为预测分区提供预测轨道如果Islocked(Tracker)predictedtracks = predicttrackstotime(跟踪器,'全部'、时间);瓜分者。PredictedTrackList = predictedTracks;结尾%使用检测和时间调用跟踪器步骤confTracks = tracker(检测,时间);%计算OSPA度量truthStruct = cellfun (@ (x) x.pose trackablePlatforms);[~,gospa,~,loc,missT,falseT] = gospaObj(confTracks, trackable平台);(end+1,:) = [gospa loc missT falseT];%#OK %更新显示显示(场景、ptCloud confTracks);结尾

结果

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

跟踪维护

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

您还可以使用GOSPA度量标准及其组件定量分析跟踪器的这种性能。请注意,度量标准的假轨道组件保持为零,这表明没有确认错误曲目。非零错过的目标组件代表未检测到的Marshaller。请注意,一旦跟踪器在该对象上建立轨道,则组件将下降到零。错过的目标组件再次上升到非零值,这表示由于对象遮挡引起的轨道下降。

图;订单= [“总GOSPA”“本土化”“错过了目标”“假追踪”];为了i = 1:4 AX =子图(2,2,i);情节(Gospametrics(:,i),“线宽”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

函数detections = packAsObjectDetection(ptCloud, groundTruthIdx, time)%从单元格数组中获取x,y,z位置loc = ptCloud {1} ';% nan点反射那些不与任何点相交的光线% 目的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',1e-2 *眼睛(3))},n,1);%填补测量为了I = 1:n个检测{I}。测量= loc(:,我);结尾结尾

createScenario

函数场景= 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.337 0],...[0, 11.25]...“水平”(8; 0),...“课程”[106.1085, 106.1085],...“定位”,四元数([106.1085 0 0; 106.1085 0 0],“eulerd”“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 1 e + 20]);[-11 -50.3 0];Plane.Trajectory.Orientation =四元数([90 0 0],“eulerd”“zyx股票”'框架');马歇尔=平台(场景中,“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],...'爬山',[0; 0],...“定位”,四元([0.79353340291235 0 0 0.0.608761429008721; 0.793353340291235 0 0 0 -0.608761429008721])));Delaytrajectory(Marshall,12,70);Marshall1 =平台(方案,“ClassID”6);Marshall1。尺寸=结构(...“长度”, 0.24,...“宽度”, 0.45,...'高度', 1.7,...“OriginOffset”, [0 0.85]);Marshall1。Trajectory = waypointTrajectory(...[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],...'爬山',[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],...'爬山',[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 (Marshall2 12 70);装载机=平台(场景中,“ClassID”2);加载程序。尺寸=结构(...“长度”,10,...“宽度”4...'高度'4...“OriginOffset”,[0 0 2]);loader.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),“eulerd”“ZYX股票”'框架');四元([ -  0.4021 0 0],“eulerd”“ZYX股票”'框架');四元([ -  0.4021 0 0],“eulerd”“ZYX股票”'框架'),...“水平”(0、5.8、0),...'爬山'(0, 0, 0),...'autopitch'假的,...“AutoBank”、假);delayTrajectory(装载机、70);Loader2 =平台(场景中,“ClassID”2);loader2.dimensions = struct(...“长度”,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],“eulerd”“ZYX股票”'框架'),...“水平”(0、5.824096001626275、0),...'爬山'(0, 0, 0),...'autopitch'假的,...“AutoBank”、假);delayTrajectory (Loader2、50、70);功率=平台(场景中,“ClassID”2);权力。尺寸=结构(...“长度”5,...“宽度”2,...'高度', 1...“OriginOffset”, [0 0 0.5]);权力。Trajectory = waypointTrajectory(...[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],“eulerd”“ZYX股票”'框架');四元数([-27.9596882700088 0 0],“eulerd”“ZYX股票”'框架');四元数([-27.9596882700088 0 0],“eulerd”“ZYX股票”'框架'),...“水平”(0、5.8574、0),...'爬山'(0, 0, 0),...'autopitch'假的,...“AutoBank”、假);delayTrajectory(权力,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),“eulerd”“ZYX股票”'框架');四元数([-150.4612 0 0],“eulerd”“ZYX股票”'框架');四元数([-150.4612 0 0],“eulerd”“ZYX股票”'框架'),...“水平”(0、4.137825515896000、0),...'爬山'(0, 0, 0),...'autopitch'假的,...“AutoBank”、假);delayTrajectory(汽油加油车,70);车=平台(场景中,“ClassID”2);的车。尺寸=结构(...“长度”, 4.7,...“宽度”, 1.8,...'高度', 1.4,...“OriginOffset”,[0 0 0.7]);car.traptory = 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],“eulerd”“ZYX股票”'框架');四元数([-169.250904745059 0 0],“eulerd”“ZYX股票”'框架');四元数([-169.250904745059 0 0],“eulerd”“ZYX股票”'框架'),...“水平”(0; 5。0),...'爬山'(0, 0, 0),...'autopitch'假的,...“AutoBank”、假);delayTrajectory(车,70);Plane1 =平台(场景中,“ClassID”,1,'网', planeMesh);Plane1。尺寸=结构(...“长度”,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],“eulerd”“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,...'爬山'、铬、...“定位”啊,);平台。Trajectory = newTraj;结尾结尾

initFilter

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

trackTruthDistance

函数dist = trackTruthDistance(track, truth)%曲目估计对象的中心。计算起源位置rOriginToCenter =真理{1}.Dimensions.OriginOffset (:);{1}腐烂=四元数([真相。方向),“eulerd”“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。“LIDAR性能要求和优化的传感器定位在机场围裙的点云的风险缓解。”第六届国际航空运输研究会议论文集.2014.

[3]Granström,卡尔等。“在使用PHD过滤器的扩展目标跟踪上。”(2012)。