主要内容

跟踪使用分布式同步被动传感器

这个例子说明了利用特殊的测量对象的跟踪和同步被动传感器。在被动测距使用单一操纵传感器,你知道被动测量提供了不完整的目标的状态和可观察性如何设法获得单个传感器范围信息。或者,也可以使用多个固定传感器获得可观测性。在这个例子中,您将学习如何通过融合多个检测跟踪多个对象从被动同步传感器。

介绍

multisensor-multitarget同步跟踪的问题,从多个被动探测传感器收集同步和用于估计如下:

  • 的目标场景

  • 位置和速度的目标

这个例子演示了使用静态融合之前跟踪[1]架构使用被动跟踪测量。的静态融合架构的一部分,旨在满足最可能的检测和输出融合检测包含估计目标位置。因为测量需要通过静态融合,融合在一起的传感器必须同步测量报告。

只包含视距(LOS)与测量信息,至少2传感器需要找到这个职位。然而,随着2传感器、重影的问题(十字路口点没有目标)发生在多个目标躺在同一个平面上。2目标和传感器,它是不可能确定正确的测量对从一个框架如下图所示:

因此,一个人必须使用3或更多传感器来减少重影的问题。由于测量噪声和虚假的存在测量,很难完全消除重影的问题。鬼剖分返回静态协会可能会被丢弃的动态关联块为目标的几何和传感器在场景变化。

定义场景

传感器和目标之间的相对位置在这里使用的场景取自一个示例在[1]。五条平行的目标观测到的场景由三到五被动传感器。被动探测建模使用radarEmitterfusionRadarSensorDetectionMode设置为ESM。的HasNoise传感器将财产生成无噪声的检测以及假警报。噪声测量在这个例子中通过添加一个用户控制变量。这是模拟传感器噪声对静态融合的效果。每个传感器都有一个视野的方位和180度FalseAlarmRate1 e - 3 /方位分辨单元。这导致每个扫描2到3假警报。场景定义是包裹在helper函数helperGenerateFusionScenarioData

[detectionBuffer, truthLog theaterDisplay] = helperGenerateStaticFusionScenarioData;showScenario (theaterDisplay);

showGrabs (theaterDisplay []);

跟踪有三个传感器

在本节中,只有从内部三个传感器被认为是测量和测量噪声协方差为每个传感器设置为0.01度的平方。

每个传感器传递的检测staticDetectionFuser。的MeasurementFusionFcn对于被动三角被指定为triangulateLOS。的MeasurementFusionFcn允许指定一个函数给定的组合融合检测(最多一个从每个传感器检测),并返回融合位置及其误差协方差。的参数FalseAlarmRate,体积DetectionProbability指定以反映传感器的参数模拟在这个场景中。这些参数用于计算可行的关联的可能性。的UseParallel属性,设置的时候出现真正的,允许fuser评估可行的关联使用并行处理器。

跟踪是由GNN数据协会通过使用trackerGNN

评估使用的跟踪性能trackAssignmentMetricstrackErrorMetrics

设置

%的传感器数量numSensors = 3;%使用triangulateLOS函数创建一个检测熔化炉的% MeasurementFusionFcn并指定参数的传感器。熔化炉= staticDetectionFuser (“MeasurementFusionFcn”@triangulateLOS,“MaxNumSensors”numSensors,“UseParallel”,真的,“FalseAlarmRate”1 e - 3,“体积”,0.0716,“DetectionProbability”,0.99);%使用GNN跟踪器跟踪追踪= trackerGNN (“AssignmentThreshold”45岁的“ConfirmationThreshold”[3 - 5],“DeletionThreshold”[4 - 5]);%使用赋值计算精度和误差指标。trackingMetrics = trackAssignmentMetrics (“DistanceFunctionFormat”,“自定义”,“AssignmentDistanceFcn”@trueAssignment,“DivergenceDistanceFcn”,@trueAssignment);errorMetrics = trackErrorMetrics;

运行仿真和三个传感器

