主要内容

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

此示例演示了使用空间分布和同步被动传感器的测量值跟踪对象。在使用单个机动传感器的被动测距,您了解到被动测量提供目标状态的不完全可观察性以及如何操纵单个传感器以获得范围信息。或者,也可以使用多个固定式传感器来获得可观察性。在此示例中,您将学习如何通过熔断来自被动同步传感器的多个检测来跟踪多个对象。

介绍

在同步多传感器多目标跟踪问题中,同步收集来自多个被动传感器的检测,并用于估计以下各项:

  • 场景中的目标数

  • 位置和这些目标的速度

这个例子说明了如何使用的跟踪前静态融合[1] 使用被动测量进行跟踪的体系结构静态融合该体系结构的一部分目的是三角化最有可能的检测集,并输出包含估计目标位置的融合检测。由于测量需要通过静态融合融合在一起,传感器必须同步报告测量结果。

对于仅包含视线(LOS)信息的测量,至少需要2个传感器才能找到位置。但是,对于2个传感器,重影问题(无目标点的交叉点)当多个目标位于同一平面时发生。使用2个目标和2个传感器,无法从单个测量帧中识别正确的一对,如下图所示:

因此,必须使用3个或更多传感器来减少重影的问题。由于存在测量噪声和错误测量,很难完全消除重影的问题。由于目标和传感器在场景期间,动态关联块返回的静态关联返回的Ghost三角形可能被动态关联块丢弃。

定义方案

这里使用的场景中的传感器和目标的相对放置是从[1]中的一个例子中的。该场景由三到五个无源传感器观察到的五个同等间隔的目标组成。被动检测使用雷达汇款器融合雷达传感器DetectionMode设置为ESM。这杂音传感器的属性设置为产生无噪声的检测和假警报。在本例中,噪声通过用户控制的变量添加到测量中。这是为了模拟传感器噪声对静态融合的影响。每个传感器都有一个180度方位的视场和一个falsealMarrate.每个方位分辨单元1e-3。这将导致每次扫描2到3次错误警报。场景定义被包装在helper函数中helperGenerateFusionScenarioData

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

showGrabs (theaterDisplay []);

三传感器跟踪

在该部分中,仅考虑来自内部三个传感器的测量值,并且每个传感器的测量噪声协方差设定为0.01度平方。

每个传感器的检测将传递到astaticdetectionFuser.。这测量使用FCN用于被动三角测量被指定为三角帆。这测量使用FCN允许指定一个函数来融合给定的检测组合(每个传感器最多一个检测),并返回融合的位置及其误差协方差。的参数falsealMarrate.体积侦查可力性被指定为反映这种情况下模拟传感器的参数。这些参数被用来计算可行的关联的可能性。这使用并行属性,当设置为真的允许定影以评估使用并行处理器可行关联。

通过使用GNN数据关联执行跟踪跟踪器

利用trackassignmentmetrics.trackErrorMetrics

设置

传感器的数量%numsensors = 3;%使用triangulateLOS充当创建检测定影%测量使用FCN并指定传感器的参数。fuser=静态检测fuser(“MeasurementFusionFcn”,@ triangulatelos,......'maxnumsensors',numSensors,......“UseParallel”,真的,......'falsealmarrate',1e-3,......'体积',0.0716,......'DetectionProbability',0.99);%使用GNN跟踪器进行跟踪追踪= trackerGNN (“AssignmentThreshold”,45,......“ConfirmationThreshold”,[3 5],“删除阈值”[4 5]);%使用分配和错误指标来计算精度。trackingMetrics = trackAssignmentMetrics (“距离函数格式”'风俗'......'assignmentdistancefcn'@trueAssignment,“发散距离FCN”,@ trueassignment);errormetrics = trackErrormetrics;

运行仿真三个传感器

%测量噪声测量值=0.01;时间=0;%模拟时间的dT = 1;%场景的1 Hz更新率。%循环探测和跟踪目标iter = 1:numel(DetectionBuffer)%真实信息sensorPlatPoses = truthLog {ITER}(1:numSensors);targetPlatPoses = truthLog {ITER}(6:端);地面实况= [sensorPlatPoses; targetPlatPoses];%使用记录的检测产生噪声检测thisBuffer = detectionBuffer {ITER};availableDetections = vertcat(thisBuffer {1:numSensors});noiseDetections = addNoise(availableDetections,measNoise);使用定影器%熔断器噪声检测fusedDetections =定影(noiseDetections);%在融合探测上运行跟踪器Conftracks =跟踪器(融合键,时间);%更新跟踪和分配指标trackingMetrics(confTracks,targetplatfoses);[trackid,truthIDs]=当前分配(trackingMetrics);errorMetrics(confTracks,trackid,targetplatfoses,truthIDs);%更新影院显示detsToPlot = [noiseDetections (:); fusedDetections (:));theaterDisplay (confTracks detsToPlot groundTruth);%增量模拟时间时间=时间+ dt;结束轴(TheaterDisplay.theereplot.Parent);

ylim([01.5]);

