【卡尔曼滤波】图文结合带你详细推导卡尔曼滤波(超详解)

  大家好,好久不见,我是小政。读研期间,我的研究方向是协作定位,涉及到多机器人分布式融合,主要用到了卡尔曼滤波,CI融合等概念。卡尔曼滤波我也是研究了很久,一直在思考的问题就是,卡尔曼滤波到底有什么用?如果用笼统的话来解释,那就是:将预测的值和量测的值结合起来,获得更接近真实情况的数值。

卡尔曼滤波公式超详细完整推导

  • 一、问题提出
  • 二、解决思路
  • 三、问题建模
    • 1.外部因素
    • 2.外部不确定性
    • 3.通过量测来细化估计值
    • 4.结合高斯
    • 5.结合在一起
  • 四、卡尔曼滤波五大公式总结

一、问题提出

  假设有一个机器人正在往前方行驶,为让机器人实现导航,机器人需要知道自身当前所在的位置,即机器人存在一个位置信息和速度信息的状态 x ⃗ k = ( p ⃗ , v ⃗ ) \vec{x}_k=\left( \vec{p},\vec{v} \right) x k=(p ,v )

机器人移动轨迹

图1 机器人移动轨迹

  机器人自身带有GPS传感器,定位精度为10米,但传感器都是存在误差,况且路上可能存在小石子,也会存在阻力,如果机器人稍微偏出几米,那么就可能出现滑到等情况,所以GPS提供的信息存在一定误差。

  同时,我们也可以预测机器人的移动轨迹:给它发送指令,让电机按固定速率往一个方向移动,但机器人对于自身的状态是未知的,它可能会出现轮子打滑等情况,所以车轮转动的次数并不能代表机器人实际移动的距离,所以这个距离的预测也是存在误差的。
  综合以上两点,GPS传感器测量的信息存在误差,预测的机器人移动距离也存在误差,所以我们能否在这两者基础之上,得到一个效果更好的预测,使得它的准确度比机器人搜集单次预测汇总更好?用卡尔曼滤波,就可以将这个问题解决。

二、解决思路

  机器人自身有一个状态,它和位置速度有关:
x ⃗ = [ p v ] \vec{x}=\left[ \begin{array}{c} p\\ v\\ \end{array} \right] x =[pv]

  卡尔曼滤波假设两个变量(位置 p p p速度 v v v)是随机的,且符合高斯分布,每个变量有一个均值 μ \mu μ,它是随机分布的中心;有一个方差 σ 2 \sigma ^2 σ2,它衡量组合的不确定性

  如果位置和速度不是相关的,意味着不能从一个变量推导到另一个变量。如果位置和速度是相关的,机器人前往特定的位置就取决于它自身的速度。

  这不难理解,如果基于旧位置估计新位置,产生两个结论:如果速度很快,机器人可能移动得更远,所以得到的位置会更远;如果速度很慢,机器人就走不了那么远。

  这种关系对目标跟踪来说非常重要,因为它提供了更多信息:一个可以衡量可能性的标准。这就是卡尔曼滤波的目标:从不确定信息中挤出尽可能多的信息!

  为了捕获这种相关性,我们用的是协方差矩阵。简而言之,矩阵的每个值是第 i i i个变量和第 j j j个变量之间的相关程度(由于矩阵是对称的, i i i j j j的位置可以随便交换)。我们用 Σ \Sigma Σ表示协方差矩阵,在这个例子中,就是 Σ i j \Sigma _{ij} Σij

协方差矩阵相关性

图2 协方差矩阵相关性

三、问题建模

  把以上关于状态的信息建模为高斯分布(灰色部分),同时我们还需要获得 k k k时刻的两个信息:最佳估计 x ^ k \hat{x}_k x^k,协方差矩阵 P k P_k Pk
x ^ k = [ p v ] P k = [ Σ p p Σ p v Σ v p Σ v v ] \begin{aligned} \hat{x}_k&=\left[ \begin{array}{c} p\\ v\\ \end{array} \right] \\ P_k&=\left[ \begin{matrix} \Sigma _{pp}& \Sigma _{pv}\\ \Sigma _{vp}& \Sigma _{vv}\\ \end{matrix} \right] \end{aligned} x^kPk=[pv]=[ΣppΣvpΣpvΣvv]
  接着,我们要通过查看当前 k − 1 k-1 k1时刻状态来预测 k k k时刻的状态。从原始预测中取每一点,将其移动到新的预测位置。如果原始预测正确,系统会移动到新位置。用矩阵 F k F_k Fk表示预测步骤:

