主要内容

基于雷达和摄像头的公路车辆扩展目标跟踪

这个示例向您展示了如何围绕自我车辆跟踪高速公路车辆。车辆是扩展对象,其尺寸跨越多个传感器分辨率单元。因此,传感器在一次扫描中报告对这些物体的多个检测。在本例中,您将使用不同的扩展对象跟踪技术来跟踪公路车辆并评估其跟踪性能的结果。

介绍

在传统的跟踪方法中,如全局最近邻(多目标跟踪器跟踪器),联合概率数据关联(追踪器JPDA)和多假设跟踪(trackerTOMHT),则假定跟踪对象在每次传感器扫描时返回一次检测。随着分辨率更高的传感器(如高分辨率雷达)的发展,传感器通常会返回一个以上的目标检测。例如,下图描绘了跨越多个雷达分辨率单元的单个车辆的多个检测。在这种情况下,用于跟踪对象的技术称为扩展对象跟踪[1]。

使用高分辨率传感器的主要好处是获得更多有关物体的信息,比如它的尺寸和方向。这种附加信息可以提高检测概率,降低误报率。

扩展对象对传统跟踪器提出了新的挑战,因为这些跟踪器假定每个对象每个传感器都有一个单一的检测。在某些情况下,可以将传感器数据聚类,为传统跟踪器提供对每个对象的单一检测。然而,这样做可能会失去使用高分辨率传感器的好处。

相比之下,扩展对象跟踪器可以对每个对象处理多个检测。此外,这些跟踪器不仅可以估计目标的位置和速度等运动状态,还可以估计目标的尺寸和方向。在本例中,您使用以下跟踪器围绕ego车辆跟踪车辆:

  • 传统的点目标模型多目标跟踪器,多目标跟踪器

  • GGIW-PHD(伽马高斯逆Wishart PHD)跟踪器,追踪器ggiwphd滤器

  • GM-PHD(高斯混合PHD)跟踪器,追踪器gmphd基于矩形目标模型的滤波器

您将使用评估所有跟踪器的跟踪结果跟踪误差度量trackAssignmentMetrics,它提供了跟踪器有效性的多种度量。您还将使用最优子模式分配度量(OSPA)评估结果,轨道光度法,其目的是使用综合分数评估跟踪器的性能。

安装程序

脚本

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

在本例中,您模拟一个ego车辆,它有6个雷达传感器和2个视觉传感器,覆盖360度视野。传感器存在一定的重叠和覆盖间隙。ego车辆在前部和后部都配备了远程雷达传感器和视觉传感器。车辆的每一侧都有两个近程雷达传感器,每个覆盖90度。两侧各有一个传感器,覆盖车辆的中部到尾部。两侧的另一个传感器从车辆的中间向前覆盖。

%创建场景exPath=fullfile(matlabroot,“例子”“驾驶融合”“主要的”);addpath(exPath)[场景、egoVehicle、传感器]=帮助创建场景;%创建显示对象显示=帮助扩展目标跟踪显示;%创建动画编写器来记录图形的每一帧%动画写作。设置'RecordGIF'为真,启用GIF写入。gifWriter=helperGIFWriter(“图”,display.Figure,...“RecordGIF”,假);

指标

在本例中,您使用一些关键指标来评估每个跟踪器的跟踪性能。特别是,您根据跟踪器在估计位置、速度、尺寸(长度和宽度)和物体方向方面的准确性来评估跟踪器。可以使用跟踪误差度量为了定义跟踪目标的地面真实度误差,本例使用“自定义”误差函数,帮助扩展目标恐怖,列在本例的最后。

您还将基于诸如假轨道或冗余轨道的数量等指标来评估性能。这些指标可以使用trackAssignmentMetrics类。为了定义跟踪目标和真实对象之间的距离,这个例子使用了一个'custom'错误函数,HelperExtendedTargetInstance,列在本例的最后。该函数将距离度量定义为位置、速度、尺寸和偏航的距离之和。

跟踪误差度量trackAssignmentMetrics提供跟踪算法有效性的多种度量。您还将根据最优子模式分配度量(OSPA)评估性能,该度量在每个时间步为跟踪算法提供一个分数值。此度量可以使用轨道光度法类。为OSPA定义的“自定义”距离函数与分配度量相同。

