主要内容

trackerGNN

多传感器多目标跟踪器使用GNN任务

描述

trackerGNN系统对象™是一个跟踪器能够处理来自多个传感器检测的目标。跟踪器使用一个全局加权(GNN)分配算法。跟踪初始化,证实了预测,纠正和删除的痕迹。输入生成的跟踪检测报告objectDetection,fusionRadarSensor,irSensor,或sonarSensor对象。跟踪估计状态向量和状态向量的协方差矩阵为每一个轨道。每个检测最多被分配给一个跟踪。如果发现不能分配给任何跟踪,跟踪器初始化一个新的轨道。

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

使用这个对象跟踪对象:

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

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

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

创建

描述

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

例子

跟踪器= trackerGNN (名称,值)设置跟踪器使用一个或多个属性名称-值对。例如,trackerGNN (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|字符

分配算法,指定为“MatchPairs”,“Munkres”,“Jonker-Volgenant”,“拍卖”,或“自定义”。Munkres是唯一分配算法,保证最优的解决方案,但它也是最慢的,特别是大量的检测和跟踪。其他算法并不能保证问题的最优解,但可以快20或更多的跟踪和检测。使用“自定义”定义自己的作业功能和指定的名称CustomAssignmentFcn财产。

例子:“自定义”

数据类型:字符

自定义赋值函数名,指定为一个字符串。赋值函数必须有以下语法:

[任务,unTrs, unDets] = f(成本、costNonAssignment)
赋值函数的一个例子,它的参数的描述,看看assignmunkres

依赖关系

要启用这个特性,设置赋值财产“自定义”

数据类型:字符

聚类的检测和跟踪任务,指定为“关闭”“上”

  • “关闭”——跟踪解决全球最近邻分配问题/传感器使用成本矩阵。成本矩阵的列数等于检测的传感器的数量,和的行数等于跟踪维护的跟踪器的数量。禁止作业(作业成本大于AssignmentThreshold)有一个无限的作业成本。

  • “上”——跟踪创建一个集群分离后禁止作业(作业成本大于AssignmentThreshold),并使用禁止作业基础上形成新的集群AssignmentThreshold财产。一个集群是一家集检测和跟踪是分配给对方。在这种情况下,跟踪解决全球最近邻每个集群分配问题。

    当你指定这个属性“上”并指定EnableMemoryManagement财产真正的,你可以使用这三个属性来指定特定的大小可变的数组的边界跟踪,以及确定如何追踪处理集群大小违规行为:

    • MaxNumDetectionsPerCluster

    • MaxNumTracksPerCluster

    • ClusterViolationHandling

    指定范围的大小可变的数组允许您管理的内存占用追踪,特别是在生成的C / c++代码。

数据类型:字符|字符串

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

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

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

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

请注意

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

确认和删除逻辑类型,指定为“历史”“分数”

  • “历史”——跟踪确认和删除是基于轨道的次数已经分配给一个检测的最新跟踪更新。

  • “分数”-跟踪确认和删除基于对数似跟踪分数。一个高分意味着更有可能是有效的。低分数意味着更有可能是一个假警报。

阈值进行跟踪确认,指定为一个标量或1×2向量。阈值取决于类型的跟踪确认和删除逻辑设置使用TrackLogic财产。

  • 历史——确认阈值指定为1×2向量(mn)。至少跟踪确认是否收到检测在过去N更新。默认值是(2、3)

  • 分数——确认阈值指定为一个标量。跟踪确认,如果它的分数至少高达确认阈值。默认值是20.

数据类型:|

最低分数要求删除记录,指定为一个标量或实值1×2向量。阈值取决于类型的跟踪确认和删除逻辑设置使用TrackLogic属性:

  • ——确认阈值指定为历史[P R]。如果没有分配给任何确认跟踪检测P次在过去R跟踪更新,然后删除。

  • 分数,记录被删除,如果它的分数至少降低了阈值的最大跟踪分数。

例子:3

数据类型:|

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

例子:0.5

数据类型:|

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

例子:1 e-5

数据类型:|

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

例子:2.5

数据类型:|

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

例子:1.5

数据类型:|

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

数据类型:|

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

数据类型:|

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

数据类型:|

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

当你指定这个属性

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

  • “忽略”——跟踪器忽略任何按顺序测量和继续运行。

  • “Retrodiction”-跟踪器使用retrodiction算法更新追踪通过忽视OOSM,更新现有的跟踪,或创建新的使用OOSM跟踪。您必须指定一个过滤器的初始化函数,返回一个trackingKF,trackingEKF,或trackingIMM对象FilterInitializationFcn财产。

如果指定这个属性“Retrodiction”,跟踪处理OOSM遵循这些步骤:

  • 如果OOSM时间戳超出最古老的校正时间戳(指定的MaxNumOOSMSteps财产)维护的追踪,追踪OOSMs丢弃。

  • 如果OOSM时间戳在最古老的校正时间戳维护的追踪,追踪第一retrodicts所有现有的跟踪OOSM时。然后,追踪全球最近邻算法适用于试着将OOSM任何retrodicted的踪迹。

    • 如果跟踪成功的同事OOSM retrodicted跟踪,然后使用OOSM追踪更新retrodicted跟踪通过应用retro-correction算法获得当前,跟踪纠正。

    • 如果追踪者不能把OOSM任何retrodicted跟踪,然后跟踪创建一个新的基于OOSM跟踪和预测跟踪当前时间。

为更多的细节在retrodiction retro-correction算法,明白了Retrodiction和Retro-Correction。模拟按顺序检测,使用objectDetectionDelay

请注意

  • 当您选择“Retrodiction”,你不能使用costMatrix输入。

可调:是的

按顺序测量的最大数量(OOSM)步骤,指定为一个正整数。

增加这个属性的值需要更多的内存,但使您能够调用跟踪OOSMs有较大滞后相对于过去的时间戳。然而,随着延迟增加,OOSM的影响上的当前状态跟踪减少。此属性的推荐值3

依赖关系

要启用这个论点,设置OOSMHandling财产“Retrodiction”

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

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

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

可调:是的

数据类型:结构体

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

数据类型:逻辑

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

数据类型:逻辑

这个属性是只读的。

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

数据类型:

这个属性是只读的。

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

数据类型:

使内存管理属性,指定为一个逻辑1(真正的)或(0)。

将这个属性设置为真正的使您能够使用MaxNumDetectionsPerSensor属性指定的最大数量的检测,每个传感器可以通过追踪在跟踪的一个调用。

此外,如果AssignmentClustering财产被指定为“上”,你可以使用三个属性来指定特定的大小可变的数组的边界跟踪以及确定如何跟踪处理集群大小违规行为:

  • MaxNumDetectionsPerCluster

  • MaxNumTracksPerCluster

  • ClusterViolationHandling

指定范围的大小可变的数组允许您管理的内存占用跟踪器在生成的C / c++代码。

数据类型:逻辑

最大数量的检测传感器,指定为一个正整数。这个属性决定了检测的最大数量,每个传感器可以通过追踪每个调用的跟踪器。

将此属性设置为一个有限值如果你想跟踪建立高效的本地变量界限C / c++代码生成。将此属性设置为如果你不想绑定每个传感器检测的最大数量。

依赖关系

要启用这个特性,设置EnableMemoryManagement财产真正的

数据类型:|

最大数量的检测在运行时跟踪的每个集群,指定为一个正整数。

将这个属性设置为一个有限值允许跟踪器绑定集群大小和减少了内存占用的跟踪器在生成的C / c++代码。将此属性设置为如果你不想绑定检测每个集群的最大数量。

在运行时,如果检测在集群的数量超过了指定的MaxNumDetectionsPerCluster,跟踪反应的基础上ClusterViolationHandling财产。

依赖关系

要启用这个特性,指定AssignmentClustering财产“上”并设置EnableMemoryManagement财产真正的

数据类型:|

最大数量的跟踪每个集群的运行时跟踪,指定为一个正整数。

将这个属性设置为一个有限值允许跟踪器绑定集群大小和减少了内存占用的跟踪器在生成的C / c++代码。将此属性设置为如果你不想绑定跟踪每个集群的最大数量。

在运行时,如果集群中的曲目的数量超过了指定的MaxNumTracksPerCluster,跟踪反应的基础上ClusterViolationHandling财产。

依赖关系

要启用这个论点,指定AssignmentClustering财产“上”并设置EnableMemoryManagement财产真正的

数据类型:|

处理运行时违反了集群范围,指定这些选项之一:

  • “Teminate”——跟踪报告错误,如果在运行时,任何集群违反了集群中指定的界限MaxNumDetectionsPerClusterMaxNumTracksPerCluster属性。

  • 分裂和警告——跟踪器将size-violating集群分为更小的集群使用一个次优的方法。跟踪器也报道警告指示违反。

  • “分裂”——跟踪器将size-violating集群分为更小的集群通过使用一个次优的方法。追踪不报告一个警告。

在次优方法,追踪分离检测或钉,最小的可能关联到其他追踪或检测到集群范围满足。这些分离出来检测或跟踪可以形成一个或多个新的集群取决于彼此协会可能和AssignmentThreshold财产。

依赖关系

要启用这个特性,指定AssignmentClustering财产“上”并设置EnableMemoryManagement财产真正的

数据类型:字符|字符串

使用

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

描述

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

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

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

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

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

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

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

输入参数

全部展开

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

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

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

数据类型:|

成本矩阵,指定为一个实值N——- - - - - -矩阵,N是现有的数量,然后呢是当前检测的数量。成本矩阵行必须位于同一个订单追踪的列表。必须在相同的顺序列检测列表。获得正确的顺序列表的歌曲从第三输出参数,allTracks,当跟踪更新。

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

依赖关系

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

数据类型:|

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

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

依赖关系

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

数据类型:|

输出参数

全部展开

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

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

数据类型:结构体|对象

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

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

数据类型:结构体|对象

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

数据类型:结构体|对象

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

描述
OOSMDetectionIndices

按顺序测量的指标跟踪器的当前步骤

TrackIDsAtStepBeginning

当步骤开始追踪id

CostMatrix

成本分配矩阵

作业

返回的任务分配功能。

UnassignedTracks

IDs的未赋值的跟踪返回的追踪

UnassignedDetections

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

InitiatedTrackIDs

IDs的追踪期间启动步骤

DeletedTrackIDs

IDs的痕迹删除步骤

TrackIDsAtStepEnd

追踪id步骤结束时

MaxNumDetectionsPerCluster 检测的最大数量在所有集群生成步骤。结构有这个字段只有当你设置的AssignmentClusteringEnableMemoryManagement属性“上”
MaxNumTracksPerCluster 跟踪的最大数量在所有集群生成步骤。结构有这个字段只有当你设置的AssignmentClusteringEnableMemoryManagement属性“上”
OOSMHandling

分析信息按顺序测量处理,作为一个结构返回。只有这一领域的结构OOSMHandling跟踪指定的属性“Retrodiction”

OOSMHandling结构包含这些字段:

描述
DiscardedDetections 丢弃的乱序执行检测的指标。OOSM是丢弃如果不是由指定的历史保存的状态MaxNumOOSMSteps财产。
CostMatrix

成本按顺序分配矩阵的测量

作业

作业按顺序检测和跟踪维护

UnassignedDetections 未赋值的指数按顺序检测。跟踪器创建新的追踪未赋值的乱序执行检测。

数据类型:结构体

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

构造一个trackerGNN对象的默认初始化二维常速卡尔曼滤波函数,initcvkf

追踪= trackerGNN (“FilterInitializationFcn”@initcvkf,“ConfirmationThreshold”[4 - 5],“DeletionThreshold”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 0 0
velocitySelector速度= getTrackVelocities(跟踪)
速度=2×20 0 0 0

算法

全部展开

引用

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

扩展功能

版本历史

介绍了R2018b