转换矩阵

图3 转换矩阵

  用矩阵来预测机器人下一刻的位置和速度:
p k = p k − 1 + △ t v k − 1 v k = v k − 1 \begin{aligned} p_k&=p_{k-1}+\bigtriangleup tv_{k-1} \\ v_k&=v_{k-1} \end{aligned} pkvk=pk1+tvk1=vk1

  转换成矩阵形式:
x ^ k = [ 1 △ t 0 1 ] x ^ k − 1 = F k x ^ k − 1 \begin{aligned} \hat{x}_k&=\left[ \begin{matrix} 1& \bigtriangleup t\\ 0& 1\\ \end{matrix} \right] \hat{x}_{k-1} \\ &=F_k\hat{x}_{k-1} \end{aligned} x^k=[10t1]x^k1=Fkx^k1

  这是预测矩阵,给出机器人下一时刻的状态。但目前还未知协方差矩阵的更新,所以要引出下面等式:将分布中的每个点乘以矩阵 A A A,协方差发生如下变化:
C o v ( x ) = Σ C o v ( A x ) = A Σ A T \begin{aligned} Cov\left( x \right) &=\varSigma \\ Cov\left( Ax \right) &=A\varSigma A^T \end{aligned} Cov(x)Cov(Ax)=Σ=AΣAT

  把该式与上述最佳估计 x ^ k \hat{x}_k x^k结合,可得:
x ^ k = F k x ^ k − 1 P k = F k P k − 1 F k T \begin{aligned} \hat{x}_k&=F_k\hat{x}_{k-1} \\ P_k&=F_kP_{k-1}F_{k}^{T} \end{aligned} x^kPk=Fkx^k1=FkPk1FkT

1.外部因素

  除了位置与速度,外部因素也会对系统噪声影响,例如模拟火车运动,除了火车自驾系统,列车员可能也会手动调速。在机器人示例中,导航软件也可以发出停止指令。对于这些信息,我们把它作为一个向量 u ⃗ k \vec{u}_k u k,纳入预测系统作为修正。

  假设电机速率设置和控制命令是已知的,我们知道机器人的预期加速度 a a a。根据运动学基本定理,我们可得:
p k = p k − 1 + △ t v k − 1 + 1 2 a △ t 2 v k = v k − 1 + a △ t \begin{aligned} p_k&=p_{k-1}+\bigtriangleup tv_{k-1}+\frac{1}{2}a\bigtriangleup t^2 \\ v_k&=v_{k-1}+a\bigtriangleup t \end{aligned} pkvk=pk1+tvk1+21at2=vk1+at

  转换为矩阵形式:
x ^ k = F k x ^ k − 1 + [ △ t 2 2 △ t ] a = F k x ^ k − 1 + B k u ⃗ k \begin{aligned} \hat{x}_k&=F_k\hat{x}_{k-1}+\left[ \begin{array}{c} \frac{\bigtriangleup t^2}{2}\\ \bigtriangleup t\\ \end{array} \right] a \\ &=F_k\hat{x}_{k-1}+B_k\vec{u}_k \end{aligned} x^k=Fkx^k1+[2t2t]a=Fkx^k1+Bku k

   B k B_k Bk是控制矩阵, u ⃗ k \vec{u}_k u k是控制向量。如果外部环境异常简单,我们可以忽略这部分内容,但是如果添加外部因素后,模型的准确率还是上不去,这又是为什么呢?

2.外部不确定性

  当我们监控无人机时,它可能会受到风的影响;当我们跟踪轮式机器人时,它的轮胎可能会打滑,或者粗糙地面会降低它的移速。这些因素是难以掌握的,如果出现其中的任意一种情况,预测结果就难以保障。

  这要求我们在每个预测步骤后再加上一些新的不确定性,来模拟和可能存在的所有不确定性:

外部不确定性

图4 外部不确定性

  如上图所示,加上外部不确定性后, x ^ k − 1 \hat{x}_{k-1} x^k1的每个预测状态都可能会移动到另一点,也就是蓝色的高斯分布会移动到橙色高斯分布的位置,并且具有协方差 Q k Q_k Qk。换句话说,我们把这些不确定影响视为协方差 Q k Q_k Qk的噪声。橙色的高斯分布拥有和原分布相同的均值,但协方差不同。在原式上加入 Q k Q_k Qk