%函数返回给定轨迹和真相的错误。errorFcn=@(跟踪,真相)帮助扩展目标恐怖(跟踪,真相);%函数返回轨迹和真值之间的距离distFcn=@(跟踪,真相)帮助扩展目标立场(跟踪,真相);%函数从地面返回ID。默认值%标识符假定事实是用PlatformID标识的。在%在驱动场景中,真理被一个ActorID识别。truthIdFcn = @ (x) [x.ActorID];%创建度量对象。tem=跟踪误差度量(...“ErrorFunctionFormat”“习俗”...“EstimationErrorLabels”,{的位置误差“VelocityError”“DimensionsError”“YawError”},...“EstimationErrorFcn”,errorFcn,...“TruthiIdentifierFCN”,truthIdFcn);tam=轨迹分配度量(...“距离函数格式”“习俗”...“AssignmentDistanceFcn”distFcn,...“发散距离FCN”distFcn,...“TruthiIdentifierFCN”,truthIdFcn,...“AssignmentThreshold”,30,...“发散阈值”35);%创建度量对象汤姆= trackOSPAMetric (...“距离”“习俗”...“距离FCN”distFcn,...“TruthiIdentifierFCN”, truthIdFcn);

点对象跟踪

多目标跟踪器系统对象™ 假设每个传感器每个对象检测一次,并使用全局最近邻方法将检测与轨迹关联。它假设每个对象在一次扫描中最多可由传感器检测一次。在这种情况下,模拟雷达传感器具有足够高的分辨率,以生成每个对象的多个检测。如果这些检测不是c群集化后,跟踪器会为每个对象生成多个轨迹。群集化会为每个群集返回一个检测,但代价是具有更大的不确定性协方差,并丢失有关真实对象维度的信息。群集化还使两个对象彼此靠近时难以区分,例如,当一辆车停在一起时另一辆车。

trackerRunTimes=零(0,3);Osparametric=零(0,3);%创建一个多对象跟踪器跟踪器=多对象跟踪器(...“FilterInitializationFcn”,@helperInitPointFilter,...“AssignmentThreshold”30岁的...“ConfirmationThreshold”, [4 5],...“删除阈值”3);为可重复的结果重置随机数生成器seed=2018;S=rng(种子);时间步长=1;%对于多目标跟踪器,雷达在Ego笛卡尔框架中报告,并且%不报告速度。这允许我们对来自多个站点的检测进行聚类%传感器。i=1:6传感器{i}.HasRangeRate=false;传感器{i}.DetectionCoordinates=“身体”结束

运行场景

虽然advance(场景)和ishghandle(display.Figure)%获取场景时间时间=scenario.SimulationTime;%从ego车辆传感器收集检测结果[检测,isValidTime]=帮助检测(传感器,电子车辆,时间);%更新跟踪器,如果有新的检测如果任何(isValidTime)%必须首先对点跟踪器的检测进行聚类detectionClusters = helperClusterRadarDetections(检测);%更新跟踪器抽搐%确认跟踪位于场景坐标中确认跟踪=更新跟踪(跟踪程序、检测群集、时间);t=toc;%更新指标% a.获得地面真理背景真相=场景。参与者(2:结束);%除了自我%b.更新分配指标tam(确认跟踪,地面真相);[trackid,truthIDs]=当前分配(tam);% c.更新错误度量tem (confirmedTracks trackIDs、groundTruth truthIDs);%d。更新ospa指标OsParametric(时间步,1)=tom(确认跟踪,地面真相);%更新鸟's-eye-plot%将轨迹转换为ego坐标以便显示confirmedTracksEgo=helperConvertToego坐标(电子车辆,confirmedTracks);显示(电子车辆,传感器,检测,confirmedTracksEgo,检测群集);drawnow;%记录跟踪器运行时间trackerRunTimes(timeStep,1)=t;timeStep=timeStep+1;%捕捉动画帧giftwriter();结束结束%获取累积跟踪指标。误差度量显示了平均值模拟误差的%值。assignmentMetricsMOT = tam.trackMetricsTable;errorMetricsMOT = tem.cumulativeTruthMetrics;%如果请求写GIFwriteAnimation(作者,“multiObjectTracking”);

这些结果表明,通过聚类,跟踪器可以跟踪场景中的对象。但是,它也显示与超车车辆相关的轨迹(黄色)从场景开始时的车辆前部移动到场景结束时的车辆后部。在场景开始时,超车车辆位于ego车辆后面(蓝色),因此雷达和视觉检测是从其前部进行的。当超车车辆经过ego车辆时,雷达检测是从超车车辆的侧面进行的,然后从其后部进行,并且轨道移动到车辆的后部。

