主要内容

trackerTOMHT

Multi-hypothesis、多传感器多目标跟踪

自从R2018b

描述

trackerTOMHT系统对象™是一个multi-hypothesis跟踪器能够处理来自多个传感器检测的目标。跟踪初始化,证实了预测,纠正和删除的痕迹。输入生成的跟踪检测报告objectDetection,fusionRadarSensor,irSensor,或sonarSensor对象。跟踪估计状态向量和状态向量的协方差矩阵为每一个轨道。跟踪器分配检测基于track-oriented, multi-hypothesis方法。每个检测是分配到至少一个跟踪。如果发现不能分配给任何跟踪,跟踪器创建一个跟踪。

任何新的追踪从一开始试探性的状态。如果足够的检测是分配给一个试探性的轨道,它的状态改变确认。如果发现已经有一个已知的分类(ObjectClassID现场返回的跟踪是零),立即跟踪确认。当跟踪确认,多目标跟踪器认为代表一个物理对象的跟踪。如果检测不分配给跟踪在一个指定的数量的更新,删除。如何追踪功能的概述,请参阅算法

跟踪对象使用multi-hypothesis追踪:

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

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

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

例子

跟踪器= trackerTOMHT (名称,值)集属性多目标跟踪器使用一个或多个名称-值对。例如,trackerTOMHT (FilterInitializationFcn, @initcvukf MaxNumTracks, 100)创建一个多目标跟踪器,使用常速,无味卡尔曼滤波器,并允许最多100张光碟。在报价附上每个属性的名字。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

独特的跟踪标识符,指定为一个非负整数。这个属性的使用SourceIndex在跟踪输出,区分来自不同的追踪器的跟踪multiple-tracker系统。您必须指定这个属性是一个正整数使用跟踪跟踪熔化炉的输出作为输入。

例子:1

过滤器的初始化函数,指定为一个函数处理或作为特征向量包含一个过滤器的初始化函数的名称。跟踪器使用一个过滤器的初始化函数在创建新的轨道。

传感器融合和跟踪工具箱™供应许多初始化函数,您可以使用它来指定FilterInitializationFcn

初始化函数 函数定义
initcvabf 初始化常速α-β滤波器
initcaabf 初始化恒定加速度α-β滤波器
initcvekf 常速扩展卡尔曼滤波器进行初始化。
initcackf 初始化加速度恒定体积过滤器。
initctckf 初始化constant-turn-rate求容积法过滤器。
initcvckf 初始化常速求容积法过滤器。
initcapf 初始化加速度恒定粒子滤波。
initctpf 初始化constant-turn-rate粒子滤波。
initcvpf 常速粒子滤波进行初始化。
initcvkf 初始化常速线性卡尔曼滤波器。
initcvukf 初始化常速无味卡尔曼滤波器。
initcaekf 初始化加速度恒定扩展卡尔曼滤波器。
initcakf 初始化加速度恒定线性卡尔曼滤波器。
initcaukf 初始化加速度恒定无味卡尔曼滤波器。
initctekf 初始化constant-turn-rate扩展卡尔曼滤波器。
initctukf 初始化constant-turn-rate无味卡尔曼滤波器。
initcvmscekf 修改初始化常速球坐标扩展卡尔曼滤波器。
initrpekf 初始化常速range-parametrized扩展卡尔曼滤波器。
initapekf 初始化常速angle-parametrized扩展卡尔曼滤波器。
initekfimm 初始化跟踪IMM滤波器。
initsingerekf 初始化歌手加速扩展的卡尔曼滤波器。

您也可以编写自己的初始化函数。函数必须有如下语法:

过滤器= filterInitializationFcn(检测)
这个函数的输入是像那些由检测报告objectDetection。这个函数的输出必须过滤对象:trackingKF,trackingEKF,trackingUKF,trackingCKF,trackingPF,trackingMSCEKF,trackingGSF,trackingIMM,或trackingABF

指导你写这个函数中,您可以检查的细节在MATLAB提供的功能®。例如:

类型initcvekf

数据类型:function_handle|字符

最大数量的跟踪器可以保持跟踪,指定为一个正整数。

数据类型:|

最大数量的传感器可以连接到追踪,指定为一个正整数。MaxNumSensors必须大于或等于最大的价值SensorIndex发现在所有检测用于更新追踪。SensorIndex是一个属性的吗objectDetection对象。的MaxNumSensors属性决定了有多少套ObjectAttributes每个输出跟踪领域。

数据类型:|

最大数量的检测跟踪器可以作为输入,指定为一个正整数。

