KF、EKF、UKF、ESKF、PF对比

简明扼要的介绍下不同滤波方案的联系和区别,重点突出ESKF。

一、几种滤波的共同点:

1.本质上都是概率的运算,最核心的思想是贝叶斯概率,也就是先验问题与后验问题的定义与其概率计算;

2.各算法的推导过程和最终形态以及求解公式,本质上都离不开KF的经典5大公式;具体可参考贺博的”卡尔曼滤波 -- 从推导到应用“系列。

3.无论是否迭代,kF系列算法都基于马尔科夫假设,也就是只与上一帧数据进行参比计算,因此其结果精确性与稳定性相比最新的一些算法或后端图优化来说,还是有一些逊色。

二、区别:

1.KF主要是针对线性估计

2. EKF通过对目标函数的二阶泰勒式子进行截断来使非线性的内容线性化,从而完成非线性估计,但其截断误差会影响结果,持续下去也会发散;

3. UKF通过对目标函数的分布进行特征点采样,采用高斯的 σ 原则,选取特征点来模拟分布;

4. PF则是与目标函数本身关系不大,使用大量的粒子描述原目标函数的分布,经过权重筛选和重采样,不断将模拟的结果作为分布的结果输入,获得滤波的结果;

5. ESKF是一种间接的滤波法,它不是对目标函数求解,而是对系统误差状态求解,最后和名义状态进行合并,得到实际状态。

6. 计算复杂度:EKF由于雅克比矩阵的计算,其复杂度相对较高,时间消耗大,而UKF消耗受限于关键点的选取,PF除了受限于粒子数目外,还受限于采样方法;ESKF与KF是计算比较快的算法。

三、ESKF介绍:

1. ESKF的核心思想是把系统状态分为三类:

a. True State(Ground Truth):真值,指系统实际的运行状态,一般我们会在系统中假定某种输入为真值。(这一条在非线性KF系列滤波通用);
b. Nominal State:名义状态,指系统的变化情况或变化趋势。例如IMU的各轴向加速度对时间的积分可以认为是各轴向距离上的变化,一般在系统中我们认为它是非线性(这一条也是我们在非线性KF中的强关注点);
c. Error State:误差状态,真值与名义状态的差值,这个值也是非线性变化的。例如在IMU、激光、毫米波的系统中,我们可以假定激光的数据为真值,用其他两种来做融合,结果与激光做RMSE,这就可以认为是一种误差状态。
那么我们可以将任意一个状态变化过程,分割为名义变化过程和误差项,即真值为名义变化过后的结果与误差值的叠加。

2. ESKF的步骤如下:

a. 对IMU数据进行积分,获得名义状态X,注意这个X并没有考虑噪声,所以必然引入了累计误差;
b. 利用KF算法估计Error State,包括状态更新和测量更新,这个过程是考虑了噪声的,而且由于这个误差状态的方程式近似线性的,直接使用KF就可以;
c. 利用Error State修正Nominal State,获取“真值”;
d. 重置Error State,等待下一次更新;
3. 使用ESKF的优势:

a. Error State中的参数数量与运动自由度是相等的,避免了过参数化引起的协方差矩阵奇异的风险;
b. Error State总是接近于0,Kalman Filter工作在原点附近。因此,远离奇异值、万向节锁,并且保证了线性化的合理性和有效性;
c. Error State总是很小,因此二阶项都可以忽略,因此雅可比矩阵的计算会很简单,很迅速;
d. Error State的变化平缓,因此KF修正的频率不需要太高。

参考:

1.  Joan Sol`a. Quaternion kinematics for the error-state KF. Sep 12, 2016.  

2. 机器人运动估计——IMU运动方程与ESKF原理介绍(下) - 古月居 (guyuehome.com)

### SLAM 中常用滤波算法及其应用 #### 卡尔曼滤波 (Kalman Filter, KF) 卡尔曼滤波是一种用于估计动态系统的状态的递归算法。该方法适用于线性系统,在SLAM中主要用于处理具有高斯分布特性的测量数据过程噪声。 ```python def kalman_filter(x_est, P_est, z_meas, A, H, R, Q): # 预测阶段 x_pred = np.dot(A, x_est) P_pred = np.dot(np.dot(A, P_est), A.T) + Q # 更新阶段 S = np.dot(np.dot(H, P_pred), H.T) + R K = np.dot(np.dot(P_pred, H.T), inv(S)) y = z_meas - np.dot(H, x_pred) x_upd = x_pred + np.dot(K, y) P_upd = P_pred - np.dot(np.dot(K, H), P_pred) return x_upd, P_upd ``` 此代码展示了标准卡尔曼滤波的过程,其中`A`, `H`, `R`, `Q`分别是状态转移矩阵、观测矩阵以及相应的协方差矩阵[^1]。 #### 扩展卡尔曼滤波 (Extended Kalman Filter, EKF) 当面对非线性系统时,扩展卡尔曼滤波通过泰勒展开在线性化模型来近似解决这类问题。尽管存在一定的局限性计算复杂度增加的情况,但在许多实际应用场景下仍然表现良好。 多状态约束下的卡尔曼滤波(MSCKF),作为EKF的一个变体,能够有效地减少特征重投影误差并提高姿态估计精度。 #### 状态误差卡尔曼滤波 (Error State Kalman Filter, ESKF) ESKF 是另一种改进版本的卡尔曼滤波器,特别适合于处理带有角度参数的状态向量。相比于传统的EKFESKF在零附近的局部区域进行线性化操作,从而提高了数值稳定性与准确性[^2]。 #### 无迹卡尔曼滤波 (Unscented Kalman Filter, UKF) 为了克服传统EKF中存在的线性化带来的偏差问题,UKF采用了一组精心挑选的样本点(sigma points)代替单一的最佳猜测来进行预测更新。这种方法可以更好地捕捉到非线性特性而不必显式求导数或雅可比行列式。 #### 粒子滤波 (Particle Filter, PF) 粒子滤波属于贝叶斯推断框架的一部分,利用随机抽样的方式表示概率密度函数。其优势在于无需假设任何特定形式的概率分布即可适应复杂的环境变化;缺点则是随着维度增长可能导致采样效率低下等问题。粒子滤波被广泛应用到了机器人导航、目标追踪等领域之中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值