%测量噪声measNoise = 0.01;时间= 0;%的仿真时间dT = 1;% 1赫兹更新的场景。%循环检测和跟踪目标iter = 1:元素个数(detectionBuffer)%真实信息sensorPlatPoses = truthLog {iter} (1: numSensors);targetPlatPoses = truthLog {iter}(6:结束);groundTruth = [sensorPlatPoses; targetPlatPoses];%使用记录生成噪声检测检测thisBuffer = detectionBuffer {iter};availableDetections = vertcat (thisBuffer {1: numSensors});noiseDetections = addNoise (availableDetections measNoise);%保险丝使用熔化炉噪声检测fusedDetections =熔化炉(noiseDetections);%融合检测上运行一个追踪者confTracks =追踪(fusedDetections、时间);%更新跟踪和任务指标trackingMetrics (confTracks targetPlatPoses);[trackIDs, truthIDs] = currentAssignment (trackingMetrics);errorMetrics (confTracks trackIDs、targetPlatPoses truthIDs);%更新戏剧显示detsToPlot = [noiseDetections (:); fusedDetections (:));theaterDisplay (confTracks detsToPlot groundTruth);%增加仿真时间时间=时间+ dT;结束轴(theaterDisplay.TheaterPlot.Parent);

ylim (1.5 [0]);

结果跟踪使用三个传感器0.01 degrees-squared噪声协方差可以概括使用任务指标。注意所有跟踪被分配到正确的真理,没有错误的轨道跟踪确认。这些结果表明静态关联精度好。

assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”,“AssignedTruthID”,“TotalLength”,“FalseTrackStatus”})
ans = 5×4表TrackID AssignedTruthID TotalLength FalseTrackStatus _________售予___________ ___________ 3 10 59假6 7 59假7 6 59假10 9 58假11 8 58假

目标的位置和速度估计误差可以概括使用误差度量。错误的位置和速度分别在7米和2米/秒的所有目标和规范化的错误是接近1。误差指标表明良好的动态关联和跟踪性能。

disp (cumulativeTrackMetrics (errorMetrics));
TrackID posRMS velRMS posANEES velANEES _________交说6 3 6.8821 1.595 2.51 0.80396 3.9895 1.1149 1.6409 0.5416 7 5.8195 1.3356 1.9041 0.66745 10 11 3.6443 1.1453 1.375 0.55326 4.2425 1.2514 1.6719 0.62374

影响测量精度

被动探测的融合消除重影是高度依赖于被动测量的准确性。随着测量噪声增加,鬼协会和真正的协会之间的区别变得不那么突出,导致静态关联的准确性显著下降。在密集目标,还可能出现错误的融合检测协会跟踪。在下一节中,一个helper函数helperRunStaticFusionSimulation用于重新运行场景2度的测量噪声协方差的平方。

再次运行场景具有高测量噪声

numSensors = 3;measNoise = 2;% sqrt(2)度的标准偏差[trackingMetrics, errorMetrics] = helperRunStaticFusionSimulation (detectionBuffer、truthLog numSensors, measNoise, theaterDisplay,假);轴(theaterDisplay.TheaterPlot.Parent);

ylim (1.5 [0]);

注意,一些模拟跟踪确认,然后被撤销。可怜的静态关联精度导致鬼多目标剖分,导致跟踪删除这些痕迹由于多个了。

assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”,“AssignedTruthID”,“TotalLength”,“FalseTrackStatus”})
ans = 9×4表TrackID AssignedTruthID TotalLength FalseTrackStatus _________售予___________ ___________ 1 10 59假3南4对4南5错6 7 59假7 6 59假10 9 57假11 8 56假13南5假18南5真的

每个真理更高的估计误差。请注意,上面的跟踪跳跃在剧院里显示。

disp (cumulativeTruthMetrics (errorMetrics));
TruthID posRMS velRMS posANEES velANEES _________交说6 261.26 7.498 82.824 1.4568 7 8 54.822 3.226 3.9109 0.92307 50.606 4.6234 2.8907 1.1096 9 10 206.17 7.0411 47.227 1.6252 83.002 5.0335 7.1213 1.8917

协会精度可以提高通过增加传感器的数量。然而,计算每个传感器需求的增加呈指数增长。静态融合算法花费的大部分时间计算每个三角测量的可行性。这部分算法时并行UseParallel财产的staticDetectionFuser被设置为真正的,它提供了一个线性加速处理器的数量成正比。进一步加快执行,您还可以生成C / c++代码也将运行在多个处理器上并行执行。你可以学习基本的代码生成使用MATLAB®编码器™开始使用MATLAB编码器(MATLAB编码器)

通过并行加速MATLAB代码和代码生成

加速MATLAB代码仿真,该算法必须重组为一个MATLAB函数,可以编译成一个墨西哥人文件或一个共享库。为此,静态融合算法重组成一个函数。保存多个调用之间的熔化炉的状态,它被定义为一个持续的变量。

