主要内容

分布式同步无源传感器跟踪

这个例子演示了使用空间分布和同步无源传感器的测量来跟踪目标。在使用单一机动传感器的无源测距,您了解到被动测量提供了目标状态的不完全可观测性,以及如何操纵单个传感器来获得距离信息。此外,还可以使用多个固定传感器来获得可观测性。在本例中,您将了解如何通过融合来自被动同步传感器的多个检测来跟踪多个目标。

介绍

在多传感器-多目标同步跟踪问题中,同步采集多个无源传感器的检测信息,用于估计以下问题:

  • 场景中的目标数量

  • 目标的位置和速度

这个例子演示了跟踪前的静态融合[1]结构跟踪使用被动测量。的静态融合该架构的目标的一部分进行三角测量的最可能组检测和含有目标估计位置输出稠合检测的。作为测量需要由静态融合融合在一起,传感器必须同步报告测量结果。

如果测量只包含视线信息,则至少需要2个传感器才能找到位置。然而,使用2个传感器时,当多个目标位于同一平面时,就会出现重影(在无目标点相交)的问题。有2个目标和2个传感器,从单个测量框中识别正确的一对是不可能的,如下图所示:

因此,必须使用3个或更多的传感器来减少重影的问题。由于测量噪声和假测量的存在,很难完全消除重影问题。当目标和传感器的几何形状在场景中发生变化时,静态关联返回的鬼三角很可能被动态关联块丢弃。

定义场景

这里使用的场景中传感器和目标的相对位置取自[1]中的一个示例。该方案由3到5个无源传感器观测到的5个等间距目标组成。无源检测采用radarEmitterfusionRadarSensorDetectionMode设置ESM.的HasNoise属性设置为错误的产生假警报沿无噪声检测。噪声经由用户控制变量加至的测量在本实施例中。这是模拟传感器噪声对静态融合的影响。每个传感器具有在方位和一个的视图180度的场FalseAlarmRate的1E-3每方位分辨单元。这导致每扫描2到3个假警报。该场景定义被包裹的辅助函数内helperGenerateFusionScenarioData

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

showGrabs(theaterDisplay,[]);

带有三个传感器的跟踪

在本节中,只考虑来自内部三个传感器的测量,每个传感器的测量噪声协方差设置为0.01度的平方。

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

采用GNN数据关联的方法进行跟踪trackerGNN

跟踪性能评价使用trackAssignmentMetricstrackErrorMetrics

设置

%传感器数量numSensors = 3;%创建一个检测fuser使用triangulateLOS函数% measumentfusionfcn,并指定传感器参数。熔化炉= 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 Hz。循环通过检测和跟踪目标为了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,地面实况);%模拟时间增量time = time + dT;结尾轴(theaterDisplay.TheaterPlot.Parent);

ylim (1.5 [0]);

使用三个传感器与追踪结果0.01度平方噪声协方差的可使用的分配度量进行总结。请注意,所有曲目被分配到正确的真理,没有虚假轨道被跟踪确认。这些结果表明良好的静态精度的关联。

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 _______ ______ ______ ________ ________ 3 6.8821 1.595 2.51 0.80396 6 3.9895 1.1149 1.6409 0.5416 7 5.8195 1.3356 1.9041 0.66745 10 4.2425 1.2514 1.6719 0.62374 11 3.6443 1.1453 1.375 0.55326

测量精度的影响

无源探测融合消除重影对无源测量的精度有很大的影响。随着测量噪声的增加,鬼影联想和真联想之间的区别变得不那么突出,导致静态联想的准确性显著下降。对于距离较近的目标,也可能发生融合检测与跟踪的错误关联。在下一节中,我们将介绍一个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的NaN 4真4的NaN 5假6 7 59假7 6 59假10 9 57假11 8 56假13的NaN 5假18的NaN 5真

每个真理的估计误差较高。注意,轨道在剧场显示上述跳跃。

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

