python实现粒子滤波目标跟踪_室内定位系列(六)——目标跟踪(粒子滤波)

进行目标跟踪时,先验知识告诉我们定位轨迹是平滑的,目标当前时刻的状态与上一时刻的状态有关,滤波方法可以将这些先验知识考虑进来得到更准确的定位轨迹。本文简单介绍粒子滤波及其使用,接着卡尔曼滤波写,建议先阅读室内定位系列(五)——目标跟踪(卡尔曼滤波)。

原理

这里跟卡尔曼滤波进行对比来理解粒子滤波。

目标跟踪中的卡尔曼滤波的简化版解释:

定位跟踪时,可以通过某种定位技术(比如位置指纹法)得到一个位置估计(观测位置),也可以根据我们的经验(运动目标常常是匀速运动的)由上一时刻的位置和速度来预测出当前位置(预测位置)。把这个观测结果和预测结果做一个加权平均作为定位结果,权值的大小取决于观测位置和预测位置的不确定性程度,在数学上可以证明在预测过程和观测过程都是线性高斯时,按照卡尔曼的方法做加权是最优的。

上面提到的“线性高斯”需要从概率上来理解。

预测过程中,预测的当前位置(或状态)\(\hat{x}_k^-\)与上一时刻的位置(或状态)是线性高斯关系,即所谓的运动方程:$$\hat{x}^-k = A\hat{x}{k-1} + u_k + \omega_k$$其中的外界输入\(u_k\)有时可以是零,预测不一定准确,因此存在一个高斯的误差\(\omega_k\)。从概率分布上来看,当前位置在预测点附近的概率较大,越远概越小。

观测过程中,观测值\(z_k\)与真实状态\(x_k\)之间也是线性高斯关系,即观测方程:$$z_k = H_k x_k + n_k$$目标跟踪中的观察矩阵\(H\)可能就是1,观察值也并不完全准确,因此也存在一个高斯误差\(n_k\)。从概率分布上来看,当前位置在观测点附近的概率较大,越远概越小。

预测过程和观测过程都有一个目标位置的概率分布,我们应该取一个联合概率最大的位置作为估计值。如果经验预测和实际观测满足这样的线性高斯,比如经验中目标是匀速运动的,那么直接使用卡尔曼滤波做加权就可以了。

然而,很多情况下并不是线性高斯的,比如以下这种情形:我们除了知道目标常常匀速运动,还知道地图信息,如果目标的前方有一堵墙,就不应该继续用匀速运动(加高斯噪声)来进行预测,应该有一个完全不一样的预测值的分布(比如反向,或者朝墙的同侧随机一个方向,或者沿着墙的边缘运动),这个分布取决于我们经验是怎样的,它有可能是某个预测值附近的高斯分布,也可能是某些用公式无法描述的分布。

既然用公式无法描述,那就用蒙特卡洛方法来模拟:模拟大量的粒子,每个粒子都有一个状态(位置)和权重,所有这些粒子的状态分布和权值共同模拟了目标位置(或状态)的概率分布,可以直接把所有粒子的状态做加权平均得到估计值。在预测过程中,根据经验给粒子设置一些规则(进行状态转移),比如让每个粒子匀速运动,遇到墙就反向,同时再加上一点随机性,这样就能完美地模拟各种经验和规则了。然后,用观察结果带来的概率分布去更新各个粒子的权重,更加匹配观测结果的粒子应该赋予更大的权重。

步骤

可以将粒子滤波理解成一个滤波的框架,框架内部应该根据实际问题具体实现。

t = 0时,粒子初始化。随机生成粒子集并设置权值。

t = 1, 2, ..., 重复以下步骤:

a. 预测。根据系统的预测过程预测各个粒子的状态。

b. 更新。根据观测值更新粒子权值。

c. 重采样。复制一部分权值高的粒子,同时去掉一部分权值低的粒子。

d. 输出:状态估计。使用粒子和

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值