数据类型:|

处理一堆测量(OOSM),指定为“终止”“忽略”。每个检测都有相关联的一个时间戳,td,跟踪它自己的时间戳,tt在每次调用更新。作为OOSM如果追踪者认为测量td<tt

当财产被指定为

  • “终止”-跟踪器停止运行时遇到任何乱序执行测量。

  • “忽略”——跟踪器忽略任何乱序执行测量,并继续运行。

模拟按顺序检测,使用objectDetectionDelay

可调:是的

参数的跟踪状态参考系,指定为一个结构或一个结构数组。跟踪器通过其StateParameters属性值对StateParameters属性生成的跟踪。您可以使用这些参数来定义的坐标系跟踪报告或其他可取的属性生成的痕迹。

例如,您可以使用以下结构来定义一个直角坐标系的原点位置(10 10 0)米,其起源速度(2 2 0)米每秒的帧的场景。

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

可调:是的

数据类型:结构体

最大数量的全球分配假设跟踪维护的每一步,指定为一个正整数。如果假设的数量比属性值大,追踪错误假设的较低的可能及其相关分支,直到假设到达属性值的数量。增加计算负载较大的值。

例子:10

数据类型:|

最大数量的跟踪分支允许为每个轨道,指定为一个正整数。增加计算负载较大的值。

数据类型:|

最大数量的扫描中维护分支历史,指定为一个正整数。追踪历史扫描的数量通常从2到6。增加计算负载较大的值。

例子:6

数据类型:|

检测作业阈值,指定为一个积极的标量,一个1×3向量引入积极的价值观,C1,C2,C3),或者an1-by-4向量引入积极的价值观,C1,C2,C3,C4]。如果指定为一个标量,指定的值,瓦尔将扩展到(0.3,0.7,1在f)*瓦尔。如果指定为(C1,C2,C3),它将扩大C1,C2,C3,在f]。

阈值控制(1)赋值的检测跟踪,(2)创建一个新的分支从检测,和(3)创建一个新的分支未赋值的跟踪。阈值必须满足:C1< =C2< =C3< =C4

  • C1定义了一个距离,如果跟踪具有比分配较低的检测距离C1,跟踪不再被认为是未赋值的,不创建一个未赋值的跟踪分支。

  • C2定义了一个距离,如果检测被分配给一个较低的轨道距离比C2,不再被认为是未赋值的检测,不创建一个新的分支。

  • C3定义了分配的最大距离检测跟踪。

  • C4定义了组合的跟踪和检测准确执行标准化的成本核算。最初,跟踪执行规范化的粗估计所有的跟踪和检测之间的距离。跟踪器只计算准确的归一化距离粗归一化距离小于的组合C4

看到算法一个解释的归一化距离。

  • 增加的价值C3如果有检测,但不应该分配给足迹。减少价值是否有检测分配给跟踪他们不应该分配给(太远)。

  • 增加的值C1C2有助于控制跟踪创建分支的数量。然而,这样做减少了数量的分支(假设)每个记录都有。

  • 增加的价值C4如果有组合的跟踪和检测,但不应计算作业。如果降低成本计算需要太多时间。

请注意

如果该值的C4是有限的,状态转换函数和测量功能,跟踪滤波器中指定用于追踪,必须能够拿一个吗——- - - - - -N矩阵的状态作为输入和输出N预测状态和N分别测量。是国家的大小。N的状态数,任意一个非负整数。

数据类型:|

最低分数要求确认,指定为一个积极的标量。任何跟踪得分高于该阈值的证实。

例子:12

数据类型:|

最高得分下降轨道之前删除,指定为一个标量。任何跟踪得分下降超过这个参数最大分数被删除。删除阈值受假警报的概率。

例子:12

数据类型:|

检测概率,指定为一个积极的标量在0和1之间。此属性用于计算分数。

例子:0.5

数据类型:|

假警报的概率,指定为一个标量。此属性用于计算分数。

例子:1 e-5

数据类型:|

新线路的速度单位体积,指定为一个积极的标量。新线路的速度计算中使用跟踪分数在跟踪初始化。

例子:2.5

数据类型:|

传感器测量的体积,指定为一个积极的标量。例如,如果一个雷达产生4 - d测量,包括方位、仰角、范围、和范围,定义的4 d体积是雷达角度波束宽度,本宽度和数据与本宽度范围。体积是用于计算跟踪分数时初始化和更新一个跟踪。

例子:1.5

数据类型:|

