主要内容

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

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

介绍

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

  • 场景中的目标数

  • 这些目标的位置和速度

此示例演示了跟踪前的静态融合[1] 使用被动测量进行跟踪的体系结构静态融合该体系结构的一部分旨在对最可能的检测集进行三角测量,并输出包含目标估计位置的融合检测。由于需要通过静态融合将测量值融合在一起,传感器必须同步报告测量值。

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

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

定义场景

这里使用的场景中传感器和目标的相对位置取自[1]中的一个示例。该方案由3到5个无源传感器观测到的5个等间距目标组成。无源检测采用雷达汇款器融合雷达传感器具有检测模式着手ESM这个杂音属性设置为错误的生成无噪声检测和假警报。在本例中,通过用户控制变量将噪声添加到测量值中。这是为了模拟传感器噪声对静态融合的影响。每个传感器都有180度方位角的视野和FalseAlarmRate每个方位角分辨率单元1e-3。这将导致每次扫描2到3个假警报。场景定义包装在helper函数中helperGenerateFusionScenarioData

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

展品(剧院展示,[]);

三传感器跟踪

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

每个传感器的检测被传递给staticDetectionFuser这个测量使用FCN对于被动三角测量,指定为三角帆这个测量使用FCN允许指定一个函数来融合给定的检测组合(每个传感器最多一个检测),并返回融合位置及其误差协方差。参数FalseAlarmRate体积DetectionProbability指定用于反映此场景中模拟的传感器参数。这些参数用于计算可行关联的可能性使用并行属性,当设置为符合事实的,允许fuser使用并行处理器评估可行的关联。

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

跟踪性能的评估使用trackAssignmentMetrics跟踪误差度量

安装程序

%传感器数量numSensors = 3;%使用triangulateLOS函数作为%测量使用FCN并指定传感器的参数。fuser=静态检测fuser(“MeasurementFusionFcn”@triangulateLOS,...“MaxNumSensors”,numSensors,...“使用并行”,真的,...“FalseAlarmRate”1 e - 3,...“体积”,0.0716,...“探测概率”, 0.99);%使用GNN跟踪器进行跟踪跟踪器(“AssignmentThreshold”45岁的...“确认阈值”,[3 5],“删除阈值”,[4 5]);%使用分配和错误度量来计算准确性。trackingMetrics=trackAssignmentMetrics(“距离函数格式”“自定义”...“AssignmentDistanceFcn”,@trueAssignment,“发散距离FCN”, @trueAssignment);errorMetrics = trackErrorMetrics;

使用三个传感器运行模拟

%测量噪声测量值=0.01;时间=0;%模拟时间dT=1;%场景的1 Hz更新率。%循环探测和跟踪目标对于iter = 1:元素个数(detectionBuffer)%真相信息sensorPlatPoses=truthLog{iter}(1:numSensor);targetPlatPoses=truthLog{iter}(6:end);groundTruth=[sensorPlatPoses;targetPlatPoses];%使用记录的检测生成噪声检测thisBuffer=detectionBuffer{iter};availableDetections=vertcat(thisBuffer{1:numSensors});noiseDetections=addNoise(availableDetections,measNoise);使用保险丝检测保险丝噪声fusedDetections=fuser(噪声检测);%在融合探测上运行跟踪器confTracks =追踪(fusedDetections、时间);%更新跟踪和分配指标trackingMetrics(confTracks,targetplatfoses);[trackid,truthIDs]=当前分配(trackingMetrics);errorMetrics(confTracks,trackid,targetplatfoses,truthIDs);%更新剧场显示detsToPlot=[NoisedDetections(:);fusedDetections(:)];剧院展示(confTracks、detsToPlot、groundTruth);%增量模拟时间time = time + dT;终止轴(theaterDisplay.TheaterPlot.Parent);

ylim([01.5]);

使用噪声协方差为0.01平方度的三个传感器进行跟踪的结果可以使用分配度量进行总结。请注意,所有轨迹均被指定为正确的真理,跟踪器未确认任何错误轨迹。这些结果表明了良好的静态关联精度。

assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”“指定的露丝”“总长度”“错误跟踪状态”})
ans=5×4表TrackID分配的总长度为FalseTrackStatus

利用误差度量可以总结出目标位置和速度估计的误差。所有目标的位置误差和速度误差分别在7米和2米/秒内,归一化误差接近1。误差指标表明了良好的动态关联和跟踪性能。

