trackerTOMHT
多假设,多传感器,多目标跟踪器
描述
的trackerTOMHT
System object™是一个多假设跟踪器,能够处理来自多个传感器的多个目标的检测。跟踪器初始化、确认、预测、更正和删除跟踪。跟踪器的输入是由生成的检测报告objectDetection
,fusionRadarSensor
,irSensor
,或sonarSensor
对象。跟踪器估计每个轨迹的状态向量和状态向量协方差矩阵。跟踪器基于面向跟踪的多假设方法分配检测。每个检测被分配到至少一个轨道。如果检测不能分配给任何轨道,跟踪器创建一个轨道。
任何新的轨道开始于试探性的状态。如果有足够多的探测被分配给一个暂定轨道,它的状态将变为确认.如果检测已经有一个已知的分类ObjectClassID
返回轨道的字段为非零),则该轨道立即被确认。当一个轨迹被确认时,多目标跟踪器认为该轨迹代表一个物理对象。如果在指定数量的更新内未将检测分配给音轨,则删除音轨。有关跟踪器功能的概述,请参见算法.
使用多假设跟踪器跟踪对象:
创建
trackerTOMHT
对象并设置其属性。使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
描述
创建一个跟踪器
= trackerTOMHTtrackerTOMHT
具有默认属性值的系统对象。
使用一个或多个名称-值对设置多对象跟踪器的属性。例如,跟踪器
= trackerTOMHT (名称,值
)trackerTOMHT (FilterInitializationFcn, @initcvukf MaxNumTracks, 100)
创建一个多目标跟踪器,使用恒定速度,无味卡尔曼滤波器,并允许最多100个轨道。将每个属性名用引号括起来。
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
功能解锁它们。
如果属性为可调,您可以随时更改其值。
有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计.
TrackerIndex
- - - - - -唯一跟踪器标识符
0
(默认)|非负整数
唯一跟踪器标识符,指定为非负整数。属性用作SourceIndex
在跟踪器输出中,并区分来自多跟踪器系统中不同跟踪器的跟踪。必须将此属性指定为正整数,才能将音轨输出用作音轨熔断器的输入。
例子:1
FilterInitializationFcn
- - - - - -过滤器初始化函数
@initcvekf
(默认)|函数处理|特征向量
过滤器初始化函数,指定为函数句柄或包含过滤器初始化函数名称的字符向量。跟踪器在创建新轨道时使用过滤器初始化函数。
传感器融合和跟踪工具箱™提供了许多初始化函数,您可以使用它们进行指定FilterInitializationFcn
.
初始化函数 | 函数定义 |
---|---|
initcvabf |
初始化等速alpha-beta滤波器 |
initcaabf |
初始化恒加速度alpha-beta滤波器 |
initcvekf |
初始化等速扩展卡尔曼滤波器。 |
initcackf |
初始化恒加速度容积滤波器。 |
initctckf |
初始化常转率容积过滤器。 |
initcvckf |
初始化等速容积滤波器。 |
initcapf |
初始化常数加速度粒子滤波器。 |
initctpf |
初始化常数回合率粒子滤波器。 |
initcvpf |
初始化等速粒子滤波器。 |
initcvkf |
初始化等速线性卡尔曼滤波器。 |
initcvukf |
初始化等速无气味卡尔曼滤波器。 |
initcaekf |
初始化常加速度扩展卡尔曼滤波器。 |
initcakf |
初始化恒加速度线性卡尔曼滤波器。 |
initcaukf |
初始化恒加速度无味卡尔曼滤波器。 |
initctekf |
初始化常转率扩展卡尔曼滤波器。 |
initctukf |
初始化常转率无气味卡尔曼滤波器。 |
initcvmscekf |
初始化等速修正球坐标扩展卡尔曼滤波器。 |
initrpekf |
初始化等速范围参数化扩展卡尔曼滤波器。 |
initapekf |
初始化等速角参数化扩展卡尔曼滤波器。 |
initekfimm |
初始化跟踪IMM过滤器。 |
initsingerekf |
初始化歌手加速扩展卡尔曼滤波器。 |
你也可以编写自己的初始化函数。该函数必须具有以下语法:
filter = filterInitializationFcn(检测)
objectDetection
.该函数的输出必须是一个过滤器对象:trackingKF
,trackingEKF
,trackingUKF
,trackingCKF
,trackingPF
,trackingMSCEKF
,trackingGSF
,trackingIMM
,或trackingABF
.
为了指导您编写这个函数,您可以在MATLAB中检查所提供函数的细节®.例如:
类型initcvekf
数据类型:function_handle
|字符
MaxNumTracks
- - - - - -最大轨道数
One hundred.
(默认)|正整数
跟踪器可以维护的最大轨道数,指定为正整数。
数据类型:单
|双
MaxNumSensors
- - - - - -最大传感器数量
20.
(默认)|正整数
可连接到跟踪器的最大传感器数量,指定为正整数。MaxNumSensors
必须大于或等于的最大值SensorIndex
用于更新追踪器的所有检测中都有。SensorIndex
是的属性吗objectDetection
对象。的MaxNumSensors
属性决定有多少组ObjectAttributes
每个输出轨道可以拥有的字段。
数据类型:单
|双
MaxNumDetections
- - - - - -最大检测数
正
(默认)|正整数
跟踪器可以作为输入的最大检测数,指定为正整数。
数据类型:单
|双
OOSMHandling
- - - - - -处理无序测量(OOSM)
“终止”
(默认)|“忽略”
处理无序测量(OOSM),指定为“终止”
或“忽略”
.每次检测都有一个相关的时间戳,td,跟踪器有自己的时间戳,tt,在每次调用中都会更新。跟踪器将测量结果视为OOSM,如果td<tt.
当属性指定为时
“终止”
-跟踪器在遇到任何不符合顺序的测量时停止运行。“忽略”
-跟踪器忽略任何无序测量并继续运行。
要模拟无序检测,使用objectDetectionDelay
.
可调:是的
StateParameters
- - - - - -航迹状态参考系参数
结构([])
(默认)|结构体数组
轨迹状态参考系的参数,指定为结构或结构数组。追踪者通过它StateParameters
属性值。StateParameters
属性。您可以使用这些参数来定义报告航迹的参考框架或生成航迹的其他所需属性。
例如,您可以使用以下结构来定义一个矩形参考系,其原点位置为[10 10 0]
米,它的起始速度是[2 -2 0]米/秒。
字段名 | 价值 |
---|---|
框架 |
“矩形” |
位置 |
[10 10 0] |
速度 |
[2 -2 0] |
可调:是的
数据类型:结构体
MaxNumHypotheses
- - - - - -要维持的最大假设数
5
(默认)|正整数
在模棱两可的情况下,轨道保持的最大假设数,指定为正整数。较大的值会增加计算负载。
例子:10
数据类型:单
|双
MaxNumTrackBranches
- - - - - -每个轨道的最大分支数
3.
(默认)|积极的标量
设置每个轨道允许的最大轨道分支数量(假设)。较大的值会增加计算负载。
数据类型:单
|双
MaxNumHistoryScans
- - - - - -分支历史记录中维护的最大扫描数
4
(默认)|正整数
分支历史记录中维护的最大扫描数,指定为正整数。轨迹历史扫描的数量通常为2到6。较大的值会增加计算负载。
例子:6
数据类型:单
|双
AssignmentThreshold
- - - - - -检测分配阈值
30*[0.3 0.7 1 Inf]
(默认)|积极的标量|1乘3的正向量|1乘4的正向量
检测分配阈值,指定为正标量,一个1 × 3的不递减的正数值向量,[C1,C2,C3.],或一个1乘4的不递减的正值向量,[C1,C2,C3.,C4].如果指定为标量,则指定的值瓦尔,将扩展为[0.3,0.7,1,正
) *瓦尔.如果指定为[C1,C2,C3.],展开为[C1,C2,C3.,正
].
阈值控制(1)将检测分配给轨道,(2)从检测创建新分支,以及(3)从未分配的轨道创建新分支。阈值必须满足:C1< =C2< =C3.< =C4.
C1定义一个距离,如果一个轨道有一个指定的检测距离小于C1,该轨道不再被认为是未分配的,并且不会创建未分配的轨道分支。
C2定义一个距离,如果检测被分配到距离小于的轨道C2,检测不再被认为是未分配的,并且不创建新的轨道分支。
C3.定义将检测分配给轨道的最大距离。
C4定义跟踪和检测的组合,为其执行精确的标准化成本计算。最初,跟踪器对所有轨道和检测之间的归一化距离执行粗略估计。跟踪器只计算粗归一化距离小于的组合的精确归一化距离C4.
看到算法对于标准化距离的解释。
增加价值C3.如果有检测,应该分配到轨道,但没有。如果有一些检测被分配到它们不应该被分配到的轨道(太远),则减少该值。
增加数值C1而且C2帮助控制所创建的轨道分支的数量。然而,这样做减少了每个轨道的分支(假设)的数量。
增加价值C4如果有跟踪和检测的组合,应该计算分配,但没有。如果成本计算时间太长,可以减少。
请注意
如果的值C4是有限的,状态转移函数和测量函数,指定在跟踪滤波器中使用的跟踪器,必须能取一个米——- - - - - -N作为输入和输出的状态矩阵N预测状态和N分别测量。米是国家的大小。N状态数,是一个任意的非负整数。
数据类型:单
|双
ConfirmationThreshold
- - - - - -确认航迹所需的最低分数
20.
(默认)|积极的标量
确认音轨所需的最低分数,指定为正标量。任何分数高于此阈值的赛道都将被确认。
例子:12
数据类型:单
|双
DeletionThreshold
- - - - - -删除轨道的最大分数下降
7
(默认)|标量
删除音轨之前的最大分数下降,指定为标量。任何音轨的分数低于该参数的最大分数将被删除。删除阈值受误报概率影响。
例子:12
数据类型:单
|双
DetectionProbability
- - - - - -用于跟踪分数的检测概率
0.9
(默认)|0到1之间的正标量
检测概率,指定为0到1之间的正标量。此属性用于计算轨道分数。
例子:0.5
数据类型:单
|双
FalseAlarmRate
- - - - - -用于跑道评分的虚警概率
1 e-6
(默认)|标量
误报的概率,用标量表示。此属性用于计算轨道分数。
例子:1 e-5
数据类型:单
|双
β
- - - - - -每单位体积的新轨道率
1
(默认)|积极的标量
每单位体积新音轨的比率,指定为正标量。在轨道初始化时,新轨道的速率用于计算轨道分数。
例子:2.5
数据类型:单
|双
体积
- - - - - -传感器测量仓容积
1
(默认)|积极的标量
传感器测量仓的体积,指定为正标量。例如,如果雷达产生一个4-D测量,其中包括方位角、高程、距离和距离率,4-D体积由雷达角波束宽度、距离库宽度和距离率库宽度定义。在初始化和更新音轨时,音量用于计算音轨分数。
例子:1.5
数据类型:单
|双
MinBranchProbability
- - - - - -保持跟踪所需的最小概率
措施
(默认)|积极的标量
保持轨迹所需的最小概率,指定为小于1的正标量。任何概率较低的轨迹都被修剪。典型值为0.001至0.005。
例子:.003
数据类型:单
|双
NScanPruning
- - - - - -n扫描剪枝法
“没有”
(默认)|“假设”
n扫描剪枝方法,指定为“没有”
或“假设”
.在n -扫描修剪中,如果在n -扫描历史记录中,属于同一轨道的分支与同一轨道的最有可能的分支相矛盾,那么它们将被修剪(删除)。最有可能的分支有两种定义方式:
“没有”
—不进行n扫描剪枝。“假设”
-选择的分支在最可能假设中。
例子:“假设”
HasCostMatrixInput
- - - - - -启用成本矩阵输入
假
(默认)|真正的
启用成本矩阵,指定为假
或真正的
.如果真正的
,您可以在调用对象时提供赋值代价矩阵作为输入参数。
数据类型:逻辑
HasDetectableBranchIDsInput
- - - - - -允许输入可检测的分支id
假
(默认)|真正的
在每次对象更新时启用可检测分支id的输入,指定为假
或真正的
.将此属性设置为真正的
如果您想提供一个可检测的分支id列表。这个列表告诉所有分支的跟踪器,传感器预计检测到哪些分支,以及每个分支的检测概率(可选)。
数据类型:逻辑
OutputRepresentation
- - - - - -轨迹输出法
“跟踪”
(默认)|“假设”
|“集群”
跟踪输出方法,指定为“跟踪”
,“假设”
,或“集群”
.
“跟踪”
—根据每个航迹分支输出每个航迹的质心。“假设”
-输出某些假设中的分支。选项列出要输出的假设HypothesesToOutput
财产。“集群”
—输出每个聚类的质心。类似于“跟踪”
输出,但包括集群中的所有轨道。
数据类型:字符
HypothesesToOutput
- - - - - -假设产出指数
1
(默认)|正整数|正整数数组
要输出的假设索引,指定为正整数数组。这些指数必须都小于或等于追踪器提供的最大假设数。
可调:是的
数据类型:单
|双
NumTracks
- - - - - -跟踪器维护的轨道数
非负整数
此属性是只读的。
跟踪器维护的轨道数,作为非负整数返回。
数据类型:双
NumConfirmedTracks
- - - - - -确认航迹数
非负整数
此属性是只读的。
已确认的轨道数,以非负整数返回。如果IsConfirmed
输出轨道结构的场为真正的
,航迹已确认。
数据类型:双
使用
要处理检测和更新轨道,使用参数调用跟踪器,就好像它是一个函数一样(在这里描述)。
语法
描述
返回从检测列表中更新的已确认航迹列表,confirmedTracks
=跟踪器(检测
,时间
)检测
,在更新时,时间
.已确认的航迹被修正并预测到更新时间。
也指定了一个成本矩阵,confirmedTracks
=跟踪器(检测
,时间
,costMatrix
)costMatrix
.
要启用此语法,请设置HasCostMatrixInput
财产真正的
.
还指定了预期可检测分支的列表,confirmedTracks
=跟踪器(___,detectableBranchIDs
)detectableBranchIDs
.
要启用此语法,请设置HasDetectableBranchIDsInput
财产真正的
.
[
还返回一个暂定曲目列表,confirmedTracks
,tentativeTracks
,allTracks
=跟踪器(___)tentativeTracks
,以及所有曲目的列表,allTracks
.
[
也返回信息,confirmedTracks
,tentativeTracks
,allTracks
,analysisInformation
=跟踪器(___)analysisInformation
,用于航迹分析。
输入参数
检测
- - - - - -检测列表
单元格阵列objectDetection
对象
的单元格数组指定的检测列表objectDetection
对象。的时间
每个的属性值objectDetection
对象必须小于或等于当前更新时间,时间
,并且大于用于更新跟踪器的前一个时间值。此外,时间
不同之间的差异objectDetection
单元格数组中的对象不需要相等。
时间
- - - - - -更新时间
标量
更新时间,指定为标量。跟踪器更新到此时间的所有轨道。单位是秒。
时间
必须大于或等于最大值时间
的属性值。objectDetection
输入中的对象检测
列表。时间
必须随着跟踪器的每次更新而增加值。
数据类型:单
|双
costMatrix
- - - - - -成本矩阵
实值N——- - - - - -米矩阵
成本矩阵,指定为实值N——- - - - - -米矩阵,N是分支的数量,和米是当前检测的数量。成本矩阵行必须与分支列表的顺序相同。列必须与检测列表的顺序相同。方法获取分支列表的正确顺序getBranches
对象的功能。矩阵列对应于检测。
在对象的第一次更新或跟踪器没有以前的轨道时,指定代价矩阵的大小为[0, numDetections]
.请注意,必须计算成本,以便成本越低表明将检测分配给轨道的可能性越高。为了防止某些检测被分配到某些轨道,将适当的成本矩阵项设置为正
.
依赖关系
要启用此参数,请设置HasCostMatrixInput
财产真正的
.
数据类型:双
|单
detectableBranchIDs
- - - - - -可检测的分支id
实值米1的向量|实值米2矩阵
可检测的分支id,指定为实值米-by-1向量或米2矩阵。可检测的分支是传感器期望检测到的分支。矩阵的第一列包含报告的轨道的分支id列表branchID
轨道输出参数的字段。第二列包含分支的检测概率。传感器可以报告检测概率,但如果没有报告,则从DetectionProbability
财产。
标识符未包含的分支detectableBranchIDs
被认为是无法检测到的。轨道删除逻辑不会将检测的缺失计算为分支删除目的的“遗漏”。
依赖关系
要启用此输入参数,请设置HasDetectableBranchIDs
财产真正的
.
数据类型:单
|双
输出参数
confirmedTracks
-确认航迹
的数组objectTrack
对象|数组结构
的数组返回objectTrack
对象,并在代码生成中作为结构数组返回。在代码生成中,返回结构的字段名与的属性名相同objectTrack
.
属性中指定的确认阈值,则表示确认ConfirmationThreshold
财产。在这种情况下,IsConfirmed
结构的对象或字段的属性为真正的
.
数据类型:结构体
|对象
tentativeTracks
-暂定轨道
的数组objectTrack
对象|数组结构
的数组返回的暂定轨道objectTrack
对象,并在代码生成中作为结构数组返回。在代码生成中,返回结构的字段名与的属性名相同objectTrack
.
属性中指定的确认阈值,则该轨道为暂定轨道ConfirmationThreshold
财产。在这种情况下,IsConfirmed
结构的对象或字段的属性为假
.
数据类型:结构体
|对象
allTracks
-所有轨道
的数组objectTrack
对象|数组结构
的数组返回所有音轨objectTrack
对象,并在代码生成中作为结构数组返回。在代码生成中,返回结构的字段名与的属性名相同objectTrack
.所有轨道由确认轨道和暂定轨道组成。
数据类型:结构体
|对象
analysisInformation
-用于分析轨道更新的附加信息
结构
用于分析曲目更新的附加信息,作为结构返回。该结构的字段为:
场 | 描述 |
OOSMDetectionIndices |
无序测量指标 |
BranchIDsAtStepBeginning |
开始更新时的分支id。 |
CostMatrix |
运动分配矩阵的代价,其中(我,j元素表示分配轨道的代价我来检测j. |
作业 |
返回的任务 |
UnassignedTracks |
跟踪器返回的未分配分支的id |
UnassignedDetections |
中未分配检测的指数 |
InitialBranchHistory |
分支后和修剪前的分支历史。 |
InitialBranchScores |
剪枝前分枝。 |
KeptBranchHistory |
初始修剪后的分支历史。 |
KeptBranchScores |
初始修剪后的枝条分值。 |
集群 |
将分支映射到集群的逻辑阵列。如果分支共享历史记录中的检测,或者直接或通过其他分支属于同一轨道,则分支属于同一个集群。这些分支是不相容的。 |
TrackIncompatibility |
分支不相容矩阵。的 |
GlobalHypotheses |
将分支映射到全局假设的逻辑矩阵。相容的分支可以属于同一个假设。 |
GlobalHypScores |
全局假设的总分。 |
PrunedBranches |
分支的逻辑数组 |
GlobalBranchProbabilities |
全局假设中各分支存在的全局概率。 |
BranchesDeletedByPruning |
分支被跟踪器删除。 |
BranchIDsAtStepEnd |
更新结束时的分支id。 |
数据类型:结构体
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj
,使用这种语法:
发行版(obj)
特定于trackerTOMHT
getTrackFilterProperties |
获取航迹过滤器属性 |
setTrackFilterProperties |
设置航迹过滤器属性 |
getBranches |
列出轨道分支 |
predictTrackToTime |
预测航迹状态 |
initializeTrack |
初始化新轨道 |
deleteTrack |
删除现有轨道 |
initializeBranch |
初始化新的轨道分支 |
confirmBranch |
确认轨道分支 |
deleteBranch |
删除现有轨道分支 |
exportTo金宝appSimulink |
导出跟踪器或跟踪fuser到Simulink模型金宝app |
例子
使用trackerTOMHT跟踪两个对象
创建trackerTOMHT
具有匀速卡尔曼滤波初始化函数的系统对象,initcvkf
.
追踪器=追踪器“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;Tracks =跟踪器(检测,时间);
查找并显示位置和速度。
positionSelector = [1 0 0 0;0 0 10 0];velocitySelector = [0 1 0 0;0 0 0 1];位置= getTrackPositions(轨道,位置选择器)
位置=2×210.0000 00 10.0000
速度= gettrackvelocity(轨道,速度选择器)
速度=2×20 0 0 0
算法
跟踪器逻辑流程
使用跟踪器处理检测时,跟踪的创建和管理遵循以下步骤。
跟踪器尝试将检测分配给现有的轨道。
轨道允许对探测轨道的分配进行多种假设。
未分配的检测将导致创建新的轨道。
将检测分配给轨道会为所分配的轨道创建分支。
没有指定探测到的航迹将被滑行(预测)。
所有轨道分支都被评分。初始分数低的树枝被修剪。
生成了在其历史记录中共享检测(不兼容分支)的分支集群。
对相容分支的全局假设进行了阐述和评分。
分支的得分基于它们在全局假设中的存在性。得分低的树枝被修剪掉。
根据n -扫描历史执行额外的剪枝。
所有音轨都被校正并预测到输入时间。
多假设跟踪器的分配阈值
三个分配阈值,C1,C2,C3.,控制(1)将检测分配给轨道,(2)从检测创建新分支,以及(3)从未分配的轨道创建新分支。阈值必须满足:C1< =C2< =C3..
如果任务的成本是C = costmatrix(i,j)
,根据成本与分配阈值的比较,创建以下假设。在每个比较的下面,都有一个可能的假设列表。
小贴士:
增加价值C3.如果有检测,应该分配到轨道,但没有。如果有一些检测被分配到它们不应该被分配到的轨道(太远),则减少该值。
增加数值C1而且C2帮助控制所创建的轨道分支的数量。然而,这样做减少了每个轨道的分支(假设)的数量。
若要允许取消分配每个音轨,请设置C1= 0。
若要允许取消每个检测,请设置C2= 0。
数据精度
所有数字输入可以是单精度或双精度,但它们都必须具有相同的精度。
参考文献
[1]韦特曼,j.r. ..多假设跟踪的计算高效版本的逐步描述。在国际光学与光子学学会,卷1698,页228-301,1992。
[2]布莱克曼,S.和R.波波利。现代跟踪系统的设计与分析。Artech House雷达图书馆,波士顿,1999。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
看到系统对象在MATLAB代码生成(MATLAB编码器).
多目标跟踪器使用的所有检测必须具有相同大小和类型的属性。
如果你使用
ObjectAttributes
字段中的objectDetection
对象时,必须将此字段指定为包含结构的单元格。所有检测的结构必须具有相同的字段,并且这些字段中的值必须始终具有相同的大小和类型。在模拟过程中,结构形式不能改变。如果
ObjectAttributes
都包含在检测中,该SensorIndex
检测值不能大于10。对多目标跟踪器的第一次更新必须包含至少一次检测。
版本历史
在R2018b中引入
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。