主要内容

跟踪与测距测量

这个例子说明了粒子滤波器和高斯和过滤器的使用跟踪使用测距测量单个对象。

介绍

传感器,只能观察范围的信息不能提供一个完整的理解从一个对象的状态检测。此外,测距测量的不确定性,当在笛卡儿坐标系表示,非高斯并创建一个凹形。测距传感器和一个狭窄的视野(FOV),角不确定性很小,可以用一个近似椭球体,也就是说,一个高斯分布。与宽视场目标,然而,对于测距传感器的不确定性,当代表在笛卡尔坐标系,描述一个凹环的形状,不能轻易近似椭球体。这是说明图中所示。

这种现象也观察到远程雷达,提供方位和距离信息。当每个方位分辨单元跨度大的视场区域空间,成为非高斯分布的状态。远程技术修正通常用来利用扩展卡尔曼滤波器(高斯过滤器trackingEKF)和无味卡尔曼滤波器(trackingUKF在这些场景中)。这是详细演示了多平台雷达检测融合的例子。

在这个例子中,您将学习如何使用粒子滤波和高斯和过滤器来表示所造成的非高斯状态的不确定性范围从大视场测量传感器。

定义场景

场景模型单一对象以一个恒定的速度行驶在x - y平面上。物体经过三个等距的传感器的覆盖区域,与视场目标方位的60度。传感器视场重叠,提高了可观测性当物体穿过重叠区域。每个传感器报告测距的测量精度5厘米。

s =提高;rng (2018);[场景,theaterDisplay] = helperCreateRangeOnlySensorScenario;showScenario (theaterDisplay)

showGrabs (theaterDisplay []);

使用粒子滤波跟踪

在本节中,粒子滤波,trackingPF用来跟踪对象。跟踪执行单假定跟踪器使用trackerGNN。跟踪负责维护跟踪,同时减少假警报的数量。

这个函数initRangeOnlyCVPF初始化一个恒定的速度粒子滤波。这个函数类似于initcvpf函数,但限制(-180 180)的角度方位和高程(-90 90)initcvpf已知的传感器视场在这个问题。

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

注意,粒子携带非高斯状态的不确定性的弧测距测量到目标被下一个传感器检测到。随着目标穿过传感器覆盖区域的边界,在边界增加粒子的可能性比其他粒子。这种可能性的增加引发了粒子滤波重采样步骤和粒子崩溃到真正的目标位置。

showGrabs (theaterDisplay [1 - 2]);

使用粒子滤波跟踪维护期间跟踪的场景。

showGrabs (theaterDisplay 3);

使用高斯和滤波跟踪

在本节中,高斯和滤波,trackingGSF,用于跟踪对象。对于测距测量,可以初始化一个trackingGSF使用initapekf。的initapekf函数初始化一个angle-parameterized扩展卡尔曼滤波器。这个函数initRangeOnlyGSF在这个例子中修改定义initapekf函数跟踪缓慢移动的物体。

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

您可以使用TrackingFilters财产的trackingGSF每个扩展卡尔曼滤波器的状态。由“个人过滤器”在接下来的图,注意过滤器是一致的沿电弧产生的测距测量直到目标达到重叠区域。后立即穿越边界,边界的过滤器的可能性增加,单个滤波器的跟踪收敛于。重量,ModelProbabilities,其他个人过滤器相比下降接近边界,和他们的贡献减少估计的状态。

showGrabs (theaterDisplay [4 - 5]);

使用高斯和滤波,跟踪维护跟踪期间在场景。

showGrabs (theaterDisplay 6);rng (s)

总结

在本例中,您学习了如何使用粒子滤波和高斯和滤波跟踪对象使用测距测量。粒子滤波器和高斯和过滤器提供跟踪功能对象,遵循非高斯状态分布。而高斯和滤波近似分布的加权和Gaussian-components,粒子滤波代表该分布的一组样品。粒子滤波提供了一个更自然的方法来表示任意分布,只要可以生成样本。然而,代表完美分布,可能需要大量的粒子,从而增加使用过滤器的计算需求。状态是描述样本,粒子滤波架构允许使用任何过程噪声分布以及测量噪声。相比之下,高斯和过滤器使用高斯过程和测量噪声为每个组件。粒子的主要缺点之一是“样本贫困”的问题。重采样后,粒子可能崩溃的区域高可能性,不允许过滤器恢复从一个“不正确”。在高斯和不执行重采样滤波器,每个状态是高斯分布,高斯和过滤器提供了一些功能恢复这样一个协会。 However, this recovery is often dependent on the weights and covariances of each Gaussian-component.

万博1manbetx支持功能

generateRangeDetections这个函数生成测距检测

函数[检测,配置]= generateRangeDetections(场景)检测= [];配置= [];时间= scene.SimulationTime;i = 1:元素个数(scene.Platforms) [thisDet thisConfig] = detectOnlyRange (scene.Platforms{},时间);配置=[配置;thisConfig];% #好< AGROW >检测=[检测;thisDet];% #好< AGROW >结束结束

detectOnlyRange该函数删除阿兹和el球面检测

函数[rangeDetections,配置]= detectOnlyRange(观察者,时间)[fullDetections numDetections,配置]=检测(观察者、时间);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 {}。测量= rangeDetections{我}.Measurement(结束);rangeDetections {}。MeasurementNoise = rangeDetections{我}.MeasurementNoise(结束);rangeDetections{我}.MeasurementParameters (1)。HasAzimuth = false;rangeDetections{我}.MeasurementParameters (1)。HasElevation = false;结束结束

initRangeOnlyGSF该函数初始化一个angle-parameterized高斯和过滤器。它使用角的限制[-30 30]指定视场和10集的数量过滤器。也修改了状态噪声协方差和过程缓慢移动物体二维。

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

initRangeOnlyCVPF该函数初始化一个恒定的速度与粒子的视场有限粒子滤波30 [-30]。

函数过滤器= initRangeOnlyCVPF(检测)过滤器= initcvpf(检测);%制服az在视场阿兹= -π/ 6 +π/ 3 *兰德(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 *兰德(2,filter.NumParticles);%过程噪声被设置为较低的数字缓慢移动目标。比%—添加更多的噪音粒子阻止他们崩溃。过滤器。眼睛ProcessNoise = 0.1 * (3);% 0 z-velocity:filter.Particles (6) = 0;filter.ProcessNoise (3) = 0;结束