主要内容

trackerPHD

多传感器,多目标PHD跟踪器

描述

trackerPHD系统对象™是一种跟踪器,能够处理来自多个传感器的多个目标检测。该跟踪器使用多目标概率假设密度(PHD)滤波器来估计点目标和扩展目标的状态。PHD是定义在跟踪系统状态空间上的函数,其在某一状态处的值定义为单位状态空间体积上的目标期望数量。PHD由概率密度函数的加权和(混合)表示,PHD中的峰值对应可能的目标。有关跟踪器如何工作的概述,请参见算法

默认情况下,trackerPHD可以使用ggiwphd过滤器,它将来自扩展对象的检测建模为解析点云。你也可以用trackerPHDgmphd过滤器,它跟踪点目标和具有指定形状的扩展对象。跟踪器的输入是由生成的检测报告objectDetectionfusionRadarSensorirSensor,或sonarSensor对象。跟踪器输出所有维护的跟踪及其分析信息。

使用此对象跟踪目标:

  1. 创建trackerPHD对象并设置其属性。

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

跟踪器= trackerPHD创建一个trackerPHD具有默认属性值的系统对象。

例子

跟踪器= trackerPHD (名称,值使用一个或多个名称-值对设置跟踪器的属性。例如,trackerPHD (' MaxNumTracks ', 100)创建一个PHD跟踪器,最多允许100个跟踪。将每个属性名用引号括起来。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果属性是可调,您可以随时更改其值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统

唯一的跟踪器标识符,指定为非负整数。属性用作SourceIndex在跟踪器输出中,并在多跟踪器系统中区分来自不同跟踪器的跟踪。必须将此属性指定为正整数,才能将曲目输出用作曲目预热器的输入。

例子:1

跟踪传感器的配置,指定为trackingSensorConfiguration对象的数组trackingSensorConfiguration对象,或者单元格数组的数组trackingSensorConfiguration对象。此属性向跟踪器提供跟踪传感器配置信息,例如传感器检测限制和传感器分辨率。方法没有默认值SensorConfigurations属性,并且必须指定SensorConfigurations属性之前使用跟踪器。但是,您可以通过设置HasSensorConfigurationsInput财产真正的并指定配置输入,配置.如果你设置MaxDetsPerObject财产的trackingSensorConfiguration对象到1时,跟踪器只创建一个分区,这样最多只能给每个目标分配一个检测。

控件的属性名相同的字段名的结构也可以指定此属性trackingSensorConfiguration对象。

函数将检测划分到检测单元中,指定为函数句柄或字符向量。当每个传感器可以报告每个对象的多个检测时,需要一个配分函数。分区函数报告来自传感器的所有可能的检测分区。在每个分区中,检测被分离到相互排斥的检测单元中,假设每个检测单元属于一个扩展对象。

您还可以指定自己的detections配分函数。为获得编写此函数的指导,您可以查看默认分区函数的详细信息,partitionDetections,使用类型命令为:

类型partitionDetections

例子:@myfunction“myfunction”

数据类型:function_handle|字符

新目标的出生率密度,指定为一个标量。出生率表示单位时间内增加密度的预期目标数。出生密度是通过使用FilterInitializationFcntrackingSensorConfiguration与追踪器一起使用。一般来说,跟踪器以两种方式向密度函数添加组件:

  1. 预测出生密度-初始密度FilterInitializationFcn函数在没有输入的情况下调用。

  2. 自适应出生密度-初始化的密度FilterInitializationFcn函数在使用检测输入调用时。跟踪器根据其与目标当前估计的关联的对数似然选择检测。

的值出生率属性表示每个时间步的预测出生密度和自适应出生密度的总和。

例子:0.01

数据类型:|

密度中成分的死亡率,指定为标量。死亡率是指某一组分在经过一个时间步后在密度中消失的速率。死亡率(Pd)与存活概率(P年代)在连续时间步之间的一个分量

P 年代 1 P d Δ T

在哪里ΔT是时间步长。

例子:1的军医

数据类型:|

为组件初始化选择检测的阈值,指定为正标量。在校正期间,跟踪器计算现有轨迹和检测单元之间关联的可能性。如果检测单元与所有现有航迹的关联似然(由负对数似然给出)高于阈值(即检测单元与现有航迹的关联似然较低),则使用检测单元在自适应出生密度中初始化新组件。

例子:18.1

数据类型:|

初始化暂定轨道的阈值,指定为标量。如果部件的权重大于部件的权重阈值ExtractionThreshold属性时,组件被标记为“初步”跟踪和给定TrackID

例子:0.45

数据类型:|

用于跟踪确认的阈值,指定为标量。在一个trackerPHD对象时,一个音轨可以有多个共享同一音轨的组件TrackID.方法指定的阈值ConfirmationThreshold属性,轨道的状态被标记为“确认”

例子:0.85

数据类型:|

组件删除的阈值,指定为一个标量。在PHD跟踪器中,如果组件的权重低于DeletionThreshold属性后,该组件将被删除。

例子:0.01

数据类型:|

组件合并的阈值,指定为实正标量。在PHD跟踪器中,如果Kullback-Leibler分量之间的距离相同TrackID参数指定的值小于MergingThreshold属性,然后将这些组件合并到一个组件中。新组件的合并权重等于预先合并组件的权重之和。方法中指定的第一个阈值LabelingThresholds属性,合并的权值将被截断为第一个阈值。注意,具有TrackID等于0也可以相互合并。

例子:30.

数据类型:|

标记阈值,指定为正数值递减的1 × 3向量,[C1C2C3.].基于LabelingThresholds属性,跟踪器使用以下规则管理密度中的组件:

  1. 高于第一个阈值的任何分量的权值C1减少到C1

  2. 对于所有组件具有相同的TrackID,如果这些分量中的最大权重大于C2,则保留权重最大的构件,以保留TrackID,而所有其他组件将被删除。

  3. 对于所有组件具有相同的TrackID,如果最大权重与所有这些分量的权重之和之比大于C3.,则保留权重最大的构件,以保留TrackID,而所有其他组件将被删除。

  4. 如果条件2和条件3都不满足,则权重最大的分量保留TrackID,而所有其他组件的标签设置为0。当出现这种情况时,本质上意味着一些组件可能表示其他对象。这种处理使这些未保留的成分在未来再次被提取的可能性得以保留。

数据类型:|

启用随时间更新传感器配置,指定为真正的.将此属性设置为真正的如果你想让传感器的配置随时间更新。此外,当此属性设置为真正的,必须使用配置输入调用跟踪器,配置,如用法语法所示。

数据类型:逻辑

航迹状态参考帧的参数,指定为结构或结构数组。跟踪器通过它的StateParameters属性值设置为StateParameters属性。您可以使用这些参数来定义报告音轨的参考框架或生成的音轨的其他所需属性。

例如,您可以使用以下结构来定义原点位置为的矩形参考系(10 10 0)米,它的起始速度相对于场景坐标系是[2 -2 0]米每秒。

字段名 价值
框架 “矩形”
位置 (10 10 0)
速度 (2 2 0)

可调:是的

数据类型:结构体

此属性是只读的。

由跟踪器维护的跟踪数,作为非负整数返回。

数据类型:

此属性是只读的。

已确认的轨道数,作为非负整数返回。如果IsConfirmed输出轨迹结构的场为真正的,轨迹已确认。

数据类型:

可连接到跟踪器的最大传感器数量,指定为正整数。MaxNumSensors必须大于或等于的最大值SensorIndex在更新追踪器的所有检测中都发现了。SensorIndex的属性objectDetection对象。

数据类型:|

跟踪器可以维护的最大跟踪数,指定为正整数。

数据类型:|

跟踪器可以维护的最大组件数,指定为正整数。

数据类型:|

使用

要处理检测和更新跟踪,可以使用参数调用跟踪器,就好像它是一个函数一样(在这里描述)。

描述

confirmedTracks=跟踪器(检测时间返回从检测列表中更新的已确认曲目列表,检测,在更新时,时间.已确认的航迹将被更正并预测到更新时间。

例子

confirmedTracks=跟踪器(检测配置时间还指定了传感器配置输入,配置.当传感器的配置随时间变化时,使用此语法。要启用此语法,请设置HasSensorConfigurationsInput财产真正的

confirmedTrackstentativeTracksallTracks) =跟踪器(___也返回一个暂定曲目列表,tentativeTracks,以及所有曲目的列表,allTracks.您可以将此输出语法与前面的任何输入语法一起使用。

confirmedTrackstentativeTracksallTracksanalysisInformation) =跟踪器(___也返回分析信息,analysisInformation,可用于航迹分析。您可以将此输出语法与前面的任何输入语法一起使用。

输入参数

全部展开

检测列表,指定为的单元格数组objectDetection对象。的时间每个物业的价值objectDetection对象必须小于或等于当前更新时间,时间,并且大于用于更新跟踪器的前一个时间值。此外,时间不同的差异objectDetection单元格数组中的对象不需要相等。

更新时间,指定为标量。跟踪器更新到此时间的所有跟踪。单位以秒为单位。

时间必须大于或等于最大值吗时间的物业价值objectDetection输入中的对象检测列表。时间必须随着跟踪器的每次更新而增加值。

数据类型:|

传感器配置,指定为结构的数组、结构的单元数组或的单元数组trackingSensorConfiguration对象。如果使用结构数组或结构单元格数组指定值,则必须包含SensorIndex作为每个结构的字段。类的属性中的某个属性具有相同的名称,但结构中的每个字段都是可选的trackingSensorConfiguration对象。注意,您只需要指定需要更新的传感器配置。例如,如果您只想更新IsValidTime属性的第五个传感器,指定配置作为结构(“SensorIndex”5“IsValidTime”,假)

提示

如果你有fusionRadarSensor跟踪系统中的传感器对象,可以直接使用传感器对象的配置结构输出作为此输入。

依赖关系

要启用此参数,请设置HasSensorConfigurationsInput财产真正的

输出参数

全部展开

已确认的履带更新到当前时间,作为结构或结构数组返回。每个结构对应一个轨道。方法指定的阈值以上,则确认一个跟踪ConfirmationThreshold财产。如果轨迹被确认,则IsConfirmed场的结构是真正的.确定的轨道结构的字段定义在轨道结构

数据类型:结构体

试探性轨迹,作为结构或结构数组返回。每个结构对应一个轨道。方法指定的阈值之上,则轨迹为试探性的ExtractionThreshold属性指定的阈值,但低于ConfirmationThreshold财产。在这种情况下IsConfirmed场的结构是.中定义了结构的字段轨道结构

数据类型:结构体

所有履带,作为结构或结构数组返回。每个结构对应一个轨道。所有轨迹的集合由确认轨迹和暂定轨迹组成。中定义了结构的字段轨道结构

数据类型:结构体

用于分析曲目更新的附加信息,作为结构返回。该结构的字段为:

描述
CorrectionOrder

用于状态估计校正的传感器的顺序,作为的行向量返回SensorIndex.例如[1 3 2 4]。

TrackIDsAtStepBeginning

跟踪步骤开始时的id。

DeletedTrackIDs

该步骤中删除的轨道id。

TrackIDsAtStepEnd

跟踪步骤结束时的id。

SensorAnalysisInfo

单元阵列的传感器分析信息。

SensorAnalysisInfo字段可以包含多个传感器信息报告。每个报告都是一个结构,包含:

描述
SensorIndex

传感器指数。

DetectionCells

检测单元格,作为逻辑矩阵返回。矩阵的每一列表示一个检测单元。在每一列中,如果第一个元素是1,然后该检测属于该列所表示的检测单元。

DetectionLikelihoods

密度函数中各成分与检测细胞之间的关联似然,返回为N——- - - - - -P矩阵。N密度函数中分量的数量,和P为检测单元数。

IsBirthCells

中列出的检测单元是否DetectionCells生出新的轨迹,归为一由一P逻辑向量,P为检测单元数。

NumPartitions

分区的数量。

DetectionProbability

传感器检测到现有轨迹的概率,指定为1 × -N行向量,N是密度函数中分量的数量。

LabelsBeforeCorrection

在密度函数中校正前的成分标签,返回为1 × -b行向量。b是在校正前跟踪器中维护的组件数量。向量的每个元素都是aTrackID.例如:[1 1 2 0 0]。注意,多个组件可以共享相同的内容TrackID

LabelsAfterCorrection

标签成分在密度函数校正后,返回为1 × -一个行向量。一个是修正后跟踪器中维护的组件数量。向量的每个元素都是aTrackID.例如:[1 1 1 2 2 0 0]。注意,多个组件可以共享相同的内容TrackID

WeightsBeforeCorrection

校正前密度函数中各分量的权重,以1 × -形式返回b行向量。b是在校正前跟踪器中维护的组件数量。向量的每一个元素都是相应分量的权值LabelsBeforeCorrection.例如,[0.1 0.5 0.7 0.3 0.2]。

WeightsAfterCorrection

校正后的密度函数中各分量的权重,返回为1 × -一个行向量。一个是修正后跟踪器中维护的组件数量。向量的每一个元素都是相应分量的权值LabelsAfterCorrection.例如:[0.1 0.4 0.2 0.6 0.3 0.2 0.2]。

数据类型:结构体

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

predictTracksToTime 预测跟踪状态
deleteTrack 删除现有的跟踪
initializeTrack 初始化新轨道
sensorIndices 传感器指标列表
exportToSimulink 导出跟踪器或跟踪fuser到Simulink模型
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
isLocked 确定系统对象在使用
克隆 创建重复的系统对象
重置 的内部状态重置系统对象

例子

全部折叠

设置传感器配置,创建PHD跟踪器,并为跟踪器提供检测。

创建传感器配置。指定传感器的杂波密度和设置IsValidTime属性为true。配置= trackingSensorConfiguration (1);配置。ClutterDensity = 1e-7; configuration.IsValidTime = true;创建一个PHD跟踪器。追踪= trackerPHD (“SensorConfigurations”、配置);在t=0时,在点[5;-5;0]和[-5;5;0]附近创建检测用这些检测更新跟踪器。。检测=细胞(20日1);i = 1:10 detections{i} = objectDetection(0,[5;-5;0] + 0.2*randn(3,1));结束j = 11:20 detected {j} = objectDetection(0,[-5;5;0] + 0.2*randn(3,1));结束追踪(检测,0);

0.1秒后再次更新跟踪器,假设目标以每秒[1;2;0]单位的恒定速度移动。

dT = 0.1;I = 1:20 detections{I}。时间=检测{}。时间+ dT;检测我{}。米easurement = detections{i}.Measurement + [1;2;0]*dT;结束[confTracks, tentTracks allTracks] =追踪(检测,dT);

可视化检测和确认的轨迹。

%从检测中获得测量值。d =[检测{}):;测量= [d.Measurement];使用getTrackPositions函数提取确认跟踪的位置。注意,我们使用默认的传感器配置% FilterInitializationFcn, initcvggiwphd,它使用恒定速度%模型并将状态定义为[x;vx;y;vy;z;vy]。positionSelector = [1 0 0 0 0 0;0 0 1 0 0;0 0 0 0];位置= getTrackPositions (confTracks positionSelector);图()图(测量(1:),测量(2:)“x”“MarkerSize”5,“MarkerEdgeColor”“b”);持有;情节(职位(1,1),职位(1、2),“v”“MarkerSize”5,“MarkerEdgeColor”“r”);持有;情节(职位(2,1),职位(2,2),“^”“MarkerSize”5,“MarkerEdgeColor”“r”);传奇(“检测”“轨道1”“轨道2”)包含(“x”) ylabel (“y”

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象代表检测,轨道1,轨道2。

创建一个跟踪场景并指定它StopTime而且UpdateRate属性。

场景= trackingScenario;场景。StopTime=Inf; scenario.UpdateRate = 0;

在场景中添加一个塔平台并指定其尺寸。

塔=平台(场景中,“ClassID”3);塔。D我米ensions = struct(...“长度”10...“宽度”10...“高度”现年60岁的...“OriginOffset”30], [0 0);

在场景中添加一个汽车平台。指定它的尺寸和轨迹。

车=平台(场景中,“ClassID”2);的车。D我米ensions = struct(...“长度”, 4.7,...“宽度”, 1.8,...“高度”, 1.4,...“OriginOffset”(-0.6 0 0.7));的车。Trajectory = waypointTrajectory(...[0 -15 -0.23;0.3 -29.5 -0.23;0.3 -56.5 -0.23;...-0.3 -78.2 -0.23;4.4 -96.4 -0.23],...[0;1.4;2.7;4.1;6.3;8.2),...“课程”, -88;-89;-89;-92;-84;-71年),...“水平”, (10;10;10;10;10;10),...“ClimbRate”, (0;0;0;0;0;0),...“AutoPitch”,真的,...“AutoBank”,真正的);

创建一个非扫描雷达,指定其属性,并将传感器安装在塔上。

NoScanning = fusionRadarSensor (“SensorIndex”, 1...“UpdateRate”10...“MountingAngles”(-90 0 0),...“FieldOfView”20 [10],...“ScanMode”“没有扫描”...“之内”,真的,...“DetectionCoordinates”“场景”...“TargetReportFormat”“检测”...“HasElevation”,真正的);塔。传感器= NoScanning;

创建一个戏剧情节,可视化传感器覆盖范围,跟踪和检测。

tp = theaterPlot (“XLim”, -58年[58],“YLim”, -104 (12)“ZLim”, -109年[8]);设置(tp。父母,“YDir”“反向”“ZDir”“反向”);视图(tp.Parent, -37.5, 30);汽车的平台绘图仪。platp = platformPlotter (tp,“DisplayName的”“目标”“MarkerFaceColor”“k”);用于传感器检测的检测绘图仪。detp = detectionPlotter (tp,“DisplayName的”“检测”“MarkerSize”6...“MarkerFaceColor”(0.85 0.325 0.098),“MarkerEdgeColor”“k”“历史”, 10000);传感器的覆盖率绘图器。covp = coveragePlotter (tp,“DisplayName的”传感器覆盖的);用于轨道的轨道绘图器。tPlotter = trackPlotter (tp,“DisplayName的”“跟踪”);

图中包含一个axes对象。axis对象包含5个类型为line、patch的对象。这些对象表示目标、检测(历史)、传感器覆盖范围、轨迹。

提取传感器的传感器配置并使用它来指定PHD跟踪器。

sensorConfig = trackingSensorConfiguration (scenario.Platforms {1} .Sensors {1},...“SensorTransformFcn”@cvmeas,“FilterInitializationFcn”, @initcvggiwphd);追踪= trackerPHD (“SensorConfigurations”sensorConfig,...“PartitioningFcn”@ (x) partitionDetections (4.7 x 1),...“AssignmentThreshold”, 20岁,“ExtractionThreshold”, 0.8,...“ConfirmationThreshold”, 1.5,“MergingThreshold”, 20岁,...“DeletionThreshold”2 e 1“出生率”1 e - 3,...“HasSensorConfigurationsInput”,真正的);

模拟场景,生成检测,并使用检测来跟踪汽车。在模拟过程中更新戏剧情节。

推进(场景)& & ishghandle (tp.Parent)生成传感器数据。[引爆器,配置,sensorConfigPIDs] =检测(场景);读取传感器数据。allDets =[侦破{}):;如果~ isempty (allDets)%提取测量位置。量=猫(2,allDets.Measurement) ';%提取测量噪声。allDets.MeasurementNoise measCov =猫(3日);其他的量= 0 (0,3);measCov = 0 (3 3 0);结束获得真实的位置。truePoses = platformPoses(场景);truePosition = vertcat (truePoses (:) .Position);更新跟踪器的检测和传感器配置。。[cTracks, tTracks allTracks] =追踪(引爆器,配置,scenario.SimulationTime);更新戏剧情节。plotPlatform (platp truePosition);plotDetection (detp量、measCov);plotCoverage (covp coverageConfig(场景));更新轨迹绘图仪。提取跟踪位置。positionSelector = [1 0 0 0 0 0 0;0 0 1 0 0 0;0 0 0 0 1 0];位置= getTrackPositions (cTracks positionSelector);标记并绘制轨道。如果~isempty(cTracks) labels = cell(numel(cTracks),1);i =1:numel(cTracks) labels{i} = {[“T”num2str (cTracks(我).TrackID)]};结束plotTrack (tPlotter,位置,标签);结束drawnow结束

图中包含一个axes对象。axis对象包含9个类型为line、patch、text的对象。这些对象表示目标、检测(历史)、传感器覆盖范围、轨迹。

更多关于

全部展开

算法

全部展开

参考文献

[1] K.格兰斯托姆,C.伦德奎斯特和O.奥格纳。”使用高斯混合PHD滤波器扩展目标跟踪。”航空航天和电子系统汇刊。2012年第4期第48卷第3268-3286页。

[2]格兰斯托姆,K.和O.奥格纳。”利用随机矩阵跟踪多个扩展目标的PHD滤波器。”IEEE信号处理汇刊。2012年第11期第60卷第5657-5671页。

[3] Granstorm, K.和A. Natale, P. Braca, G. Ludeno和F. Serafino。利用x波段海洋雷达数据进行扩展目标跟踪的伽马高斯逆Wishart概率假设密度。《IEEE地球科学与遥感汇刊》。2015年第12期第53卷第6617-6631页。

Panta, Kusha,等,“高斯混合概率假设密度滤波器的数据关联和跟踪管理。”航空航天和电子系统汇刊,第45卷,no。3, 2009年7月,第1003-16页。

[5] Ristic, B.等,“PHD和CPHD过滤器的自适应目标生成强度。”航空航天和电子系统汇刊,第48卷,no。2, 2012, pp. 1656-68。

扩展功能

版本历史

介绍了R2019a

Baidu
map