x ^ k = F k x ^ k − 1 + B k u ⃗ k P k = F k P k − 1 F k T + Q k \begin{aligned} \hat{x}_k&=F_k\hat{x}_{k-1}+B_k\vec{u}_k \\ P_k&=F_kP_{k-1}F_{k}^{T}+Q_k \end{aligned} x^kPk=Fkx^k1+Bku k=FkPk1FkT+Qk

  这里,新的最佳估计是基于上一时刻最佳估计已知外部因素校正后得到的预测。新的不确定性是基于上一时刻不确定性外部环境不确定性得到的预测。现在,有了这些概念,可以把传感器数据输入其中。

3.通过量测来细化估计值

  如果存在多个传感器,它们一起提供有关系统状态的信息。传感器可以读取位置,可以读取速度,它能告诉我们关于状态的间接信息——它是状态下产生的一组读数。
量测信息

图5 量测信息

  请注意,传感器读数的规模和状态的规模不一定相同,所以我们把传感器读数矩阵设为 H k H_k Hk

转换矩阵

图6 转换矩阵

  把这些分布转换为一般形式:
μ ⃗ s e n s o r = H k x ^ k Σ s e n s o r = H k P k H k T \begin{aligned} \vec{\mu}_{sensor}&=H_k\hat{x}_k \\ \varSigma _{sensor}&=H_kP_kH_{k}^{T} \end{aligned} μ sensorΣsensor=Hkx^k=HkPkHkT

  卡尔曼滤波的一大优点是擅长处理传感器噪声。换句话说,由于种种因素,传感器采集的数据是不准确的,一个状态事实上可以产生多种读数。
传感器存在噪声

图7 传感器存在噪声

  我们将这种不确定性(即传感器噪声)的协方差设为 R k R_k Rk,读数的分布均值设为 z k z_k zk。现在我们得到两块高斯分布,一块围绕预测的均值,另一块围绕传感器读数。

  如果要生成靠谱预测,模型必须调和这两个信息。也就是说,对于任何可能的读数 ( z 1 , z 2 ) \left( z_1,z_2 \right) (z1,z2),这两种方法预测的状态都有可能是准的,也都有可能是不准的。重点是我们怎么找到这两个准确率。

  最简单的方法是两者相乘,两块高斯分布相乘后,我们可以得到它们的重叠部分,这也是会出现最佳估计的区域。换个角度看,它看起来也符合高斯分布:
两个高斯分布相乘

图8 两个高斯分布相乘

  事实证明,当两个高斯分布和它们各自的均值和协方差矩阵相乘时,会得到一个拥有独立均值和协方差矩阵的新高斯分布。最后剩下的问题就不难解决了:必须有一个公式来从旧的参数中获取这些新参数!

4.结合高斯

  让我们从一维看起,设均值为 μ \mu μ,方差为 σ 2 \sigma ^2 σ2,一个标准一维高斯钟形曲线方程如下所示:
N ( x , μ , σ ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 \mathcal{N} \left( x,\mu ,\sigma \right) =\frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{\left( x-\mu \right) ^2}{2\sigma ^2}} N(x,μ,σ)=σ2π 1e2σ2(xμ)2

  若两个高斯相乘,结果是否还是高斯分布呢?
融合后的高斯分布

图9 融合后的高斯分布

  如图所示红色和绿色分别代表两个独立的高斯分布函数,蓝色为两个分布的乘积,从蓝色形状可以粗略看出乘积结果可能为一个幅值被压缩的高斯分布,期望在 [ μ 1 , μ 2 ] \left[ \mu _1,\mu _2 \right] [μ1,μ2]之间。那真的是这样的吗?需要理论的推导来进行证明。
N ( x , μ ′ , σ ′ ) = N ( x , μ 1 , σ 1 ) ⋅ N ( x , μ 2 , σ 2 ) = 1 σ 1 2 π e − ( x − μ 1 ) 2 2 σ 1 2 1 σ 2 2 π e − ( x − μ 2 ) 2 2 σ 2 2 = 1 2 π σ 1 σ 2 e − [ ( x − μ 1 ) 2 2 σ 1 2 + ( x − μ 2 ) 2 2 σ 2 2 ] \begin{aligned} \mathcal{N} \left( x,\mu \prime,\sigma \prime \right) &=\mathcal{N} \left( x,\mu _1,\sigma _1 \right) \cdot \mathcal{N} \left( x,\mu _2,\sigma _2 \right) \\ &=\frac{1}{\sigma _1\sqrt{2\pi}}e^{-\frac{\left( x-\mu _1 \right) ^2}{2\sigma _{1}^{2}}}\frac{1}{\sigma _2\sqrt{2\pi}}e^{-\frac{\left( x-\mu _2 \right) ^2}{2\sigma _{2}^{2}}} \\ &=\frac{1}{2\pi \sigma _1\sigma _2}e^{-\left[ \frac{\left( x-\mu _1 \right) ^2}{2\sigma _{1}^{2}}+\frac{\left( x-\mu _2 \right) ^2}{2\sigma _{2}^{2}} \right]} \end{aligned} N(x,μ,σ)=N(x,μ1,σ1)N(x,μ2,σ2)=σ12π 1e2σ12(xμ1)2σ22π 1e2σ22(xμ2)2=2πσ1σ21e[2σ12(xμ1)2+2σ22(xμ2)2]

  把指数部分单独提出:
β = ( x − μ 1 ) 2 2 σ 1 2 + ( x − μ 2 ) 2 2 σ 2 2 = ( σ 1 2 + σ 2 2 ) x 2 − 2 ( μ 2 σ 1 2 + μ 1 σ 2 2 ) x + ( μ 2 2 σ 1 2 + μ 1 2 σ 2 2 ) 2 σ 1 2 σ 2 2 = x 2 − 2 μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 x + μ 2 2 σ 1 2 + μ 1 2 σ 2 2 σ 1 2 + σ 2 2 2 σ 1 2 σ 2 2 σ 1 2 + σ 2 2 = ( x − μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 ) 2 + μ 2 2 σ 1 2 + μ 1 2 σ 2 2 σ 1 2 + σ 2 2 − ( μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 ) 2 2 σ 1 2 σ 2 2 σ 1 2 + σ 2 2 = ( x − μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 ) 2 2 σ 1 2 σ 2 2 σ 1 2 + σ 2 2 ⏟ γ + μ 2 2 σ 1 2 + μ 1 2 σ 2 2 σ 1 2 + σ 2 2 − ( μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 ) 2 2 σ 1 2 σ 2 2 σ 1 2 + σ 2 2 ⏟ λ \begin{aligned} \beta &=\frac{\left( x-\mu _1 \right) ^2}{2\sigma _{1}^{2}}+\frac{\left( x-\mu _2 \right) ^2}{2\sigma _{2}^{2}} \\ &=\frac{\left( \sigma _{1}^{2}+\sigma _{2}^{2} \right) x^2-2\left( \mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2} \right) x+\left( \mu _{2}^{2}\sigma _{1}^{2}+\mu _{1}^{2}\sigma _{2}^{2} \right)}{2\sigma _{1}^{2}\sigma _{2}^{2}} \\ &=\frac{x^2-2\frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}x+\frac{\mu _{2}^{2}\sigma _{1}^{2}+\mu _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}}{\frac{2\sigma _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}} \\ &=\frac{\left( x-\frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \right) ^2+\frac{\mu _{2}^{2}\sigma _{1}^{2}+\mu _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}-\left( \frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \right) ^2}{\frac{2\sigma _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}} \\ &=\underset{\gamma}{\underbrace{\frac{\left( x-\frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \right) ^2}{\frac{2\sigma _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}}}}+\underset{\lambda}{\underbrace{\frac{\frac{\mu _{2}^{2}\sigma _{1}^{2}+\mu _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}-\left( \frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \right) ^2}{\frac{2\sigma _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}}}} \end{aligned} β=2σ12(xμ1)2+2σ22(xμ2)2=2σ12σ22(σ12+σ22)x22(μ2σ12+μ1σ22)x+(μ22σ12+μ12σ22)=σ12+σ222σ12σ22x22σ12+σ22μ2σ12+μ1σ22x+σ12+σ22μ22σ12+μ12σ22=σ12+σ222σ12σ22(xσ12+σ22μ2σ12+μ1σ22)2+σ12+σ22μ22σ12+μ12σ22(σ12+σ22μ2σ12+μ1σ22)2=γ σ12+σ222σ12σ22(xσ12+σ22μ2σ12+μ1σ22)2+λ σ12+σ222σ12σ22σ12+σ22μ22σ12+μ12σ22(σ12+σ22μ2σ12+μ1σ22)2

  其中, γ \gamma γ为一个 ( μ ′ , σ ′ ) \left( \mu \prime,\sigma \prime \right) (μ,σ)的正态分布, λ \lambda λ是一个常数值。继续简化 λ \lambda λ有:
