卡尔曼滤波详细推导

前言

虽然卡尔曼滤波作为一种经典的算法在多源数据融合、slam后端优化等很多方面都取得了较好的应用,但是我们经常都会有一个疑问,卡尔曼滤波到底是什么呢?
简要的说:“卡尔曼滤波是一种优化估算算法”

卡尔曼滤波可以适用于线性高斯系统,如果我们考虑非线性系统则可以考虑扩展卡尔曼滤波

其可以解决两个问题:

  1. 状态如何在无法被直接测量的情况下,进行估算系统的状态。
  2. 如何在数据源存在噪声的情况下,通过卡尔曼滤波估计系统的状态。(比如说惯导、轮式里程计、GNSS三种传感器数据均存在误差,且频率不一,如何融合三种数据源进行精确的估计汽车的位置)

我们先来看一个简单的例子:
一辆行驶在路上的小车,其状态包括位置、速度两个信息,用 x x x表示小车的状态,其中 p p p表示位置, v v v表示速度。则可以写成下述形式:

x → = ∣ p v ∣ \overrightarrow{x} = \begin{vmatrix}p\\v\end{vmatrix} x =pv

假设式中的位置变量 p p p 与 速度变量 v v v,都为随机变量且符合正态分布,则进而可以通过均值 描述可能的估计 和 对应的方差 衡量变量的不确定性。

匀速行驶

在一个比较理想的状态下,我们假设小车在路上匀速行驶,则可以对小车行驶由 t − 1 t-1 t1时刻到 t t t时刻之间的过程描述成下式中的数学模型:
p t = p t − 1 + v t − 1 ∗ △ t p_{t}=p_{t-1} + v_{t-1}* \triangle t pt=pt1+vt1t
v t = v t − 1 v_{t}=v_{t-1} vt=vt1
针对 t t t 时刻与 t − 1 t-1 t1 时刻的状态的估计量, x ^ t = ∣ p ^ t v ^ t ∣ \hat{x}_{t} = \begin{vmatrix}\hat{p}_{t}\\\hat{v}_{t}\end{vmatrix} x^t=p^tv^t x ^ t − 1 = ∣ p ^ t − 1 v ^ t − 1 ∣ \hat{x}_{t-1} = \begin{vmatrix}\hat{p}_{t-1}\\\hat{v}_{t-1}\end{vmatrix} x^t1=p^t1v^t1

写成矩阵形式如下:
x ^ t = ∣ 1 △ t 0 1 ∣ ∗ x ^ t − 1 \hat{x}_{t} = \begin{vmatrix}1 & \triangle t \\0 & 1\end{vmatrix} * \hat{x}_{t-1} x^t=10t1x^t1
令上式中:
F t = ∣ 1 △ t 0 1 ∣ F_{t} = \begin{vmatrix}1 & \triangle t \\0 & 1\end{vmatrix} Ft=10t1
则可以写成:
x ^ t = F t ∗ x ^ t − 1 \hat{x}_{t} = F_{t} * \hat{x}_{t-1} x^t=Ftx^t1
称上式中的 F t F_{t} Ft 为预测矩阵,其描述了从上一时刻状态估计到下一时刻状态估计之间的关系。

但是,上述例子中的位置变量 p p p 与 速度变量 v v v都不是确定的,两者之间的关系也不是确定的,但是二者之间却有一定的相关性,我们通过协方差矩阵 P P P 描述两者之间的相关程度:

(注意这里的协方差矩阵 P P P 与位置变量 p p p符号之间的区别)

P = ∣ Σ p p Σ p v Σ v p Σ v v ∣ P = \begin{vmatrix}\Sigma_{pp} & \Sigma_{pv}\\\Sigma_{vp} & \Sigma_{vv}\end{vmatrix} P=ΣppΣvpΣpvΣvv
同时,考虑到两者之间的预测矩阵F_{t},则给定上一时刻的协方差矩阵 P t − 1 P_{t-1} Pt1,则下一时刻的协方差矩阵 P t P_{t} Pt可以写成:
P t = F t P t − 1 F t T P_{t}=F_{t}P_{t-1}F^{T}_{t} Pt=FtPt1FtT

非匀速行驶