disp(累计追踪指标(误差指标));
TrackID posRMS-velRMS-velRMS-posANEES-velANEES-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu6.8821.595 2.51 0.80396.9895 1.1149 1.6409 0.5416 7 5.8195 1.3356 1.9041 0.66745.2425.2514.671.371.453

测量精度的影响

融合被动检测以消除重影在很大程度上取决于被动测量的准确性。随着测量噪声的增加,重影关联和真实关联之间的区别变得不那么突出,导致静态关联的准确性显著下降。对于密集目标,也可能出现融合检测与航迹的不正确关联。在下一节中,将介绍一个helper函数helperRunStaticFusionSimulation用于重新运行场景,测量噪声协方差为2平方度。

使用高测量噪声再次运行该场景

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

ylim([01.5]);

请注意,在这个模拟中有几个轨道被确认,然后被丢弃。静态关联精度差,容易导致鬼目标三角剖分,导致跟踪器多次脱靶而删除跟踪。

assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”“指定的露丝”“总长度”“错误跟踪状态”})
ans=9×4表TrackID分配的总长度为FALSTRACKSTATUS(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu59假4真4 NAN5假6假6假10假5假5假5

每个真值的估计误差更高。请注意,上面的剧场显示中的轨迹跳跃。

disp(累积真实度量(errorMetrics));
特鲁希德·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆6 261.267.498 82.824 1.4568 54.822 3.226 3.9109 0.92307.606 4.6234.8907 1.1096 9.835.037.10.227.17.0417

通过增加传感器数量可以提高关联精度。然而,随着每个传感器的增加,计算需求呈指数增长。静态融合算法花费大部分时间计算每个三角剖分的可行性。当使用并行财产staticDetectionFuser设置为符合事实的,它提供与处理器数量成比例的线性加速。为了进一步加速执行,您还可以生成C/C++代码,该代码也将在多个处理器上并行执行。您可以使用MATLAB®编码器学习代码生成的基础知识™ 在开始使用MATLAB编码器(MATLAB编码器)

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

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

类型(“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™要求指定所有输入参数的属性。的示例在命令行中定义输入属性是一种简单的方法arg游戏选项。有关详细信息,请参阅在命令行中通过示例定义输入特性(MATLAB编码器)。要允许可变数量的检测,您将使用编码员函数为输入分配数据类型和大小。

%从存储的缓冲区获取样本检测sampleDetection=detectionBuffer{1}{1};%使用coder.typeof函数允许为以下对象提供可变大小的输入:%检测。maxNumDets=500;inputDets=coder.typeof({sampleDetection},[maxNumDets,1],[10]);h=msgbox({'正在为函数生成代码。这可能需要几分钟时间…'...'完成后,此消息框将关闭。'},“Codegen消息”);%使用codegen命令通过指定输入参数生成代码%通过使用|-args |选项的示例。codegenmexFuserarg游戏{inputDets};关闭(h);
代码生成成功。

通过比较代码生成融合一帧检测所花费的时间,您可以验证代码生成所实现的加速

testDetections=addNoise(vertcat(detectionBuffer{1}{1:5}),1);tic;mexFuser(testDetections);t_ML=toc;tic;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([01.5]);

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

assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”“指定的露丝”“总长度”“错误跟踪状态”})
ans=5×4表TrackID分配的总长度为FalseTrackStatus

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

disp(累积度量(误差度量))
特鲁希德·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆6 34.74 3.0009 3.0358 0.75358 16.415 2.7014 1.3547 0.53336 16.555 2.5768 1.49951.361.531.534.034.374.371

总结

该示例演示了如何使用分布式被动传感器网络跟踪对象。你学会了如何使用staticDetectionFuser静态关联和融合来自多个传感器的检测。该示例演示了该体系结构如何取决于网络中传感器数量和传感器测量精度等参数。该示例还展示了如何利用并行计算和从MATLAB代码自动生成C代码来提高性能。

金宝app支持功能

真实赋值使用track的ObjectAttributes将其分配给正确的真理。

作用距离=trueAssignment(track,truth)tIDs=[track.ObjectAttributes.TargetIndex];tIDs=tIDs(tIDs>0);如果numel(tIDs)>1&&all(tIDs==truth.PlatformID)距离=0;其他的距离=inf;终止终止

附加噪声给检测添加噪音

作用dets=增加噪音(dets,measNoise)对于(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)。