自动驾驶——卡尔曼滤波(KF&EKF)的学习笔记

1 致谢

感谢 Dr. Cyrill Stachniss的教学视频,向您表示敬意!
教程链接:https://www.youtube.com/watch?v=ELyQMGF_WIg

2 卡尔曼滤波的核心优点——“不需要标注 — model based”

卡尔曼滤波是一种基于假设(先验信息)和统计学方法的状态估计方法,不是一种学习型算法(没有任何假设,不属于函数拟合方法),所以前期在验证阶段不需要大量的标注信息;

3 卡尔曼滤波的优势

3.1 不需要训练(基于贝叶斯理论)

如果是使用LSTM来综合时序信息的话,还需要标注信息以及训练;

3.2 速度快:0.1~0.3ms

赵老师在课程中说到:
“卡尔曼滤波的效率一般在0.3ms以下,如果是电脑比较好的情况下,可以达到0.1ms以下; ”

4 卡尔曼滤波在自动驾驶中的作用

4.1 滤波操作——时序信息融合(滤波作用)

卡尔曼滤波有滤波的作用,实际上是一种时序信息的融合;

2.1 多传感器的信号融合

《百度自动驾驶系列课程》里面讲到: “卡尔曼滤波可以用来进行GPS和IMU的信号之间的校准;”

2.2 帧间位置的插值(用来进行加速)

我请教赵老师关于卡尔曼滤波在人脸跟踪中的作用时,他说到:
“卡尔曼滤波可以跟踪、加速,不用每帧都检测;”

可以看到,卡尔曼滤波的插值作用可以用来在多目标跟踪中进行加速;

1.2 通过插值来进行加速

1.3 对目标框进行平滑

关于平滑的作用,张老师是这样讲的: “一般用在跟踪里边,比如某一帧
人脸没检测到,可以用Kalman滤波器预测下,也可以用来做平滑,比如框抖得很厉害,Kalman可以把高频抖动去掉”

5 卡尔曼滤波的公式

小汽车是我认为KF最形象的例子了,
已知,
状 态 = [ p t v t ] 状态= \begin{bmatrix} p_t\\ v_t \end{bmatrix} =[ptvt]

5.1 各个参数的简单介绍

这里只是引入的符号,数学严谨的符号还要参考《卡尔曼滤波组合导航原理》;
B t B_t Bt —— 控制矩阵;
R \boldsymbol{R} R —— (已知量)系统噪声序列的方差阵(实际上就是“ P t − \boldsymbol{P}_{t}^- Pt的噪声”,这里的小"-"号表示这是单步估计的“不完美”的结果);
Q \boldsymbol{Q} Q —— 观测噪声方差阵(实际上就是“ z t \boldsymbol{z}_t zt的噪声”),(如果 Q = 0 Q=0 Q=0,可以推导出“ μ = C − 1 z t \mu = C^{-1} z_t μ=C1zt”,其直观含义就是:当观测噪声为0时,观测值是100%准确的,所以可以完全地相信观测值计算而来的状态变量,详细的推导过程可以在《SLAM-Course - 04 - Extended Kalman Filter (2013/14; Cyrill Stachniss)》视频里面观看);

5.3 状态转移方程——递推估计

我们可以把状态转移方程视作一种递推估计,因为它在本质上其实与数列中“递推公式—— a n + 1 = f ( a n ) a_{n+1} = f(a_n) an+1=f(an)”的思想是相同的;
于是这种递推式的传感器信号,就可以融合在状态转移方程中,
例如:平面SLAM中的位移估计;
其实在我看来,状态方程是一种对系统“状态转移的先验递推”,融合我们已知的先验递推的知识以及控制量;

5.4 观测方程——全局估计

5.5 加权平均

5.5.2 加权平均的时候需要在残差上面加上噪声呢?

是不需要的;在KF中,我们对状态变量的描述是通过均值方差两个统计参数来进行描述的,也就是通过状态变量的分布进行整体估计,于是噪声部分的估计则有方差来 “负责”,于是不需要在均值中进行噪声的相关操作,所以不用在均值变量 x k + 1 x_{k+1} xk+1上面加上噪声;

5.6 卡尔曼滤波形象化理解

5.6.1 利用噪声矩阵进行线性插值

