卡尔曼滤波是无人驾驶中最基本的算法之一,在传感器融合与定位中几乎无处不在。这里借助笔记顺一顺卡尔曼滤波的过程
适用系统:线性高斯系统
宏观意义:噪声既加权(下面与理想状态的低通滤波进行对比)
加权公式 | ||
---|---|---|
低通滤波 | 低频信号 × 1 \times{1} ×1+高频信号 × 0 \times{0} ×0 | 这里的低指的是低频信号值,高指的是高频噪声,对高频噪声给定权重,才是最理想的状态 |
卡尔曼滤波 | 估计值 × p 1 \times{p_1} ×p1+观测值 × p 2 \times_{p_2} ×p2 | 实际上就是一个给定权重的过程,对于卡尔曼滤波就是分别给定估计值和理想值权重来得到一个修正的值。 |
状态空间表达式
状态方程:
x k = F x k − 1 + B u k + ω k \begin{aligned} x_{k}=F x_{k-1}+B u_{k}+\omega_{k} \end{aligned} xk=Fxk−1+Buk+ωk
观测方程:
z k = H x k + v k \begin{aligned} z_{k}=H x_{k}+v_{k} \end{aligned} zk=Hxk+vkω k \omega_{k} ωk:过程噪声, ω k ∈ N ( 0 , Q k ) \omega_{k} \in N\left(0 , Q_{k}\right) ωk∈N(0,Qk)
v k v_{k} vk:观测噪声, v k ∈ N ( 0 , R k ) v_{k} \in N\left(0 , R_{k}\right) vk∈N(0,Rk)
注意:这里的 Q 、 R Q、R Q、R为方差,有时也称这些为超参数
符号约定(以 x x x变量举例,其他类比)
- x ^ k \hat{x}_{k} x^k :最优估计值(也既为加权后纠正值或者后验估计值)
- x ^ k − \hat{x}_{k}^{-} x^k− :先验估计值(预测值,一般通过前一个时刻的后验值 x ^ k − 1 \hat{x}_{k-1} x^k−1进行预测得出)
- x k {x}_{k} xk : 没啥意义,就是k时刻的原始值(或者为测量值)
实现过程
使用上一次的最优结果预测当前的值,同时使用观测值修正答盎前置,得到最优结果。
- 预测当前的值( x ^ k − \hat{x}_{k}^{-} x^k−):指的是先验估计
- 观测值( z k z_{k} zk):指的是传感器传回值
- 最优结果( x ^ k \hat{x}_{k} x^k):指的是修正后的结果(即:后验估计)
这里借用《State Estimation for Robotics》3.3节一张图说明(懒得自己画了)
注意一下这里的符号说明
x ^ k \hat{x}_{k} x^k :最优估计值(也既为加权后纠正值或者后验估计值)(意义同1节符号约定)
x ˇ k \check{x}_{k} xˇk :先验估计值(预测值,一般通过前一个时刻的后验值 x ^ k − 1 \hat{x}_{k-1} x^k−1进行预测得出)(即1节符号约定里面的 x ^ k − \hat{x}_{k}^{-} x^k− )
y k y_{k} yk :测量值(对应 z k z_{k} zk) y k = z k = x k y_{k}=z_{k}={x}_{k} yk=zk=xk
正如上图,卡尔曼滤波要得出最优的估计值 x ^ k \hat{x}_{k} x^k ,而该值的得出需要对预测值(先验估计)和测量值进行加权处理估计出(即,更相信谁?)
符号约定(以 x x x变量举例,其他类比)
- x ^ k \hat{x}_{k} x^k :最优估计值(也既为加权后纠正值或者后验估计值)
- x ^ k − \hat{x}_{k}^{-} x^k− :先验估计值(预测值,一般通过前一个时刻的后验值 x ^ k − 1 \hat{x}_{k-1} x^k−1进行预测得出)
- x k {x}_{k} xk : 没啥意义,就是k时刻的原始值(或者为测量值)
方程建模
状态方程 x t = F x t − 1 + B u t − 1 {x}_{t}=F {x}_{t-1}+B u_{t-1} xt=Fxt−1+But−1
观测方程 z t = H x t + v t z_{t}=H x_{t}+v_{t} zt=Hxt+vt
预测过程(⭐️)
预测 | |
---|---|
x ^ t − = F x ^ t − 1 + B u t − 1 \hat{x}_{t}^{-}=F \hat{x}_{t-1}+B u_{t-1} x^t−=Fx^t−1+But−1 | 先验估计(需要上一时刻的后验最优估计信息) |
P t − = F P t − 1 F T + Q P_{t}^{-}=F P_{t-1} F^{T}+Q Pt−=FPt−1FT+Q | 预测估计的协方差矩阵 |
更新过程(⭐️)
更新 | |
---|---|
K t = P t − H T ( H P t − H T + R ) − 1 K_{t}=P_{t}^{-} H^{T}\left(H P_{t}^{-} H^{T}+R\right)^{-1} Kt=Pt−HT(HPt−HT+R)−1 | 卡尔曼增益 |
x ^ t = x ^ t − + K t ( z t − H x ^ t − ) \hat{x}_{t}=\hat{x}_{t}^{-}+K_{t}\left(z_{t}-H \hat{x}_{t}^{-}\right) x^t=x^t−+Kt(zt−Hx^t−) | 最优状态估计(后验估计) |
P t = ( I − K t H ) P t − P_{t}=\left(I-K_{t} H\right) P_{t}^{-} Pt=(I−KtH)Pt− | 最终的协方差矩阵(更新协方差估计) |
注意:
z t − H x ^ t − z_{t}-H \hat{x}_{t}^{-} zt−Hx^t− :表示测量值与预测的差值(测量余量)
参考链接:
卡尔曼滤波算法详细推导
关于Q、R
传感器精度很高,更相信观测值,那么就可以将R调小一点。
如果觉得运动模型很理想,没有过程噪声和摩擦等情况,可以将Q调节小一点。
视频
【图灵鸡】什么是卡尔曼滤波?其实一点也不难!详解卡尔曼滤波——原理/推导/程序实现
从放弃到精通!卡尔曼滤波从理论到实践~(推荐)
文章
中英文翻译
How a Kalman filter works, in pictures
详解卡尔曼滤波原理 - 清风莞尔的博客 - CSDN博客
傻瓜也能懂的卡尔曼滤波器(翻译自外网博客)(推荐)
无人驾驶技术入门(十三)| 手把手教你写卡尔曼滤波器
卡尔曼滤波算法详细推导
书籍
《State Estimation for Robotics》