使用噪声协方差为0.01平方度的三个传感器的跟踪结果可以用分配指标进行总结。注意,所有的轨迹都被分配到正确的真理,没有虚假的轨迹被跟踪器确认。这些结果表明了良好的静态关联准确性。

赋值=跟踪器(TrackingMetrics);分配(:,{“TrackID”“AssignedTruthID”“总长度”“错误跟踪状态”})
ans = 5×4 table TrackID assigned dtruthid totalength false trackstatus _______ _______________ ___________ ________________ 3 10 59假6 7 59假7 6 59假10 9 58假11 8 58假

可以使用错误指标来汇总估计位置和目标速度的误差。位置和速度的误差分别在7米范围内,分别为2米/秒,所有目标都有2米,归一化误差接近1.误差度量表示良好的动态关联和跟踪性能。

disp(累计追踪指标(误差指标));
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;%根号(2)度标准差[TrackingMetrics,Errormetrics] = HelperrunstaticFusionsimulation(检测缓解,真实性,NumSens,MoreNoise,TheaterDisplay,False);轴(TheaterDisplay.theereplot.Parent);

ylim([01.5]);

请注意,确认了几条曲目,然后在此模拟中删除。静态关联的准确性差导致鬼魂目标三角形,更频繁地导致跟踪器导致由于多个未命中而删除这些轨道。

赋值=跟踪器(TrackingMetrics);分配(:,{“TrackID”“AssignedTruthID”“总长度”“错误跟踪状态”})
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 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

通过增加传感器的数量,可以提高关联精度。然而,计算需求随着每个传感器的添加呈指数增长。静态融合算法花费了大量的时间来计算每个三角剖分的可行性。算法的这一部分是并行化的使用并行财产的财产staticdetectionFuser.被设定为真的,它提供与处理器数量成正比的线性加速。为了进一步加速执行,您还可以生成C/ c++代码,这些代码也可以在多个处理器上并行执行。您可以了解使用MATLAB®Coder™生成代码的基础知识开始使用MATLAB编码器(MATLAB编码器)

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

为了加速MATLAB代码进行仿真,必须将算法重组为MATLAB函数,可以编译为MEX文件或共享库。为此,将静态融合算法重组为函数。要保留多个呼叫之间定影的状态,它被定义为一个执着的多变的。

类型(“mexFuser”);
函数[superDets,info]=mexFuser(detections)%#如果isempty(fuser)fuser=staticDetectionFuser('MeasurementFusionFcn',@triangulateLOS,'MaxNumSensors',5,'UseParallel',true,'false AlarmRate',1e-3,'Volume',0.0716,'DetectionProbability',0.99);结束[超级数据,信息]=定影器(检测);

MATLAB®Coder™需要指定所有输入参数的属性。这样做的简单方法是通过使用该命令行定义输入属性- args.选项。有关详细信息,请参阅在命令行中通过示例定义输入特性(MATLAB编码器)。要允许可变数量的检测,您将使用编码员函数为输入分配数据类型和大小。

%从存储的缓冲区获取样本检测sampleDetection = detectionBuffer {1} {1} {1};%使用编码器。允许可变大小输入的函数类型%检测。maxNumDets=500;inputDets=coder.typeof({sampleDetection},[maxNumDets,1],[10]);h=msgbox({'正在为函数生成代码。这可能需要几分钟时间…';......完成后此消息框将关闭。},'codegen消息');%使用codegen命令通过指定输入参数来生成代码%通过使用|-args |选项的示例。Codegen.mexFuser-  args.{} 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(检测缓解,真实性,Numsens,MoreNoise,TheaterDisplay,True);轴(TheaterDisplay.theereplot.Parent);

ylim([01.5]);

使用五个传感器跟踪的分配结果表明,所有的真理都在整个模拟过程中分配的轨道。也有在仿真中没有轨道滴相比于4轨道在低精度三个传感器仿真下降。

赋值=跟踪器(TrackingMetrics);分配(:,{“TrackID”“AssignedTruthID”“总长度”“错误跟踪状态”})
ans=5×4表TrackID分配的总长度为FalseTrackStatus

与三个传感器仿真相比,每个真实目标的位置估计误差要低得多。请注意,与具有高精度测量的三个传感器相比,位置和速度的估计结果降低。

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.静态关联和融合来自多个传感器的检测。该示例演示了该体系结构如何取决于网络中传感器数量和传感器测量精度等参数。该示例还展示了如何利用并行计算和从MATLAB代码自动生成C代码来提高性能。

金宝app支持功能

trueAssignment使用曲目的ObjectAttributes将其分配给正确的事实。

作用id = [track. objectattributes . targetindex];> = >; / / > = >;如果numel(tIDs)>1&&all(tIDs==truth.PlatformID)距离=0;其他的距离=inf;结束结束

附加噪声添加噪音到检测

作用dets的= addNoise(dets的,measNoise)i = 1:numel(dets)dets {i} .measurement(1)= dets {i} .measurement(1)+ sqrt(moreNoise)* Randn;DETS {i} .MeasurementNoise(1)= MoSmoise;结束结束

参考

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