上述的例子种过于理想,实际情况中小车不可能都是在匀速行驶。因此,我们考虑加入一个加速度 a a a,即小车的行驶速度会随着时间而发生改变。
重新定义小车的状态量如下所示:
p t = p t − 1 + v t − 1 ∗ △ t + 1 2 a △ t 2 p_{t}=p_{t-1} + v_{t-1}* \triangle t+\frac{1}{2}a\triangle t^{2} pt=pt1+vt1t+21at2
v t = v t − 1 + a △ t v_{t}=v_{t-1} + a\triangle t vt=vt1+at
u ^ t \hat{u}_{t} u^t作为加速度 a a a t t t时刻的估计(又称之为输入)。
则上式又可以写为:
p t = p t − 1 + v t − 1 ∗ △ t + △ t 2 2 ∗ u ^ t p_{t}=p_{t-1} + v_{t-1}* \triangle t+\frac{\triangle t^{2}}{2}*\hat{u}_{t} pt=pt1+vt1t+2t2u^t
v t = v t − 1 + △ t ∗ u ^ t v_{t}=v_{t-1} + \triangle t*\hat{u}_{t} vt=vt1+tu^t
整理 B t = ∣ △ t 2 2 △ t ∣ B_{t}=\begin{vmatrix}\frac{\triangle t^{2}}{2}\\ \triangle t \end{vmatrix} Bt=2t2t
得:
x ^ t = F t ∗ x ^ t − 1 + B t ∗ u ^ t \hat{x}_{t} = F_{t} * \hat{x}_{t-1}+B_{t}*\hat{u}_{t} x^t=Ftx^t1+Btu^t
同时,使用 Q t Q_{t} Qt表示引入的输入变量 u t {u}_{t} ut的方差,则对两者之间协方差的影响又可以写成如下形式:
P t = F t P t − 1 F t T + Q t P_{t}=F_{t}P_{t-1}F^{T}_{t}+Q_{t} Pt=FtPt1FtT+Qt
总结一下,引入新的输入之后,对估计 x ^ t \hat{x}_{t} x^t不确定性 P t P_{t} Pt 都产生了影响。

卡尔曼滤波公式推导

到此为止,我们对上述的一个小车行驶过程进行了很好的数学建模,但是我们还没有进行一个较好的公式推导。
下面我们就进行这个推导的过程:
上述推导过程我们得到了关于小车在 t t t时刻预测值 x ^ t \hat{x}_{t} x^t满足一个高斯分布 N p ( μ p , σ p ) N_{p}(\mu_{p}, \sigma_{p}) Np(μp,σp)
同时,基于小车携带的传感器又可以获得一个状态的观测值,这个观测值也会受到环境和传感器自身的影响产生众多噪声,我们仍假设观测值服从一个高斯分布,记为: N o b ( μ o b , σ o b ) N_{ob}(\mu_{ob}, \sigma_{ob}) Nob(μob,σob)

因此,对于当前时刻 t t t,我们有了两组参考值,一组是预测值 x ^ t \hat{x}_{t} x^t,一组是测量值 x t {x}_{t} xt。那么那组值是正确的呢?怎么样才能得到最终较好的结果呢?
卡尔曼滤波器做的一个工作就是把预测值的高斯分布 N p ( μ p , σ p ) N_{p}(\mu_{p}, \sigma_{p}) Np(μp,σp)与测量值的高斯分布 N o b ( μ o b , σ o b ) N_{ob}(\mu_{ob}, \sigma_{ob}) Nob(μob,σob)进行相乘,得到一个新的分布。(注:这两个高斯分布的乘积不再是一个正态分布,因为其概率密度求和之后不为1)