您还可以看到集群不是完美的。当经过的车辆经过ego车辆后面的车辆(紫色)时,由于聚类不完善,两条轨道略微向左移动。由于缺少部分侧边时会创建多个簇,因此最初会在轨迹上创建冗余轨迹。此外,由于检测之间的距离增加,在结束时,过往车辆上会出现冗余轨迹。

GGIW-PHD扩展目标跟踪器

在本节中,您将使用GGIW-PHD跟踪器(追踪器ggiwphd)跟踪对象。与多目标跟踪器GGIW-PHD是一种多目标滤波器,用于描述场景的概率假设密度(PHD)。为了对扩展目标建模,GGIW-PHD使用以下分布:

伽马射线:描述预期检测次数的正值。

高斯分布:描述目标运动状态的状态向量

Inverse-Wishart:正定矩阵,用来描述椭圆的范围。

该模型假设每个分布相互独立。因此,GGIW-PHD滤波器中的概率假设密度(PHD)由几个GGIW分量的概率密度函数的加权和来描述。

一个PHD跟踪器需要计算密度中每个组件的可检测性。可检测性的计算需要跟踪器所使用的每个传感器的配置。您定义这些配置为追踪器使用trackingSensorConfiguration班回顾帮助创建传感器配置函数查看如何利用传感器属性定义跟踪器的传感器配置。

%设置传感器配置传感器配置=帮助创建传感器配置(传感器、车辆);%转换函数和过滤器初始化函数为状态和%依赖于筛选器。因此,它们不在helper函数中设置。i = 1:元素个数(sensorConfigurations)您可以使用不同的技术来初始化每个过滤器%传感器通过使用不同的功能,为每个配置。sensorConfigurations{}。FilterInitializationFcn= @helperInitGGIWFilter;%轨迹在场景中的恒定转弯率状态空间中定义%坐标。恒定转动率模型的MeasurementFcn可以是%用作转换函数。sensorConfigurations{i}.SensorTransformFcn=@ctmeas;结束

定义跟踪。

与点对象跟踪器不同,点对象跟踪器通常考虑一个分区(群集)对于检测,trackerPHD创建一组检测的多个可能分区,并根据PHD过滤器中的当前组件对其进行评估。下面函数中的3和5定义了检测之间的上下马氏距离。这相当于定义每个检测簇必须至少有3个分辨率分辨率分开,最多相隔5个分辨率。辅助功能围绕分区检测,不使用距离率测量来从侧面雷达进行分区检测。万博 尤文图斯

partFcn=@(x)helperPartingfcn(x,3,5);tracker=trackerPHD(“SensorConfigurations”,传感器配置,...“分割FCN”,partFcn,...“AssignmentThreshold”, 450,...%添加出生成分的检测单元(每个单元多次检测)的最小负对数似然。“ExtractionThreshold”, 0.75,...%要声明为轨迹的筛选器组件的权重阈值“ConfirmationThreshold”, 0.85,...%要声明为已确认轨迹的过滤器组件的权重阈值“Merging阈值”,50,...%合并组件的阈值“HassensorConfiguration输入”,真正的...%跟踪在场景帧中执行,因此传感器配置随时间而变化);

运行模拟。

