详解SLAM中的滤波算法:八大滤波算法汇总!

作者 | Will  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/595374969

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【SLAM】技术交流群

后台回复【SLAM综述】获取视觉SLAM、激光SLAM、RGBD-SLAM等多篇综述!

本文只做学术分享,如有侵权,联系删文

概率论基础

边缘概率

边缘概率是相对于联合概率而言的的,虽然你有两个变量(x,y)但是你可以只考虑x或者y的分部,好像另外一个不存在一样,写作 P(x) 或者 P(y) 。

5830aca3207f59bc65abe0e61facde30.png

离散概率和为1,即:

cbed2b7a9b0563dbec756c8bf35ee700.png

为了简化符号,在可能时通常省略随机变量的明确表示,而是使用常见的缩写P(x)代替P(X=x) 。

联合概率和独立

两个随机变量X和Y的联合概率表示两件事都发生的概率,由下式给出:

48775c48675bdefaf78f632fed016d72.png

如果X和Y相互独立,有P(x,y)=P(x)P(y)

独立与条件独立

3f8273de1cdd7d1f4ed276c893bf7156.png

左边是独立的定义,右边是条件独立的定义。可以看出:条件独立是指在某个条件已知的前提下独立。

注意:独立与条件独立不能互推。

https://zhuanlan.zhihu.com/p/58593725

条件独立的理解

如果 A,B 关于 C 条件独立:
C 的发生,使本来不独立的 A 和 B 变得独立起来,也即事件 C 的发生,解开了 A 和 B 的依赖关系;

条件概率

假定已经知道Y=y,想知道基于以上事实条件X=x的概率。这样的概率表示为P(x|y)=P(X=x|Y=y)

称为条件概率

bd3aebcb6249cf366e6f3b3a9844da95.png

通过统计方法分析事件发生关系的占比,以做到已知结果倒推原因。

fed392a6cae918fbda1c39b6f317ff83.png

联合概率、边缘概率与条件概率之间的关系

7914b102d462aeaf5d799ae35615daf5.png

将概率转化为面积来理解:

联合概率P(X=a,Y=b)满足X=a且Y=b的面积
边缘概率P(X=a)不考虑Y的取值,所有满足X=a的区域的总面积
条件概率P(X=a|Y=b)在Y=b的前提下,满足X=a的面积(比例)

adc245bbed27b44acdf677909f31b495.png
三种概率的关系

全概率定理

从条件概率和概率测量公理得出的一个有趣事实经常被称为全概率定理

f5753582432a0934cda8558d78ceb621.png

贝叶斯定理

www.cnblogs.com/HuZihu/p/9368355.html

该定理将条件概率p(x|y)与其“逆”概率p(ylx)联系起来。如此处所阐述的,准则要求p(y)>0:

ae332474c7cb4b6b75aca0dc3af2cd78.png 6f8532422655f4de84d15c415a133371.png

SLAM中很多理论,诸如滤波方法、BA和图优化等,都是基于贝叶斯定理的思想而来的。

贝叶斯更新概率图的公式

3fdbec0b7f47a00799ba959eaf2e2e04.png

在进行涉及概率的数值计算时使用对数形式 。那么有:

6de255227425bf0c06cf31650b79f592.png

贝叶斯滤波

贝叶斯滤波基于马尔可夫假设。

马尔可夫假设

马尔可夫假设:系统当前时刻的状态只与上一个时刻有关,与之前任意时刻的状态都没有关系。当然,马尔可夫假设的成立是有条件的,它要求状态变量具有完整性,换句话说,系统的全部信息都包含在了 中,不存在其它随机变量对系统状态产生影响。

公式展示

ec96845e23496791a2483268a7a45bcc.png 4e15e6a9660a295b0068712b0e4ca273.png

公式推导

证明来自《概率机器人》p23~25页,用到了马尔可夫假设、全概率定理、条件独立、贝叶斯定理等。

5d2a5e3558116629a94cc95498b0442f.png 784e5c50fb293c13fcd3576f7b490176.png

卡尔曼滤波(KF和EKF)

https://zhuanlan.zhihu.com/p/558449409

EKF局限性