λ = μ 2 2 σ 1 2 + μ 1 2 σ 2 2 σ 1 2 + σ 2 2 − ( μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 ) 2 2 σ 1 2 σ 2 2 σ 1 2 + σ 2 2 = ( μ 2 2 σ 1 2 + μ 1 2 σ 2 2 ) ( σ 1 2 + σ 2 2 ) − ( μ 2 σ 1 2 + μ 1 σ 2 2 ) 2 2 σ 1 2 σ 2 2 ( σ 1 2 + σ 2 2 ) = ( μ 2 2 σ 1 4 + μ 2 2 σ 1 2 σ 2 2 + μ 1 2 σ 1 2 σ 2 2 + μ 1 2 σ 2 4 ) − ( μ 2 2 σ 1 4 + 2 μ 1 μ 2 σ 1 2 σ 2 2 + μ 1 2 σ 2 4 ) 2 σ 1 2 σ 2 2 ( σ 1 2 + σ 2 2 ) = σ 1 2 σ 2 2 ( μ 1 2 + μ 2 2 − 2 μ 1 μ 2 ) 2 σ 1 2 σ 2 2 ( σ 1 2 + σ 2 2 ) = ( μ 1 − μ 2 ) 2 2 ( σ 1 2 + σ 2 2 ) \begin{aligned} \lambda &=\frac{\frac{\mu _{2}^{2}\sigma _{1}^{2}+\mu _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}-\left( \frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \right) ^2}{\frac{2\sigma _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}} \\ &=\frac{\left( \mu _{2}^{2}\sigma _{1}^{2}+\mu _{1}^{2}\sigma _{2}^{2} \right) \left( \sigma _{1}^{2}+\sigma _{2}^{2} \right) -\left( \mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2} \right) ^2}{2\sigma _{1}^{2}\sigma _{2}^{2}\left( \sigma _{1}^{2}+\sigma _{2}^{2} \right)} \\ &=\frac{\left( \mu _{2}^{2}\sigma _{1}^{4}+\mu _{2}^{2}\sigma _{1}^{2}\sigma _{2}^{2}+\mu _{1}^{2}\sigma _{1}^{2}\sigma _{2}^{2}+\mu _{1}^{2}\sigma _{2}^{4} \right) -\left( \mu _{2}^{2}\sigma _{1}^{4}+2\mu _1\mu _2\sigma _{1}^{2}\sigma _{2}^{2}+\mu _{1}^{2}\sigma _{2}^{4} \right)}{2\sigma _{1}^{2}\sigma _{2}^{2}\left( \sigma _{1}^{2}+\sigma _{2}^{2} \right)} \\ &=\frac{\sigma _{1}^{2}\sigma _{2}^{2}\left( \mu _{1}^{2}+\mu _{2}^{2}-2\mu _1\mu _2 \right)}{2\sigma _{1}^{2}\sigma _{2}^{2}\left( \sigma _{1}^{2}+\sigma _{2}^{2} \right)} \\ &=\frac{\left( \mu _1-\mu _2 \right) ^2}{2\left( \sigma _{1}^{2}+\sigma _{2}^{2} \right)} \end{aligned} λ=σ12+σ222σ12σ22σ12+σ22μ22σ12+μ12σ22(σ12+σ22μ2σ12+μ1σ22)2=2σ12σ22(σ12+σ22)(μ22σ12+μ12σ22)(σ12+σ22)(μ2σ12+μ1σ22)2=2σ12σ22(σ12+σ22)(μ22σ14+μ22σ12σ22+μ12σ12σ22+μ12σ24)(μ22σ14+2μ1μ2σ12σ22+μ12σ24)=2σ12σ22(σ12+σ22)σ12σ22(μ12+μ222μ1μ2)=2(σ12+σ22)(μ1μ2)2

  两个高斯分布相乘为:
N ( x , μ ′ , σ ′ ) = N ( x , μ 1 , σ 1 ) ⋅ N ( x , μ 2 , σ 2 ) = 1 2 π σ 1 σ 2 e − ( γ + λ ) = 1 2 π σ 1 σ 2 e − γ ⋅ e − λ = 1 2 π σ 1 σ 2 e − ( x − μ ′ ) 2 2 σ ′ 2 ⋅ e − ( μ 1 − μ 2 ) 2 2 ( σ 1 2 + σ 2 2 ) \begin{aligned} \mathcal{N} \left( x,\mu \prime,\sigma \prime \right) &=\mathcal{N} \left( x,\mu _1,\sigma _1 \right) \cdot \mathcal{N} \left( x,\mu _2,\sigma _2 \right) \\ &=\frac{1}{2\pi \sigma _1\sigma _2}e^{-\left( \gamma +\lambda \right)} \\ &=\frac{1}{2\pi \sigma _1\sigma _2}e^{-\gamma}\cdot e^{-\lambda} \\ &=\frac{1}{2\pi \sigma _1\sigma _2}e^{-\frac{\left( x-\mu \prime \right) ^2}{2\sigma \prime^2}}\cdot e^{-\frac{\left( \mu _1-\mu _2 \right) ^2}{2\left( \sigma _{1}^{2}+\sigma _{2}^{2} \right)}} \end{aligned} N(x,μ,σ)=N(x,μ1,σ1)N(x,μ2,σ2)=2πσ1σ21e(γ+λ)=2πσ1σ21eγeλ=2πσ1σ21e2σ2(xμ)2e2(σ12+σ22)(μ1μ2)2

  其中,
μ ′ = μ 2 σ 1 2 + μ 1 σ 2 2 σ 1 2 + σ 2 2 = μ 1 + σ 1 2 ( μ 2 − μ 1 ) σ 1 2 + σ 2 2 σ ′ 2 = σ 1 2 σ 2 2 σ 1 2 + σ 2 2 = σ 1 2 − σ 1 4 σ 1 2 + σ 2 2 \begin{aligned} \mu \prime&=\frac{\mu _2\sigma _{1}^{2}+\mu _1\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}=\mu _1+\frac{\sigma _{1}^{2}\left( \mu _2-\mu _1 \right)}{\sigma _{1}^{2}+\sigma _{2}^{2}} \\ \sigma \prime^2&=\frac{\sigma _{1}^{2}\sigma _{2}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}}=\sigma _{1}^{2}-\frac{\sigma _{1}^{4}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \end{aligned} μσ2=σ12+σ22μ2σ12+μ1σ22=μ1+σ12+σ22σ12(μ2μ1)=σ12+σ22σ12σ22=σ12σ12+σ22σ14

   k k k简化一下:
k = σ 1 2 σ 1 2 + σ 2 2 μ ′ = μ 1 + k ( μ 2 − μ 1 ) σ ′ 2 = σ 1 2 − k σ 1 2 \begin{aligned} k&=\frac{\sigma _{1}^{2}}{\sigma _{1}^{2}+\sigma _{2}^{2}} \\ \mu \prime&=\mu _1+k\left( \mu _2-\mu _1 \right) \\ \sigma \prime^2&=\sigma _{1}^{2}-k\sigma _{1}^{2} \end{aligned} kμσ2=σ12+σ22σ12=μ1+k(μ2μ1)=σ12kσ12

  以上是一维,如果是多维空间,把这个式子转成矩阵格式:
K = Σ 1 Σ 1 + Σ 2 μ ⃗ ′ = μ ⃗ 1 + K ( μ ⃗ 2 − μ ⃗ 1 ) Σ ′ = Σ 1 − K Σ 1 \begin{aligned} K&=\frac{\Sigma _1}{\Sigma _1+\Sigma _2} \\ \vec{\mu}\prime&=\vec{\mu}_1+K\left( \vec{\mu}_2-\vec{\mu}_1 \right) \\ \Sigma \prime&=\Sigma _1-K\Sigma _1 \end{aligned} Kμ Σ′=Σ1+Σ2Σ1=μ 1+K(μ 2μ 1)=Σ1KΣ1

  矩阵K就是我们说的卡尔曼增益。

5.结合在一起

  截止目前,我们有矩阵 ( μ 1 , Σ 1 ) = ( H k x ^ k , H k P k H k T ) \left( \mu _1,\Sigma _1 \right) =\left( H_k\hat{x}_k,H_kP_kH_{k}^{T} \right) (μ1,Σ1)=(Hkx^k,HkPkHkT)预测的分布,有用传感器读数预测的分布 ( μ 2 , Σ 2 ) = ( z ⃗ k , R k ) \left( \mu _2,\Sigma _2 \right) =\left( \vec{z}_k,R_k \right) (μ2,Σ2)=(z k,Rk),把它们代入上节的矩阵等式中:
K = H k P k H k T H k P k H k T + R k H k x ^ k ′ = H k x ^ k + K ( z ⃗ k − H k x ^ k ) H k P k ′ H k T = H k P k H k T − K H k P k H k T \begin{aligned} K&=\frac{H_kP_kH_{k}^{T}}{H_kP_kH_{k}^{T}+R_k} \\ H_k\hat{x}_{k}^{\prime}&=H_k\hat{x}_k+K\left( \vec{z}_k-H_k\hat{x}_k \right) \\ H_kP_{k}^{\prime}H_{k}^{T}&=H_kP_kH_{k}^{T}-KH_kP_kH_{k}^{T} \end{aligned} KHkx^kHkPkHkT=HkPkHkT+RkHkPkHkT=Hkx^k+K(z kHkx^k)=HkPkHkTKHkPkHkT

  简化上式有:
K ′ = H k T P k H k P k H k T + R k x ^ k ′ = x ^ k + K ′ ( z ⃗ k − H k x ^ k ) P k ′ = ( I − K ′ H k ) P k \begin{aligned} K\prime&=\frac{H_{k}^{T}P_k}{H_kP_kH_{k}^{T}+R_k} \\ \hat{x}_{k}^{\prime}&=\hat{x}_k+K\prime\left( \vec{z}_k-H_k\hat{x}_k \right) \\ P_{k}^{\prime}&=\left( I-K\prime H_k \right) P_k \end{aligned} Kx^kPk=HkPkHkT+RkHkTPk=x^k+K(z kHkx^k)=(IKHk)Pk

  最后, x ^ k ′ \hat{x}_{k}^{\prime} x^k是我们的最佳估计值,我们可以把它继续放进去做下一轮进行预测。

四、卡尔曼滤波五大公式总结

  总结一下卡尔曼滤波的预测与更新的五个公式:

预测:
x ^ k = F k x ^ k − 1 + B k u ⃗ k P k = F k P k − 1 F k T + Q k \begin{aligned} \hat{x}_{\mathrm{k}}&=F_{\mathrm{k}}\hat{x}_{\mathrm{k}-1}+B_{\mathrm{k}}\vec{u}_{\mathrm{k}} \\ P_k&=F_kP_{k-1}F_{k}^{T}+Q_k \end{aligned} x^kPk=Fkx^k1+Bku k=FkPk1FkT+Qk

更新:
K ′ = H k T P k H k P k H k T + R k x ^ k ′ = x ^ k + K ′ ( z ⃗ k − H k x ^ k ) P k ′ = ( I − K ′ H k ) P k \begin{aligned} K\prime&=\frac{H_{k}^{T}P_k}{H_kP_kH_{k}^{T}+R_k} \\ \hat{x}_{k}^{\prime}&=\hat{x}_k+K\prime\left( \vec{z}_k-H_k\hat{x}_k \right) \\ P_{k}^{\prime}&=\left( I-K\prime H_k \right) P_k \end{aligned} Kx^kPk=HkPkHkT+RkHkTPk=x^k+K(z kHkx^k)=(IKHk)Pk

  以上就是卡尔曼滤波完整推导,若文章中出现错误或者小伙伴对以上内容有所疑问,欢迎大家在评论区留言讨论,小政看到后会尽快回复大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/428770.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis核心数据结构之SDS(一)

数据结构与对象 简单动态字符串 概述 Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,简称C字符串),而是自己构建了一种名为简单动态字符串(Simple Dynamic String, SDS)的后向类型,并将SDS用作Redis的默认字符串表示。在…