最低概率需要保持跟踪,指定为一个积极的标量小于1。任何跟踪概率是修剪较低。典型值是0.001到0.005。

例子:.003

数据类型:|

N-scan修剪方法,指定为“没有”“假设”。在N-scan修剪,修剪枝条,属于同一跟踪(删除),如果在N-scans历史,他们反驳最有可能的分支相同的轨道。最有可能的分支被定义为两种方式:

  • “没有”——不执行N-scan修剪。

  • “假设”——所选择的分支是最可能的假设。

例子:“假设”

使成本矩阵,指定为真正的。如果真正的,您可以提供一个作业成本矩阵作为输入参数当调用对象。

数据类型:逻辑

使检测到的输入分支id在更新,每个对象指定为真正的。将此属性设置为真正的如果你想提供一个检测部门id列表。这个列表告诉所有分支机构的跟踪器,传感器将检测,可选地,检测每个分支的概率。

数据类型:逻辑

跟踪输出方法,指定为“跟踪”,“假设”,或“集群”

  • “跟踪”——输出每个跟踪基于其的质心跟踪分支。

  • “假设”——输出分支,是在特定的假设。如果您选择这个选项,假设列表输出使用HypothesesToOutput财产。

  • “集群”——输出每个集群的重心。类似于“跟踪”输出,但包括所有跟踪在一个集群中。

数据类型:字符

指标输出假说,指定为正整数的数组。指数都必须小于或等于假说提供的跟踪器的最大数量。

可调:是的

数据类型:|

这个属性是只读的。

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

数据类型:

这个属性是只读的。

数量的跟踪确认,作为一个非负整数返回。如果IsConfirmed领域的一个输出跟踪结构真正的,跟踪确认。

数据类型:

使用

过程检测和更新,电话追踪的论点,就好像它是一个函数(这里描述)。

描述

confirmedTracks=跟踪器(检测,时间)返回一个列表的更新追踪确认检测,检测在更新的时候,时间。确认跟踪纠正和预测更新时间。

confirmedTracks=跟踪器(检测,时间,costMatrix)还指定了一个成本矩阵,costMatrix

要启用这种语法,设置HasCostMatrixInput财产真正的

confirmedTracks=跟踪器(___,detectableBranchIDs)还指定了一系列预期可检测的分支,detectableBranchIDs

要启用这种语法,设置HasDetectableBranchIDsInput财产真正的

(confirmedTracks,tentativeTracks,allTracks)=跟踪器(___)还返回一个试探性的歌曲列表,tentativeTracks所有歌曲的列表,allTracks

(confirmedTracks,tentativeTracks,allTracks,analysisInformation)=跟踪器(___)还返回信息,analysisInformation,用于跟踪分析。

输入参数

全部展开

检测列表,指定的单元阵列objectDetection对象。的时间属性值的objectDetection对象必须是小于或等于当前更新时间,时间,比前面的时间值用于更新追踪。此外,时间不同的差异objectDetection单元阵列中的对象不需要平等。

更新的时候,指定为一个标量。跟踪更新所有的追踪。单位是秒。

时间必须大于或等于最大时间属性值的objectDetection对象的输入检测列表。时间必须增加的价值与每个更新的追踪。

数据类型:|

成本矩阵,指定为一个实值N——- - - - - -矩阵,N是数量的分支,是当前检测的数量。成本矩阵行必须位于同一个订单列表的分支。必须在相同的顺序列检测列表。获得正确的顺序使用列表的分支getBranches对象的功能。矩阵列对应的检测。

在第一次更新的对象或追踪没有以前的轨道时,指定成本矩阵的大小[0,numDetections]。注意,必须计算,这样成本更低的成本显示更高的分配一个跟踪检测的可能性。防止某些检测被分配给特定的轨道,进入设置适当的成本矩阵在f

依赖关系

要启用这个论点,设置HasCostMatrixInput财产真正的

数据类型:|

检测部门id,指定为一个实值1的向量或2矩阵。可检测的传感器会检测分支分支。矩阵的第一列包含一个分支id列表跟踪报道branchID场的跟踪输出参数。第二列包含分支的探测概率。传感器可以探测概率的报告,但如果没有报告,检测概率是经DetectionProbability财产。

不包括在分支机构的标识detectableBranchIDs被认为是无法觉察的。跟踪删除逻辑不计数的缺乏检测作为分支删除的“小姐”的目的。

依赖关系

启用这个输入参数,设置HasDetectableBranchIDs财产真正的

数据类型:|

输出参数

全部展开

