主要内容

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

停机坪是机场的一个指定区域,用于供飞机装卸乘客、邮件或货物、加油、停车或维修。机场停机坪通常是高度动态和异构的环境,停机坪人员和车辆相互靠近。由于这种性质的围裙,它提出了涉及飞机和地面人员的地面处理事故的更高风险。基于激光雷达的停机坪监视系统已被提出作为一种有效的方法,以改善情况的图像,并作为一种措施,以减轻在停机坪[2]的高风险。

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

设置场景

在本例中,您将模拟一个场景,其中一架飞机正在进入大门区域。飞机由三名编组员引导进入其停车位,分别在飞机的两侧和前方。你在飞机停机位附近模拟地面交通。飞机停好后,地面交通和编组人员开始向飞机移动。除了进入大门区域的飞机,你还模拟两架已经停在大门的飞机。方法创建了本例中使用的场景跟踪场景设计并导出到MATLAB®函数,将其与下游功能连接起来。导出的函数在MATLAB中修改,以指定属性,并完成到场景结束时间的轨迹。的的属性平台允许您定义激光雷达仿真平台的几何形状。在本例中,将飞机的几何形状指定为tracking.scenario.airplaneMesh.场景中的其他对象用长方体表示。有关如何创建场景的详细信息,请参见createScenario函数在本例的末尾。

scenario = createScenario;

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

创建一个激光雷达传感器激光雷达...“SensorIndex”, 1...“UpdateRate”5,...“之内”,真的,...“AzimuthLimits”(-180 180),...“ElevationLimits”, -10年[27],...“AzimuthResolution”, 0.32,...“ElevationResolution”, 0.5781,...“DetectionCoordinates”“场景”...“MountingLocation”,[50 -15 -8],...“MountingAngles”,[-90 0 0],...“MaxRange”, 150,...“RangeAccuracy”, 0.002);访问终端平台终端=场景。平台{1};将激光雷达安装在平台上终端。传感器=激光雷达;

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

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

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

扩展对象跟踪器

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

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

将预测轨道传递给分区算法的句柄对象partitioner = helperPartitioningAlgorithm;将检测作为输入并返回分区的函数partitioningFcn = @(检测)partitionDetections(分区,检测);

要设置PHD跟踪器,首先使用trackingSensorConfiguration对象。您可以使用模拟激光雷达传感器的属性指定配置的属性。还定义了一个函数initFilter,初始化一个恒定速度ggiwphd过滤器。这个函数环绕着initcvggiwphd并增加了目标的Gamma分布和逆Wishart分布的确定性。属性将筛选器配置为能够进行大量检测MaxNumDetectionsggiwphd过滤器的属性。

传感器的视场定义与返回的顺序相同%为传感器的变换函数sensorLimits = [lidar.AzimuthLimits;lidar.ElevationLimits;0 lidar.MaxRange];传感器的分辨率定义顺序与极限相同sensorResolution = [lidar.AzimuthResolution;lidar.ElevationResolution;lidar.MaxRange];通过transform函数转换轨道状态的参数。trackToSensorTransform = struct(“帧”“球”...“OriginPosition”lidar.MountingLocation (:)...“定位”rotmat(四元数(激光雷达。MountingAngles,“eulerd”“ZYX股票”“帧”),“帧”),...“IsParentToChild”,真的,...“HasVelocity”、假);通过该传感器启动PHD过滤器的函数filterInitFcn = @initFilter;config = trackingSensorConfiguration(1,...“IsValidTime”,真的,...%在每一步调用时更新传感器“FilterInitializationFcn”filterInitFcn,...函数初始化PHD过滤器“SensorTransformFcn”@cvmeas,...从状态到az,el,r的变换函数“SensorTransformParameters”trackToSensorTransform,...转换函数的参数“SensorLimits”sensorLimits,...“SensorResolution”sensorResolution,...“DetectionProbability”, 0.95...%发现目标的概率);

方法组合这些信息并创建扩展对象PHD跟踪器trackerPHD系统对象™。

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

指标

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

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

使用helper类helperAirportTrackingDisplay以可视化的地面真相,模拟数据和估计轨道。

display = helpairporttrackingdisplay;

运行场景和跟踪器

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

初始化轨道confTracks = struct.empty(0,1);%度量的真实值平台=场景。平台;trackablePlatforms =平台(cellfun(@(x) x.c classid,平台)> 0);初始化度量值= 0 (0,4);为MATLAB vs MEX记录轨道的百分比numTrackML = 0 (0,1);%高级场景advance(scenario) time = scenario. simulationtime;在终端上调用lidarDetect来模拟点云返回。[ptCloud, ~, groundTruthIdx] = lidarDetect(terminal,time);% Pack返回为objectDetection。支援功能金宝appdetection = packAsObjectDetection(ptCloud, groundTruthIdx, time);为预测分区提供预测轨迹如果isLocked(跟踪器)predictedTracks = predictTracksToTime(跟踪器,“所有”、时间);瓜分者。PredictedTrackList = predictedTracks;结束%使用检测和时间的呼叫跟踪器步骤confTracks =跟踪器(检测,时间);计算OSPA度量truthStruct = cellfun(@(x)x.pose,trackablePlatforms);[~,gospa,~,loc,missT,falseT] = gospaObj(confTracks, trackablePlatforms);gospaMetrics(end+1,:) = [gospa loc missT falseT];% #好< SAGROW >更新显示display(场景,ptCloud, confTracks);结束