代码复现错误

1. 问题: torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 64.00 MiB (GPU 0; 39.59 GiB total capacity; 37.72 GiB already allocated; 38.19 MiB free; 37.83 GiB reserved in total by PyTorch) If reserved memory is >> allocat…

《TCP/IP详解 卷一》第11章 DNS

目录 11.1 引言 11.2 DNS名称空间 11.2.1 DNS命名语法 11.3 名称服务器和区域 11.4 DNS缓存 11.5 DNS 协议 11.5.1 DNS消息格式 11.5.2 DNS 扩展格式(EDNS0) 11.5.3 UDP 或 TCP 11.5.4 问题(查询)和区域区段格式 11.5.…

什么是SpringCloud,有哪些组件?

spring Cloud 是基于spring boot的分布式系统开发工具,它提供了一系列开箱即用的,针对分布式系统开发的特性和组件。用于帮助开发人员快速构建和管理云原生应用程序。 Spring Cloud 的主要目标是解决分布式系统中的常见问题,例如服务发现,负载均衡,配置管理,断路器,消息总…

搜索回溯算法(DFS)1------递归

目录 简介: 递归问题解题的思路模板 例题1:汉诺塔 例题2:合并两个有序链表 例题3:反转链表 例题4:两两交换链表中的节点 例题5:Pow(x,n)-快速幂 结语: 简介&…

