主要内容

仅限距离测量的跟踪

这个例子说明了如何使用粒子滤波器和高斯和滤波器来使用仅限距离的测量来跟踪单个对象。

介绍

仅能观察距离信息的传感器不能从一次检测中提供对物体状态的完整理解。此外,仅距离测量的不确定度,当在笛卡尔坐标系中表示时,是非高斯的,并创建凹形状。对于窄视场(FOV)的纯距离传感器,其角度不确定性较小,可以近似为椭球,即高斯分布。然而,对于宽视场的纯距离传感器,其不确定性在笛卡尔坐标系中被描述为凹环形状,这很难用椭球体来近似。如下图所示。

这种现象也可以通过提供方位和距离信息的远程雷达观测到。当各个方位角分辨单元的视场在空间上跨越较大区域时,其状态分布变为非高斯分布。像远程校正这样的技术经常被用于使用高斯滤波器,如扩展卡尔曼滤波器(trackingEKF)和Unscented卡尔曼滤波器(trackingUKF)。详细的演示在多平台雷达探测融合的例子。

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

定义场景

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

s =提高;rng (2018);exPath = fullfile (matlabroot,“例子”“融合”“主要”);目录exPath);[场景,theaterDisplay] = helperCreateRangeOnlySensorScenario;showScenario (theaterDisplay)

showGrabs (theaterDisplay []);

使用粒子过滤器跟踪

在本节中,粒子过滤器,trackingPF用于跟踪对象。跟踪是由一个单假设跟踪器使用trackerGNN这个tracker is responsible for maintaining the track while reducing the number of false alarms.

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

%跟踪器追踪= trackerGNN (“FilterInitializationFcn”@initRangeOnlyCVPF,“MaxNumTracks”5);%更新显示来绘制粒子数据theaterDisplay。FilterType =“trackingPF”%预先场景和跟踪对象推进(场景)%当前时间时间= scene.SimulationTime;%生成检测[detections, configs] = generateRangeDetections(scene);通过检测到跟踪器如果~isempty(detections) [confTracks,~,allTracks] = tracker(detections,time);elseifisLocked(tracker) confTracks = predictTracksToTime(tracker,“确认”、时间);结束%更新显示theaterDisplay(检测、配置、confTracks追踪);结束

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

showGrabs (theaterDisplay [1 - 2]);

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

showGrabs (theaterDisplay 3);

使用高斯和滤波器的跟踪

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

%重启场景重启(现场);释放(theaterDisplay);%跟踪器追踪= trackerGNN (“FilterInitializationFcn”, @initRangeOnlyGSF);%更新显示以绘制高斯和分量theaterDisplay。FilterType =“trackingGSF”推进(场景)%当前时间时间= scene.SimulationTime;%生成检测[detections, configs] = generateRangeDetections(scene);通过检测到跟踪器如果~isempty(detections) [confTracks,~,allTracks] = tracker(detections,time);elseifisLocked(tracker) confTracks = predictTracksToTime(tracker,“确认”、时间);结束%更新显示theaterDisplay(检测、配置、confTracks追踪);结束

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

showGrabs (theaterDisplay [4 - 5]);

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

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

总结

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

万博1manbetx支持功能

generateRangeDetections这个函数只产生距离检测

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

detectOnlyRange这个函数从球形检测中去除az和el

函数[fullDetections,numDetections,config] = detectOnlyRange(observer,time);i = 1:元素个数(配置)为绘图正确填充配置配置(i)。FieldOfView = observer.Sensors{我}.FieldOfView;配置(i) .MeasurementParameters(1)。OriginPosition = observer.Sensors{我}.MountingLocation (:);配置(i) .MeasurementParameters(1)。取向= rotmat(四元数(observer.Sensors{我}.MountingAngles (:),“eulerd”“ZYX股票”“帧”),“帧”);配置(i) .MeasurementParameters(1)。IsParentToChild = true;结束%删除除范围信息外的所有信息rangeDetections = fullDetections;i = 1:numDetections rangeDetections{i}。测量= rangeDetections{我}.Measurement(结束);rangeDetections{}。MeasurementNoise = rangeDetections{我}.MeasurementNoise(结束);rangeDetections{我}.MeasurementParameters(1)。HasAzimuth = false;rangeDetections{我}.MeasurementParameters(1)。HasElevation = false;结束结束

initRangeOnlyGSF这个函数初始化一个角度参数化高斯和滤波器。它使用角度限制[-30 -30]来指定FOV,并设置滤镜的数量为10。该算法还对二维中缓慢运动物体的状态协方差和处理噪声进行了修正。

函数filter = initRangeOnlyGSF(检测)filter = initapekf(检测,10,[-30 30]);i = 1:numel(filter.TrackingFilters) filterK = filter.TrackingFilters{i};filterK。眼睛ProcessNoise = 0.01 * (3);filterK.ProcessNoise (3) = 0;%小协方差为缓慢移动的目标filterK.StateCovariance (2, 2) = 0.1;filterK.StateCovariance (4, 4) = 0.1;% v = 0时z的低标准差;filterK.StateCovariance (6,6) = 0.01;结束结束

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

函数filter = initRangeOnlyCVPF(检测);%视野均匀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;%的位置粒子filter.Particles (1) = posScen (1:);filter.Particles (3) = posScen (2:);: filter.Particles(5日)= posScen (3:);%粒子速度%均匀分布过滤器。粒子([2 4],:)= -1 + 2*rand(2,filter.NumParticles);对于缓慢移动的目标,进程噪声设置为较低的数值。比% GSF添加更多的噪音到粒子,防止他们崩溃。过滤器。过程噪声=0.1*眼睛(3);% 0 z-velocity: filter.Particles (6) = 0;filter.ProcessNoise (3) = 0;结束