主要内容

radarTracker

多目标跟踪器使用GNN任务

描述

radarTracker初始化系统对象™,证实,预测,纠正和删除移动对象的轨迹。输入作为生成的雷达跟踪检测报告objectDetection对象由雷达传感器。雷达跟踪器接受来自多个传感器和分配他们的检测跟踪使用全局最近邻(GNN)标准。每个检测是分配给一个单独的轨道。如果不能分配给任何跟踪检测,基于AssignmentThreshold财产,跟踪器创建一个新的轨道。轨道在一个结构数组返回。

一个新的追踪从一开始试探性的状态。如果足够的检测是分配给一个试探性的轨道,它的状态改变确认。如果检测是一个已知的分类(ObjectClassID返回的跟踪领域非零),跟踪可以立即确认。详情在雷达跟踪属性用来证实,明白了算法

当跟踪确认,雷达跟踪认为代表一个物理对象。如果检测不添加到跟踪在一个指定的数量的更新,删除。

追踪还估计状态向量和状态向量的协方差矩阵为每个使用卡尔曼滤波跟踪。这些状态向量用于预测跟踪每一帧的位置和确定每个检测被分配给每个追踪的可能性。

使用雷达跟踪:跟踪对象

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

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

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

创建

描述

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

例子

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

属性

全部展开

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

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

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

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

例子:1

卡尔曼滤波器的初始化函数,指定为一个函数处理或作为特征向量或字符串标量有效的卡尔曼滤波器的初始化函数的名称。

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

初始化函数 函数定义
initcvekf 常速扩展卡尔曼滤波器进行初始化。
initcvkf 初始化常速线性卡尔曼滤波器。
initcvukf 初始化常速无味卡尔曼滤波器。
initcaekf 初始化加速度恒定扩展卡尔曼滤波器。
initcakf 初始化加速度恒定线性卡尔曼滤波器。
initcaukf 初始化加速度恒定无味卡尔曼滤波器。
initctekf 初始化constant-turnrate扩展卡尔曼滤波器。
initctukf 初始化constant-turnrate无味卡尔曼滤波器。

您也可以编写自己的初始化函数。这个函数的输入必须是由检测报告objectDetection。这个函数必须是一个卡尔曼滤波器的输出对象:trackingKF,trackingEKF,或trackingUKF。指导你写这个函数中,您可以检查的细节在MATLAB提供的功能®。例如:

类型initcvkf

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

检测作业阈值(或控制阈值),指定为一个积极的标量或1×2向量(C1C2),C1C2。如果指定为一个标量,指定的值,瓦尔,将扩大到瓦尔,]。