这个新的分布会正比于一个高斯分布,因此,我们可以通过指数相等来进行计算,即我们可以得到如下关系:
1 σ c o m b 2 ( x − μ c o m b ) 2 + C = 1 σ p 2 ( x − μ p ) 2 + 1 σ o b 2 ( x − μ o b ) 2 \frac{1}{\sigma^2_{comb}}(x-\mu_{comb})^{2}+C=\frac{1}{\sigma^2_{p}}(x-\mu_{p})^{2}+\frac{1}{\sigma^2_{ob}}(x-\mu_{ob})^{2} σcomb21(xμcomb)2+C=σp21(xμp)2+σob21(xμob)2
上式中, μ p \mu_{p} μp σ p \sigma_{p} σp分别为预测的均值和方差, μ o b \mu_{ob} μob σ o b \sigma_{ob} σob分别为观测的均值和方差。而 μ c o m b \mu_{comb} μcomb σ c o m b \sigma_{comb} σcomb分别为融合之后的分布所对应均值和方差,且 C C C为一个常数(即正比于一个高斯分布)。
我们把上式展开
1 σ c o m b 2 x 2 − 2 μ c o m b σ c o m b 2 x + μ c o m b 2 σ c o m b 2 + C = ( 1 σ p 2 + 1 σ o b 2 ) x 2 − ( 2 μ p σ p 2 + 2 μ o b σ o b 2 ) x + ( μ p 2 σ p 2 + μ o b 2 σ o b 2 ) \frac{1}{\sigma^2_{comb}}x^{2}-\frac{2\mu_{comb}}{\sigma^2_{comb}}x+\frac{\mu^{2}_{comb}}{\sigma^2_{comb}}+C=(\frac{1}{\sigma^2_{p}}+\frac{1}{\sigma^2_{ob}})x^{2}-(\frac{2\mu_{p}}{\sigma^2_{p}}+\frac{2\mu_{ob}}{\sigma^2_{ob}})x+(\frac{\mu_{p}^{2}}{\sigma^2_{p}}+\frac{\mu_{ob}^{2}}{\sigma^2_{ob}}) σcomb21x2σcomb22μcombx+σcomb2μcomb2+C=(σp21+σob21)x2(σp22μp+σob22μob)x+(σp2μp2+σob2μob2)
为了使得上式的关系成立,需满足一个必要条件为左右两侧 x x x 的二次项系数与一次项系数均相等。则由此可以得到下述关系:
1 σ c o m b 2 = 1 σ p 2 + 1 σ o b 2 \frac{1}{\sigma^2_{comb}}=\frac{1}{\sigma^2_{p}}+\frac{1}{\sigma^2_{ob}} σcomb21=σp21+σob21
μ c o m b σ c o m b 2 = μ p σ p 2 + μ o b σ o b 2 \frac{\mu_{comb}}{\sigma^2_{comb}}=\frac{\mu_{p}}{\sigma^2_{p}}+\frac{\mu_{ob}}{\sigma^2_{ob}} σcomb2μcomb=σp2μp+σob2μob
首先,对于第一个式子,可以变换为下述形式:
σ c o m b 2 = σ p 2 σ o b 2 σ p 2 + σ o b 2 σ c o m b 2 = σ p 2 ( σ p 2 + σ o b 2 ) − σ p 4 σ p 2 + σ o b 2 = σ p 2 − σ p 4 σ p 2 + σ o b 2 \sigma^2_{comb}=\frac{\sigma^2_{p}\sigma^2_{ob}}{\sigma^2_{p}+\sigma^2_{ob}} \\ \sigma^2_{comb}=\frac{\sigma^2_{p}(\sigma^2_{p}+\sigma^2_{ob})-\sigma^4_{p}}{\sigma^2_{p}+\sigma^2_{ob}}=\sigma^2_{p}-\frac{\sigma^4_{p}}{\sigma^2_{p}+\sigma^2_{ob}} σcomb2=σp2+σob2σp2σob2σcomb2=σp2+σob2σp2(σp2+σob2)σp4=σp2σp2+σob2σp4
同时,代入并变换第二个式子(右侧):
μ c o m b 1 σ c o m b 2 = μ c o m b σ p 2 + σ o b 2 σ p 2 σ o b 2 = μ p σ o b 2 + μ o b σ p 2 σ p 2 σ o b 2 {\mu_{comb}}\frac{1}{\sigma^2_{comb}}={\mu_{comb}}\frac{\sigma^2_{p}+\sigma^2_{ob}}{\sigma^2_{p}\sigma^2_{ob}}=\frac{\mu_{p}\sigma^2_{ob}+\mu_{ob}\sigma^2_{p}}{\sigma^2_{p}\sigma^2_{ob}} μcombσcomb21=μcombσp2σob2σp2+σob2=σp2σob2μpσob2+μobσp2
同时去除分母,得:
μ c o m b ( σ p 2 + σ o b 2 ) = μ p σ o b 2 + μ o b σ p 2 {\mu_{comb}}(\sigma^2_{p}+\sigma^2_{ob})=\mu_{p}\sigma^2_{ob}+\mu_{ob}\sigma^2_{p} μcomb(σp2+σob2)=μpσob2+μobσp2
则:
μ c o m b = μ p σ o b 2 + μ o b σ p 2 ( σ p 2 + σ o b 2 ) μ c o m b = μ p σ p 2 + μ p σ o b 2 + μ o b σ p 2 − μ p σ p 2 ( σ p 2 + σ o b 2 ) μ c o m b = μ p + μ o b σ p 2 − μ p σ p 2 ( σ p 2 + σ o b 2 ) {\mu_{comb}}=\frac{\mu_{p}\sigma^2_{ob}+\mu_{ob}\sigma^2_{p}}{(\sigma^2_{p}+\sigma^2_{ob})}\\{\mu_{comb}}=\frac{\mu_{p}\sigma^2_{p}+\mu_{p}\sigma^2_{ob}+\mu_{ob}\sigma^2_{p}-\mu_{p}\sigma^2_{p}}{(\sigma^2_{p}+\sigma^2_{ob})} \\ {\mu_{comb}}=\mu_{p}+\frac{\mu_{ob}\sigma^2_{p}-\mu_{p}\sigma^2_{p}}{(\sigma^2_{p}+\sigma^2_{ob})} μcomb=(σp2+σob2)μpσob2+μobσp2μcomb=(σp2+σob2)μpσp2+μpσob2+μobσp2μpσp2μcomb=μp+(σp2+σob2)μobσp2μpσp2
令:
K = σ p 2 σ p 2 + σ o b 2 K=\frac{\sigma^2_{p}}{\sigma^2_{p}+\sigma^2_{ob}} K=σp2+σob2σp2
K K K为卡尔曼增益,则我们可以把变量 μ c o m b \mu_{comb} μcomb与变量 σ c o m b 2 \sigma^2_{comb} σcomb2通过 K K K表示为:

μ c o m b = μ p + K ∗ ( μ o b − μ p ) σ c o m b 2 = σ p 2 − σ p 4 σ p 2 + σ o b 2 = σ p 2 − σ p 2 ∗ K = σ p 2 ( 1 − K ) {\mu_{comb}}=\mu_{p}+K*(\mu_{ob}-\mu_{p})\\ \sigma^2_{comb}=\sigma^2_{p}-\frac{\sigma^4_{p}}{\sigma^2_{p}+\sigma^2_{ob}} =\sigma^2_{p}-\sigma^2_{p}*K=\sigma^2_{p}(1-K) μcomb=μp+K(μobμp)σcomb2=σp2σp2+σob2σp4=σp2σp2K=σp2(1K)
对应于矩阵形式,则可以写为:
μ → c o m b = μ → p + K ∗ ( μ → o b − μ → p ) Σ c o m b = Σ p ( 1 − K ) {\overrightarrow{\mu}_{comb}}=\overrightarrow{\mu}_{p}+K*(\overrightarrow{\mu}_{ob}-\overrightarrow{\mu}_{p})\\ \Sigma_{comb}=\Sigma_{p}(1-K) μ comb=μ p+K(μ obμ p)Σcomb=Σp(1K)

至此,我们就简要的说明了卡尔曼滤波中的均值、方差以及卡尔曼增益用于更新前两者的推导过程。

黄金五条公式总结

可以看出卡尔曼滤波整体包括两个部分:1)预测 2)更新
预测部分包括:
x ^ t = F t ∗ x ~ t − 1 + B t ∗ u t σ ^ t 2 = F t σ ~ t − 1 2 F t T + Q t \hat{x}_{t} = F_{t} * \tilde{x}_{t-1}+B_{t}*{u}_{t}\\\hat{\sigma}^{2}_{t}=F_{t}\tilde\sigma^{2}_{t-1}F^{T}_{t}+Q_{t} x^t=Ftx~t1+Btutσ^t2=Ftσ~t12FtT+Qt
式中, x ^ t \hat{x}_{t} x^t t t t时刻的状态量预测值,通过上一时刻 t − 1 t-1 t1计算的最优状态估计以及输入 u t {u}_{t} ut进行计算。
σ ^ t 2 \hat{\sigma}^{2}_{t} σ^t2为状态估计的不确定性,通过上一时刻的不确定性 σ ~ t − 1 2 \tilde\sigma^{2}_{t-1} σ~t12,预测矩阵 F t F_{t} Ft以及输入 u t {u}_{t} ut的不确定性 Q t Q_{t} Qt进行计算。