C++_哈希表

目录 1、哈希表的用法 2、哈希函数-除留余数法 3、哈希冲突 4、闭散列和开散列 4.1 闭散列 4.1.1 哈希表的扩容 4.1.2 二次探测 4.2 开散列(哈希桶) 4.2.1 开散列的扩容 结语 前言-哈希表概念: 哈希表也是一种存储信息的结构&am…

数据结构(一)——概述

一、绪论 1.1数据结构的基本概念 数据:用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。 数据元素:数据的基本单位,一个数据元素可由若干数据项组成。 数据结构:指相互之间存在一种或多种特…

“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA

本文首发:AIWalker https://arxiv.org/abs/2403.00522 https://github.com/Meituan-AutoML/VisionLLaMA 本文概述 大型语言模型构建在基于Transformer的架构之上来处理文本输入, LLaMA 系列模型在众多开源实现中脱颖而出。类似LLaMa的Transformer可以用来处理2D图像吗&#xf…

FreeRTOS学习笔记-基于stm32f103(1)基础知识

一、裸机与RTOS 我们使用的32板子是裸机,又称前后台系统。裸机有如下缺点: 1、实时性差。只能一步一步执行任务,比如在一个while循环中,要想执行上一个任务,就必须把下面的任务执行完,循环一遍后才能执行…

【Java设计模式】三、简单工厂、工厂方法模式、抽象工厂模式

文章目录 0、案例:咖啡屋1、简单工厂模式 静态工厂(不属于23种之列)2、工厂方法模式3、抽象工厂模式4、简单工厂模式 配置文件解除耦合5、JDK源码中对工厂模式的应用 0、案例:咖啡屋 模拟咖啡店点餐。咖啡有多种,抽…

day6 数组 嵌套循环

1&#xff1a;打印杨辉三角 91 int arr[6][6];92 int i,j0;93 for(i0;i<6;i)94 {95 for(j0;j<i;j) 96 {97 if(j0||ij)98 {99 arr[i][j]1; …

14 数值稳定性 + 模型初始化和激活函数【李沐动手学深度学习v2笔记】

1. 数值稳定性 神经网络的梯度 向量对向量求导&#xff08;梯度&#xff09;得到矩阵&#xff0c;太多的矩阵进行乘法会导致常见的两个问题 梯度消失和梯度爆炸 MLP MLP使用ReLU作为激活函数 梯度爆炸的问题 输入很大的时候梯度接近为0 梯度消失 梯度消失的问题 只能训练比…

一个强大的 VS Code 的AI代码插件:Fitten Code

AI 代码助手有 GitHub Copilot&#xff0c;一直想用&#xff0c;但是要爬梯子&#xff0c;还要收费。 一款国产AI写代码神器 Fitten Code&#xff0c;满足了我对AI写代码的幻想。它在功能上基本和 GitHub Copilot 差不多。 重要是的是&#xff0c;免费&#xff0c;免费&#…

【Web - 框架 - Vue】随笔 - Vue的简单使用 - 快速上手

【Web - 框架 - Vue】随笔 - Vue的简单使用 - 快速上手 Vue模板代码 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板</title> </head> <body> <div></div>…

安装Docker及DockerCompose

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

09 Qt扩展LineEdit组件:Input输入框

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起&#xff1a;自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起&#xff1a;自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件&#xff1a;令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

数仓项目6.0(一)

尚硅谷大数据项目【电商数仓6.0】企业数据仓库项目_bilibili 数据流转过程 用户➡️业务服务器➡️数据库存储➡️数仓统计分析➡️数据可视化 数据仓库处理流程&#xff1a;数据源➡️加工数据➡️统计筛选数据➡️分析数据 数据库不是为了数据仓库服务的&#xff0c;需要…

【开源】SpringBoot框架开发数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

MATLAB环境下基于离散小波变换的心电信号伪影去除及PQRST波检测

可穿戴个人健康监护系统被广泛认为是下一代健康监护技术的核心解决方案。监护设备不断地感知、获取、分析和存储大量人体在日常活动中的生理数据&#xff0c;为人体的健康状况提供必要的、准确的、集成的和长期的评估和反馈。在心电监测领域&#xff0c;可穿戴传感器具有以下应…

C及C++每日练习(1)

一.选择&#xff1a; 1.以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A.是无限循环 B.循环次数不定 C.4次 D.3次 对于循环&#xff0c;其组成部分可以四个部分&#xff1a; for(初始化;循环进行条件;调整) …
最新文章