%释放并重新启动所有对象。重启(场景);释放(tem);释放(tam);%追踪者phd不罚tam.AssignmentThreshold=tam.AssignmentThreshold-2;释放(显示);display.PlotClusteredDetection=false;gifWriter.pFrames={};I = 1:numel(sensors)释放(sensors{I});如果i<=6个传感器{i}.HasRangeRate=true;传感器{i}.DetectionCoordinates=“球形传感器”结束结束%恢复随机种子。rng(种子)第一次步长步伐= 1;%运行场景虽然advance(场景)和ishghandle(display.Figure)%获取场景时间时间=scenario.SimulationTime;获得其他车辆在自我坐标下的姿态ta=目标姿态(egoVehicle);%从ego车辆传感器收集检测结果[检测,isValidTime,配置]=帮助检测(传感器,电子车辆,时间,传感器配置);%使用所有检测更新跟踪器。请注意,没有%在将检测结果传递给跟踪器之前,需要对其进行聚类。%此外,传感器配置作为输入传递给%追踪器。抽搐%确认跟踪位于场景坐标中confirmedTracks =追踪(检测、配置时间);t = toc;%更新指标% a.获得地面真理背景真相=场景。参与者(2:结束);%除了自我%b.更新分配指标tam(确认跟踪,地面真相);[trackid,truthIDs]=当前分配(tam);% c.更新错误度量tem (confirmedTracks trackIDs、groundTruth truthIDs);%d。更新ospa指标ospaMetric(timeStep,2) = tom(confirmedTracks, groundTruth);%更新鸟瞰图%将轨迹转换为ego坐标以便显示confirmedTracksEgo=helperconverttoego坐标(电子车辆,confirmedTracks);显示器(电子车辆、传感器、检测、确认跟踪SEGO);现在抽;%记录跟踪器运行时间trackerRunTimes(timeStep,2)=t;timeStep=timeStep+1;%捕获GIF的帧giftwriter();结束%获取真相并跟踪度量表assignmentMetricsGGIWPHD = tam.trackMetricsTable;errorMetricsGGIWPHD = tem.cumulativeTruthMetrics;%如果请求写GIFwriteAnimation(作者,“ggiwphdTracking”);

这些结果表明,GGIW-PHD可以处理每个传感器每个对象的多个检测,而不需要首先对这些检测进行聚类。此外,通过多次检测,跟踪器估计每个目标的位置、速度、尺寸和方向。图中的虚线椭圆表示目标的预期范围。过滤器初始化函数使用多个组件指定多种可能的大小及其相对权重。可以扩展该列表以添加更多的大小,并增加计算复杂度。相反,您也可以在维度上以更高的不确定性初始化每个检测的一个组件。这将使跟踪器自动估计物体的尺寸。也就是说,估计的准确性将取决于目标尺寸的可观察性,并且容易受到目标围绕自我飞行器移动时轨迹尺寸的缩小和扩大的影响。

GGIW-PHD滤波器假设检测分布在目标的椭圆中心周围。因此,轨道倾向于跟随车辆的可观察部分。此类可观察部分包括ego车辆正前方的车辆后表面或ego车辆正后方的车辆前表面,例如,ego车辆正前方和后方的车辆后表面和前表面。相比之下,在模拟过程中完全观察到过往车辆的长度和宽度。因此,其估计椭圆与实际形状有更好的重叠。

GM-PHD矩形目标跟踪器

在本节中,您将使用GM-PHD跟踪器(追踪器gmphd)及矩形目标模型(initctrectgmphd(传感器融合和跟踪工具箱))跟踪对象。与ggiwphd,它使用椭圆形状来跟踪范围,gmphd允许您使用高斯分布定义所选形状。矩形目标模型由运动模型定义,ctrect(传感器融合和跟踪工具箱)ctrectjac(传感器融合和跟踪工具箱)和测量模型,ctrectmeas(传感器融合和跟踪工具箱)ctrectmeasjac(传感器融合和跟踪工具箱)

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

