主要内容

仅限距离测量的跟踪

此示例演示如何使用粒子过滤器和高斯和过滤器,使用仅限范围的测量值跟踪单个对象。

介绍

只能观察范围信息的传感器无法通过一次检测完全了解物体的状态。此外,当在笛卡尔坐标系中表示时,仅测距测量的不确定度是非高斯的,并形成凹形。对于具有窄视场(FOV)的纯距离传感器,角度不确定性很小,可以用椭球近似,即高斯分布。然而,对于具有宽视场的仅测距传感器,当在笛卡尔坐标系中表示时,不确定性由凹环形状描述,而凹环形状不容易用椭球近似。下图对此进行了说明。

这种现象也在远程雷达上观察到,远程雷达同时提供方位和距离信息。当每个方位分辨率单元的FOV在空间中跨越一个大区域时,状态分布变为非高斯分布。远程校正等技术通常用于使用高斯滤波器,如扩展卡尔曼滤波器 (trackingEKF)和无迹卡尔曼滤波器(trackingUKF)在这些情况下。这一点在多平台雷达探测融合的例子。

在这个例子中,您将学习如何使用粒子滤波器和高斯和滤波器来表示由大视场视角传感器的距离测量引起的状态中的非高斯不确定性。

定义场景

该场景模拟一个物体在X-Y平面上以恒定速度运动。目标通过三个等间距传感器的覆盖区域,视场在方位角为60度。传感器视场重叠,提高了目标穿过重叠区域时的可观测性。每个传感器报告测量范围,测量精度为5厘米。

s =提高;rng (2018);exPath = fullfile (matlabroot,“例子”,“融合”,“主要”); addpath(exPath);[场景、剧院显示]=helperCreateRangeOnlySensorScenario;表演场景(剧场展示)

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

使用粒子过滤器进行跟踪

在本节中,粒子过滤器,trackingPF用于跟踪对象。跟踪是由一个单假设跟踪器使用trackerGNN.跟踪器负责维护跟踪,同时减少误报警数量。

这个函数initRangeOnlyCVPF初始化匀速粒子过滤器。函数类似于initcvpf功能,但限制的角度为方位角[-180]和仰角[-90]initcvpf与此问题中的已知传感器视野相关。

%跟踪器跟踪器(“FilterInitializationFcn”,@initRangeOnlyCVPF,“MaxNumTracks”,5);%更新“显示”以打印粒子数据theaterDisplay.FilterType=“跟踪PF”;%预先场景和跟踪对象推进(场景)%当前时间时间=场景模拟时间;%生成检测[detections, configs] = generateRangeDetections(scene);通过检测到跟踪器如果~isempty(detections) [confTracks,~,allTracks] = tracker(detections,time);埃尔塞夫isLocked(跟踪器)confTracks=predictTracksToTime(跟踪器,“确认”,时间);终止%更新显示剧院显示器(检测、配置、通信跟踪、跟踪器);终止

请注意,在目标被下一个传感器检测到之前,粒子在仅测距弧上的状态具有非高斯不确定性。当目标穿过传感器覆盖区域的边界时,与其他粒子相比,边界上粒子的可能性增加。这种可能性的增加触发在粒子过滤器中执行重采样步骤,粒子将塌陷到真实目标位置。

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

使用粒子过滤器,跟踪器在场景的持续时间内保持跟踪。

展览(剧院展览,3);

使用高斯和滤波器跟踪

在本节中,高斯和滤波器,trackingGSF,用于跟踪对象。对于仅限范围的测量,您可以初始化trackingGSF使用initapekf这个initapekf函数初始化一个角度参数化的扩展卡尔曼滤波器。这个函数initRangeOnlyGSF在本例中定义的initapekf用于跟踪缓慢移动的对象的函数。

%重启场景重启(现场);释放(theaterDisplay);%跟踪器跟踪器(“FilterInitializationFcn”, @initRangeOnlyGSF);%更新显示以绘制高斯和分量theaterDisplay.FilterType=“跟踪GSF”;推进(场景)%当前时间时间=场景模拟时间;%生成检测[detections, configs] = generateRangeDetections(scene);通过检测到跟踪器如果~isempty(detections) [confTracks,~,allTracks] = tracker(detections,time);埃尔塞夫isLocked(跟踪器)confTracks=predictTracksToTime(跟踪器,“确认”,时间);终止%更新显示剧院显示器(检测、配置、通信跟踪、跟踪器);终止

你可以使用跟踪滤波器财产trackingGSF来查看每个扩展卡尔曼滤波器的状态。在下一个图中用“单独的过滤器”表示,注意过滤器是如何沿着仅距离测量生成的弧对齐的,直到目标到达重叠区域。在立即越过边界后,在边界处的滤波器的可能性增加,轨迹收敛到那个单独的滤波器。重量,模型概率,与最接近边界的那个过滤器相比,其他单个过滤器的值下降了,它们对状态估计的贡献减少了。

showGrabs (theaterDisplay [4 - 5]);

使用高斯和滤波器,跟踪器在场景持续期间保持跟踪。

