定义测试跟踪架构体系
这个例子显示了如何定义一个复杂系统的跟踪体系结构包括多个detection-level多目标跟踪器和track-level融合算法。您可以使用跟踪架构比较不同跟踪系统设计和发现您的系统的最佳解决方案。
介绍
的在地球的场景中模拟和跟踪航路飞机示例显示了如何使用多个远程跟踪飞机雷达系统和保险丝自动相关监视(ads - b)广播的数据转发器得到一个精确的空气状况图。在这个示例中,雷达探测由跟踪融合集中在这些跟踪从ads - b融合跟踪报告。你从这个例子首先加载场景数据,建立一个globe-based可视化。
%创建场景和全球观众负载(“recordedScenario”,“scenarioData”);观众= createGlobe (scenarioData);
上述架构只是一个可能的架构和跟踪系统工程师经常考虑其他的选择。有很多因素决定如何架构一个系统,其中一些是:
传感器输出:一些传感器制造商设计的传感器输出检测列表而其他人跟踪对象内部和只提供传感器跟踪作为输出。
通信网络:需要传输的数据量可以减少如果传感器报告跟踪检测。此外,延迟,物理距离和其他限制可能要求传感器跟踪报告。
计算资源:处理所有的检测在一个中央追踪通常需要更多的内存和计算比处理不同节点之间的数据分配地。
然而,有理由喜欢中央处理在分散的架构。首先,集中跟踪系统可以是最优的,因为所有可用的数据处理在一个地方和没有约束的数据处理。此外,该体系结构更加简单,因为只有一个跟踪器。
集中式空气监测体系结构
作为比较的基准,你定义一个架构,它反映了集中式跟踪系统中描述在地球的场景中模拟和跟踪航路飞机的例子。要做到这一点,你首先定义相同的集中trackerGNN
雷达。注意,雷达更新每12秒,每秒钟ads - b接收更新。以适应不同的更新率,你包里面的追踪helperScheduledTracker
对象。
gnn = trackerGNN (…“TrackerIndex”2,…“FilterInitializationFcn”@initfilter,…“ConfirmationThreshold”[3 - 5],…“DeletionThreshold”,5 [5],…“AssignmentThreshold”,1000年正);追踪= helperScheduledTracker (gnn 12);
您定义的ads - b和跟踪融合的两个来源trackFuser
。请注意,SourceIndex
值为每个源配置必须匹配SourceIndex
价值的ads - b (1)TrackerIndex
跟踪器(2)。此外,FuserIndex
值必须是唯一的。在这种情况下,你将它设置为3。
={来源…fuserSourceConfiguration (“SourceIndex”1);…% ads - bfuserSourceConfiguration (“SourceIndex”,2)…%追踪};熔化炉= trackFuser (“FuserIndex”3,…“MaxNumSources”2,…“SourceConfigurations”来源,…“AssignmentThreshold”,1000年正无穷,…“StateFusion”,“十字路口”,…“StateFusionParameters”,“跟踪”,…“ProcessNoise”10 *眼(3));
追踪和跟踪熔化炉的定义,定义trackingArchitecture
。你添加追踪器,传感器1、2和3追踪报道。你也添加跟踪熔化炉trackingArchitecture
。的trackingArchitecture
将熔化炉fuser基于熔化炉的来源SoucreConfigurations
财产。最后,您可以使用显示
目标函数来显示架构。
centralizedArchitecture = trackingArchitecture;addTracker (centralizedArchitecture追踪,“名字”,“追踪”,“SensorIndices”(1 2 3),“ToOutput”、假);addTrackFuser (centralizedArchitecture熔化炉,“名字”,熔化炉的,“ToOutput”,真正的);显示(centralizedArchitecture)
运行情况和跟踪使用跟踪体系结构
%清楚以前的观众数据和重置建筑如果之前使用明确的(观众);plotTruth (scenarioData,查看器);重置(centralizedArchitecture);为i = 1:元素个数(scenarioData)%读取的时间戳记录场景数据时间= scenarioData .Time;%从场景中所有雷达读取检测检测= scenarioData .Detections;%更新检测上plotDetection(观众、检测);%读ads - b跟踪truePose = scenarioData .TruePose;adsbTracks = scenarioData .ADSBTrack;%通过检测和ads - b跟踪来跟踪架构跟踪= centralizedArchitecture(检测、adsbTracks、时间);%更新显示plotTrack(查看器,跟踪);结束%提供一个输出图像提前(观众);
分散的架构
你想探索系统是如何工作的,当每个雷达报告sensor-level跟踪融合的ads - b由track-level融合跟踪算法。你定义trackingArchitecture
代表这种分散的架构。
decentralizedArchitecture = trackingArchitecture;
接下来,定义每个雷达的跟踪。有三个雷达传感器在原始的例子中,所以您定义三个追踪器。为简单起见,假设这些追踪器中定义一样中央。自SourceIndex ads - b的踪迹1
,你定义的追踪器TrackerIndex
2、3和4。与此同时,雷达探测SensorIndex
= 1、2和3。
sensorTracker = trackerGNN (…“TrackerIndex”2,…“FilterInitializationFcn”@initfilter,…“ConfirmationThreshold”[3 - 5],…“DeletionThreshold”,5 [5],…“AssignmentThreshold”,1000年正);%添加一个跟踪雷达为我= 2:4追踪= helperScheduledTracker(克隆(sensorTracker), 12);跟踪器。TrackerIndex =我;%指定每个雷达跟踪器使用不同的索引addTracker (decentralizedArchitecture追踪,“名字”,strcat (“雷达”num2str(张)),“SensorIndices”张,“ToOutput”、假);%连接正确的跟踪雷达指数结束
您添加一个trackFuser
融合跟踪四个来源,ads - b和三个雷达追踪器。
%定义来源={来源…fuserSourceConfiguration (1);…% ads - bfuserSourceConfiguration (2);…%跟踪雷达1fuserSourceConfiguration (3);…%跟踪雷达2fuserSourceConfiguration (4);…%跟踪雷达3};%添加fuser熔化炉= trackFuser (“FuserIndex”5,…“MaxNumSources”4…“SourceConfigurations”来源,…“AssignmentThreshold”,1000年正无穷,…“StateFusion”,“十字路口”,…“StateFusionParameters”,“跟踪”,…“ProcessNoise”10 *眼(3));addTrackFuser (decentralizedArchitecture熔化炉,“名字”,熔化炉的);%显示跟踪架构图显示(decentralizedArchitecture)
的replayScenario
函数读取记录的场景数据,步骤的新架构,并显示结果。
%重新运行情况,观察跟踪结果replayScenario (decentralizedArchitecture scenarioData,观众)
区域空气监测体系结构
另一个可能的配置可以介于上面的集中和分散的架构。在许多情况下,没有必要为一个空中交通控制中心跟踪飞机太远离它。在这种情况下,可以使用区域空中交通控制中心,一个或多个雷达报告每个地区。
regionalArchitecture = trackingArchitecture;为我= 2:4追踪= helperScheduledTracker(克隆(sensorTracker), 12);跟踪器。TrackerIndex =我;%指定每个雷达使用不同的索引addTracker (regionalArchitecture追踪,“名字”,strcat (“雷达”num2str(张)),“SensorIndices”张,“ToOutput”、假);结束
你定义两个地区和附加两个雷达传感器。此外,每个地区只融合ads - b跟踪报告飞机是否足够接近该地区。
region1Fuser = trackFuser (“FuserIndex”5,“MaxNumSources”3,…“SourceConfigurations”来源([1,2,3]),…两个雷达和ads - b %“AssignmentThreshold”,1000年正无穷,…“StateFusion”,“十字路口”,…“StateFusionParameters”,“跟踪”,…“ProcessNoise”10 *眼(3));region2Fuser = trackFuser (“FuserIndex”6“MaxNumSources”3,…“SourceConfigurations”来源((1,3,4)),…两个雷达和ads - b %“AssignmentThreshold”,1000年正无穷,…“StateFusion”,“十字路口”,…“StateFusionParameters”,“跟踪”,…“ProcessNoise”10 *眼(3));addTrackFuser (regionalArchitecture region1Fuser,“名字”,“Region1”);addTrackFuser (regionalArchitecture region2Fuser,“名字”,“Region2”);显示(regionalArchitecture)
%重新运行情况,观察跟踪结果replayScenario (regionalArchitecture scenarioData,观众)
总结
在这个示例中,您了解了如何使用多个定义跟踪架构复杂系统追踪器和进行航迹融合算法。您看到了如何将检测和跟踪作为输入传递给跟踪架构以及如何输出跟踪。
金宝app支持功能
createGlobe
创建全球可视化
函数gl = createGlobe (scenarioData)%你使用helperGlobeViewer对象附加在这个例子中显示%平台、轨迹、检测和追踪地球上。gl = helperGlobeViewer;setCamera (gl, [28.9176 -95.3388 5.8 e5], [0 -30 10]);%显示飞行路线plotTruth (scenarioData gl);结束
plotTruth
情节地面真理的位置
函数plotTruth (scenarioData观众)提出了= (scenarioData.TruePose);位置= vertcat (poses.Position);太多的情节(观众、职位(:1),职位(:,2),职位(:,3))结束
initfilter
定义了扩展卡尔曼滤波跟踪器使用
飞机运动近似匀速运动模型。因此很小过程噪音会给更多的重量相比,动态的测量将是相当嘈杂的范围。
函数过滤器= initfilter(检测)过滤器= initcvekf(检测);过滤器。StateCovariance = 10 * filter.StateCovariance;% initcvekf使用测量噪声为默认过滤器。ProcessNoise =眼(3);结束
replayScenario
回放记录的场景和产生的结果
函数replayScenario(拱门,scenarioData,观众)明确(观众);plotTruth (scenarioData,查看器);重置(拱);numFusers =元素个数(arch.TrackFusers);跟踪=细胞(1、numFusers);为i = 1:元素个数(scenarioData)时间= scenarioData .Time;%在场景中创建所有雷达的探测检测= scenarioData .Detections;%更新检测上plotDetection(观众、检测);%生成ads - b跟踪adsbTracks = scenarioData .ADSBTrack;%通过检测和ads - b跟踪来跟踪架构[跟踪{1:numFusers}] =拱(检测、adsbTracks、时间);%更新显示plotTrack(观众,vertcat(跟踪{:}));结束提前(观众);结束