卡尔曼滤波的本质是可以认为是线性插值,
这里的插值系数矩阵 K K K利用了系统噪声和观测噪声来进行加权滤波,
那么这里的加权是如何实现的呢?
加权计算融合了两者噪声的矩阵,通过增益方程进行计算:
K t = Σ ˉ t C t T ( C t Σ ˉ t C t T + Q t ) − 1 K_t = \bar{\Sigma}_t C^T_t \left ( C_t \bar{\Sigma}_t C^T_t + Q_t\right )^{-1} Kt=ΣˉtCtT(CtΣˉtCtT+Qt)1
这里我们可以做一种形象化的变形:
“ K t = Σ ˉ t C t T ( C t Σ ˉ t C t T + Q t ) ” “K_t =\frac{\bar{\Sigma}_t C^T_t}{\left ( C_t \bar{\Sigma}_t C^T_t + Q_t\right )}” Kt=(CtΣˉtCtT+Qt)ΣˉtCtT
(实际上这里的 C t C_t Ct在推导过程中被消掉了,实际上的插值系数方程是这样的,
“ K t = C t Σ ˉ t C t T ( C t Σ ˉ t C t T + Q t ) ” “K_t =\frac{\bar{C_t\Sigma}_t C^T_t}{\left ( C_t \bar{\Sigma}_t C^T_t + Q_t\right )}” Kt=(CtΣˉtCtT+Qt)CtΣˉtCtT
这样就比较好理解了 C t Σ ˉ t C t T C_t \bar{\Sigma}_t C^T_t CtΣˉtCtT Q t Q_t Qt的值获取插值系统矩阵,
如果 Q t Q_t Qt很小,残差权值 K t K_t Kt就会很大,表示更加相信观测值;

5.6.2 递推估计与观测估计的融合——“高斯图的形象理解”

可以参考极市平台的博文《一文图解卡尔曼滤波(Kalman Filter)》
在这里插入图片描述

5.6.2 为什么“ X \boldsymbol{X} X”的估计噪声 P t − \boldsymbol{P}_{t}^- Pt要放在 K t \boldsymbol{K}_{t} Kt的方程中呢?

这是因为 P t − \boldsymbol{P}_{t}^- Pt指的是单步估计带来的误差,在进行量测估计时,我们需要把这个误差“加回去”;

3 卡尔曼滤波的数学推导

3.1 变量符号的备注

用大写Sigma表示协方差;

4 卡尔曼滤波平滑的理解

Q和R矩阵可以用来控制平滑的程度;

4 EKF和KF的不同

4.1 EKF用来处理系统的状态转移变换是非线性的情况

首先,一个经常出现的情况是,系统的状态转移是非线性的;
那么,如果定义系统的“状态转移”呢?具体来说,我们指的是系统的状态转移方程,
也就是
μ ˉ t = g ( u t , μ t − 1 ) {\bar{\mu}}_t=g\left ( u_t, {\mu}_{t-1}\right ) μˉt=g(ut,μt1)
于是,我们说的“系统的状态转移是非线性的”则指的是: g ( u t , μ t − 1 ) g\left ( u_t, {\mu}_{t-1}\right ) g(ut,μt1)不再满足线性的形式—— A t μ t − 1 + B t u t A_t \mu_{t-1}+ B_t u_t Atμt1+Btut的形式;
经过实验,我们可以发现,此时噪声的传递会出现较大的误差:
在这里插入图片描述
所以我们需要改变噪声的传递方式;

5 EKF算法的时间复杂度

Complexity: O ( k 2.4 + n 2 ) O(k^{2.4}+ n^2) O(k2.4+n2)

6 多传感器的融合

状态方程不需要进行修改;

7 KF的实现

使用OpenCV中的KF的函数;

7.1 转移矩阵的写作——“看作是多元方程组”

转移矩阵看作是方程组就会比较好写了;

8 Q和R的调参

可以通过真值来估计噪声的大小;

很抱歉,我无法提供具体的代码,但是可以告诉你如何实现卡尔曼滤波SOC估计的EKF算法。首先,你需要了解卡尔曼滤波和扩展卡尔曼滤波的基本原理。然后,你可以使用Matlab或其他编程语言实现该算法。 下面是一般步骤来实现卡尔曼滤波SOC估计的EKF算法: 1. 定义系统模型:将电池的SOC建模为一个状态变量,并根据电池的特性和传感器的测量信息定义状态转移方程和测量方程。 2. 初始化卡尔曼滤波器:初始化状态估计向量和协方差矩阵。 3. 预测步骤:使用状态转移方程预测下一个时刻的状态估计值和协方差矩阵。 4. 更新步骤:使用测量方程将实际测量值与预测值进行比较,计算卡尔曼增益和更新后的状态估计值和协方差矩阵。 5. 重复进行预测和更新步骤,直至达到所需的估计精度或满足停止条件。 请注意,具体的代码实现可能会因应用领域和编程语言的不同而有所差异。建议你参考相关的文献和资源,以及使用适合的编程环境来实现卡尔曼滤波SOC估计的EKF算法。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [扩展卡尔曼滤波soc估算 基于EKF算法的锂电池SOC 卡尔曼滤波估计电池soc ,simulink模型,对电池SOC参数进行...](https://download.csdn.net/download/2301_78338718/87816203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [卡尔曼滤波_ekf_soc_matlab源码](https://download.csdn.net/download/m0_53407570/83097472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值