结果

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

跟踪维护

直到飞机停好,跟踪器能够跟踪所有物体,除了飞机右侧的编组器。这是因为编组器仍未被传感器检测到其初始位置。飞机停好后,跟踪器能够对物体的运动做出反应,以估计它们的位置和速度。跟踪器能够在大约34秒内对所有物体保持跟踪。在那之后,左边的编组员被飞机喷气发动机挡住,由于多次失误,它的轨迹被跟踪器丢弃。当地面交通接近飞机时,跟踪器能够将它们作为单独的物体跟踪,并且不会将它们的测量结果相互混淆。这是可能的,因为跟踪器对对象的预测有助于正确划分测量集。

您还可以使用GOSPA度量及其组件对跟踪器的性能进行定量分析。请注意,度量的假跟踪组件保持为零,这表明没有确认假跟踪。非零遗漏目标组件表示未检测到的编组器。请注意,一旦跟踪器在该对象上建立了跟踪,该组件就会降至零。错过的目标分量再次上升到非零值,这表示由于物体遮挡导致的轨迹下降。

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

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

Track-level准确性

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

跟踪级不准确性也可以使用GOSPA度量的本地化组件进行定量估计。总的GOSPA指标是其所有组成部分的组合指标,因此可以捕获定位精度、错过目标和错误跟踪的影响。

总结

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

金宝app支持功能

packAsObjectDetection

函数检测= packAsObjectDetection(ptCloud, groundTruthIdx, time)从单元格数组中获取x,y,z个位置loc = ptCloud{1}';不相交的点反射不与任何射线相交的射线。%的对象nanPoints = any(isnan(loc),1);% groundTruthIdx{1}表示点的真实值。第一个%列表示PlatformID,第二列表示ClassID。环境的% ClassID指定为0。envPoints = groundTruthIdx{1}(:,2) == 0;删除% nanPoints或envPointstoRemove = nanPoints | envPoints';%保留有效退货loc = loc(:,~toRemove);将每个返回包为objectDetection。n = sum(~toRemove);%分配内存检测= repmat({objectDetection(时间,[0;0;0],“MeasurementNoise”, 1依照*眼(3))},n, 1);填充量I = 1:n个检测{I}。测量= loc(:,i);结束结束

createScenario

