主要内容

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

停机坪是机场的一个指定区域,用于容纳飞机装卸乘客、邮件或货物、加油、停车或维修。机场停机坪通常是高度动态和异构的环境,停机坪人员和车辆相互靠近操作。由于停机坪的这种性质,它为涉及飞机和地勤人员的地勤事故提供了更高的风险。基于激光雷达的停机坪监控系统已被提出作为改善停机坪状况的有效方法,并作为降低停机坪bbb高风险的措施。

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

设置场景

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

scenario = createsscenario;

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

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

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

Airport1.gif

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

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

扩展目标跟踪器

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

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

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

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

传感器的视场定义顺序与返回顺序相同%由传感器的变换函数sensorLimits = [lidar.AzimuthLimits;lidar.ElevationLimits;0 lidar.MaxRange];传感器的分辨率以与限值相同的顺序定义sensorResolution = [lidar.AzimuthResolution;lidar.ElevationResolution;lidar.MaxRange];通过转换函数转换轨道状态的参数。trackToSensorTransform = struct(“帧”“球”“OriginPosition”lidar.MountingLocation (:)“定位”rotmat(四元数(激光雷达。MountingAngles,“eulerd”“ZYX股票”“帧”),“帧”),“IsParentToChild”,真的,“HasVelocity”、假);由该传感器启动PHD滤波器的函数filter = @initFilter;配置= 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度量,在轨迹和真值之间定义了距离函数。这个距离函数计算轨迹和真值相互分配的代价。它还用于表示估计的定位或轨迹级精度。在这个例子中,轨迹和真值之间的距离是用a来定义的“自定义”距离函数trackTruthDistance,包括在金宝app支持功能在下面。GGIW-PHD跟踪器估计几何中心时,自定义距离函数使用平台几何中心的位置来定义位置误差。

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

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

display = helperAirportTrackingDisplay;

运行场景和跟踪器

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

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

结果

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

Airport2.gif

跟踪维护

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

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

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

图中包含4个轴对象。标题为Total GOSPA, xlabel Time, ylabel Metric的轴对象1包含一个类型为line的对象。标题为Localization, xlabel Time, ylabel Metric的坐标轴对象2包含一个类型为line的对象。标题为未完成目标,xlabel时间,ylabel度量的轴对象3包含一个类型为line的对象。标题为False Tracks, xlabel Time, ylabel Metric的轴对象4包含一个类型为line的对象。

Track-level准确性

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

也可以使用GOSPA度量的定位分量定量地估计轨道级的不准确性。总的GOSPA度量是其所有组成部分的组合度量,因此捕获了定位精度、错过目标和错误轨迹的影响。

总结

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

金宝app支持功能

packAsObjectDetection

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

createScenario

函数scenario = createsscenario%创建场景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];平面。轨迹。方向=四元数([90 00 00],“eulerd”“zyx股票”“帧”);马歇尔=平台(场景,“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);加载器=平台(场景,“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 00 00],“eulerd”“ZYX股票”“帧”);四元数([-0.4021 00 00],“eulerd”“ZYX股票”“帧”);四元数([-0.4021 00 00],“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;11.368107148451321 0;11.368107148451321 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;40.1656 -27.6344 0;53.1 -34.5 0],[0、5、10)“课程”(-27.9596882700088; -27.9596882700088; -27.9596882700088),“定位”,[四元数[-27.9596882700088 0],“eulerd”“ZYX股票”“帧”);四元数([-27.9596882700088 0],“eulerd”“ZYX股票”“帧”);四元数([-27.9596882700088 0],“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 00 00],“eulerd”“ZYX股票”“帧”);四元数([-150.4612 00 0],“eulerd”“ZYX股票”“帧”);四元数([-150.4612 00 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],“eulerd”“ZYX股票”“帧”);四元数([-169.250904745059 0],“eulerd”“ZYX股票”“帧”);四元数([-169.250904745059 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)轨迹= platt .轨迹;wp = traj.Waypoints;toa = traj.TimeOfArrival;g = traj.GroundSpeed;c = track . course;cr = traj.ClimbRate;o = track . orientation;tEnd = max(toa(end),tEnd);wp = [repmat (wp (1:), 1, 1), wp; repmat (wp(最终:),1,1)];toa = [0;toa + tOffset; end]; 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(detections)在校正阶段被调用来添加%的成分从具有低似然的检测集到PHD%对现有轨道。输入中的所有检测都有这样的假设%属于同一个目标。%在预测阶段添加零组件Filter = initcvggiwphd(varargin{:});%如果调用时带有检测如果Nargin == 1%获取预期大小expSize = filter. scalematriices /(filter. scalematriices)自由学位- 4);自由度越高,尺寸的确定性越高Dof = 50;过滤器。DegreesOfFreedom = dof;过滤器。scalematriices = (dof-4)*expSize;%获取预期的检测数expNumDets = filter.Shapes/filter.Rates;% shape/rate^2 =不确定度;不确定性= (expNumDets/4)^2;过滤器。形状= expNumDets^2/不确定性;过滤器。rate = expNumDets/不确定性;结束伽玛遗忘因素就像过程噪音测量率%filter. gammaforgeingfactors (:) = 1.03;时间衰减的作用类似于过程噪声%的维度。衰减越低,方差增加越高过滤器。TemporalDecay = 500;%指定MaxNumDetections过滤器。MaxNumDetections = 10000;结束

trackTruthDistance

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

参考文献

韦伯,路德维希。国际民用航空组织。科威国际律师事务所,2017。

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

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