展示区(剧院展示区,6个);rng(s)rmpath(外派);

总结

在本例中,您学习了如何使用粒子过滤器和高斯和过滤器来跟踪仅使用范围测量的对象。粒子过滤器和高斯和过滤器都提供跟踪遵循非高斯状态分布的对象的功能。而高斯和过滤器通过高斯的加权和近似分布在sian组件中,粒子过滤器通过一组样本来表示此分布。粒子过滤器提供了一种更自然的方法来表示任意分布,只要可以从中生成样本。但是,为了完美地表示分布,可能需要大量粒子,这增加了计算量使用滤波器的要求。由于状态由样本描述,粒子滤波器结构允许使用任何过程噪声分布以及测量噪声。相比之下,高斯和滤波器对每个组件使用高斯过程和测量噪声。粒子的一个主要缺点是“样本贫化”。重新采样后,粒子可能塌陷到高可能性区域,使过滤器无法从“错误”状态恢复关联。由于在高斯和滤波器中不执行重采样,并且每个状态都是高斯的,高斯和滤波器提供了从这种关联中恢复的一些能力。然而,这种恢复通常取决于每个高斯分量的权重和协方差。

金宝app辅助功能

发电机检测这个函数只产生距离检测

函数[detections,config]=generateRangeDetections(场景)detections=[];config=[];time=scene.SimulationTime;对于i = 1:numel(scene.平台)[thisDet, thisConfig] = detectOnlyRange(scene.平台{i},时间);配置=[配置;thisConfig];% #好< AGROW >检测=[检测;thisDet];% #好< AGROW >终止终止

detectOnlyRange此函数用于从球形检测中删除az和el

函数[rangeDetections,config]=detectOnlyRange(观察者,时间)[fullDetections,numDetections,config]=detect(观察者,时间);对于i = 1:元素个数(配置)%正确填充配置以进行打印配置(i).FieldOfView=observer.Sensors{i}.FieldOfView;配置(i).MeasurementParameters(1).OriginPosition=observer.Sensors{i}.MountingLocation(:);配置(i).MeasurementParameters(1).方向=rotmat(四元数)(observer.Sensors{i}.MountingAngles(:),“欧勒德”,“ZYX”,“框架”),“框架”); 配置(i).MeasurementParameters(1).IsParentToChild=true;终止%删除除范围信息外的所有信息范围检测=完全检测;对于i=1:numDetections rangeDetections{i}.Measurement=rangeDetections{i}.Measurement(结束);rangeDetections{i}.MeasurementNoise=rangeDetections{i}.MeasurementNoise(结束);距离检测{i}.MeasurementParameters(1).hasarizontation=false;rangeDetections{i}.MeasurementParameters(1).HasElevation=false;终止终止

initRangeOnlyGSF此函数用于初始化角度参数化高斯和滤波器。它使用[-30]的角度限制来指定FOV,并将过滤器的数量设置为10。它还修改了二维慢速运动对象的状态协方差和过程噪声。

函数filter=initRangeOnlyGSF(检测)filter=initapekf(检测,10,[-30]);对于i=1:numel(filter.TrackingFilters)filterK=filter.TrackingFilters{i};过滤器k.ProcessNoise=0.01*眼(3);滤波过程噪声(3,3)=0;%小协方差为缓慢移动的目标filterK.StateCovariance (2, 2) = 0.1;filterK.StateCovariance (4, 4) = 0.1;%z中的低标准偏差为v=0;filterK.StateCovariance (6,6) = 0.01;终止终止

initRangeOnlyCVPF此函数用于初始化恒定速度粒子过滤器,粒子的FOV限制为[-30]。

函数filter=initRangeOnlyCVPF(检测)filter=initcvpf(检测);%视场均匀分布az = -pi/6 + pi/3*rand(1,filter.NumParticles);%无高程;el = 0(1、filter.NumParticles);%从高斯距离测量的距离样本r =检测。测量+√detection.MeasurementNoise * randn (1, filter.NumParticles);% x,y,z在传感器框中[x, y, z] = sph2cart (az, el, r);%从传感器旋转到场景帧。senToPlat = detection.MeasurementParameters (1) .Orientation”;senPosition = detection.MeasurementParameters (1) .OriginPosition;platToScenario = detection.MeasurementParameters (2) .Orientation ';platPosition = detection.MeasurementParameters (2) .OriginPosition;posPlat = senToPlat*[x;y;z] + senPosition;posScen = platToScenario*posPlat + platPosition;%定位粒子粒子(1,:)=posScen(1,:);粒子(3,:)=posScen(2,:);粒子(5,:)=posScen(3,:);%粒子速度%均匀分布过滤器。粒子([2 4],:)= -1 + 2*rand(2,filter.NumParticles);对于缓慢移动的目标,进程噪声设置为较低的数值。比% GSF添加更多的噪音到粒子,防止他们崩溃。过滤器。过程噪声=0.1*眼睛(3);%零z速度过滤器。颗粒(6,:)=0;过程噪声(3,3)=0;终止