函数scenario = createScenario%创建场景scenario = trackingScenario;场景。UpdateRate = 0;planeMesh = tracking.scenario.airplaneMesh;%创建平台终端=平台(场景,“ClassID”, 0);终端。尺寸= struct(...“长度”, 100,...“宽度”29岁的...“高度”, 20岁,...“OriginOffset”, [0 0 10]);飞机=平台(场景,“ClassID”, 1“网”, planeMesh);飞机。尺寸= struct(...“长度”39岁的...“宽度”34岁的...“高度”, 13.4,...“OriginOffset”, [39/2 0 13.4/2]);飞机。{1} =签名...rcsSignature (...“模式”, [20 20;20 20],...“方位”, [-180 180],...“高度”(-90; 90),...“频率”, [0 1e+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],“eulerd”“ZYX股票”“帧”));delayTrajectory(飞机,0.1,70);地面=平台(场景,“ClassID”, 0);Ground.Trajectory.Position = [0 0 0];地面。尺寸= struct(“长度”, 500,...“宽度”, 500,...“高度”, 1...“OriginOffset”,[0 0 -0.5]);平面=平台(场景,“ClassID”, 1“网”, planeMesh);飞机。尺寸= struct(...“长度”现年40岁的...“宽度”30岁的...“高度”10...“OriginOffset”, [0 0 5]);飞机。{1} =签名...rcsSignature (...“模式”, [20 20;20 20],...“方位”, [-180 180],...“高度”(-90; 90),...“频率”, [0 1e+20]);Plane.Trajectory.Position = [-11 -50.3 0];Plane.Trajectory.Orientation =四元数([90 0 0],“eulerd”“zyx股票”“帧”);Marshall =平台(场景,“ClassID”6);马歇尔。尺寸= struct(...“长度”, 0.24,...“宽度”, 0.45,...“高度”, 1.7,...“OriginOffset”, [0 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(Marshall, 12,70);Marshall1 =平台(场景,“ClassID”6);Marshall1。尺寸= struct(...“长度”, 0.24,...“宽度”, 0.45,...“高度”, 1.7,...“OriginOffset”, [0 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),...“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。尺寸= struct(...“长度”, 0.24,...“宽度”, 0.45,...“高度”, 1.7,...“OriginOffset”, [0 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 0.581020576363237;0.634412633965184 0 0 0.772994572985708;0.590831447702589 0 0 0.806795017588522]);delayTrajectory(Marshall2, 12,70);Loader =平台(场景,“ClassID”2);加载程序。尺寸= struct(...“长度”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],“eulerd”“ZYX股票”“帧”四元数([-0.4021 0 0],“eulerd”“ZYX股票”“帧”四元数([-0.4021 0 0],“eulerd”“ZYX股票”“帧”)),...“水平”(0、5.8、0),...“ClimbRate”, (0, 0, 0));delayTrajectory(Loader, 12,70);Loader2 =平台(场景,“ClassID”2);Loader2。尺寸= 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),...“ClimbRate”, (0, 0, 0));delayTrajectory(Loader2, 50,70);功率=平台(场景,“ClassID”2);权力。尺寸= struct(...“长度”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 00],“eulerd”“ZYX股票”“帧”四元数([-27.9596882700088 00],“eulerd”“ZYX股票”“帧”四元数([-27.9596882700088 00],“eulerd”“ZYX股票”“帧”)),...“水平”(0、5.8574、0),...“ClimbRate”, (0, 0, 0));delayTrajectory(Power, 20,70);加油机=平台(场景,“ClassID”2);汽油加油车。尺寸= struct(...“长度”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),...“ClimbRate”, (0, 0, 0));delayTrajectory(加油机,20,70);汽车=平台(场景,“ClassID”2);的车。尺寸= struct(...“长度”, 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],...[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),...“ClimbRate”, (0, 0, 0));delayTrajectory(Car, 20,70);Plane1 =平台(场景,“ClassID”, 1“网”, planeMesh);Plane1。尺寸= struct(...“长度”现年40岁的...“宽度”30岁的...“高度”10...“OriginOffset”, [0 0 5]);Plane1。{1} =签名...rcsSignature (...“模式”, [20 20;20 20],...“方位”, [-180 180],...“高度”(-90; 90),...“频率”, [0 1e+20]);Plane1.Trajectory。位置= [110 0 0];Plane1.Trajectory。方向=四元数([180 0 0],“eulerd”“zyx股票”“帧”);函数delayTrajectory(platt, tOffset, tEnd) traj = platt . trajectory;wp = traj.Waypoints;toa = traj.到达时间;g = traj.地速;c = traj.航向;cr = traj.ClimbRate;o = traj.方向;tEnd = max(toa(end),tEnd);wp = [repmat (wp (1:), 1, 1), wp; repmat (wp(最终:),1,1)];toa = [0;toa + tooffset;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;结束结束

initFilter

函数filter = initFilter (varargin)此函数在两个签名中与跟踪器交互% filter = initFilter()在预测添加阶段被调用%组件到PHD。% filter = initFilter(检测)在添加的修正阶段被调用%的成分从低似然的检测集转化为PHD%与现有轨道。输入中的所有检测都有假设%属于相同的目标。在预测阶段中添加0个组件Filter = initcvggiwphd(varargin{:});%如果与检测一起调用如果Nargin == 1获得预期尺寸expSize = filter. scalematrices /(filter. scalematrices)自由度- 4);dof越高,维数的确定性越高Dof = 50;过滤器。自由度=自由度;过滤器。ScaleMatrices = (dof-4)*expSize;获得预期的检测数expNumDets = filter.Shapes/filter.Rates;%形状/速率^2 =不确定性;不确定性= (expNumDets/4)^2;过滤器。形状= expnumdet ^2/不确定性;过滤器。费率= expNumDets/不确定性;结束% GammaForgettingFactors的作用类似于进程噪声测量率%filter.GammaForgettingFactors(:) = 1.03;时间衰减就像过程噪声%的维度。衰减越小,方差增加越高过滤器。TemporalDecay = 500;指定MaxNumDetections过滤器。MaxNumDetections = 10000;结束

trackTruthDistance

函数dist = trackTruthDistance(跟踪,真相)轨道估计物体的中心。计算原点位置rOriginToCenter = -truth{1}.Dimensions.OriginOffset(:);腐=四元数([真理{1}。方向),“eulerd”“ZYX股票”“帧”);actPos = true {1}.Position(:) + rotatepoint(rot,rOriginToCenter')';估计轨道位置%estPos = track.State(1:2:end);%误差距离为位置之间的距离。dist = norm(actPos(:) - estPos);结束

参考文献

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

[2]蒙德,约翰内斯,洛萨·迈耶和哈特穆特·弗里克。“机场停机坪基于点云的风险降低的激光雷达性能要求和优化传感器定位。”第六届国际航空运输研究会议论文集.2014.

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