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

本实施例说明使用从空间分布和同步无源传感器测量物体的跟踪。在里面被动测距使用单个机动传感器,你了解到的无源测量提供了目标的状态的不完全可观测和单个传感器如何操纵获取范围的信息。替代地,多个静止传感器也可用于获得可观察性。在这个例子中,您将学习如何通过从被动同步传感器融合多次检测跟踪多个目标。

介绍

在同步多传感器-多目标跟踪问题,来自多个无源传感器检测被同步地收集并用于估计如下:

  • 方案中的目标数

  • 位置和这些目标的速度

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

与仅含有线的视线测量(LOS)的信息,需要至少2个传感器找到的位置。然而,利用2个传感器,重影(在点没有目标交叉点)的问题,当多个目标位于在同一平面中发生。与2个目标和2个传感器,因此不可能从测量的单个帧识别正确的一对,如下面图中所示:

因此,人们必须使用3个或更多个传感器以减少重影的问题。由于测量噪声和虚假的测量的情况下,也难以完全消除重影的问题。通过静态关联返回鬼三角很可能由动态关联块作为目标和传感器的变化场景中的几何形状被丢弃。

定义方案

传感器和目标的在这里使用的场景中的相对位置是从例如在[1]取。场景包括由三至五个无源传感器观察到5等距的目标。被动检测正在使用建模radarEmitterradarSensorDetectionMode设置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属性,将其设置为真正允许定影以评估使用并行处理器可行关联。

跟踪是由GNN数据关联通过使用执行trackerGNN

跟踪性能评价使用trackAssignmentMetricstrackErrorMetrics

设定

传感器的数量%numSensors = 3;%使用triangulateLOS充当创建检测定影%MeasurementFusionFcn并指定传感器的参数。定影= staticDetectionFuser('MeasurementFusionFcn'@ triangulateLOS,...'MaxNumSensors',numSensors,...'UseParallel',真正,...'FalseAlarmRate',1E-3,...'体积',0.0716,...'DetectionProbability',0.99);%跟踪使用GNN跟踪器跟踪= trackerGNN('AssignmentThreshold'50,...'ConfirmationThreshold',[3-5],'DeletionThreshold'[4 5]);%用途分配和错误的指标来计算的准确性。trackingMetrics = trackAssignmentMetrics('DistanceFunctionFormat'“自定义”...'AssignmentDistanceFcn'@ trueAssignment,'DivergenceDistanceFcn',@ trueAssignment);errorMetrics = trackErrorMetrics;

运行仿真三个传感器

%测量噪声measNoise = 0.01;时间= 0;的dT = 1;场景的%1赫兹更新速率。通过检测和跟踪目标环路%对于ITER = 1:numel(detectionBuffer)%真理信息时间=时间+的dT;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 =跟踪器(fusedDetections,时间);%更新跟踪和分配指标trackingMetrics(confTracks,targetPlatPoses);[trackIDs,truthIDs] = currentAssignment(trackingMetrics);errorMetrics(confTracks,trackIDs,targetPlatPoses,truthIDs);%更新影院显示器detsToPlot = [noiseDetections(:); fusedDetections(:)];theaterDisplay(confTracks,detsToPlot,地面实况);结束轴(theaterDisplay.TheaterPlot.Parent);

ylim([0 1.5]);

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

assignmentTable = trackMetricsTable(trackingMetrics);assignmentTable(:,{'的TrackID''AssignedTruthID''总长度''FalseTrackStatus'})
ANS = 5×4表的TrackID AssignedTruthID TotalLength FalseTrackStatus _______ _______________ ___________ ________________ 1个10 58假2 9 58假3 8 58 4假7 58假5 6 58假

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

DISP(cumulativeTrackMetrics(errorMetrics));
的TrackID posRMS velRMS posANEES velANEES _______ ______ ______ ________ ________ 1 5.6264 1.2647 1.8461 0.56551 2 3.452 1.3206 1.2788 0.59367 3 4.689 1.5054 2.011 0.80126 4 3.9549 1.2235 1.562 0.60194 5 4.7398 1.6053 1.7627 0.74181

测量精度的影响。

被动检测的消除重影的融合是高度依赖于被动测量的精确度。作为测量噪声增加,鬼协会和真协会之间的区别变得不那么突出,从而在静态关联的精度的显著下降。随着密集的目标,也可能会出现融合检测的,以轨道不正确的关联。在接下来的部分,一个辅助函数helperRunStaticFusionSimulation与测量噪声协方差被用于重新运行该方案的2度的平方。

高测量噪声再次运行情况

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

ylim([0 1.5]);

需要注意的是大量的轨道被确认,然后在这个模拟下降。可怜的静态关联精度导致鬼目标的三角测量的次数增加,导致跟踪删除这些曲目由于多次失误。

