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

news2024/11/24 16:16:59

  大家好,好久不见,我是小政。读研期间,我的研究方向是协作定位,涉及到多机器人分布式融合,主要用到了卡尔曼滤波,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.coloradmin.cn/o/1489093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chat GPT:AI聊天机器人的革命性突破!

一、引言 近年来,人工智能(AI)技术的发展日新月异,其中最具代表性的成果之一便是Chat GPT。这款基于自然语言处理(NLP)技术的聊天机器人,以其高度智能、灵活多变的特点,迅速吸引了全…

Linux 学习笔记(11)

十一、 资源监控 1 、 free 内存监控 语 法&#xff1a; free [-bkmotV][-s < 间隔秒数 >] 补充说明&#xff1a; free 指令会显示内存的使用情况&#xff0c;包括实体内存&#xff0c;虚拟的交换文件内存&#xff0c;共享内存区段&#xff0c;以 及系统核心使用的…

智慧城市建设的新里程碑:公共服务电子支付大屏

随着科技的飞速发展&#xff0c;我们的生活正在经历前所未有的变革。电子支付的出现&#xff0c;无疑是这场变革中的一大亮点&#xff0c;它不仅改变了我们日常的支付方式&#xff0c;更成为智慧城市建设的重要一环&#xff0c;为公众提供了更加便捷、高效的服务体验。 在以前&…

【开源】SpringBoot框架开发民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

java找工作之Mybatis(入门及xml配置相关)

Mybatis 学习Mybatis就要学会查看官网&#xff0c;官网地址如下&#xff1a;<MyBatis中文网 > 1、简介 1.1什么是Mybatis MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取…

数据库之间数据迁移工具datax

简介 DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databe…

LeetCode刷题-206.反转链表【递归实现】

206.反转链表 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 示例1 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例2 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例3 输入&#xff1a;hea…

MySQL字符集和比较规则

MySQL字符集和比较规则 字符集和比较规则简介 字符集&#xff1a; 描述字符与二进制数据的映射关系 比较规则&#xff1a;比较指定字符集中的字符的规则 字符集 我们知道&#xff0c;计算机无法直接存储字符串&#xff0c;实际存储的都是二进制数据。字符集是有限的&#xff…

【CSP试题回顾】201409-1-相邻数对

CSP-201409-1-相邻数对 解题代码 #include <iostream> #include <vector> using namespace std;vector<int>arr; int num;int main() {ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n;cin >> n;for (int i 0; i < n; i){int t;…

C#常识篇(二)

委托和事件的区别 委托可以认为是对指定签名的函数的引用&#xff0c;通过委托可以实现将函数作为参数传递或者间接调用函数&#xff0c;委托是类型安全的&#xff0c;仅指向与其声明时指定签名相匹配的函数。委托可以分为单播委托和多播委托&#xff0c;二者的区别在于是对单个…

WEB APIs (5)

window对象 BOM&#xff08;浏览器对象模型&#xff09; 其为js操作浏览器提供了方法 window对象是一个全局变量&#xff0c;是BOM树根节点 BOM的属性和方法都是window的&#xff0c;如document、console.log()等 var定义在全局全局作用域中的变量、函数都会变成window对象…

参数引入和全局变量引入实现-目标和

LCR 102. 目标和 - 力扣&#xff08;LeetCode&#xff09; 分析题意&#xff0c;画出决策树&#xff0c;其他的思路都跟前面讲过的类似&#xff1a; 全局变量引入实现&#xff1a; 全局变量的引入&#xff0c;需要手动处理回溯&#xff1b; class Solution {int ret; //…

群晖Synology Drive服务搭建结合内网穿透实现云同步Obsidian笔记文件夹

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-ebec69DBjtGk7apF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Linux:进度条的实现

使用工具的简单介绍&#xff1a; 在创建进度条之前&#xff0c;首先要明白两个工具&#xff0c;fflush 和 \r 。 \r 回车键的功能其实是两个&#xff0c;一个是换行&#xff0c;一个是回车。所谓换行就是将光标从这一行变到下一行中&#xff0c;且是垂直下落&#xff0c…

【详识JAVA语言】类和对象

面向对象的初步认知 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的思想来…

leetcode移除元素

注意&#xff0c;在本题中&#xff0c;是对原数组进行操作&#xff0c;需要原地删除指定元素&#xff0c;所以我们可以采用快慢指针来操作。 顾名思义&#xff0c;快慢指针是有两个指针&#xff0c;一直快指针&#xff0c;一个慢指针。在本题中&#xff0c;快慢指针起点都是0&a…

MATLAB:Image Processing Toolbox工具箱入门实战

目录 1.基本图像导入、处理和导出 2.实战项目一&#xff1a;利用imfindcircles()函数检测和测量图像中的圆形目标 1.基本图像导入、处理和导出 Basic Image Import, Processing, and Export- MATLAB & SimulinkThis example shows how to read an image into the worksp…

在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新

文章目录 一、需求背景二、token刷新的方案1、根据过期时间重新获取2、定时刷新token接口3、使用了RefreshToken 三、关于RefreshToken四、Refresh Token的优点五、Refresh Token的工作原理六、Refresh Token的使用流程七、Refresh Token的实现步骤1、登录成功后保存AccessToke…

Studio One 6永久激活版 附完整图文安装破解教程

Studio One 6是一款功能强大的音乐制作和录音软件&#xff0c;专为Mac操作系统设计。它提供了多轨录音和混音、MIDI音乐制作、实时效果和处理、VST插件支持以及高级编辑和编排等丰富的功能。无论是专业音乐制作人还是音乐爱好者&#xff0c;都可以使用Studio One 6来创建和编辑…

爬虫案例一

首先我举一个案例比如豆瓣电影排行榜 (douban.com)这个电影&#xff0c;首先我们进去检查源代码 说明源代码有&#xff0c;说明是服务器渲染&#xff0c;可以直接那html 但是返回的结果是空&#xff0c;所以我们需要在头里面加上User-Agent 然后可以看到有返回的结果&#xff0…