最初,跟踪执行估计的归一化距离跟踪和检测。跟踪器只计算准确的归一化距离粗归一化距离小于的组合C2。同时,追踪只能分配一个检测跟踪他们准确的归一化距离小于C1。看到距离函数用于跟踪过滤器(例如,trackingEKF距离计算的解释。

小贴士:

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

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

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

数据类型:

最大数量的传感器可以连接到追踪,指定为一个正整数。当你指定检测作为雷达跟踪器的输入,MaxNumSensors必须大于或等于最高SensorIndex的价值检测单元阵列的objectDetection对象用于更新雷达跟踪。这个属性决定了有多少套ObjectAttributes每个输出跟踪领域。

数据类型:

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

数据类型:|

按顺序处理,测量指定为终止忽视。每个检测都有相关联的一个时间戳,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系统对象,指定为真正的

数据类型:逻辑

使IDs检测跟踪输入的更新,每个对象指定为真正的。将此属性设置为真正的如果你想提供一个检测跟踪id列表。这个列表告诉追踪所有的传感器将检测和跟踪,还为每个跟踪检测的概率。

数据类型:逻辑

指定的参数跟踪状态参考系,作为一个结构或一个结构体数组。使用这个属性来定义跟踪状态参考系和如何将跟踪器的跟踪(称为源)fuser坐标系坐标系统。

这个属性是可调的。

数据类型:结构体

这个属性是只读的。

数量的跟踪维护的雷达追踪,指定为一个非负整数。

数据类型:

这个属性是只读的。

数量的跟踪确认,指定为一个非负整数。的IsConfirmed输出跟踪结构的字段显示追踪确认。

数据类型:

使用

描述

confirmedTracks=跟踪器(检测,时间)创建、更新和删除跟踪雷达的跟踪并返回确认跟踪的细节。更新是基于指定的列表检测指定,所有跟踪更新时间。在返回的每个元素confirmedTracks对应于一个单一的轨道。

(confirmedTracks,tentativeTracks)=跟踪器(检测,时间)同样的回报tentativeTracks包含详细的试探性的痕迹。

例子

(confirmedTracks,tentativeTracks,allTracks)=跟踪器(检测,时间)同样的回报allTracks包含所有的细节和初步确认。轨道的顺序返回的跟踪器在内部维护他们。您可以使用这个输出来帮助你计算成本矩阵,一个可选的输入参数。

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

指定一个成本矩阵,设置HasCostMatrixInput财产的追踪真正的

(___)=跟踪器(___,detectableTrackIDs)还指定了一系列预期可检测跟踪的detectableTrackIDs。这个参数可用于任何以前的输入语法。

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

输入参数

全部展开

检测列表,指定的单元阵列objectDetection对象。的时间属性值的objectDetection对象必须是小于或等于当前时间的更新时间,比前面的时间值用于更新多目标跟踪器。

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

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

数据类型:

成本矩阵,指定为一个实值NT——- - - - - -ND矩阵,NT是现有的数量,然后呢ND是当前检测的数量。成本矩阵的行对应于现有的跟踪。列对应的检测。跟踪命令是他们的歌曲出现在列表中allTracks之前更新的输出参数多目标跟踪器。

在第一个更新多目标跟踪器,或者当追踪没有以前的跟踪,成本分配矩阵的大小[0,ND]。必须计算,这样成本更低的成本显示更高的可能性,追踪分配一个跟踪检测。为了防止某些检测被分配给特定的追踪,使用

依赖关系

使规范成本矩阵更新追踪时,设置HasCostMatrixInput财产的追踪真正的

数据类型:

可检测追踪id,指定为一个实值1的向量或2矩阵。探测跟踪传感器会检测跟踪。矩阵的第一列包含一个追踪id列表,传感器可检测报告。可选的第二列包含的探测概率跟踪。检测概率是由一个传感器或,如果没有报告,获得的DetectionProbability财产。

不包括在铁轨的标识detectableTrackIDs被认为是无法觉察的。跟踪删除逻辑不计数的缺乏检测作为跟踪删除“错过了检测”的目的。

依赖关系

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

数据类型:|

输出参数

全部展开

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

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

数据类型:结构体|对象

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

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

数据类型:结构体|对象

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

数据类型:结构体|对象

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

创建一个雷达跟踪器系统对象™使用默认过滤器三维常速模型的初始化函数。对于这个运动模型,状态向量是x;vx;y;v, z,登陆]。

追踪= radarTracker (“ConfirmationThreshold”[4 - 5],“DeletionThreshold”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})};updatetime = 1.75;[confirmedTracks, tentativeTracks allTracks] =追踪(侦破,updatetime);

确定跟踪验证通过检查确认跟踪的数量。

numConfirmed = tracker.NumConfirmedTracks
numConfirmed = 0

检查的位置和速度跟踪对象。因为还没有得到证实,得到的位置和速度tentativeTracks结构。

positionSelector = [1 0 0 0 0 0;0 0 1 0 0 0;0 0 0 0 0 1);velocitySelector = [0 1 0 0 0 0;0 0 0 1 0 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过滤器的初始化函数。跟踪模型二维恒定加速度运动。对于这个运动模型,状态向量是x;vx;斧头;y;v;]。

追踪= radarTracker (“FilterInitializationFcn”@initcakf,“ConfirmationThreshold”(3 - 4),“DeletionThreshold”6 [6]);

创建一个序列的检测使用一个移动的目标objectDetection。使用这些探测雷达跟踪器,包括检测单元阵列。

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

验证跟踪尚未证实通过检查确认跟踪的数量。

numConfirmed = tracker.NumConfirmedTracks
numConfirmed = 0

因为轨道不确认,得到的位置和速度tentativeTracks结构。

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

添加更多的检测确认跟踪。

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

验证跟踪已经确认,并显示位置和速度矢量跟踪。

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

让追踪运行但不添加新的检测。现有的记录被删除。

detno = 20时间= (detno-1) * dt;侦破= {};[confirmedTracks, tentativeTracks allTracks] =追踪(依据、时间);pos = pos +韦尔* dt;量= pos;结束

验证跟踪没有初步或跟踪确认。

isempty (allTracks)
ans =逻辑1

算法

当你通过探测雷达跟踪,系统对象:

  • 尝试输入检测分配给现有的跟踪,根据AssignmentThreshold属性的多目标跟踪。

  • 创造了新的追踪未赋值的检测。

  • 更新已经分配跟踪并可能证实,基于ConfirmationThreshold跟踪器的属性。

  • 删除歌曲,没有指定的检测,基于DeletionThreshold跟踪器的属性。

扩展功能

版本历史

介绍了R2021a