跟踪确认,作为一个数组返回objectTrack在MATLAB对象,作为一个数组返回代码生成的结构。在代码生成中,字段名称返回的结构相同的属性名objectTrack

跟踪确认,如果它满足确认阈值中指定ConfirmationThreshold财产。在这种情况下,IsConfirmed对象的属性或字段的结构真正的

数据类型:结构体|对象

试探性的,作为一个数组返回objectTrack在MATLAB对象,作为一个数组返回代码生成的结构。在代码生成中,字段名称返回的结构相同的属性名objectTrack

跟踪是试探性的,如果它不满足确认阈值中指定ConfirmationThreshold财产。在这种情况下,IsConfirmed对象的属性或字段的结构

数据类型:结构体|对象

所有的歌曲,作为一个数组返回objectTrack在MATLAB对象,作为一个数组返回代码生成的结构。在代码生成中,字段名称返回的结构相同的属性名objectTrack。所有曲目包括确认和试探性的痕迹。

数据类型:结构体|对象

附加信息分析跟踪更新,作为一个结构返回。这种结构的字段有:

描述
OOSMDetectionIndices

按顺序的指标测量

BranchIDsAtStepBeginning

当更新开始分支id。

CostMatrix

运动的成本分配矩阵,(,j)元素表示的成本分配来检测j

作业

作业回来assignTOMHT

UnassignedTracks

从追踪id返回的未赋值的分支

UnassignedDetections

未赋值的检测的指标检测输入。

InitialBranchHistory

分支历史分支和后修剪。

InitialBranchScores

修剪之前分公司得分。

KeptBranchHistory

最初的修剪后分支历史。

KeptBranchScores

分支初始修剪后得分。

集群

逻辑阵列分支映射到集群。分支机构属于同一集群如果他们分享检测历史或属于同一轨道,直接或通过其他分支。这些分支是不相容的。

TrackIncompatibility

分支不相容矩阵。的(,j)如果元素是如此th和jth分支的历史或共享检测属于同一轨道。

GlobalHypotheses

逻辑分支全球假设矩阵映射。兼容分支可以属于相同的假设。

GlobalHypScores 全球假说的总分。
PrunedBranches

逻辑阵列的分支pruneTrackBranches确定删除功能。

GlobalBranchProbabilities

全球在全球的每个分支现有概率假设。

BranchesDeletedByPruning

删除分支的追踪。

BranchIDsAtStepEnd

更新结束后分支id。

数据类型:结构体

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

getTrackFilterProperties 获得跟踪滤波器性能
setTrackFilterProperties 设置跟踪滤波器的属性
getBranches 列表跟踪分支
predictTrackToTime 预测跟踪状态
initializeTrack 初始化新轨道
deleteTrack 删除现有的跟踪
initializeBranch 初始化新的线路分支
confirmBranch 确认跟踪分支
deleteBranch 删除现有跟踪分支
exportTo金宝appSimulink 出口跟踪或跟踪熔化炉仿真软件模型金宝app
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象
isLocked 确定系统对象在使用
克隆 创建重复的系统对象

例子

全部折叠

创建trackerTOMHT与常速卡尔曼滤波器系统对象的初始化函数,initcvkf

追踪= trackerTOMHT (“FilterInitializationFcn”@initcvkf,“ConfirmationThreshold”,20岁,“DeletionThreshold”7“MaxNumHypotheses”10);

更新跟踪器和两个检测具有非零ObjectClassID。检测立即创建跟踪确认。

检测= {objectDetection (1 (10; 0)“SensorIndex”,1“ObjectClassID”5,“ObjectAttributes”{结构(“ID”1)});objectDetection (1 (0; 10)“SensorIndex”,1“ObjectClassID”2,“ObjectAttributes”{结构(“ID”2)})};时间= 2;跟踪=追踪(检测、时间);

找到并显示位置和速度。

positionSelector = [1 0 0 0;0 0 1 0);velocitySelector = [0 1 0 0;0 0 0 1);positionSelector位置= getTrackPositions(跟踪)
位置=2×210.0000 0 0 10.0000
velocitySelector速度= getTrackVelocities(跟踪)
速度=2×20 0 0 0

算法

全部展开

引用

[1]Werthmann, j . R . .“一步一步地描述计算有效版本的多假设跟踪。”In国际社会对光学和光子学卷,1698年,第301 - 228页,1992年。

[2]Blackman, S。,r . Popoli。现代跟踪系统的设计与分析。Artech房子雷达图书馆,波士顿,1999年。

扩展功能

版本历史

介绍了R2018b