主要内容

扩展对象的高速公路车辆跟踪雷达和摄像头

这个例子向您展示了如何跟踪高速公路车辆在一个自我。车辆是扩展对象的维度跨越多个传感器分辨率的细胞。结果,这些对象的多个检测传感器报告在一个单一的扫描。在这个例子中,您将使用不同的扩展对象跟踪技术跟踪高速公路车辆和评估结果的跟踪性能。

介绍

在全球最近邻(等传统跟踪方法multiObjectTracker,trackerGNN),联合概率数据关联(trackerJPDA)和multi-hypothesis跟踪(trackerTOMHT),跟踪对象是假定返回一检测传感器扫描。随着传感器的发展有更好的分辨率,高分辨率雷达等传感器通常返回多个对象的检测。例如,下图描述多个检测单个车辆跨越多个雷达分辨率的细胞。在这种情况下,该技术用于追踪的对象被称为扩展对象跟踪[1]。

使用高分辨率传感器的关键好处是获得更多关于对象的信息,比如尺寸和取向。这些额外的信息可以提高检测的概率,减少误警率。

扩展对象提出了新挑战传统的追踪器,因为这些追踪器假设一个检测/对象/传感器。在某些情况下,集群传感器数据可以提供传统的追踪与单个检测每个对象。然而,通过这样做,使用高分辨率传感器的好处可能会丢失。

相比之下,扩展对象跟踪器可以处理多个检测每个对象。此外,这些追踪器不仅可以估计运动状态,如物体的位置和速度,而且物体的尺寸和取向。在这个例子中,您跟踪车辆在自我车辆使用下面的追踪器:

  • 传统的多目标跟踪器使用一个点目标模型,multiObjectTracker

  • GGIW-PHD(γ高斯逆Wishart博士)的跟踪,trackerPHDggiwphd过滤器

  • GM-PHD(高斯混合博士)追踪,trackerPHDgmphd过滤器使用矩形目标模型

你将评估所有追踪器使用的跟踪结果trackErrorMetricstrackAssignmentMetrics,因为它能提供多种措施有效性的跟踪器。您还将评估结果使用的最佳子模式分配指标(OSPA),trackOSPAMetric,旨在评估的性能跟踪器使用一个综合得分。

设置

场景

在这个例子中,有一个自我车辆和四个其他车辆:自我中心车辆的车辆前方车道,车辆在自我中心车辆车道,前方一辆卡车的自我车辆右车道,在左边的车道超车车辆。

在本例中,您模拟一种自我工具6 2雷达传感器和视觉传感器覆盖360度的视野。传感器有一些重叠和覆盖缺口。自我车辆配备远程雷达传感器和视觉传感器在车辆的正面和背面。两边的车辆有两个短程雷达传感器,每个覆盖90度。一个传感器两侧覆盖从中间的车回来。其他传感器两侧覆盖从车辆的中间。

%创建场景exPath = fullfile (matlabroot,“例子”,“driving_fusion”,“主要”);目录exPath)(场景、egoVehicle传感器)= helperCreateScenario;%创建显示对象显示= helperExtendedTargetTrackingDisplay;%创建动画作家记录每一帧的图%动画写作。设置“RecordGIF”真让GIF写作。gifWriter = helperGIFWriter(图= display.Figure,RecordGIF = false);

指标

在本例中,您使用一些关键指标来评估每个跟踪器的跟踪性能。特别是,您评估追踪器基于位置估计的精度,速度,尺寸(长和宽)和对象的方向。这些指标可以评估使用trackErrorMetrics类。定义的错误跟踪目标的地面真理,这个示例使用一个自定义误差函数,helperExtendedTargetError年底上市,这个例子。

您还将评估绩效等指标数量的错误轨道或冗余的踪迹。这些指标可以计算使用trackAssignmentMetrics类。定义跟踪目标之间的距离和一个真实对象,这个示例使用一个自定义误差函数,helperExtendedTargetDistance年底上市,这个例子。函数定义了距离度量距离的总和在位置,速度,维度和偏航。

trackErrorMetricstrackAssignmentMetrics提供多个措施的跟踪算法的有效性。你也会基于最优评估性能子模式任务指标(OSPA),它提供了一个分数值的跟踪算法在每个时间步。这个指标可以计算使用trackOSPAMetric类。“自定义”定义距离函数OSPA一样的任务指标。