所以EKF面临的一个重要问题是,当一个高斯分布经过非线性变换后,如何用另一个高斯分布近似它?按照它现在的做法,存在以下的局限性:(注意是滤波器自己的局限性,还没谈在SLAM问题里的局限性)。

  1. 即使是高斯分布,经过一个非线性变换后也不是高斯分布。EKF只计算均值与协方差,是在用高斯近似这个非线性变换后的结果。(实际中这个近似可能很差)。

  2. 系统本身线性化过程中,丢掉了高阶项。

  3. 线性化的工作点往往不是输入状态真实的均值,而是一个估计的均值。于是,在这个工作点下计算的F,G,也不是最好的。

f28d0ff580d025a436bcf6a912e06240.png

解决办法

那么,怎么克服以上的缺点呢?途径很多,主要看我们想不想维持EKF的假设。如果我们只是希望维持高斯分布假设,可以这样子改:

  1. 为了克服第2条,可以使用ESKF。它的线性化是总是在0附近,并且雅可比矩阵的形式简单,计算迅速。因此线性化比EKF更准确。虽然,ESKF主要用于有imu的系统。

  2. 为了克服第3条工作点的问题,我们以EKF估计的结果为工作点,重新计算一遍EKF,直到这个工作点变化够小。是为迭代EKF(Iterated EKF, IEKF)。

  3. 为了克服第4条,我们除了计算,f()再计算其他几个精心挑选的采样点,然后用这几个点估计输出的高斯分布。是为Sigma Point KF(SPKF,或UKF)。

  4. 如果我们不要高斯分布假设,凭什么要用高斯去近似一个长得根本不高斯的分布呢?于是问题变为,丢掉高斯假设后,怎么描述输出函数的分布就成了一个问题。一种比较暴力的方式是:用足够多的采样点,来表达输出的分布。这种蒙特卡洛的方式,也就是粒子滤波的思路。

  5. 如果再进一步,可以丢弃滤波器思路,说:为什么要用前一个时刻的值来估计下一个时刻呢?我们可以把所有状态看成变量,把运动方程和观测方程看成变量间的约束,构造误差函数,然后最小化这个误差的二次型。这样就会得到非线性优化的方法,在SLAM里就走向图优化那条路上去了。不过,非线性优化也需要对误差函数不断地求梯度,并根据梯度方向迭代,因而局部线性化是不可避免的。

无迹卡尔曼滤波(UKF)

blog.csdn.net/gangdanerya/article/details/105215446

该算法的核心思想是:采用无损变换(Unscented Transform,UT),利用一组Sigma采样点来描述随机变量的高斯分布,然后通过非线性函数的传递,再利用加权统计线性回归技术来近似非x线性函数的后验均值和方差。

相比于EKF,UKF的估计精度能够达到泰勒级数展开的二阶精度。其本质是:近似非线性函数的均值和方差远比近似非线性函数本身更容易。

UT变换

y=f(x)是一个非线性变换, x为 n 维随机变量,UT变换根据一定的采样策略,获得一组Sigma采样点,并设定均值权值W和方差权值,来近似非线性函数的后验均值和方差。利用选取的Sigma采样点集进行非线性函数传递可得:

044a8ed6230fb86b5f999ddee2834fb3.png

其中,y_i为Sigma采样经过非线性函数传递后对应的点。根据加权统计线性回归技术,可以近似得到y的统计特性:

ce172492b054e1fc452d65eff72e4079.png

Sigma点采样策略

下面介绍两种经常使用的采样策略:比例采样和比例修正对称采样

b4467f532700888a51fa598258d913fa.png 2ebda1970060e71e41639276f63de1a7.png b000b48be16a1043bccd7853b3bc8b2a.png 2ba909a31f4a681322b93e669593a7de.png

根据Sigma点采样策略不同,相应的Sigma点以及均值权值和方差权值也不尽相同,因此UT变换的估计精度也会有差异。但总体来说,其估计精度能够达到泰勒级数展开的二阶精度。

使用参数beta对高斯表示的附加的分布信息进行编码。如果分布是精确的高斯分布,则beta=2是最佳的选择。

bdf07d09d42f9abef00345e8732f4aae.png

其中11行,参考 Will:EKF公式推导 中的证明的协方差的其他形式。

UKF采样原则

为保证随机变量x经过采样之后得到的Sigma采样点仍具有原变量的必要特性,所以采样点的选取应满足:

a34aceb111b6550239e7fb5e4793dada.png

式中{}内的符号分别为Sigma采样点,均值权值和方差权值组成的集合;L为采样点个数,P为随机变量x的密度函数,g[~]确定x的相关信息。如果密度函数P(x)只有一、二阶矩时,可以写成:

da18c34971735cfe6f8e3fc505b9c2ce.png 57cbd4e76eb2fa5e6c483fe4083d2f31.png 57c843a88fa756f8062a26e541ec7745.png

UKF的特点

UKF相比于EKF的精度更高一些,其精度相当于二阶泰勒展开,但速度会略慢一点。UKF另一个巨大优势是不需要计算雅克比矩阵,而有些时候雅克比矩阵也确实的我们无法获得的

另外UKF与PF(粒子滤波)也有相似之处,只是无迹变换中选择的粒子是明确的,而粒子滤波中的粒子是随机的。随机的好处是可以用于任意分布,但也具有其局限性。因此对于分布近似为高斯分布的,采用UKF将更有效。

信息滤波(IF)

卡尔曼滤波(KF)的对偶滤波算法就是信息滤波(Information Filter,IF),形式和KF差不多。

3c8371a81b00a04e5e217b826902602c.png

Error-state卡尔曼滤波(ESKF)

ESKF(error state Kalman filter)是Kalman滤波的一种特殊形式,采用ESKF的原因是由于对误差的线性化要比直接对函数进行线性化更加符合实际情况。如下图:

a1f4a20ac27e852115a3fbf08ba03e4d.png

状态误差卡尔曼(ESKF)的应用,它是卡尔曼滤波器的变种中应用最为广泛的一种,与EKF一样,它也是一种针对时变系统的非线性滤波器。但是与EKF不同的是,它的线性化是总是在0附近,因此线性化更准确。绝大部分的场景,ESKF就足够使用了。如果对于滤波有更高的要求,可以选择UKF,甚至PF。

ESKF数学模型

Error-state Kalman Filter(ESKF)就是一种传感器融合的算法,它的基础仍然是卡尔曼滤波。它的核心思想是把系统的状态分为三类:

  • true state:实际状态,系统实际的运行状态

  • nominal state:名义状态,描述了运动状态的主要趋势,主导成分。(large-signal,非线性)

  • error state:误差状态,实际状态与名义状态之间的差值(small-signal,近似线性,适合线性高斯滤波)

基于以上状态分类,我们可以将关心的true-state,分为两部分,分别进行估计,即nominal state和error state,然后再进行二者叠加。

7399227512ee87ba9f2ee62dd0bfaf91.png

ESKF的全过程

  • 对IMU数据进行积分,获得名义状态X,注意这个X并没有考虑噪声,所以必然引入了累计误差;

  • 利用KF算法估计Error State,包括状态更新和测量更新,这个过程是考虑了噪声的,而且由于这个误差状态的方程式近似线性的,直接使用KF就可以;

  • 将Error State加到Nominal State上,获取“真值”;

  • 重置Error State,等待下一次更新;

ESKF的优势

  • Error State中的参数数量与运动自由度是相等的,避免了过参数化引起的协方差矩阵奇异的风险;

  • Error State总是接近于0,Kalman Filter工作在原点附近。因此,远离奇异值、万向节锁,并且保证了线性化的合理性和有效性;

  • Error State总是很小,因此二阶项都可以忽略,因此雅可比矩阵的计算会很简单,很迅速;

  • Error State的变化平缓,因此KF修正的频率不需要太高

23f62df717bee5e7a06c73328ce0f632.png

公式推导

https://zhuanlan.zhihu.com/p/557496107

迭代卡尔曼滤波(IKF/IEKF)

算法

https://zhuanlan.zhihu.com/p/141018958

e70248a9611543c6817e7d6c2718d169.png
IEKF

IEKF与高斯牛顿的等价性

IEKF将一个高斯牛顿问题,转换为EKF的方式,并通过迭代更新。
IEKF改进的是KF的后验更新公式,实际上就是就是高斯牛顿法,其中包含来预测和观测的约束。

https://zhuanlan.zhihu.com/p/447014586

马氏范数和2-范数:Derek Lee:SLAM中的问题及个人思考汇总

多状态约束下的卡尔曼滤波(MSCKF)