i = 1:numel(sensorConfigurations) sensorConfigurations{i}。FilterInitializationFcn = @helperInitRectangularFilter;%初始化一个矩形目标gmphdSensorConfiguration{i}.SensorTransformFcn=@ctrectcorners;%使用角点计算检测概率结束%使用新的传感器配置定义跟踪器tracker=trackerPHD(“SensorConfigurations”,传感器配置,...“分割FCN”,partFcn,...“AssignmentThreshold”,600,...%检测单元添加出生成分的最小负对数可能性“ExtractionThreshold”, 0.85,...%要声明为轨迹的筛选器组件的权重阈值“ConfirmationThreshold”, 0.95,...%要声明为已确认轨迹的过滤器组件的权重阈值“Merging阈值”,50,...%合并组件的阈值“HassensorConfiguration输入”,真正的...%跟踪在场景帧中执行,因此传感器配置随时间而变化);%释放并重新启动所有对象。重启(场景);I = 1:numel(sensors)释放(sensors{I});结束释放(tem);释放(tam);释放(显示);display.PlotClusteredDetection=false;gifWriter.pFrames={};%恢复随机种子。rng(种子)第一次步长步伐= 1;%运行场景虽然advance(场景)和ishghandle(display.Figure)%获取场景时间时间=scenario.SimulationTime;获得其他车辆在自我坐标下的姿态ta=目标姿态(egoVehicle);%从ego车辆传感器收集检测结果[检测,isValidTime,配置]=帮助检测(传感器,电子车辆,时间,传感器配置);%使用所有检测更新跟踪器。请注意,没有%在将检测结果传递给跟踪器之前,需要对其进行聚类。%此外,传感器配置作为输入传递给%追踪器。抽搐%确认跟踪位于场景坐标中confirmedTracks =追踪(检测、配置时间);t = toc;%更新指标% a.获得地面真理背景真相=场景。参与者(2:结束);%除了自我%b.更新分配指标tam(确认跟踪,地面真相);[trackid,truthIDs]=当前分配(tam);% c.更新错误度量tem (confirmedTracks trackIDs、groundTruth truthIDs);%d。更新ospa指标OsParametric(时间步,3)=tom(确认跟踪,地面真相);%更新鸟瞰图%将轨迹转换为ego坐标以便显示confirmedTracksEgo=helperconverttoego坐标(电子车辆,confirmedTracks);显示器(电子车辆、传感器、检测、确认跟踪SEGO);现在抽;%记录跟踪器运行时间trackerRunTimes(timeStep,3)=t;timeStep=timeStep+1;%捕获GIF的帧giftwriter();结束%获取真相并跟踪度量表assignmentMetricsGMPHD = tam.trackMetricsTable;errorMetricsGMPHD = tem.cumulativeTruthMetrics;%如果请求写GIFwriteAnimation(作者,“gmphdTracking”);返回随机数生成器到它以前的状态rng (S) rmpath (exPath)

这些结果表明,GM-PHD还可以处理每个传感器每个对象的多个检测。与GGIW-PHD类似,它还估计对象的大小和方向。过滤器初始化功能使用与GGIW-PHD跟踪器类似的方法,并针对不同的尺寸初始化多个组件。

您可以注意到,被建模为矩形的估计轨迹与由纯色面片描绘的模拟地面真实对象非常吻合。特别是,轨迹能够正确跟踪车辆的形状以及运动中心。

评估跟踪性能

使用定量指标(如位置、速度、尺寸和方向的估计误差)评估每个跟踪器的跟踪性能。还使用冗余和假轨迹等指标评估轨迹分配。

分配指标

helperPlotAssignmentMetrics(assignmentMetricsMOT、AssignmentMetricsGGIWPPH、assignmentMetricsGMPHD);

分配指标表明,冗余和错误轨迹由点目标跟踪器初始化和确认。这些轨迹是由于不完全聚类造成的,属于同一目标的检测被聚类成多个聚类检测。相比之下,GGIW-PHD跟踪器和GM-PHD跟踪器保持轨迹在所有四个目标上,不创建任何虚假或冗余轨迹。这些指标表明,两个扩展对象跟踪器都正确地划分检测并将它们与正确的轨迹关联。

误差度量

helperPlotErrorMetrics(errorMetricsMOT、ErrorMetricsGGIWPH、errorMetricsGMPHD);

该图显示了本例中使用的三种跟踪器的平均估计误差。由于点对象跟踪器不估计对象的偏航和尺寸,因此它们现在显示在绘图中。点目标跟踪器能够以合理的精度估计目标的运动学。ego车辆后面车辆的位置误差更大,因为当过往车辆超过该车辆时,该车辆被拖向左侧。当对象彼此接近时,这也是不完美聚类的产物。

如前所述,GGIW-PHD跟踪器假设测量是围绕物体的范围分布的,结果是在车辆可观察部分的轨迹中心。这也可以在TruthID 2和4的位置误差度量中看到。跟踪器能够估计物体的尺寸,精度约为0.3米的车辆前后自我车辆。因为车辆的尺寸定义有更高的确定性helperInitGGIWFilter功能,跟踪器不会折叠这些车辆的长度,即使当最适合的椭圆有一个非常低的长度。由于通过的车辆(TruthID 3)在所有尺寸上都被观察到,其尺寸的测量比其他车辆更准确。然而,当经过的车辆相对于自我车辆进行机动时,偏航估计的误差较大。

本例中的GM-PHD使用一个矩形形状的目标模型,并使用接收到的测量值来评估目标边界上的预期测量值。该模型有助于跟踪器更准确地估计形状和方向。然而,评估矩形目标边缘的预期测量值的过程在计算上更加昂贵。

