主要内容

radarTracker

基于GNN分配的多目标跟踪器

描述

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

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

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

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

要使用雷达跟踪器跟踪对象,请执行以下操作:

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

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

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

创建

描述

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

例子

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

属性

全部展开

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

如果一个属性是可调,您可以随时更改它的值。

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

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

例子:1

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

工具箱提供了几个可用于指定的初始化函数FilterInitializationFcn

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

您还可以编写自己的初始化函数。该函数的输入必须是由objectDetection.这个函数的输出必须是一个卡尔曼滤波器对象:跟踪KFtrackingEKF,或trackingUKF.为了指导您编写这个函数,您可以在MATLAB中检查提供的函数的细节®.例如:

类型initcvkf

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

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

最初,跟踪器执行a粗糙的估计所有轨道和检测之间的归一化距离。跟踪器只计算粗归一化距离小于的组合的精确归一化距离C2.此外,跟踪器只能分配一个检测轨道,如果他们准确的归一化距离小于C1.看到距离用于跟踪滤波器的函数(例如,trackingEKF),以说明计算距离的方法。

小贴士:

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

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

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

数据类型:

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

数据类型:

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

数据类型:|

无序测量处理,指定为终止忽视. 每个检测都有一个与之关联的时间戳,td,跟踪器块有自己的时间戳,tt,它会在每次调用中更新。跟踪块认为测量是一个OOSM如果td<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输出轨道结构的字段表明哪些轨道是确定的。

数据类型:

使用

描述

确认跟踪=跟踪器(检测时间在雷达跟踪器中创建、更新和删除轨道,并返回有关已确认轨道的详细信息。更新是基于指定的列表检测,所有轨道均按规定更新时间.返回的每个元素确认跟踪对应于一个单轨。

确认跟踪tentativeTracks) =跟踪器(检测时间同样的回报tentativeTracks包含关于试探性轨道的细节。

例子

确认跟踪tentativeTracksallTracks) =跟踪器(检测时间同样的回报allTracks包含所有已确认和试探性轨道的细节。跟踪程序按照跟踪程序内部维护它们的顺序返回。您可以使用此输出来帮助您计算成本矩阵,这是一个可选的输入参数。

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

要指定代价矩阵,请设置HasCostMatrixInput跟踪程序的属性真正的

___) =跟踪器(___detectableTrackIDs还指定了一个可检测轨道的列表detectableTrackIDs.此参数可用于前面的任何输入语法。

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

输入参数

全部展开

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

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

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

数据类型:

成本矩阵,指定为实值NT——- - - - - -ND矩阵,在哪里NT是现有轨道的数量,还是ND是当前检测的次数。代价矩阵的行对应于现有轨道。列对应于检测。的轨道列表中显示的轨道被排序allTracks多目标跟踪器上一个更新的输出参数。

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

依赖关系

当更新轨道时,要使成本矩阵的规格得以实现,请设置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 在跟踪器中初始化新的跟踪
predictTracksToTime 预测时间戳的轨迹
setTrackFilterProperties 设置跟踪过滤器属性的值
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
克隆 创建副本系统对象
isLocked 确定系统对象正在使用中
重置 重置的内部状态系统对象

例子

全部折叠

创建一个雷达跟踪器系统对象™使用默认的过滤器初始化函数的三维恒定速度模型。对于该运动模型,状态向量为[xvxyv, z,登陆].

跟踪器=雷达跟踪器(“ConfirmationThreshold”[4 - 5],...“删除阈值”10);

通过指定objectDetection对象。若要将此检测与雷达跟踪器一起使用,请将检测封装在单元阵列中。

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

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

updatetime = 1.25;[confirmedTracks, tentativeTracks allTracks] =追踪(侦破,updatetime);

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

dettime = 1.5;侦破= {...objectDetection (dettime [10.1;-1.1;1.2),...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”,1})...}; 更新时间=1.75;[confirmedTracks,tentivetracks,allTracks]=跟踪器(det,updatetime);

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

numConfirmed =追踪。NumConfirmedTracks
numConfirmed = 0

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

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

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

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

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

使用。创建一个移动目标的探测序列objectDetection.用雷达来探测跟踪器,将检测包含在单元阵列中。

dt = 0.1;pos = [10;1);韦尔= [10;5);deno = 1:2 time = (deno -1)*dt;侦破= {...objectDetection(时间、pos、...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”,1})...};[confirmedTracks, tentativeTracks allTracks] =追踪(依据、时间);Pos = Pos + vel*dt;量= pos;结束

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

numConfirmed =追踪。NumConfirmedTracks
numConfirmed = 0

由于航迹未被确认,从航迹中获取位置和速度tentativeTracks结构。

positionSelector = [1 0 0 0 0;0 0 0 1 0 0];velocitySelector = [0 1 0 0 0;0 0 0 1 0];位置= getTrackPositions (tentativeTracks positionSelector)
位置=1×210.6669 - -0.6665
速度= getTrackVelocities (tentativeTracks velocitySelector)
速度=1×23.3473 - 1.6737

添加更多检测以确认轨迹。

deno = 3:5 time = (deno -1)*dt;侦破= {...objectDetection(时间、pos、...“SensorIndex”,1,...“ObjectAttributes”, {“ExampleObject”,1})...};[confirmedTracks, tentativeTracks allTracks] =追踪(依据、时间);Pos = Pos + vel*dt;量= pos;结束

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

numConfirmed =追踪。NumConfirmedTracks
numConfirmed = 1
位置= getTrackPositions (confirmedTracks positionSelector)
位置=1×213.8417 - 0.9208
速度= getTrackVelocities (confirmedTracks velocitySelector)
速度=1×29.4670 - 4.7335

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

deno = 6:20 time = (deno -1)*dt;侦破= {};[confirmedTracks, tentativeTracks allTracks] =追踪(依据、时间);Pos = Pos + vel*dt;量= pos;结束

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

isempty (allTracks)
ans =逻辑1

算法

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

  • 尝试将输入检测分配给现有轨迹,基于AssignmentThreshold多目标跟踪器的特性。

  • 根据未分配的检测创建新轨迹。

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

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

扩展功能

介绍了R2021a