关联的精度可通过增加传感器的数量来提高。不过,计算要求随着每个传感器的成倍增加。静态融合算法花费大部分时间计算每个三角的可行性。该算法的这部分是并行的时UseParallel财产的staticDetectionFuser被设置为真正的,它提供了线性加速成正比的处理器的数量。进一步加快执行,也可以产生这也将在多个处理器上并行执行运行C / C ++代码。您可以使用MATLAB®编码器™在学习代码生成的基本知识开始使用MATLAB编码器(MATLAB编码器)

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

为了加速MATLAB代码的仿真,必须将算法重构为MATLAB函数,该函数可以编译为MEX文件或共享库。为此,将静态融合算法重构为函数。为了在多个调用之间保持fuser的状态,它被定义为持续的变量。

类型('mexFuser');
function [superDets,info] = mexFuser(detections) %#codegen persistent fuser if isempty(fuser) fuser = staticDetectionFuser('MeasurementFusionFcn',@triangulateLOS,…“MaxNumSensors”5…“UseParallel”,真的,…“FalseAlarmRate”,1 e - 3,…“卷”,0.0716,…“DetectionProbability”,0.99);end [superDets,info] = fuser(检测);

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

从存储的缓冲区中获取一个样本检测sampleDetection = detectionBuffer {1} {1} {1};%使用coder.typeof功能以允许可变大小的输入%检测。maxNumDets = 500;inputDets =编码器。typeof ({sampleDetection} [maxNumDets 1] 1 [0]);h =对话框({'为函数生成代码。这可能需要几分钟……”...“完成后此消息框将关闭。”},“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 (['MEX代码执行时间= 'num2str (t_Mex)]);
MATLAB代码执行时间= 37.9316 MEX代码执行时间= 0.4011

带有五个传感器的跟踪

在本节中,来自所有五个传感器的检测用于跟踪,并使用2平方度的测量噪声。

measNoise = 2;%与3个传感器相同的噪音numSensors = 5;[trackingMetrics, errorMetrics] = helperRunStaticFusionSimulation (detectionBuffer、truthLog numSensors, measNoise, theaterDisplay, true);轴(theaterDisplay.TheaterPlot.Parent);

ylim (1.5 [0]);

利用5个传感器进行跟踪的分配结果表明,在整个仿真过程中,所有的真理都被分配了一个轨迹。与低精度的三个传感器模拟的4个轨道下降相比,仿真中也没有轨道下降。

assignmentTable = trackMetricsTable(trackingMetrics);assignmentTable(:,{'的TrackID''AssignedTruthID'“TotalLength”“FalseTrackStatus”})
ans = 5×4 table TrackID AssignedTruthID totalength谬误trackstatus _______ _______________ ___________ ________________ 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 16.415 2.7014 1.3547 0.53336 8 16.555 2.5768 1.5645 0.49951 9 16.361 2.5381 1.474 0.55633 10 26.137 4.0457 2.3739 1.0349

总结

此实施例表明如何使用分布式被动传感器网络来跟踪对象。你学会了如何使用staticDetectionFuser静态关联和融合多个传感器的检测。该示例演示了这种架构如何依赖于网络中的传感器数量和传感器测量的准确性等参数。该实例还展示了如何利用并行计算和自动生成C代码的MATLAB代码来提高性能。

金宝app支持功能

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

函数距离= trueAssignment(轨道,真理)的TID = [track.ObjectAttributes.TargetIndex];的TID =的TID(的TID> 0);如果numel(tIDs) > 1 && all(tIDs == = true . platformid)距离= 0;其他的距离=正;结尾结尾

addNoise给检测添加噪音

函数measNoise侦破= addNoise(依据)为了(1): dets{i}.Measurement(1) = dets{i}.Measurement(1) + sqrt(measNoise)*randn;依据{我}.MeasurementNoise (1) = measNoise;结尾结尾

参考文献

[1] Bar-Shalom, Yaakov, Peter K. Willett, Xin Tian。《追踪与数据融合:算法手册》(2011)。