主要内容

radarTracker

使用GNN分配的多目标跟踪器

描述

radarTracker系统对象™初始化、确认、预测、纠正和删除运动对象的轨迹。雷达跟踪器的输入是生成的探测报告objectDetection目标由雷达传感器。雷达跟踪器接受来自多个传感器的探测,并使用全局最近邻(GNN)准则将它们分配给航迹。每个探测被分配到一个单独的轨道。如果检测不能分配给任何轨道,则基于AssignmentThreshold属性时,跟踪器将创建一个新轨道。轨道以结构数组的形式返回。

一个新的轨道开始于试探性的状态。如果有足够多的探测被分配给一个暂定轨道,它的状态将变为确认.如果检测是一个已知的分类ObjectClassID返回轨道的字段为非零),则可以立即确认该轨道。有关用于确认航迹的雷达跟踪器属性的详细信息,请参见算法

当一个轨迹被确认时,雷达跟踪器认为该轨迹代表一个物理对象。如果在指定数量的更新内未将检测添加到轨道,则删除轨道。

跟踪器还使用卡尔曼滤波器估计每个跟踪的状态向量和状态向量协方差矩阵。这些状态向量被用来预测每个轨迹在每一帧中的位置,并确定每个检测被分配到每个轨迹的可能性。

用雷达跟踪器跟踪物体:

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

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

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

例子

