如何理解卡尔曼滤波(Kalman Filter)实现数据融合

本篇博客主要是记录自己 KF 的学习过程,其中遇到的疑惑,和自己的理解。如有错误欢迎指正交流~

参考相关资料


卡尔曼滤波在任何含有不确定信息的动态系统中,能对系统下一步的走向做出有根据的预测。
在卡尔曼滤波中,存在两个基础假设:(1)线性系统 (2)符合高斯分布

无偏估计 是用样本统计量来估计总体参数时的一种无偏推断。估计量的数学期望等于被估计参数的真实值,则称此估计量为被估计参数的无偏估计,即具有无偏性,是一种用于评价估计量优良性的准则。无偏估计的意义是:在多次重复下,它们的平均数接近所估计的参数真值。(百度百科)

协方差 在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

首先卡尔曼滤波中,因为已经假设其符合高斯分布,所以在高斯分布中存在均值协方差,均值即数学期望,由于卡尔曼滤波是一个无偏估计,所以被认为就是真实值。所以卡尔曼滤波的最终目的就是要求解每一时刻的均值,从而得到该时刻的真实值。

协方差代表了变量之间的关系,在百度百科上有下面这样一段介绍:
协方差表示的是两个变量总体误差的期望。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值;如果两个变量的变化趋势相反,即其中一个变量大于自身的期望值时另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。如果两个变量统计独立的,那么二者之间的协方差就是零。

关于方差和协方差的计算公式如下:
σ x 2 = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 \sigma^2_x = {1 \over {n-1}}\sum_{i=1}^n(x_i-\bar{x})^2 σx2=n11i=1n(xixˉ)2 σ ( x , y ) = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) \sigma(x,y) = {1 \over {n-1}}\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y}) σ(x,y)=n11i=1n(xixˉ)(yiyˉ)

方差度量单个随机变量的离散程度协方差度量两个随机变量(变化趋势)的相似程度。但是协方差也代表了多个变量与均值(真值)之间的误差。因此最小化协方差,也就是一个逼近真值的过程。


所谓的多传感器融合,并不是传感器之间的融合,而是传感器对系统状态的异步更新

在对传感器数据进行融合的过程中,每个传感器都会存在误差,且服从高斯分布。首先对于每个传感器所测量得到的数据可能不一致,例如GPS得到的经纬度,IMU得到的加速度等等,因此需要现将其数据格式保持一致,例如都表示为当前的车辆位置和速度,也就是预测状态。相当于所有传感器的高斯分布的均值代表相同的含义,为同一种真值。
所以在卡尔曼滤波中定义了该转换关系,即测量函数 H ( x ) H(x) H(x),表示了观测值和预测状态之间的关系。

在两个基本的假设中,已知系统状态为线性的,那么便可以从 K K K时刻推导出 K + 1 K+1 K+1时刻的状态。对于不同的系统状态量的设定,其线性方程也是不一样的,如果该系统状态定义为当前位置和速度 ( p , v ) (p,v) (p,v),那么他的推导关系为:
p k = p k − 1 + Δ t v k − 1 {p_k} ={\color{red}{p_{k-1}} }+ \Delta t\color{red} {v_{k-1}} pk=pk1+Δtvk1 v k = v k − 1 {v_k} = \color{red}{v_{k-1}} vk=vk1
这种关系在卡尔曼滤波中,被称为状态转换函数 F ( x ) F(x) F(x),即从 K K K状态计算得到 K + 1 K+1 K+1的状态。

关于协方差的状态转换都是一样的: P ′ = F P F T P' = FPF^T P=FPFT具体可参考博客VIO残差函数的构建以及IMU预积分和协方差传递

那么现在就可以从两种途径获得预测状态,不过无论是从传感器测量值计算预测状态,还是从上一状态通过状态转换函数测量当前预测状态,都存在噪声。

  • (1) 运动噪声过程噪声指的是相同的情况:预测位置时对象位置的不确定性。 该模型假定速度在两个时间间隔之间是恒定的,但实际上我们知道物体的速度会由于加速度而发生变化。 该模型通过过程噪声包括了这种不确定性。两次时间间隔越大不确定性也就越大,随机噪声会随着预测时间之间的间隙增加而增加。

  • (2)测量噪声是指传感器测量中的不确定性。

那么在这两种途径里,如何去有效的融合提取呢?在前面提到,协方差也代表了其测量值与均值(真值)之间的关系,那么协方差越小也代表了其可信度的程度就越高。因此需要权衡这两种途径所得到的预测状态,通过协方差计算融合二者的权重,也就是卡尔曼增益Kg。