%函数返回的错误跟踪和真理。errorFcn = @(跟踪、真理)helperExtendedTargetError(跟踪、真理);%函数返回跟踪和真理之间的距离。distFcn = @(跟踪、真理)helperExtendedTargetDistance(跟踪、真理);%函数返回id从地面真理。默认的%标识符假定事实与PlatformID标识。在% drivingScenario,真理是确定ActorID。truthIdFcn = @ (x) [x.ActorID];%创建度量对象。tem = trackErrorMetrics (ErrorFunctionFormat =“自定义”,EstimationErrorLabels = {的位置误差,“VelocityError”,“DimensionsError”,“YawError”},EstimationErrorFcn = errorFcn,TruthIdentifierFcn = truthIdFcn);tam = trackAssignmentMetrics (DistanceFunctionFormat =“自定义”,AssignmentDistanceFcn = distFcn,DivergenceDistanceFcn = distFcn,TruthIdentifierFcn = truthIdFcn,AssignmentThreshold = 30,DivergenceThreshold = 35);%创建ospa度量对象。汤姆= trackOSPAMetric (距离=“自定义”,DistanceFcn = distFcn,TruthIdentifierFcn = truthIdFcn);

点对象跟踪

multiObjectTracker系统对象™假定一个检测/对象/传感器和使用一个全局最近邻关联检测跟踪方法。它假设每个对象都可以检测到传感器的扫描最多一次。在这种情况下,模拟雷达传感器有足够高的分辨率生成多个检测/对象。如果这些检测不是集群,跟踪生成多个追踪每个对象。集群返回一个检测每个集群,协方差的成本有较大的不确定性和失去真正的信息对象维度。集群也很难区分两个物体相互接近时,例如,当车辆通过另一辆车。

trackerRunTimes = 0 (0, 3);ospaMetric = 0 (0, 3);%创建一个multiObjectTracker追踪= multiObjectTracker (FilterInitializationFcn = @helperInitPointFilter,AssignmentThreshold = 30,ConfirmationThreshold = [4 - 5],DeletionThreshold = 3);%重置的随机数字生成器可重复的结果种子= 2018;S = rng(种子);步伐= 1;% multiObjectTracker,雷达在自我笛卡尔坐标系,并报告%不报告速度。这让我们从多个集群检测%的传感器。{我}i = 1:6传感器。HasRangeRate = false;传感器{我}。DetectionCoordinates =“身体”;结束

运行场景。

推进(场景)& & ishghandle (display.Figure)%的场景时间= scenario.SimulationTime;%收集自我车辆检测传感器[检测,isValidTime] = helperDetect(传感器、egoVehicle、时间);%更新追踪是否有新的检测如果任何(isValidTime)%检测必须首先集中重点跟踪detectionClusters = helperClusterRadarDetections(检测);%更新追踪抽搐% confirmedTracks场景坐标confirmedTracks = updateTracks(跟踪、detectionClusters、时间);t = toc;%更新指标%获得地面实况groundTruth = scenario.Actors(2:结束);%除了自我% b。更新任务指标tam (confirmedTracks groundTruth);[trackIDs, truthIDs] = currentAssignment (tam);% c。更新误差度量tem (confirmedTracks trackIDs、groundTruth truthIDs);% d。更新ospa度量汤姆ospaMetric(步伐,1)= (confirmedTracks groundTruth);%更新鸟's-eye-plot%转换跟踪自我坐标显示confirmedTracksEgo = helperConvertToEgoCoordinates (egoVehicle confirmedTracks);显示器(egoVehicle、传感器、检测、confirmedTracksEgo detectionClusters);drawnow;%记录追踪运行时间trackerRunTimes(步伐,1)= t;步伐=步伐+ 1;%捕捉帧动画gifWriter ();结束结束%捕获累积跟踪指标。显示平均误差指标%值的误差仿真。assignmentMetricsMOT = tam.trackMetricsTable;errorMetricsMOT = tem.cumulativeTruthMetrics;%如果要求写GIFwriteAnimation (gifWriter“multiObjectTracking”);