跟踪器= radarTracker (名称,值使用一个或多个名称-值对设置雷达跟踪器的属性。例如,radarTracker (FilterInitializationFcn, @initcvukf MaxNumTracks, 100)创建一个雷达跟踪器,使用恒定速度,无味卡尔曼滤波器,并保持最多100个轨道。将每个属性名用引号括起来。

属性

全部展开

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

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

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

唯一跟踪器标识符,指定为非负整数。属性用作SourceIndex在跟踪器输出中,并区分来自多跟踪器系统中不同跟踪器的跟踪。

例子:1

卡尔曼滤波器初始化函数,指定为函数句柄或有效卡尔曼滤波器初始化函数名称的字符向量或字符串标量。

工具箱提供了几个初始化函数,您可以使用它们进行指定FilterInitializationFcn

初始化函数 函数定义
initcvekf 初始化等速扩展卡尔曼滤波器。
initcvkf 初始化等速线性卡尔曼滤波器。
initcvukf 初始化等速无气味卡尔曼滤波器。
initcaekf 初始化常加速度扩展卡尔曼滤波器。
initcakf 初始化恒加速度线性卡尔曼滤波器。
initcaukf 初始化恒加速度无味卡尔曼滤波器。
initctekf 初始化恒转率扩展卡尔曼滤波器。
initctukf 初始化恒转率无气味卡尔曼滤波器。

你也可以编写自己的初始化函数。该函数的输入必须是用户创建的检测报告objectDetection.该函数的输出必须是一个卡尔曼滤波对象:trackingKFtrackingEKF,或trackingUKF.为了指导您编写这个函数,您可以在MATLAB中检查所提供函数的细节®.例如:

类型initcvkf

数据类型:function_handle|字符|字符串

检测分配阈值(或门控阈值),指定为正标量或1 × 2向量[C1C2),C1C2.如果指定为标量,则指定的值瓦尔,将扩展至[瓦尔].

最初,跟踪器执行估计所有航迹与探测点之间的归一化距离。跟踪器只计算粗归一化距离小于的组合的精确归一化距离C2.此外,跟踪器只能分配检测到一个轨道,如果他们准确的归一化距离小于C1.看到距离与跟踪过滤器一起使用的函数(例如,trackingEKF),解释计算距离的方法。

小贴士:

  • 增加价值C2如果有跟踪和检测的组合,应该计算分配,但没有。如果成本计算时间太长,可以减少。

  • 增加价值C1如果有检测,应该分配到轨道,但没有。如果有一些检测被分配到不应该被分配到的轨道(太远),就减少它。

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

数据类型:

可连接到跟踪器的最大传感器数量,指定为正整数。当您指定探测作为雷达跟踪器的输入时,MaxNumSensors必须大于或等于最大值SensorIndex的价值检测单元格阵列objectDetection用于更新雷达跟踪器的对象。这个属性决定了有多少组ObjectAttributes每个输出轨道可以拥有的字段。

数据类型:

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

数据类型:|

不顺序测量处理,指定为终止忽视.每次检测都有一个相关的时间戳,td,跟踪器块有自己的时间戳,tt,在每次调用时更新。跟踪器块将测量结果视为OOSMtd<tt

当参数被指定为:

  • 终止—当块遇到不符合顺序的测量时停止运行。

  • 忽视-块忽略任何不符合顺序的测量并继续运行。

轨迹确认的阈值,指定为两个元素的非递减正整数向量,(mn),在那里小于或等于N.一个轨道如果接收到至少,则被确认在最后的探测N更新。

  • 当设置,考虑传感器探测到目标的概率。探测的概率取决于诸如遮挡或杂波等因素。你可以减少航迹无法确认或增加当太多的错误检测被分配到轨道。

  • 当设置N,在做出确认决定之前,考虑您希望跟踪器更新的次数。例如,如果跟踪器每0.05秒更新一次,并且您允许0.5秒做出确认决策,则设置N = 10

例子:[3 - 5]

数据类型:

轨道删除的阈值,指定为两个元素的正的非递减整数向量[P Q],在那里P小于或等于.如果已确认的航迹未分配给任何检测P最后的时代跟踪器更新,然后删除轨道。

  • 减少(或增加P),以便及早删除音轨。

  • 增加(或减少P)如果音轨在删除前需保留较长时间。

例子:[3 - 5]

数据类型:|

属性的输入,启用成本矩阵radarTracker系统对象,指定为真正的

数据类型:逻辑

在每次对象更新时启用可检测轨道id的输入,指定为真正的.将此属性设置为真正的如果你想提供一个可检测的轨道id列表。这个列表告诉跟踪器传感器期望检测到的所有轨道,以及任意检测到每个轨道的概率。

数据类型:逻辑

轨道状态参考系的参数,指定为结构体或结构数组。使用此属性定义轨迹状态参考系,以及如何将轨迹从跟踪器(称为源)坐标系转换为fuser坐标系。

此属性是可调的。

数据类型:结构体

此属性是只读的。

雷达跟踪器所维护的航迹数,指定为非负整数。

数据类型:

此属性是只读的。

已确认的轨道数,指定为非负整数。的IsConfirmed输出轨道结构的字段表示确认了哪些轨道。

数据类型:

使用

描述

confirmedTracks=跟踪器(检测时间创建、更新和删除雷达跟踪器中的航迹,并返回有关已确认航迹的详细信息。的指定列表进行更新检测,并将所有音轨更新到指定的音轨时间.返回的每个元素confirmedTracks对应一个单轨。

confirmedTrackstentativeTracks=跟踪器(检测时间同样的回报tentativeTracks包含有关试运行轨道的详细信息。

例子

confirmedTrackstentativeTracksallTracks=跟踪器(检测时间同样的回报allTracks包含所有确认和暂定轨道的详细信息。按照跟踪器内部维护轨道的顺序返回轨道。您可以使用此输出来帮助您计算成本矩阵,这是一个可选的输入参数。

___=跟踪器(检测时间costMatrix指定一个代价矩阵,返回前面语法的任何输出。

要指定成本矩阵,请设置HasCostMatrixInput属性真正的

___=跟踪器(___detectableTrackIDs还指定由所给出的预期可探测轨道的列表detectableTrackIDs.此参数可用于前面的任何输入语法。

要启用此语法,请设置HasDetectableTrackIDsInput财产真正的

输入参数

全部展开

的单元格数组指定的检测列表objectDetection对象。的时间每个的属性值objectDetection对象必须小于或等于当前更新时间,时间,并且大于之前用于更新多对象跟踪器的时间值。

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

时间必须大于或等于最大值时间的属性值。objectDetection输入中的对象检测列表。时间必须随着多目标跟踪器的每次更新而增加值。

数据类型:

成本矩阵,指定为实值NT——- - - - - -ND矩阵,NT是现有轨道的数量,和ND是当前检测的数量。成本矩阵的行对应于现有的轨道。这些列对应的是检测结果。中的曲目列表中出现的曲目将进行排序allTracks先前更新到多对象跟踪器的输出参数。

在对多对象跟踪器的第一次更新中,或者当跟踪器没有之前的跟踪时,将成本矩阵的大小分配为[0,ND].必须计算成本,以便较低的成本表明跟踪器将检测分配给跟踪的可能性较高。为了防止某些探测被分配到某些轨道,使用

依赖关系

要在更新轨道时启用成本矩阵的规范,请设置HasCostMatrixInput属性真正的

数据类型:

可检测轨道id,指定为实值-by-1向量或2矩阵。可探测轨道是传感器期望探测到的轨道。矩阵的第一列包含传感器报告的可检测轨道id列表。可选的第二列包含轨道的检测概率。检测概率要么由传感器报告,要么(如果没有报告)从DetectionProbability财产。

标识符未包含的跟踪detectableTrackIDs被认为是无法检测到的。在删除音轨时,音轨删除逻辑不会将缺少检测计算为“遗漏检测”。

依赖关系

要启用此输入参数,请设置detectableTrackIDs财产真正的

数据类型:|

输出参数

全部展开

的数组返回objectTrack对象,并在代码生成中作为结构数组返回。在代码生成中,返回结构的字段名与的属性名相同objectTrack

属性中指定的确认阈值,则表示确认ConfirmationThreshold财产。在这种情况下,IsConfirmed结构的对象或字段的属性为真正的

数据类型:结构体|对象

的数组返回的暂定轨道objectTrack对象,并在代码生成中作为结构数组返回。在代码生成中,返回结构的字段名与的属性名相同objectTrack

属性中指定的确认阈值,则该轨道为暂定轨道ConfirmationThreshold财产。在这种情况下,IsConfirmed结构的对象或字段的属性为

数据类型:结构体|对象

的数组返回所有音轨objectTrack对象,并在代码生成中作为结构数组返回。在代码生成中,返回结构的字段名与的属性名相同objectTrack.所有轨道由确认轨道和暂定轨道组成。

数据类型:结构体|对象

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

deleteTrack 删除现有轨道
getTrackFilterProperties 获取过滤器属性的值radarTracker
initializeTrack 在跟踪器中初始化新轨道
confirmTrack 确认暂定航迹
predictTracksToTime 预测时间戳的轨迹
setTrackFilterProperties 设置跟踪过滤器属性的值
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
克隆 创建重复的系统对象
isLocked 确定系统对象正在使用中
重置 重置的内部状态系统对象

例子

全部折叠

创建雷达跟踪器系统对象™使用3-D匀速模型的默认过滤器初始化函数。对于这个运动模型,状态向量为[xvxyv, z,登陆].

跟踪器=雷达跟踪器“ConfirmationThreshold”[4 - 5],...“DeletionThreshold”10);

创建检测objectDetection对象。若要将此检测与雷达跟踪器一起使用,请将检测包含在单元格数组中。

Dettime = 1.0;Det = {...objectDetection (dettime [10;1;1),...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”1})...};

用这个探测更新雷达跟踪器。更新跟踪器的时间必须大于或等于检测到对象的时间。

Updatetime = 1.25;[confirmedTracks,tentativeTracks,allTracks] =跟踪器(det,updatetime);

创建同一对象的另一个检测并更新跟踪器。追踪器只维持一条轨迹。

Dettime = 1.5;Det = {...objectDetection (dettime [10.1;-1.1;1.2),...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”1})...};Updatetime = 1.75;[confirmedTracks,tentativeTracks,allTracks] =跟踪器(det,updatetime);

通过检查已确认的轨道数量来确定轨道是否已被验证。

numConfirmed =跟踪器。NumConfirmedTracks
numConfirmed = 0

检查被跟踪物体的位置和速度。由于航迹尚未确认,请从tentativeTracks结构。

positionSelector = [1 0 0 0 0 0 0;0 0 1 0 0 0;0 0 0 0 0 0];velocitySelector = [0 1 0 0 0 0 0;0 0 0 1 0 0;0 0 0 0 0 1];position = getTrackPositions(tentativeTracks,positionSelector)
位置=1×310.1426 -1.1426 1.2852
velocity = gettrackvelocity (tentativeTracks,velocity selector)
速度=1×30.1852 -0.1852 0.3705

创建一个移动物体的检测序列。使用雷达跟踪探测结果跟踪器系统对象™。观察轨道如何从试探性切换到确认,然后删除。

创建一个雷达跟踪器initcakf过滤器初始化函数。跟踪器模拟二维恒加速度运动。对于这个运动模型,状态向量为[xvx斧头yv].

跟踪器=雷达跟踪器“FilterInitializationFcn”@initcakf,...“ConfirmationThreshold”(3 - 4),“DeletionThreshold”6 [6]);

创建一个移动目标的检测序列objectDetection.利用雷达的这些探测跟踪器,将检测包含在单元格数组中。

Dt = 0.1;Pos = [10;1);Vel = [10;5);Detno = 1:2时间= (Detno -1)*dt;Det = {...objectDetection(时间、pos、...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”1})...};[confirmedTracks,tentativeTracks,allTracks] =跟踪器(det,时间);Pos = Pos + vel*dt;Meas = pos;结束

通过检查已确认的轨道数量,确认轨道尚未确认。

numConfirmed =跟踪器。NumConfirmedTracks
numConfirmed = 0

由于航迹尚未确认,请从tentativeTracks结构。

positionSelector = [1 0 0 0 0 0 0;0 0 0 1 0 0];velocitySelector = [0 1 0 0 0 0 0;0 0 0 0 0 0];position = getTrackPositions(tentativeTracks,positionSelector)
位置=1×210.6669 - -0.6665
velocity = gettrackvelocity (tentativeTracks,velocity selector)
速度=1×23.3473 - 1.6737

增加更多的探测来确认航迹。

Detno = 3:5时间= (Detno -1)*dt;Det = {...objectDetection(时间、pos、...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”1})...};[confirmedTracks,tentativeTracks,allTracks] =跟踪器(det,时间);Pos = Pos + vel*dt;Meas = pos;结束

确认轨道已被确认,并显示该轨道的位置和速度矢量。

numConfirmed =跟踪器。NumConfirmedTracks
numConfirmed = 1
position = getTrackPositions(confirmedTracks,positionSelector)
位置=1×213.8417 - 0.9208
velocity = gettrackvelocity (confirmedTracks,velocitySelector)
速度=1×29.4670 - 4.7335

让跟踪器运行,但不要添加新的检测。删除已有轨道。

Detno = 6:20时间= (Detno -1)*dt;Det = {};[confirmedTracks,tentativeTracks,allTracks] =跟踪器(det,时间);Pos = Pos + vel*dt;Meas = pos;结束

确认跟踪器没有试探性或已确认的跟踪。

isempty (allTracks)
ans =逻辑1

算法

当你将检测传递给雷达跟踪器时,System对象:

  • 方法尝试将输入检测分配给现有轨道AssignmentThreshold属性的多对象跟踪器。

  • 从未分配的检测中创建新轨道。

  • 更新已经分配的轨道,并可能确认他们,基于ConfirmationThreshold跟踪器的属性。

  • 属性删除没有指定检测的轨道DeletionThreshold跟踪器的属性。

扩展功能

版本历史

R2021a中引入