此示例演示了使用空间分布和同步被动传感器的测量值跟踪对象。在使用单个机动传感器的被动测距,您了解到被动测量提供了对目标状态的不完全可观测性,以及如何操纵单个传感器以获取距离信息。或者,也可以使用多个固定传感器来获得可观测性。在本例中,您将学习如何通过融合被动同步传感器的多个检测来跟踪多个对象。
在同步多传感器多目标跟踪问题中,同步收集来自多个被动传感器的检测,并用于估计以下各项:
场景中的目标数
这些目标的位置和速度
此示例演示了使用的使用跟踪前的静态融合[1] 使用被动测量进行跟踪的体系结构。这个静态融合该体系结构的一部分目的是三角化最有可能的检测集,并输出包含估计目标位置的融合检测。由于测量需要通过静态融合融合在一起,传感器必须同步报告测量结果。
对于仅包含视线(LOS)信息的测量,至少需要2个传感器才能找到位置。但是,如果有两个传感器,当多个目标位于同一平面上时,会出现重影问题(无目标点的交点)。对于2个目标和2个传感器,无法从单个测量帧中识别正确的对,如下图所示:
因此,必须使用3个或更多传感器来减少重影问题。由于存在测量噪声和虚假测量,很难完全消除重影问题。当目标和传感器的几何结构在场景中发生变化时,静态关联返回的重影三角剖分可能会被动态关联块丢弃。
此处使用的场景中传感器和目标的相对位置取自[1]中的示例。该场景由三到五个被动传感器观测到的五个等距目标组成。被动探测是使用雷达汇款器
和radarSensor
与DetectionMode
设置为ESM
.这杂音
传感器的属性设置为假
生成无噪声检测和假警报。在本例中,通过用户控制变量将噪声添加到测量中。这是为了模拟传感器噪声对静态融合的影响。每个传感器都有一个180度方位角的视野和一个虚警率
每个方位分辨率单元1e-3。这会导致每次扫描2到3次假警报。场景定义被包装在一个helper函数中HelperGenerateFusionscenariodata.
.
[detectionBuffer、truthLog、theaterDisplay]=帮助生成StaticFusionScenarioData;表演场景(剧场展示);
showGrabs (theaterDisplay []);
在本节中,仅考虑来自内部三个传感器的测量,每个传感器的测量噪声协方差设置为0.01平方度。
每个传感器的检测结果都传递给一个传感器静态检测定影器
.这MeasurementFusionFcn
对于被动三角测量标准为三角帆
.这MeasurementFusionFcn
允许指定一个函数来融合给定的检测组合(每个传感器最多一个检测),并返回融合的位置及其误差协方差。的参数虚警率
,卷
和探测概率
被指定以反映在这种情况下模拟的传感器参数。这些参数用于计算可行关联的可能性。这UseParallel
属性,当设置为真的
,允许定影器使用并行处理器评估可行的关联。
跟踪由GNN数据关联通过使用跟踪器
.
利用trackAssignmentMetrics
和跟踪误差度量
.
设置
%传感器数量numSensors=3;%使用trigulatelos函数创建一个检测定影器%测量使用FCN并指定传感器的参数。熔化炉= staticDetectionFuser (“MeasurementFusionFcn”,@triangulateLOS,...“MaxNumSensors”,numsensors,...“UseParallel”是的,...“错误报警率”,1e-3,...“体积”,0.0716,...'检测可力',0.99);%使用GNN跟踪器进行跟踪追踪= trackerGNN (“AssignmentThreshold”,50,...“ConfirmationThreshold”[3 - 5],“删除阈值”,[4 5]);%使用分配和错误度量来计算准确性。trackingMetrics = trackAssignmentMetrics (“DistanceFunctionFormat”,“习俗”,...“AssignmentDistanceFcn”@trueAssignment,“发散距离FCN”,@trueAssignment);errorMetrics=跟踪errorMetrics;
使用三个传感器进行仿真
%测量噪声measNoise=0.01;时间=0;dT=1;%场景的1 Hz更新率。%循环探测和跟踪目标为iter=1:numel(检测缓冲区)%真实信息senserplatpose = truthlog {erter}(1:numsensors);targetplatpose = truthlog {erer}(6:结束);地面= [传感器平面; tarmentplatpose];%使用记录的检测产生噪声检测此theabuffer = detectionbuffer {erter};availableDetections = VertCAT(此apbuffer {1:numsensors});NoiSedetections = addnoise(afficabledetections,moreNoise);%使用熔丝器的熔丝噪声检测FusedDetections =定影器(Noisedetections);%在融合探测上运行跟踪器confTracks=跟踪器(融合检测,时间);%更新跟踪和分配指标跟踪指标(confTracks、TargetPlatfoses)[trackId,truthIDs]=currentAssignment(trackingMetrics);错误度量(confTracks、TrackID、TargetPlatfoses、truthIDs);%更新影院显示detsToPlot = [noiseDetections (:); fusedDetections (:));theaterDisplay (confTracks detsToPlot groundTruth);%更新时间时间=时间+dT;结束轴(theaterDisplay.TheaterPlot.Parent);
ylim (1.5 [0]);
使用噪声协方差为0.01平方度的三个传感器的跟踪结果可以用分配指标进行总结。注意,所有的轨迹都被分配到正确的真理,没有虚假的轨迹被跟踪器确认。这些结果表明了良好的静态关联准确性。
assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”,“AssignedTruthID”,“总长度”,“错误跟踪状态”})
ans=5×4表TrackID分配的总长度为FalseTrackStatus
目标位置和速度的估计误差可以使用误差度量进行汇总。所有目标的位置和速度误差分别在7米和2米/秒以内,标准化误差接近1。误差指标表明具有良好的动态关联和跟踪性能。
disp (cumulativeTrackMetrics (errorMetrics));
的TrackID posRMS velRMS posANEES velANEES _______ ______ ______ ________ ________ 1 5.8143 1.5379 1.7273 0.61788 2 4.0385 1.2251 1.7547 0.66935 3 4.1647 1.2866 1.7555 0.64513 4 3.6861 1.3207 1.3389 0.44256 5 5.364 1.2745 1.6521 0.52297
测量精度的影响
无源探测融合消除重影对无源测量的精度有很大的影响。随着测量噪声的增加,鬼影联想和真联想之间的区别变得不那么突出,导致静态联想的准确性显著下降。对于距离较近的目标,也可能发生融合检测与跟踪的错误关联。在下一节中,我们将介绍一个helper函数helperRunStaticFusionSimulation
用于以2度平方的测量噪声协方差重新运行该场景。
使用高测量噪声再次运行场景
numSensors=3;measNoise=2;%根号(2)度标准差[trackingMetrics,errorMetrics]=helperRunStaticFusionSimulation(检测缓冲区、truthLog、numSensors、测量信息、剧院显示、假);轴(theaterDisplay.TheaterPlot.Parent);
ylim (1.5 [0]);
请注意,在此模拟中确认了大量轨迹,然后将其丢弃。静态关联精度差导致鬼目标三角剖分更频繁,这导致跟踪器由于多次未命中而删除这些轨迹。
assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”,“AssignedTruthID”,“总长度”,“错误跟踪状态”})
ans = 11×4表TrackID分配了特定TruthiD Totherggth FalstrackStatus _______ _____________________________________________________ __________________ _______________ _ x_____________ _ verse 4 nan 6 true 5 7 59 false 6 6 58 false 7 10 58 false 8 nan 13 true 9 nan 12 false 15 8 52 false 16 nan 4 true20南4真28南3真实
每个真理的估计误差更高。请注意,轨道在上面的剧院显示跳跃。
disp (cumulativeTruthMetrics (errorMetrics));
特鲁希德·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·波塞姆·
通过增加传感器的数量,可以提高关联精度。然而,计算需求随着每个传感器的添加呈指数增长。静态融合算法花费了大量的时间来计算每个三角剖分的可行性。算法的这一部分是并行化的UseParallel
财产的财产静态检测定影器
设置为真的
,它提供与处理器数量成正比的线性加速。为了进一步加速执行,您还可以生成C/ c++代码,这些代码也可以在多个处理器上并行执行。您可以了解使用MATLAB®Coder™生成代码的基础知识开始使用MATLAB编码器(MATLAB编码器).
为了加速MATLAB代码的仿真,必须将算法重新构造为MATLAB函数,该函数可以编译为MEX文件或共享库。为此,将静态融合算法重构为一个函数。为了在多个调用之间保留fuser的状态,将其定义为持久的
变量
类型(“mexFuser”);
函数[superDets,info]=mexFuser(detections)%#如果isempty(fuser)fuser=staticDetectionFuser('MeasurementFusionFcn',@triangulateLOS,…'MaxNumSensors',5,…'使用“平行”,正确,…'错误报警率’,1e-3,…'卷',0.0716,…'检测概率',0.99);结束[超级数据,信息]=定影器(检测);
MATLAB®编码器™ 需要指定所有输入参数的属性。一种简单的方法是通过在命令行中使用-args
选项有关详细信息,请参阅在命令行中通过示例定义输入特性(MATLAB编码器). 要允许可变数量的检测,您将使用编码员
函数为输入分配数据类型和大小。
%从存储的缓冲区获取样本检测Sampledetection = DetectionBuffer {1} {1} {1};%使用编码器。允许可变大小输入的函数类型%检测。maxNumDets=500;inputDets=coder.typeof({sampleDetection},[maxNumDets,1],[10]);h=msgbox({'为函数生成代码。这可能需要几分钟……”;...完成后此消息框将关闭。},“Codegen消息”);%使用codegen命令通过指定输入参数来生成代码%通过示例使用|-args|选项。编码基因mexfuser.-args{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代码执行时间=27.0929 MEX代码执行时间=0.3682
在本节中,所有五个传感器的检测用于跟踪,并使用2平方度的测量噪声。
measNoise = 2;%与3个传感器的噪音相同numSensors=5[trackingMetrics,errorMetrics]=helperRunStaticFusionSimulation(检测缓冲区、truthLog、numSensors、测量信息、剧院显示、真);轴(theaterDisplay.TheaterPlot.Parent);
ylim (1.5 [0]);
使用五个传感器跟踪的分配结果表明在整个模拟中分配了所有真相。与低精度三个传感器仿真中的6个轨迹相比,模拟中也没有轨道下降。
assignmentTable = trackMetricsTable (trackingMetrics);assignmentTable (: {“TrackID”,“AssignedTruthID”,“总长度”,“错误跟踪状态”})
ans=5×4表TrackID分配的总长度为FalseTrackStatus
与三传感器模拟相比,每个真实目标的位置估计误差要低得多。请注意,与具有高精度测量的三个传感器相比,位置和速度的估计结果确实会降低。
disp (cumulativeTruthMetrics (errorMetrics))
TruthID posRMS velRMS posANEES velANEES _______ ______ ______ ________ ________ 6 22.362 3.2363 1.5848 0.58334 7 15.024 2.6634 1.613 0.60255 8 22.632 2.7984 2.5508 0.82252 9 24.555 3.4442 2.6984 0.98232 10 24.388 2.7997 1.7192 0.57244
这个例子展示了如何使用分布式无源传感器网络来跟踪物体。你学会了如何使用静态检测定影器
静态关联和融合多个传感器的检测。该示例演示了这种架构如何依赖于网络中的传感器数量和传感器测量的准确性等参数。该实例还展示了如何利用并行计算和自动生成C代码的MATLAB代码来提高性能。
trueassign.
使用轨迹的ObjectAttributes将其指定给正确的真值。
功能id = [track. objectattributes . targetindex];> = >; / / > = >;如果numel(tIDs)>1&&all(tIDs==truth.PlatformID)距离=0;其他的距离=inf;结束结束
附加噪声
为检测添加噪声
功能dets=增加噪音(dets,measNoise)为i=1:numel(dets)dets{i}.度量(1)=dets{i}.度量(1)+sqrt(measNoise)*randn;测量噪声(1)=测量噪声;结束结束
[1] 巴沙洛姆,雅科夫,彼得K。威利特和馨田。”跟踪和数据融合:算法手册。”(2011)。