这些结果表明,聚类,跟踪可以在现场跟踪的对象。然而,它也表明,与超车车辆相关的跟踪(黄色)从前面的车辆在场景的开始后面的车辆。初的场景中,自我背后的超车车辆车辆(蓝色),所以雷达和视觉检测是由它的前面。当超车车辆通过自我车、雷达探测是由超车的车辆,然后从它回来,并且跟踪移动到后面的车辆。

您还可以看到,集群并不完美。当路过的车辆通过自我背后的车辆,车辆(紫色),追踪都是略微转向左边由于不完美的集群。创建一个冗余的跟踪在跑道上最初由于多个集群的一部分时创建的侧边是错过了。同时,冗余的轨道出现在路过的车辆在结束因为其检测间的距离增加。

GGIW-PHD扩展对象跟踪

在本节中,您使用一个GGIW-PHD跟踪器(trackerPHDggiwphd)跟踪对象。不像multiObjectTracker每个轨道,它使用一个过滤器,GGIW-PHD是一个多目标滤波器,描述了概率假设密度(博士)的场景。模型的扩展目标,GGIW-PHD使用以下分布:

γ:积极价值描述预期数量的检测。

高斯:状态向量来描述目标的运动状态。

Inverse-Wishart:正定矩阵来描述椭圆程度。

模型假定每个分布是相互独立的。因此,概率假设密度(博士)GGIW-PHD过滤器所描述的概率密度函数的加权和的几个GGIW组件。

博士跟踪需要计算每个组件的密度的检测能力。检测能力的计算需要每个传感器使用跟踪器的配置。你定义这些配置trackerPHD使用trackingSensorConfiguration类。

%释放和重新启动所有对象。重启(场景);释放(tem);释放(tam);%没有penality trackerPHDtam。AssignmentThreshold = tam。AssignmentThreshold - 2;释放(显示);显示。PlotClusteredDetection = false;gifWriter。pFrames = {};i = 1:元素个数(传感器)释放(传感器{我});如果{我}我< = 6传感器。HasRangeRate = true;传感器{我}。DetectionCoordinates =“球形传感器”;结束结束%恢复随机种子。rng(种子)%设置传感器配置%设置自我构成egoPose。位置= egoVehicle.Position;egoPose。速度= egoVehicle.Velocity;egoPose。取向= rotmat(四元数([egoVehicle。偏航egoVehicle。距egoVehicle.Roll),“eulerd”,“ZYX股票”,“帧”),“帧”);sensorConfigurations =细胞(元素个数(传感器),1);i = 1:元素个数(传感器)sensorConfigurations{我}= trackingSensorConfiguration(传感器{我}、egoPoseFilterInitializationFcn = @helperInitGGIWFilter,SensorTransformFcn = @ctmeas);结束

定义跟踪。

与一个点对象跟踪,通常考虑一个分区(集群)的检测,trackerPHD创建多个可能的分区的一组检测和评估它对当前博士过滤器组件。3和5的下面的函数定义了上下距离检测。这相当于定义每个集群的检测必须至少3决议分开和最大的5决议除了对方。金宝搏官方网站helper函数包装partitionDetections和不使用的分区检测数据与测量雷达。

partFcn = @ (x) helperPartitioningFcn (x, 3、5);追踪= trackerPHD (SensorConfigurations = SensorConfigurations,PartitioningFcn = partFcn,AssignmentThreshold = 450,%的最小负对数似检测细胞出生(多个检测每个细胞)来添加组件。ExtractionThreshold = 0.75,%重量阈值过滤组件的宣布道ConfirmationThreshold = 0.85,%重量阈值的过滤器组件宣布确认跟踪MergingThreshold = 50,%阈值合并组件HasSensorConfigurationsInput = true%在场景帧进行跟踪,因此传感器配置随时间变化);

运行仿真。时间的第一步