OSPA规

如前所述,OSPA指标旨在描述使用单个分数的跟踪算法的性能。请注意,OSPA充分捕获了跟踪算法的性能,该算法从GM-PHD到GGIW-PHD再到点目标跟踪器,如使用错误和分配度量所述。

ospaFig=图形;曲线图(OsParametric,“线宽”2);传奇(点目标跟踪的“GGIW-PHD跟踪器”“矩形GM-PHD跟踪器”);包含('时间步长(k)');伊莱贝尔(“OSPA”);

比较时间性能

之前,您了解了不同的技术、它们对目标模型的假设以及由此产生的跟踪性能。现在比较跟踪器的运行时间。请注意,GGIW-PHD过滤器与GM-PHD相比具有显著的计算优势,但跟踪性能降低。

runTimeFig=figure;h=plot(trackerRunTimes(3:end,:)./trackerRunTimes(3:end,1),“线宽”2);传奇(点目标跟踪的“GGIW-PHD跟踪器”“矩形GM-PHD跟踪器”);包含('时间步长(k)');伊莱贝尔(“$$\frac{t{tracker}}{t{multiObjectTracker}}$$”“口译员”“乳胶”“字体大小”,14); ylim([0最大值([h.YData])+1]);

总结

此示例演示了如何使用不同的方法跟踪在单个传感器扫描中返回多个检测结果的对象。这些方法可用于使用高分辨率传感器(如雷达或激光传感器)跟踪对象。

参考文献

[1] Granström, Karl, Marcus Baum, Stephan Reuter。扩展对象跟踪:介绍,概述和应用信息融合进展杂志.2017年12月,第12卷第2期。

[2] Granström, Karl, Christian Lundquist和Umut Orguner。“用激光测量跟踪矩形和椭圆扩展目标。”第十四届国际信息融合会议。IEEE 2011。

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

万博1manbetx辅助功能

帮助扩展目标恐怖

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

作用[posError, velError dimError yawError] = helperExtendedTargetError(跟踪、真理)%误差是目标轨迹和相关真理的函数。%从地面真相中获取真实信息。真位=真位(1:2)';%所有车辆的位置都在后轴上。我们想要计算%从车辆中心的误差rot=[cosd(truth.Yaw)-sind(truth.Yaw);sind(truth.Yaw)cosd(truth.Yaw)];truePos=truePos+rot*[truth.Wheelbase/2;0];trueVel=truth.Velocity(1:2);trueYaw=truth.Yaw(:);trueDims=[truth.Length;truth.Width];%从轨迹中获取估计值。%GGIW-PHD跟踪器输出结构字段“区段”和“源索引”%GM-PHD跟踪器输出结构,带但不带“范围”%multiObjectTracker输出objectTrack如果isa(轨道,“objectTrack”)estPos=轨道状态([13]);estVel=轨道状态([24]);%multiObjectTracker中没有偏航或尺寸信息。Estaw=nan;estDims=[nan;nan];埃尔塞夫isfield(轨道,“程度”%带有GGIWPHD的trackerPHDestPos=轨道状态([13]);estVel=轨道状态([2 4]);estYaw=atan2d(estVel(2),estVel(1));d=eig(轨道范围);尺寸=2*sqrt(d);estDims=[最大(dims);最小(dims)];其他的%带有GMPHD的trackerPHDestPos = track.State (1:2);estYaw = track.State (4);estVel = [track.State (3) * cosd (estYaw); track.State(3) *信德(estYaw)];estDims = track.State(者);结束%计算每个属性的2-范数错误。posError=norm(truePos(:)-estPos(:);velError=norm(trueVel(:)-estVel(:);dimeror=norm(trueDims(:)-estDims(:);yawError=norm(trueYaw(:)-estYaw(:);结束

HelperExtendedTargetInstance

函数定义轨迹和地面真相之间的距离。

作用dist = helperExtendedTargetDistance(跟踪、真理)%此函数计算轨迹和真值之间的距离。%版权2019-2020 MathWorks公司。%各方面的错误[posError, velError dimError yawError] = helperExtendedTargetError(跟踪、真理);%对于multiObjectTracker,为不估计偏航添加一个常量惩罚%和尺寸如果isnan(二聚体)二聚体=1;结束如果isnan(yaerror) yaerror = 1;结束%距离是误差的总和dist=posError+velError+dimeror+yawError;结束