assignmentTable = trackMetricsTable(trackingMetrics);assignmentTable(:,{'的TrackID''AssignedTruthID''总长度''FalseTrackStatus'})
ANS = 12×4表的TrackID AssignedTruthID TotalLength FalseTrackStatus _______ _______________ ___________ ________________ 1 10 58假2的NaN 11真3的NaN 8真5 8 57假6 6 58假8 7 57假12 9 51假13的NaN 7真22的NaN 6假23 NaN 3的真正27的NaN 9假32的NaN 2假

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

DISP(cumulativeTruthMetrics(errorMetrics));
TruthID posRMS velRMS posANEES velANEES _______ ______ ______ ________ ________ 6 620.97 10.426 810.2 8.9916 7 336.03 5.3142 32235 2.5579 8 81.688 3.0383 6.0661 0.56988 9 39.44 7.1249 1.5144 1.6229 10 328.32 8.499 1929.2 3.8069

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

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

为了加快MATLAB代码仿真,算法必须改制为MATLAB功能,它可以编译成MEX文件或共享库。为此,静融合算法改制为功能。为了保持多个呼叫之间的定影器的状态,它被定义为一贯变量。

类型('mexFuser');
函数[superDets,信息] = mexFuser(检测)%#CODEGEN永久定影如果的isEmpty(定影)定影= staticDetectionFuser( 'MeasurementFusionFcn',@ triangulateLOS,... 'MaxNumSensors',5,... 'UseParallel',真,... 'FalseAlarmRate',1E-3,... '音量',0.0716,... 'DetectionProbability',0.99);端[superDets,信息] =定影(检测);

MATLAB®编码器™需要指定的所有输入参数的属性。一种简单的方法来做到这一点是通过使用在命令行通过例如定义输入属性-args选项。欲了解更多信息,请参阅通过定义实例输入属性在命令行(编码器MATLAB)。要允许可变数量的检测,你将使用coder.typeof函数来分配数据类型和尺寸的输入。

%从所存储的缓冲器获取的样品检测sampleDetection = detectionBuffer {1} {1} {1};%使用coder.typeof功能以允许可变大小的输入%检测。maxNumDets = 500;inputDets = coder.typeof({sampleDetection},[maxNumDets,1],[1 0]);H = MSGBOX({“生成功能代码。这可能需要几分钟的时间...';...“完成后此消息框将关闭。”},“代码生成消息”);%使用代码生成命令通过指定输入参数来生成代码%经由例如通过使用| -args |选项。代码生成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代码执行时间= 20.109 MEX代码执行时间= 0.42587

有五个传感器跟踪

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

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

ylim([0 1.5]);

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

assignmentTable = trackMetricsTable(trackingMetrics);assignmentTable(:,{'的TrackID''AssignedTruthID''总长度''FalseTrackStatus'})
ANS = 5×4表的TrackID AssignedTruthID TotalLength FalseTrackStatus _______ _______________ ___________ ________________ 1个10 58假2 9 58假3 8 58 4假7 58假5 6 58假

用于位置估计误差是每个真正的目标相比,三个传感器仿真作为要低得多。请注意,为位置和速度的估计结果做劣化相比,三个传感器具有高精度的测量。

DISP(cumulativeTruthMetrics(errorMetrics))
TruthID posRMS velRMS posANEES velANEES _______ ______ ______ ________ ________ 6 28.555 3.1714 2.381 0.74884 7 18.141 2.6749 1.8022 0.55938 8 17.165 2.5338 1.6855 0.64878 9 17.697 2.0996 2.1846 0.52041 10 25.686 3.4936 2.0517 0.66066

摘要

此实施例表明如何使用分布式被动传感器网络来跟踪对象。你学会了如何使用staticDetectionFuser从多个传感器准静态和保险丝检测。证明了这一点的体系结构是如何取决于例如像在网络中的传感器的数量和传感器测量的精度参数。该示例还显示了如何加速通过利用并行计算和自动生成从MATLAB代码C代码的性能。

万博1manbetx支持功能

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

功能距离= trueAssignment(轨道,真理)的TID = [track.ObjectAttributes.TargetIndex];的TID =的TID(的TID> 0);如果numel(的TID)> 1 &&所有(的TID == truth.PlatformID)距离= 0;其他距离= INF;结束结束

addNoise噪声添加到检测

功能dets的= addNoise(dets的,measNoise)对于I = 1:numel(dets的)dets的{I} .Measurement(1)= dets的{I} .Measurement(1)+ SQRT(measNoise)* randn;dets的{I} .MeasurementNoise(1)= measNoise;结束结束

参考

[1]酒吧-沙龙,雅各布,彼得K.威利特,和新添。“跟踪和数据融合:算法的手册。”(2011年)。