步伐= 1;%运行场景推进(场景)& & ishghandle (display.Figure)%的场景时间= scenario.SimulationTime;%的姿势在自我车辆坐标系中其他车辆ta = targetPoses (egoVehicle);%收集自我车辆检测传感器(检测、isValidTime、配置)= helperDetect(传感器、egoVehicle、时间);%更新追踪检测。注意,没有%需要集群检测之前通过追踪。%,作为输入传递到传感器配置%追踪。抽搐% confirmedTracks场景坐标confirmedTracks =追踪(检测、配置时间);t = toc;%更新指标%获得地面实况groundTruth = scenario.Actors(2:结束);%除了自我% b。更新任务指标tam (confirmedTracks groundTruth);[trackIDs, truthIDs] = currentAssignment (tam);% c。更新误差度量tem (confirmedTracks trackIDs、groundTruth truthIDs);% d。更新ospa度量汤姆ospaMetric(步伐,2)= (confirmedTracks groundTruth);%更新鸟瞰的阴谋%转换跟踪自我坐标显示confirmedTracksEgo = helperConvertToEgoCoordinates (egoVehicle confirmedTracks);显示器(egoVehicle、传感器、检测、confirmedTracksEgo);drawnow;%记录追踪运行时间trackerRunTimes(步伐,2)= t;步伐=步伐+ 1;%为GIF捕获帧gifWriter ();结束%捕捉真相和跟踪指标表assignmentMetricsGGIWPHD = tam.trackMetricsTable;errorMetricsGGIWPHD = tem.cumulativeTruthMetrics;%如果要求写GIFwriteAnimation (gifWriter“ggiwphdTracking”);

这些结果表明,GGIW-PHD可以处理多个检测/对象/传感器,而不需要集群这些检测。此外,通过使用多个检测,跟踪估计位置,速度,每个对象的尺寸和取向。图中的虚线椭圆形状展示了预期的目标。过滤器的初始化函数指定多个可能使用多个组件尺寸和它们的相对权重。可以扩展列表添加更多的大小增加了计算复杂度。相反,你也可以初始化一个组件/检测更高维度的不确定性。这将使跟踪估计的尺寸自动对象。说,估计的准确性取决于目标的可观测性维度和容易收缩和扩张的轨道维度目标自我移动车辆。

GGIW-PHD过滤器假设检测是分布式目标的椭圆中心周围。因此,跟踪倾向于跟随车辆的可见部分。这些可观测的部分包括后方的车辆直接提前自我车辆或车辆后面的正面自我车辆例如,后面和前面的车辆分别直接提前和自我的汽车后面。相比之下,通过车辆的长度和宽度完全观察到在模拟。因此,与实际的估计有更好的重叠椭圆形状。

GM-PHD矩形对象跟踪

在本节中,您使用一个GM-PHD跟踪器(trackerPHDgmphd)和一个矩形目标模型(initctrectgmphd)跟踪对象。不像ggiwphd,它使用一个椭圆形状跟踪范围,gmphd允许您使用一个高斯分布来定义你的选择的形状。矩形目标模型被定义为运动模型,ctrectctrectjac和测量模型,ctrectmeasctrectmeasjac

传感器配置为trackerPHD定义之前保持不变,除了定义SensorTransformFcnFilterInitializationFcn

i = 1:元素个数(sensorConfigurations) sensorConfigurations {}。FilterInitializationFcn = @helperInitRectangularFilter;%初始化一个矩形目标gmphdsensorConfigurations {}。SensorTransformFcn= @ctrectcorners;%使用角计算探测概率结束%定义跟踪使用新的传感器配置追踪= trackerPHD (SensorConfigurations = SensorConfigurations,PartitioningFcn = partFcn,AssignmentThreshold = 600,%的最小负对数似检测细胞出生添加组件ExtractionThreshold = 0.85,%重量阈值过滤组件的宣布道ConfirmationThreshold = 0.95,%重量阈值的过滤器组件宣布确认跟踪MergingThreshold = 50,%阈值合并组件HasSensorConfigurationsInput = true%在场景帧进行跟踪,因此传感器配置随时间变化);%释放和重新启动所有对象。重启(场景);i = 1:元素个数(传感器)释放(传感器{我});结束释放(tem);释放(tam);释放(显示);显示。PlotClusteredDetection = false;gifWriter。pFrames = {};%恢复随机种子。rng(种子)%时间的第一步步伐= 1;%运行场景推进(场景)& & ishghandle (display.Figure)%的场景时间= scenario.SimulationTime;%的姿势在自我车辆坐标系中其他车辆ta = targetPoses (egoVehicle);%收集自我车辆检测传感器(检测、isValidTime、配置)= helperDetect(传感器、egoVehicle、时间);%更新追踪检测。注意,没有%需要集群检测之前通过追踪。%,作为输入传递到传感器配置%追踪。抽搐% confirmedTracks场景坐标confirmedTracks =追踪(检测、配置时间);t = toc;%更新指标%获得地面实况groundTruth = scenario.Actors(2:结束);%除了自我% b。更新任务指标tam (confirmedTracks groundTruth);[trackIDs, truthIDs] = currentAssignment (tam);% c。更新误差度量tem (confirmedTracks trackIDs、groundTruth truthIDs);% d。更新ospa度量汤姆ospaMetric(步伐,3)= (confirmedTracks groundTruth);%更新鸟瞰的阴谋%转换跟踪自我坐标显示confirmedTracksEgo = helperConvertToEgoCoordinates (egoVehicle confirmedTracks);显示器(egoVehicle、传感器、检测、confirmedTracksEgo);drawnow;%记录追踪运行时间trackerRunTimes(步伐,3)= t;步伐=步伐+ 1;%为GIF捕获帧gifWriter ();结束%捕捉真相和跟踪指标表assignmentMetricsGMPHD = tam.trackMetricsTable;errorMetricsGMPHD = tem.cumulativeTruthMetrics;%如果要求写GIFwriteAnimation (gifWriter“gmphdTracking”);%随机数生成器回到之前的状态rng (S) rmpath (exPath)