粒子滤波(PF)

blog.csdn.net/weixin_38145317/article/details/82852580

总结和比较

卡尔曼滤波和其他方法的比较

  1. 卡尔曼滤波是递归的线性高斯系统最优估计。

  2. EKF将NLNG系统在工作点附近近似为LG进行处理。

  3. IEKF对工作点进行迭代。

  4. UKF没有线性化近似,而是把sigma point进行非线性变换后再用高斯近似。

  5. PF去掉高斯假设,以粒子作为采样点来描述分布。

  6. 优化方式同时考虑所有帧间约束,迭代线性化求解。

滤波和优化方法的区别

568dad462dd1578cb81953c3e1ba8d23.png
EKF的局限性

滤波方法(EKF):

(1)滤波方法具有一阶马尔可夫假设,k时刻的状态只与k-1时刻相关。

(2)可以粗略认为EKF仅是优化中的一次迭代,除非是使用IKF/IEKF

(3)计算量小,实时性较好,容易积累误差。

优化方法(BA):

(1)没有马尔可夫假设,更倾向于使用所有的历史数据。称为全体时间上的SLAM(Full-SLAM),计算量变大

(2)没有迭代次数的限制

(3)累计误差少。最理想的情况是回环检测之后,可以消除整个轨迹的误差。

(4)计算量大。不过目前基于雅各比和海森矩阵稀疏性的研究,使得计算资源的消耗大大降低。

下文采自:Sky Shaw:多传感器融合 | 各类滤波器方法整理

  • 卡尔曼滤波器:从k-1时刻后验推k时刻先验,从k时刻先验推k时刻后验(马尔可夫假设);

  • 扩展卡尔曼滤波器:对卡尔曼滤波器进行修正,针对不是线性的情况,采用一阶泰勒展开近似线性(马尔可夫假设);

  • BA优化:把一路上的所有坐标点(像素坐标对应的空间点等)与位姿整体放在一起作为自变量进行非线性优化

  • PoseGraph优化:先通过一路递推方式算出的各点位姿,通过数学方式计算得到一个位姿的变换A,再通过单独拿出两张图像来算出一个位姿变换B,争取让B=A

  • 增量因子图优化:保留中间结果,每加入一个点,对不需要重新计算的就直接用之前的中间结果,需要重新计算的再去计算,从而避免冗余计算。iSAM是增量的处理后端优化。由于机器人是运动的,不同的边和节点会被不断加入图中。每加入一个点,普通图优化是对整个图进行优化,所以比较麻烦和耗时。iSAM的话相当于是保留中间结果,每加入一个点,对不需要重新计算的就直接用之前的中间结果,对需要重新计算的再去计算。以这种方式加速计算,避免冗余计算。

从全文的整理来看,特别是在IKF章节,我们可以发现滤波算法其实就是将Sliding Window的大小设置为1的优化算法,不论是优化算法还是滤波算法都是期望求解出问题概率模型的最大似然估计(MLE),本质上滤波就是基于马尔可夫假设将优化问题的建模进行了“特征化”的处理。再进一步分析,正因为滤波器进行了范围上维度的“简化”、模型的近似处理,所以其计算消耗较于优化算法更低,但由此引发的代价就是精度上的损失。另一个需要考虑的方面是,滤波器是由先验信息+运动模型+观测信息三个方面点顺序执行,以实现位姿状及其协方差的估计和更新,也正因为滤波器的框架如此,若是先验(上一时刻)状态出现了问题,比如位姿跟丢、计算错误等,那么在该时刻之后的状态都会出现问题以致纠正不回来了,而基于优化方法的位姿求解则会考虑更多时刻(关键帧)下的状态信息和观测信息,即使有某一时刻的状态量和协方差是outlier,系统也有一定的能力维稳。

如果在处理器算力充足且精度为第一需求的前提下,那么在位姿估算问题处理上是首推优化算法,但若是效率是第一前提条件,那么就需要根据实际的应用情况和机器人问题模型选择合适的滤波器了。

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码免费学习)

ffc9f76eeeea94b87dccaad28ac8d169.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

1add4aeed6b1c6bd399e6c51ad1a3cee.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、Occupancy、多传感器融合、大模型、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

f8a6426f6842abf95066741e53d19b7d.jpeg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值