类型(“mexFuser”);
函数[superDets信息]= mexFuser(检测)% # codegen持续熔化炉如果isempty(熔化炉)熔化炉= staticDetectionFuser (@triangulateLOS MeasurementFusionFcn”,…“MaxNumSensors”5…“UseParallel”,真的,…“FalseAlarmRate”, 1 e - 3,…“卷”,0.0716,…“DetectionProbability”, 0.99);结束[superDets信息]=熔化炉(检测);

MATLAB®编码器™需要指定属性的所有输入参数。一个简单的方法是通过定义输入属性的例子在命令行中使用arg游戏选择。有关更多信息,请参见在命令行定义输入属性的例子(MATLAB编码器)。允许变量数量的检测,您将使用coder.typeof函数分配数据类型和大小的输入。

%从存储缓冲区获取样本检测sampleDetection = detectionBuffer {1} {1} {1};%使用编码器。typeof函数允许适应输入%检测。maxNumDets = 500;inputDets =编码器。typeof ({sampleDetection} [maxNumDets 1] 1 [0]);h =对话框({对函数的生成代码。这可能需要几分钟……”;“这消息框完成后将关闭。”},“Codegen消息”);%使用codegen命令通过指定输入参数来生成代码通过示例使用| % args |选项。codegenmexFuserarg游戏{inputDets};关闭(h);
代码生成成功。

您可以验证加速通过代码生成通过比较融合一帧的时间被他们检测

testDetections = addNoise (vertcat (detectionBuffer {1} {1:5}), 1);抽搐,mexFuser (testDetections); t_ML = toc;抽搐,mexFuser_mex (testDetections); t_Mex = toc;disp ([MATLAB代码执行时间= 'num2str (t_ML)]);disp ([“墨西哥人代码执行时间= 'num2str (t_Mex)]);
MATLAB代码执行时间= 37.9316 = 0.4011墨西哥人代码的执行时间

跟踪和五个传感器

在这一部分中,从所有5个传感器用于检测跟踪和测量噪声使用2度的平方。

measNoise = 2;% 3传感器噪声一样numSensors = 5;[trackingMetrics, errorMetrics] = helperRunStaticFusionSimulation (detectionBuffer、truthLog numSensors, measNoise, theaterDisplay, true);轴(theaterDisplay.TheaterPlot.Parent);

ylim (1.5 [0]);

赋值的结果使用五个传感器跟踪表明,所有真理都分配一个跟踪在整个模拟。也没有跟踪仿真相比下降4三传感器仿真跟踪精度下降。

assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”,“AssignedTruthID”,“TotalLength”,“FalseTrackStatus”})
ans = 5×4表TrackID AssignedTruthID TotalLength FalseTrackStatus _________售予___________ ___________ 2 10 59假3 9 59假4 8 59假5 7 59假6 6 59假

估计错误位置为每个真正的目标相比要低得多的三个传感器模拟。注意,位置和速度的估计结果做降解相比三个传感器的高精度测量。

disp (cumulativeTruthMetrics (errorMetrics))
TruthID posRMS velRMS posANEES velANEES _________交说6 34.74 3.0009 3.0358 0.75358 7 8 16.415 2.7014 1.3547 0.53336 16.555 2.5768 1.5645 0.49951 9 10 26.137 4.0457 2.3739 0.55633 16.361 2.5381 1.474 1.0349

总结

这个例子展示了如何使用一个分布式被动传感器网络跟踪对象。您学习了如何使用staticDetectionFuser静态关联和融合来自多个传感器的检测。这个例子演示了这种架构是如何取决于参数网络的传感器数量和传感器测量的准确性。这个示例还展示了如何通过利用并行计算和加速性能从MATLAB代码自动生成C代码。

万博1manbetx支持功能

trueAssignment使用ObjectAttributes有望将其分配给正确的真理。

函数距离= trueAssignment(跟踪、真理)tid = [track.ObjectAttributes.TargetIndex];tid = tid (tid > 0);如果元素个数(tid) > 1 & & (tid = = truth.PlatformID)距离= 0;其他的距离=正;结束结束

addNoise添加噪声检测

函数measNoise侦破= addNoise(依据)i = 1:元素个数(检波器)精细{我}.Measurement(1) =侦破{我}.Measurement (1) + sqrt (measNoise) * randn;依据{我}.MeasurementNoise (1) = measNoise;结束结束

引用

[1]Bar-Shalom班,彼得·k·威利•和鑫田。“跟踪和数据融合:手册的算法。”(2011).