这些结果表明,GM-PHD还可以处理多个检测/对象/传感器。GGIW-PHD类似,它也估计物体的大小和方向。过滤器的初始化函数使用类似的方法作为GGIW-PHD追踪并初始化多个组件大小不同。

你可以注意到,估计,建模为矩形,有很好的适应地面实况模拟对象,描绘的纯色补丁。特别是,轨道能够正确跟踪车辆的形状随着运动中心。

评估跟踪性能

使用定量评估每个跟踪器的跟踪性能指标等位置的估计误差,速度,尺寸和取向。也评估跟踪作业使用冗余和错误跟踪等指标。

任务指标

helperPlotAssignmentMetrics (assignmentMetricsMOT assignmentMetricsGGIWPHD assignmentMetricsGMPHD);

任务指标说明冗余和错误跟踪初始化对象跟踪和确认的点。这些痕迹由于不完美的聚类结果,检测属于同一个目标聚集到多个集群检测。相比之下,GGIW-PHD追踪和GM-PHD追踪维护跟踪四个目标,不创建任何虚假或冗余的踪迹。这些指标表明,扩展对象追踪器正确分区检测,并将它们与正确的轨道。

误差指标

helperPlotErrorMetrics (errorMetricsMOT errorMetricsGGIWPHD errorMetricsGMPHD);

情节显示的平均估计误差在本例中使用的三种类型的追踪器。因为重点对象追踪不估计偏航和维度的对象,他们现在图所示。点对象跟踪能够相当准确地估计物体的运动学。自我背后的汽车车的位置误差较高,因为它被拖到左边时,路过的车辆超过这辆车。这也是一个工件时不完美的聚类对象的接近对方。

如前所述,GGIW-PHD跟踪假设测量分布到对象的程度,导致中心跟踪车辆的可见部分。这也可以在TruthID 2和4的位置误差指标。追踪能够估计对象的尺寸精度约0.3米的车辆前方和背后的自我。因为更高的确定性定义车辆的尺寸helperInitGGIWFilter功能,跟踪不崩溃这些车辆的长度,即使在最佳椭圆很低的长度。路过的车辆(TruthID 3)观察所有维度,更准确地测量其尺寸比其他车辆。然而,随着车辆机动对自我车辆,偏航误差估计更高。

GM-PHD在这个例子使用矩形形状的目标模型,并使用收到测量评估预期的测量目标的边界。这个模型可以帮助跟踪估计的形状和定位更准确。然而,评估预期的过程测量边缘的矩形目标是计算更加昂贵。

OSPA规

如前所述,OSPA度量旨在描述跟踪算法的性能使用单一的分数。注意,OSPA充分捕捉跟踪算法的性能下降从GM-PHD GGIW-PHD点目标跟踪器,所述使用错误和任务指标。

ospaFig =图;情节(ospaMetric“线宽”2);传奇(点目标跟踪的,“GGIW-PHD追踪”,“矩形GM-PHD追踪”);包含(“时间步(k)”);ylabel (“OSPA”);

比较时间性能

以前,您了解了不同的技术,他们对目标模型的假设,以及由此产生的跟踪性能。现在比较追踪器的运行时。注意GGIW-PHD GM-PHD滤波器提供了重要的计算优势,降低成本的跟踪性能。