helperInitGGIWFilter

函数从检测单元创建GGIWPH过滤器。

作用phd=helperInitGGIWFilter(varargin)%helperInitGGIWFilter一个函数,用于初始化%扩展对象跟踪示例%使用5个状态和恒定转动率模型创建GGIWPPH过滤器。phd=GGIWPH(零(5,1),眼睛(5),...“StateTransitionFcn”,@constturn,...“StateTransitionJacobianFcn”,@constturnjac,...“MeasurementFcn”,@ctmeas,...“MeasurementJacobianFcn”,@ctmeasjac,...“HasAdditiveMeasurementNoise”符合事实的...“HasAdditiveProcessNoise”错误的...“ProcessNoise”,diag([13]),...“MaxNumComponents”,1000,...“ExtentRotationFcn”,@extentRotFcn,...“PositionIndex”3 [1]);%如果在没有输入的情况下调用函数,即%出生密度,不添加任何成分的混合物。如果纳金==0返回0个组件。取消(博士);其他的%使用detections输入调用时,将两个组件添加到过滤器中,%一个用于汽车,一个用于卡车,可根据需要添加更多部件%事先了解场景,例如行人或摩托车。%这是一种“多模型”类型的方法。另一种方法是添加%只有一个分量在维度中具有较高的协方差。的% later在计算上要求较低,但倾向于跟踪%物体的可观察尺寸。例如,如果只有背面是%可见,测量噪声可能会导致对象的长度缩短%收缩。%探测检测=变长度输入宗量{1};%启用高程测量以使用创建三维过滤器%initctggiwphd如果检测{1}。SensorIndex < 7I = 1:numel(detections)检测{I}。测量=[检测{我}.Measurement(1); 0;检测{我}.Measurement(2:结束)];检测我{}。MeasurementNoise = blkdiag(检测{我}.MeasurementNoise(1, 1), 0.4,检测{我}.MeasurementNoise(2: 2:末端));检测{我}.MeasurementParameters(1)。HasElevation = true;结束结束phd3d=初始CTGGIWPH(检测);%使用3-D过滤器设置2-D过滤器的状态博士学位。州= phd3d.States (1:5);博士学位。StateCovariances = phd3d.StateCovariances (1:5, 1:5);博士学位。DegreesOfFreedom = 1000;博士学位。scalematrice = (1000-4)*diag([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(θ)-sind(θ);sind(θ)cosd(θ)];结束

HelperInTerlectangularFilter

函数从检测单元创建gmphd矩形目标滤波器

作用filter=helperInitRectangularFilter(varargin)% helperInitRectangularFilter用于初始化矩形的函数%扩展对象跟踪示例的目标PHD过滤器版权所有2019 The MathWorks, Inc.如果纳金==0%如果调用时没有输入,只需使用initctrectgmphd函数%创建一个没有组件的PHD过滤器。过滤器= initctrectgmphd;%设置过程噪声过滤器。ProcessNoise = diag([1 3]);其他的%使用detections输入调用时,将两个组件添加到过滤器中,%一个用于汽车,一个用于卡车,可根据需要添加更多部件%事先了解场景,例如行人或摩托车。%这是一种“多模型”类型的方法。另一种方法是添加%只有一个分量在维度中具有较高的协方差。的% later在计算上要求较低,但倾向于跟踪%物体的可观察尺寸。例如,如果只有背面是%可见,测量噪声可能会导致对象的长度缩短%收缩。%探测检测=变长度输入宗量{1};%创建一个带有矩形模型的GM-PHD过滤器过滤器=初始CtrectGMPhd(检测);%客车的长宽filter.States(者,1)= (4.7,1.8);%尺寸的高度确定性lCov=1e-4;wCov=1e-4;lwCorr=0.5;lwCov=sqrt(lCov*wCov)*lwCorr;状态协方差(6:7,6:7,1)=[lCov lwCov;lwCov wCov];%添加一个额外的组件通过附加过滤器自身。附加(过滤器,过滤器);%将长度和宽度设置为卡车尺寸filter.States(者,2)= (8.1,2.45);%每个组件的相对重量权重=[0.7 0.3];结束结束

另请参阅

||(传感器融合和跟踪工具箱)|(传感器融合和跟踪工具箱)|(传感器融合和跟踪工具箱)

相关话题