更新部分包括:
K = σ ^ t 2 σ ^ t 2 + σ o b − t 2 x ~ t = x ^ t + K ∗ ( x o b − t − x ^ t ) σ ~ t 2 = σ ^ t 2 ( 1 − K ) K=\frac{\hat{\sigma}^{2}_{t}}{\hat{\sigma}^{2}_{t}+\sigma^2_{ob-t}}\\ \tilde{x}_{t}=\hat{x}_{t}+K*({x}_{ob-t}-\hat{x}_{t})\\ \tilde{\sigma}^2_{t}=\hat{\sigma}^2_{t}(1-K) K=σ^t2+σobt2σ^t2x~t=x^t+K(xobtx^t)σ~t2=σ^t2(1K)
上式中, K K K为卡尔曼增益,通过 t t t时刻的状态估计预测量的不确定性 σ ^ t 2 \hat{\sigma}^{2}_{t} σ^t2 t t t时刻观测值的不确定性进行计算。
x ~ t \tilde{x}_{t} x~t t t t时刻结合预测和观测计算出的最优状态估计(即我们想要计算的状态量),通过 t t t时刻的预测值 x ^ t \hat{x}_{t} x^t与观测值 x o b − t {x}_{ob-t} xobt,以及卡尔曼增益 K K K进行计算。
σ ~ t 2 \tilde{\sigma}^2_{t} σ~t2为在 t t t时刻结合预测观测两方面进行计算的不确定性,通过预测的不确定性 σ ^ t 2 \hat{\sigma}^{2}_{t} σ^t2与卡尔曼增益 K K K进行计算。

上述五个公式即为“黄金五条”公式。

卡尔曼增益K值的讨论

最后我们再进行一些讨论,更加深入的去了解卡尔曼滤波的内在关系。
我们来假设两个极端情况:
1)如果存在一个情况,观测量特别精确,几乎不存在误差,其方差 σ o b − t 2 \sigma^2_{ob-t} σobt2的值可以取0。此时,卡尔曼增益 K K K的值为1。则更新部分的最优估计和不确定性变为:
x ~ t = x ^ t + 1 ∗ ( x o b − t − x ^ t ) = x o b − t σ ~ t 2 = σ ^ t 2 ( 1 − 1 ) = 0 \tilde{x}_{t}=\hat{x}_{t}+1*({x}_{ob-t}-\hat{x}_{t})={x}_{ob-t}\\ \tilde{\sigma}^2_{t}=\hat{\sigma}^2_{t}(1-1)=0 x~t=x^t+1(xobtx^t)=xobtσ~t2=σ^t2(11)=0
即观测值作为了最优估计,且其不确定性为0。
2)针对另外一个情况,我们构建的小车行驶的数学模型毫无误差,预测量特别精确,几乎不存在误差,其方差 σ ^ 2 \hat{\sigma}^2 σ^2的值可以取0。此时,卡尔曼增益 K K K的值为0。则更新部分的最优估计和不确定性变为:
x ~ t = x ^ t + 0 ∗ ( x o b − t − x ^ t ) = x ^ t σ ~ t 2 = σ ^ t 2 ( 1 − 0 ) = σ ^ t 2 \tilde{x}_{t}=\hat{x}_{t}+0*({x}_{ob-t}-\hat{x}_{t})=\hat{x}_{t}\\ \tilde{\sigma}^2_{t}=\hat{\sigma}^2_{t}(1-0)=\hat{\sigma}^2_{t} x~t=x^t+0(xobtx^t)=x^tσ~t2=σ^t2(10)=σ^t2
即以预测值作为最优的估计。

因此,我们得到了一个重要的结论:

卡尔曼增益 K K K的值,决定了测量值和预测值对计算 t t t时刻状态量 x ~ t \tilde{x}_{t} x~t的影响程度。

这个知乎大佬放了matlab官方的学习视频,很不错,通俗易懂,感兴趣的可以去看一下:如何通俗并尽可能详细地解释卡尔曼滤波?

码字不易,若有转载还请注明出处!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晨的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值