首先这两种途径计算得到的预测状态,依然是符合高斯分布的,那么融合两个高斯分布,即两个分布相乘。并且两高斯分布的乘积仍然是高斯态分布,且新的高斯分布的均值和方差可通过如下公式计算:
k g = σ 0 2 σ 0 2 + σ 1 2 kg = {\sigma^2_0 \over \sigma_0^2+\sigma_1^2} kg=σ02+σ12σ02 μ n e w = μ 0 + k ( μ 1 − μ 0 ) \mu_{new} = \mu_0 + k(\mu_1-\mu_0) μnew=μ0+k(μ1μ0) σ n e w = k σ 1 2 = ( 1 − k ) σ 0 2 \sigma_{new} = k\sigma^2_1 = (1-k)\sigma_0^2 σnew=kσ12=(1k)σ02
以上是单变量概率密度函数的计算结果,如果是多变量的,那么,就变成了协方差矩阵的形式:
K G = Σ 0 Σ 0 + Σ 1 KG= {Σ_0 \over Σ_0+Σ_1} KG=Σ0+Σ1Σ0 μ → n e w = μ → 0 + K ( μ → 1 − μ → 0 ) \overrightarrow{\mu}_{new} = \overrightarrow{\mu}_0+K(\overrightarrow{\mu}_1-\overrightarrow{\mu}_0) μ new=μ 0+K(μ 1μ 0) Σ n e w = K Σ 1 = ( I − K ) Σ 0 Σ_{new} = KΣ_{1}=(I-K)Σ_{0} Σnew=KΣ1=(IK)Σ0

所以对于卡尔曼滤波系统中所说的预测和更新,预测就是通过状态转移函数计算当前状态值,而更新就是融合了当前的观测状态,相当于去更新预测值。所以更新本质上就是在计算两个高斯分布融合后的均值和协反差矩阵。这样以来,又可以利用更新后的状态继续预测下一时刻的状态,循环下去,且每一次计算仅和上一状态有关。


理解完卡尔曼滤波后,扩展卡尔曼滤波只是对非线性系统进行泰勒展开线性化后,利用卡尔曼滤波的思想。

由于线性化方式的不同,也出现了无迹卡尔曼滤波(UKF),主要思想是“近似概率分布要比近似非线性函数更容易”,其并不用泰勒展开求解,而是取附近点近似估计,避免了求解雅克比矩阵,效率更高。

在具体的实现上,根据以上公式,定义如下参数:

  • 预测:
    x ′ = F x + μ x'=Fx+\mu x=Fx+μ P ′ = F P F T + Q P' = FPF^T +Q P=FPFT+Q状态量: x x x,状态转移函数: F F F,协方差矩阵: P P P,运动噪声: μ \mu μ,高斯分布不确定性干扰: Q Q Q

  • 更新:
    K = P ′ H T H P H T + R K = {P'H^T \over HPH^T +R} K=HPHT+RPHT x = x ′ + K ( z − H x ′ ) x = x'+K(z-Hx') x=x+K(zHx) P = ( 1 − K H ) P ′ P = (1-KH)P' P=(1KH)P卡尔曼增益: K K K,测量函数: H H H,协方差矩阵预测值: P P P,测量值协方差: R R R,预测值: x x x,测量值: z z z

对于一个非线性函数,需要计算其雅可比矩阵 F j F_j Fj , H j H_j Hj​将其线性化。

代码待更…

  • 13
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
滤波是一种用来估计系统状态的递归滤波算法,适用于线性系统且满足高斯分布的噪声。该滤波器是由R. E. Kalman提出的。 滤波的原理是基于两个假设:系统动态方程能由线性方程描述,测量方程能由线性方程描述。在每个时间步,滤波器通过两个步骤进行估计和更新:预测步骤和校正步骤。预测步骤是根据系统动态方程和上一个时间步的估计状态预测当前状态的均值和方差。校正步骤是根据测量方程和当前观测得到的测量值以及预测的状态,利用贝叶斯定理更新状态的均值和方差,得到最终的估计值。 推导滤波算法的公式如下: 预测步骤: 预测状态: $ x^- = A \cdot x + B \cdot u $ 预测状态协方差矩阵: $ P^- = A \cdot P \cdot A^T + Q $ 校正步骤: 增益: $ K = P^- \cdot H^T \cdot (H \cdot P^- \cdot H^T + R)^{-1} $ 修正后的状态: $ x = x^- + K \cdot (z - H \cdot x^-) $ 修正后的状态协方差矩阵: $ P = (I - K \cdot H) \cdot P^- $ 其中,x是系统状态向量,A是状态转移矩阵,B是输入矩阵,u是输入向量,P是后验状态的误差协方差矩阵,Q是预测误差协方差矩阵,H是测量矩阵,R是测量误差的协方差矩阵,z是观测向量。 通过上述公式的迭代,滤波器可以递归地估计系统的状态,并通过校正步骤利用最新的观测值来更新估计值。这种算法在估计方差较大的实时系统中具有优势,可以去除噪声和不确定性,提高系统的估计精度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃头队长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值