runTimeFig =图;h =情节(trackerRunTimes (3:,:)。/ trackerRunTimes(3:最终,1),“线宽”2);传奇(点目标跟踪的,“GGIW-PHD追踪”,“矩形GM-PHD追踪”);包含(“时间步(k)”);ylabel (' $ $ \压裂{t_{追踪}识别}{t_ {multiObjectTracker}识别}$ $”,“翻译”,“乳胶”,“字形大小”14);ylim (max ([h.YData]) + 1 [0]);

总结

这个例子展示了如何跟踪对象返回多个使用不同的方法在单个传感器扫描检测。这些方法可以用来跟踪对象与高分辨率传感器,如雷达或激光传感器。

引用

[1]Granstrom,卡尔,马库斯·鲍姆,Stephan路透社。和应用程序”扩展对象跟踪:介绍,概述”。信息融合的发展》杂志上。12卷,2号,2017年12月。

[2]Granstrom,卡尔,基督教Lundquist和Umut Orguner。“跟踪矩形和椭圆扩展目标使用激光测量。”14th International Conference on Information Fusion. IEEE, 2011.

[3]Granstrom,卡尔。“使用博士过滤器扩展目标跟踪。”2012

金宝app支持功能

helperExtendedTargetError

函数定义之间的误差跟踪目标和相关地面真理。

函数[posError, velError dimError yawError] = helperExtendedTargetError(跟踪、真理)%的错误作为目标跟踪的函数和相关事实。%获得真实的信息从地面真理。truePos = truth.Position (1:2)”;%的立场是后桥的所有车辆。我们想计算%的错误的中心腐烂= [cosd (truth.Yaw)信德(truth.Yaw);信德(truth.Yaw) cosd (truth.Yaw)];truePos = truePos +腐病* (truth.Wheelbase / 2; 0);trueVel = truth.Velocity (1:2);trueYaw = truth.Yaw (:);trueDims = [truth.Length; truth.Width];%从跟踪得到估计值。% GGIW-PHD跟踪输出一个结构体字段“程度”和“SourceIndex”% GM-PHD跟踪输出结构,但不是“程度”% multiObjectTracker输出objectTrack如果isa(轨道,“objectTrack”)estPos =。状态(3 [1]);estVel =。状态([2 - 4]);在multiObjectTracker %没有偏航或维度信息。estYaw =南;estDims =(南,南);elseifisfield(轨道,“程度”)%与GGIWPHD trackerPHDestPos =。状态(3 [1]);estVel =。状态([2 - 4]);estYaw = atan2d (estVel (2), estVel (1));d = eig (track.Extent);dim = 2 *倍根号(d);estDims =[最大(dim);最小(dim)];其他的%与GMPHD trackerPHDestPos = track.State (1:2);estYaw = track.State (4);estVel = [track.State (3) * cosd (estYaw); track.State(3) *信德(estYaw)];estDims = track.State(者);结束%计算2-norm为每个属性的错误。posError =规范(truePos (:)——estPos (:));velError =规范(trueVel (:)——estVel (:));dimError =规范(trueDims (:)——estDims (:));yawError =规范(trueYaw (:)——estYaw (:));结束

helperExtendedTargetDistance

函数定义一个跟踪和地面之间的距离真理。

函数dist = helperExtendedTargetDistance(跟踪、真理)%这个函数计算跟踪和真相之间的距离。% 2019 - 2020版权MathWorks公司。%在各个方面的错误[posError, velError dimError yawError] = helperExtendedTargetError(跟踪、真理);multiObjectTracker %,添加一个恒定的点球没有估计偏航%和维度如果isnan (dimError) dimError = 1;结束如果isnan (yawError) yawError = 1;结束%距离是错误的总和dist = posError + velError + dimError + yawError;结束

helperInitGGIWFilter

函数创建一个ggiwphd过滤器检测细胞。

函数博士= helperInitGGIWFilter(变长度输入宗量)% helperInitGGIWFilter函数初始化GGIW-PHD过滤的%扩展对象跟踪的例子%创建一个ggiwphd过滤器使用5个州和恒定的周转周期模型。博士= ggiwphd(0(5、1)、眼睛(5),“StateTransitionFcn”@constturn,“StateTransitionJacobianFcn”@constturnjac,“MeasurementFcn”@ctmeas,“MeasurementJacobianFcn”@ctmeasjac,“HasAdditiveMeasurementNoise”,真的,“HasAdditiveProcessNoise”假的,“ProcessNoise”诊断接头([1 1 3]),“MaxNumComponents”,1000,“ExtentRotationFcn”@extentRotFcn,“PositionIndex”3 [1]);%如果没有输入的函数即预测的部分%出生密度,没有组件被添加到混合物。如果输入参数个数= = 0%取消返回0组件。取消(博士);其他的%称为检测输入时,将两个组件添加到过滤器,%一个用于汽车和卡车,可以添加多个组件的基础上%先验知识的情况下,示例中,行人和摩托车。%这是一种“多模型”类型的方法。另一种方法可以添加% 1组件与更高维度的协方差。的%后计算的要求降低,但趋势跟踪%可观测对象的维度。例如,如果只背%可见,测量噪声可能导致物体的长度%萎缩。%检测检测=变长度输入宗量{1};%启用高程测量创建一个3 d滤波器使用% initctggiwphd如果检测{1}。SensorIndex < 7i = 1:元素个数(检测)检测{我}。测量=[检测{我}.Measurement(1); 0;检测{我}.Measurement(2:结束)];检测我{}。MeasurementNoise = blkdiag(检测{我}.MeasurementNoise(1, 1), 0.4,检测{我}.MeasurementNoise(2: 2:末端));检测{我}.MeasurementParameters (1)。HasElevation = true;结束结束phd3d = initctggiwphd(检测);%设置状态的二维滤波器使用三维滤波器博士学位。州= phd3d.States (1:5);博士学位。StateCovariances = phd3d.StateCovariances (1:5, 1:5);博士学位。DegreesOfFreedom = 1000;博士学位。ScaleMatrices =(1000 - 4) *诊断接头([4.7 / 2 1.8 / 2]。^ 2);%增加卡车维度作为第二个组件追加(博士,博士学位);phd.ScaleMatrices(:: 2) =(1000 - 4) *诊断接头([8.1 / 2 2.45 / 2]。^ 2);博士学位。GammaForgettingFactors = (1.03 - 1.03);%相对权重的组件。可视为的概率%的一辆汽车和一辆卡车在路上。博士学位。重量= (0.7 - 0.3);结束结束函数R = extentRotFcn (x, dT)%的旋转程度在预测。w = x (5);θ= w * dT;R = [cosd(θ)信德(θ);信德(θ)cosd(θ)];结束

helperInitRectangularFilter

函数创建一个gmphd矩形目标过滤检测细胞。

函数过滤器= helperInitRectangularFilter(变长度输入宗量)% helperInitRectangularFilter矩形函数来初始化%的目标博士过滤器扩展对象跟踪的例子% 2019年版权MathWorks公司。如果输入参数个数= = 0%如果没有输入,只需使用initctrectgmphd函数%过滤器没有组件创建一个博士学位。过滤器= initctrectgmphd;%设置过程噪声过滤器。ProcessNoise =诊断接头(3 [1]);其他的%称为检测输入时,将两个组件添加到过滤器,%一个用于汽车和卡车,可以添加多个组件的基础上%先验知识的情况下,示例中,行人和摩托车。%这是一种“多模型”类型的方法。另一种方法可以添加% 1组件与更高维度的协方差。的%后计算的要求降低,但趋势跟踪%可观测对象的维度。例如,如果只背%可见,测量噪声可能导致物体的长度%萎缩。%检测检测=变长度输入宗量{1};%创建一个矩形的GM-PHD滤波器模型过滤器= initctrectgmphd(检测);%轿车的长度宽度filter.States(者,1)= (4.7,1.8);%的高确定性的维度lCov = 1的军医;wCov = 1的军医;lwCorr = 0.5;lwCov =√lCov * wCov) * lwCorr;filter.StateCovariances(者者1)= (lCov lwCov; lwCov wCov);%添加一个组件通过附加过滤器本身。追加(过滤器,过滤器);%长度和宽度设置为一辆卡车维度filter.States(者,2)= (8.1,2.45);%每个组件的相对权重过滤器。重量= (0.7 - 0.3);结束结束

相关的话题