多传感器融合定位十-基于滤波的融合方法Ⅰ其二

news2024/10/1 1:16:26

多传感器融合定位十-基于滤波的融合方法Ⅰ其二

  • 3. 滤波器基本原理
    • 3.1 状态估计模型
    • 3.2 贝叶斯滤波
    • 3.3 卡尔曼滤波(KF)推导
    • 3.4 扩展卡尔曼滤波(EKF)推导
    • 3.5 迭代扩展卡尔曼滤波(IEKF)推导
  • 4. 基于滤波器的融合
    • 4.1 状态方程
    • 4.2 观测方程
    • 4.3 构建滤波器
    • 4.4 Kalman 滤波实际使用流程
      • 4.4.1 位姿初始化
      • 4.4.2 Kalman 初始化
      • 4.4.3 惯性解算
      • 4.4.4 Kalman 预测更新
      • 4.4.5 无观测时后验更新
      • 4.4.6 有观测时的量测更新
      • 4.4.7 有观测时计算后验位姿
      • 4.4.8 有观测时状态量清零
      • 4.4.9 输出位姿

Reference:

  1. 深蓝学院-多传感器融合
  2. 多传感器融合定位理论基础

文章跳转:

  1. 多传感器融合定位一-3D激光里程计其一:ICP
  2. 多传感器融合定位二-3D激光里程计其二:NDT
  3. 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
  4. 多传感器融合定位四-3D激光里程计其四:点云线面特征提取
  5. 多传感器融合定位五-点云地图构建及定位
  6. 多传感器融合定位六-惯性导航原理及误差分析
  7. 多传感器融合定位七-惯性导航解算及误差分析其一
  8. 多传感器融合定位八-惯性导航解算及误差分析其二
  9. 多传感器融合定位九-基于滤波的融合方法Ⅰ其一
  10. 多传感器融合定位十-基于滤波的融合方法Ⅰ其二
  11. 多传感器融合定位十一-基于滤波的融合方法Ⅱ
  12. 多传感器融合定位十二-基于图优化的建图方法其一
  13. 多传感器融合定位十三-基于图优化的建图方法其二
  14. 多传感器融合定位十四-基于图优化的定位方法
  15. 多传感器融合定位十五-多传感器时空标定(综述)

3. 滤波器基本原理

3.1 状态估计模型

实际状态估计任务中,待估计的后验概率密度可以表示为:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right) p(xkxˇ0,v1:k,y0:k)其中:
x ˇ 0 \check{\boldsymbol{x}}_0 xˇ0 表示的是状态初始值
v 1 : k \boldsymbol{v}_{1: k} v1:k 表示从 1 1 1 k k k 时刻的输入
y 0 : k \boldsymbol{y}_{0: k} y0:k 表示从 0 0 0 k k k 时刻的观测
因此,滤波问题可以直观表示为,根据所有历史数据(输入、观测、初始状态)得出最终的融合结果

历史数据之间的关系,可以用下面的图模型表示,
在这里插入图片描述图模型中体现了马尔可夫性,即当前状态只跟前一时刻状态相关,和其他历史时刻状态无关
该性质的数学表达:
运动方程 x k = f ( x k − 1 , v k , w k ) \boldsymbol{x}_k=\boldsymbol{f}\left(\boldsymbol{x}_{k-1}, \boldsymbol{v}_k, \boldsymbol{w}_k\right) xk=f(xk1,vk,wk)
观测方程 y k = g ( x k , n k ) \boldsymbol{y}_k=\boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right) yk=g(xk,nk)

3.2 贝叶斯滤波

公式的推导可参考:非线性优化
根据贝叶斯公式, k k k 时刻后验概率密度可以表示为:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = p ( y k ∣ x k , x ˇ 0 , v 1 : k , y 0 : k − 1 ) p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p ( y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = η p ( y k ∣ x k , x ˇ 0 , v 1 : k , y 0 : k − 1 ) p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) \begin{aligned} p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right) & =\frac{p\left(\boldsymbol{y}_k \mid \boldsymbol{x}_k, \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right)}{p\left(\boldsymbol{y}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right)} \\ & =\eta p\left(\boldsymbol{y}_k \mid \boldsymbol{x}_k, \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) \end{aligned} p(xkxˇ0,v1:k,y0:k)=p(ykxˇ0,v1:k,y0:k1)p(ykxk,xˇ0,v1:k,y0:k1)p(xkxˇ0,v1:k,y0:k1)=ηp(ykxk,xˇ0,v1:k,y0:k1)p(xkxˇ0,v1:k,y0:k1)(这里 y k \boldsymbol{y_k} yk 是当前时刻的观测,而 p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right) p(xkxˇ0,v1:k,y0:k) 是当前时刻后验, p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) p(xkxˇ0,v1:k,y0:k1)为先验。我们需要的是后验概率最大化,因为贝叶斯分母部分与待估计的状态无关,因而可以忽略)

根据观测方程, y k \boldsymbol{y}_k yk 只和 x k \boldsymbol{x}_k xk 相关,因此上式可以简写为:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right)=\eta p\left(\boldsymbol{y}_k \mid \boldsymbol{x}_k\right) p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) p(xkxˇ0,v1:k,y0:k)=ηp(ykxk)p(xkxˇ0,v1:k,y0:k1)利用条件分布的性质,可得:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = ∫ p ( x k ∣ x k − 1 , x ˇ 0 , v 1 : k , y 0 : k − 1 ) p ( x k − 1 ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) d x k − 1 \begin{aligned} & p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) \\ & =\int p\left(\boldsymbol{x}_k \mid \boldsymbol{x}_{k-1}, \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) p\left(\boldsymbol{x}_{k-1} \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) \mathrm{d} \boldsymbol{x}_{k-1} \end{aligned} p(xkxˇ0,v1:k,y0:k1)=p(xkxk1,xˇ0,v1:k,y0:k1)p(xk1xˇ0,v1:k,y0:k1)dxk1再利用马尔可夫性,可得:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = ∫ p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) d x k − 1 \begin{aligned} & p\left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) \\ & =\int p\left(\boldsymbol{x}_k \mid \boldsymbol{x}_{k-1}, \boldsymbol{v}_k\right) p\left(\boldsymbol{x}_{k-1} \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right) \mathrm{d} \boldsymbol{x}_{k-1} \end{aligned} p(xkxˇ0,v1:k,y0:k1)=p(xkxk1,vk)p(xk1xˇ0,v1:k,y0:k1)dxk1经过以上化简,最终后验概率可以写为:
在这里插入图片描述
根据以上结果,可以画出贝叶斯滤波的信息流图如下:
在这里插入图片描述
贝叶斯滤波是一个非常广泛的概念,它不特指某一种滤波:
在这里插入图片描述

  1. 在高斯假设前提下,用贝叶斯滤波的原始形式推导比较复杂,可以利用高斯的特征得到简化形式,即广义高斯滤波。后面 KF、EKF、IEKF 的推导均采用这种形式。
  2. 实际中,UKF 和 PF 多应用于扫地机器人等2D小场景,与本课程目标场景不符,因此不做讲解。(UKF 和 PF 本身有一个维度的问题,维度高了不太行,而我们这里使用的维度多半是15维的,在三维场景就不好用了)

3.3 卡尔曼滤波(KF)推导

在线性高斯假设下,上式可以重新写为下面的形式(为了和后面符号对应)
运动方程: x k = F ( x k − 1 , v k ) + B k − 1 w k \boldsymbol{x}_k=\boldsymbol{F}\left(\boldsymbol{x}_{k-1}, \boldsymbol{v}_k\right)+\boldsymbol{B}_{k-1} \boldsymbol{w}_k xk=F(xk1,vk)+Bk1wk
观测方程: y k = G ( x k ) + C k n k \boldsymbol{y}_k=\boldsymbol{G}\left(\boldsymbol{x}_k\right)+\boldsymbol{C}_k \boldsymbol{n}_k yk=G(xk)+Cknk
( F \boldsymbol{F} F G \boldsymbol{G} G 在这里代表的是线性的意思,非线性是后面要推导的。这里的 G \boldsymbol{G} G 和之前卡尔曼文章里写的 H \boldsymbol{H} H 是一个东西。 n \boldsymbol{n} n 为观测噪声,是个零均值白噪声)
把上一时刻的后验状态写为:
p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 0 : k − 1 ) = N ( x ^ k − 1 , P ^ k − 1 ) p\left(\boldsymbol{x}_{k-1} \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k-1}, \boldsymbol{y}_{0: k-1}\right)=\mathcal{N}\left(\hat{\boldsymbol{x}}_{k-1}, \hat{\boldsymbol{P}}_{k-1}\right) p(xk1xˇ0,v1:k1,y0:k1)=N(x^k1,P^k1)则当前时刻的预测值为:
x ˇ k = F ( x ^ k − 1 , v k ) \check{\boldsymbol{x}}_k=\boldsymbol{F}\left(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{v}_k\right) xˇk=F(x^k1,vk)根据高斯分布的线性变化,它的方差为(可仿照第2.8节中的推导过程自行推导):
P ˇ k = F k − 1 P ^ k − 1 F k − 1 T + B k − 1 Q k B k − 1 T \check{\boldsymbol{P}}_k=\boldsymbol{F}_{k-1} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}_{k-1}^{\mathrm{T}}+\boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^{\mathrm{T}} Pˇk=Fk1P^k1Fk1T+Bk1QkBk1T其中 Q k Q_k Qk当前输入噪声的方差

若把 k k k 时刻状态和观测的联合高斯分布写为:
p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( [ μ x , k μ y , k ] , [ Σ x x , k Σ x y , k Σ y x , k Σ y y , k ] ) p\left(\boldsymbol{x}_k, \boldsymbol{y}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k-1}\right)=\mathcal{N}\left(\left[\begin{array}{c} \boldsymbol{\mu}_{x, k} \\ \boldsymbol{\mu}_{y, k} \end{array}\right],\left[\begin{array}{cc} \boldsymbol{\Sigma}_{x x, k} & \boldsymbol{\Sigma}_{x y, k} \\ \boldsymbol{\Sigma}_{y x, k} & \boldsymbol{\Sigma}_{y y, k} \end{array}\right]\right) p(xk,ykxˇ0,v1:k,y0:k1)=N([μx,kμy,k],[Σxx,kΣyx,kΣxy,kΣyy,k])根据第2.7节中的推导结果, k k k 时刻的后验概率可以写为:
p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = N ( μ x , k + Σ x y , k Σ y y , k − 1 ( y k − μ y , k ) ⏟ x ^ k , Σ x x , k − Σ x y , k Σ y y , k − 1 Σ y x , k ⏟ P ^ k ) \begin{aligned} p & \left(\boldsymbol{x}_k \mid \check{\boldsymbol{x}}_0, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right) \\ & =\mathcal{N}(\underbrace{\boldsymbol{\mu}_{x, k}+\boldsymbol{\Sigma}_{x y, k} \boldsymbol{\Sigma}_{y y, k}^{-1}\left(\boldsymbol{y}_k-\boldsymbol{\mu}_{y, k}\right)}_{\hat{\boldsymbol{x}}_k}, \underbrace{\boldsymbol{\Sigma}_{x x, k}-\boldsymbol{\Sigma}_{x y, k} \boldsymbol{\Sigma}_{y y, k}^{-1} \boldsymbol{\Sigma}_{y x, k}}_{\hat{P}_k}) \end{aligned} p(xkxˇ0,v1:k,y0:k)=N(x^k μx,k+Σxy,kΣyy,k1(ykμy,k),P^k Σxx,kΣxy,kΣyy,k1Σyx,k)其中 x ^ k \hat{\boldsymbol{x}}_k x^k P ^ k \hat{\boldsymbol{P}}_k P^k 分别为后验均值方差。若定义:
K k = Σ x y , k Σ y y , k − 1 \boldsymbol{K}_k=\boldsymbol{\Sigma}_{x y, k} \boldsymbol{\Sigma}_{y y, k}^{-1} Kk=Σxy,kΣyy,k1则有:
P ^ k = P ˇ k − K k Σ x y , k T x ^ k = x ˇ k + K k ( y k − μ y , k ) \begin{aligned} & \hat{\boldsymbol{P}}_k=\check{\boldsymbol{P}}_k-\boldsymbol{K}_k \boldsymbol{\Sigma}_{x y, k}^{\mathrm{T}} \\ & \hat{\boldsymbol{x}}_k=\check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{y}_k-\boldsymbol{\mu}_{y, k}\right) \end{aligned} P^k=PˇkKkΣxy,kTx^k=xˇk+Kk(ykμy,k)把第2.8节中的推导得出的线性变换后的均值、方差及交叉项带入上面的式子,可以得到:
K k = P ˇ k G k T ( G k P ˇ k G k T + C k R k C k T ) − 1 P ^ k = ( 1 − K k G k ) P ˇ k x ^ k = x ˇ k + K k ( y k − G ( x ˇ k ) ) \begin{aligned} \boldsymbol{K}_k & =\check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}\left(\boldsymbol{G}_k \check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}+\boldsymbol{C}_k \boldsymbol{R}_k \boldsymbol{C}_k^{\mathrm{T}}\right)^{-1} \\ \hat{\boldsymbol{P}}_k & =\left(\mathbf{1}-\boldsymbol{K}_k \boldsymbol{G}_k\right) \check{\boldsymbol{P}}_k \\ \hat{\boldsymbol{x}}_k & =\check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{y}_k-\boldsymbol{G}\left(\check{\boldsymbol{x}}_k\right)\right) \end{aligned} KkP^kx^k=PˇkGkT(GkPˇkGkT+CkRkCkT)1=(1KkGk)Pˇk=xˇk+Kk(ykG(xˇk))上面方程与之前所述预测方程(如下),就构成了卡尔曼经典五个方程。
x ˇ k = F ( x ^ k − 1 , v k ) P ˇ k = F k − 1 P ^ k − 1 F k − 1 T + B k − 1 Q k B k − 1 T \begin{gathered} \check{\boldsymbol{x}}_k=\boldsymbol{F}\left(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{v}_k\right) \\ \check{\boldsymbol{P}}_k=\boldsymbol{F}_{k-1} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}_{k-1}^{\mathrm{T}}+\boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^{\mathrm{T}} \end{gathered} xˇk=F(x^k1,vk)Pˇk=Fk1P^k1Fk1T+Bk1QkBk1T需要说明的是,若不把第2.8节中的结果带入,而保留上页的原始形式,则对应的五个方程被称为广义高斯滤波。

3.4 扩展卡尔曼滤波(EKF)推导

当运动方程或观测方程为非线性的时候,无法再利用之前所述的线性变化关系进行推导,常用的解决方法是进行线性化,把非线性方程一阶泰勒展开成线性。即:
运动方程: x k = f ( x k − 1 , v k , w k ) ≈ x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) + B k − 1 w k \boldsymbol{x}_k=\boldsymbol{f}\left(\boldsymbol{x}_{k-1}, \boldsymbol{v}_k, \boldsymbol{w}_k\right) \approx \check{\boldsymbol{x}}_k+\boldsymbol{F}_{k-1}\left(\boldsymbol{x}_{k-1}-\hat{\boldsymbol{x}}_{k-1}\right)+\boldsymbol{B}_{k-1} \boldsymbol{w}_k xk=f(xk1,vk,wk)xˇk+Fk1(xk1x^k1)+Bk1wk
观测方程: y k = g ( x k , n k ) ≈ y ˇ k + G k ( x k − x ˇ k ) + C k n k \boldsymbol{y}_k=\boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right) \approx \check{\boldsymbol{y}}_k+\boldsymbol{G}_k\left(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k\right)+\boldsymbol{C}_k \boldsymbol{n}_k yk=g(xk,nk)yˇk+Gk(xkxˇk)+Cknk
其中
x ˇ k = f ( x ^ k − 1 , v k , 0 ) y ˇ k = g ( x ˇ k , 0 ) F k − 1 = ∂ f ( x k − 1 , v k , w k ) ∂ x k − 1 ∣ x ^ k − 1 , v k , 0 G k = ∂ g ( x k , n k ) ∂ x k ∣ x ˇ k , 0 B k − 1 = ∂ f ( x k − 1 , v k , w k ) ∂ w k ∣ x ^ k − 1 , v k , 0 C k = ∂ g ( x k , n k ) ∂ n k ∣ x ˇ k , 0 \begin{array}{ll} \check{\boldsymbol{x}}_k=\boldsymbol{f}\left(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{v}_k, \mathbf{0}\right) & \check{\boldsymbol{y}}_k=\boldsymbol{g}\left(\check{\boldsymbol{x}}_k, \mathbf{0}\right) \\ \boldsymbol{F}_{k-1}=\left.\frac{\partial \boldsymbol{f}\left(\boldsymbol{x}_{k-1}, \boldsymbol{v}_k, \boldsymbol{w}_k\right)}{\partial \boldsymbol{x}_{k-1}}\right|_{\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{v}_k, \mathbf{0}} & \boldsymbol{G}_k=\left.\frac{\partial \boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right)}{\partial \boldsymbol{x}_k}\right|_{\check{\boldsymbol{x}}_k, \mathbf{0}} \\ \boldsymbol{B}_{k-1}=\left.\frac{\partial \boldsymbol{f}\left(\boldsymbol{x}_{k-1}, \boldsymbol{v}_k, \boldsymbol{w}_k\right)}{\partial \boldsymbol{w}_k}\right|_{\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{v}_k, \mathbf{0}} & \boldsymbol{C}_k=\left.\frac{\partial \boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right)}{\partial \boldsymbol{n}_k}\right|_{\check{\boldsymbol{x}}_k, \mathbf{0}} \end{array} xˇk=f(x^k1,vk,0)Fk1=xk1f(xk1,vk,wk) x^k1,vk,0Bk1=wkf(xk1,vk,wk) x^k1,vk,0yˇk=g(xˇk,0)Gk=xkg(xk,nk) xˇk,0Ck=nkg(xk,nk) xˇk,0根据该线性化展开结果,可以得到预测状态的统计学特征为
E [ x k ] ≈ x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) + E [ B k − 1 w k ] ⏟ 0 E [ ( x k − E [ x k ] ) ( x k − E [ x k ] ) T ] ≈ E [ B k − 1 w k w T T B k − 1 T ] ⏟ B k − 1 Q k B k − 1 T \begin{aligned} & E\left[\boldsymbol{x}_k\right] \approx \check{\boldsymbol{x}}_k+\boldsymbol{F}_{k-1}\left(\boldsymbol{x}_{k-1}-\hat{\boldsymbol{x}}_{k-1}\right)+\underbrace{E\left[\boldsymbol{B}_{k-1} \boldsymbol{w}_k\right]}_0 \\ & E\left[\left(\boldsymbol{x}_k-E\left[\boldsymbol{x}_k\right]\right)\left(\boldsymbol{x}_k-E\left[\boldsymbol{x}_k\right]\right)^{\mathrm{T}}\right] \approx \underbrace{E\left[\boldsymbol{B}_{k-1} \boldsymbol{w}_k \boldsymbol{w}_{\mathrm{T}}^{\mathrm{T}} \boldsymbol{B}_{k-1}^{\mathrm{T}}\right]}_{\boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^{\mathrm{T}}} \end{aligned} E[xk]xˇk+Fk1(xk1x^k1)+0 E[Bk1wk]E[(xkE[xk])(xkE[xk])T]Bk1QkBk1T E[Bk1wkwTTBk1T] p ( x k ∣ x k − 1 , v k ) ≈ N ( x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) , B k − 1 Q k B k − 1 T ) p\left(\boldsymbol{x}_k \mid \boldsymbol{x}_{k-1}, \boldsymbol{v}_k\right) \approx \mathcal{N}\left(\check{\boldsymbol{x}}_k+\boldsymbol{F}_{k-1}\left(\boldsymbol{x}_{k-1}-\hat{\boldsymbol{x}}_{k-1}\right), \boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^{\mathrm{T}}\right) p(xkxk1,vk)N(xˇk+Fk1(xk1x^k1),Bk1QkBk1T)
同理,可得到观测的统计学特征为:
E [ y k ] ≈ y ˇ k + G k ( x k − x ˇ k ) + E [ C k n k ] ⏟ 0 E [ ( y k − E [ y k ] ) ( y k − E [ y k ] ) T ] ≈ E [ C k n k n k T C k T ] ⏟ C k R k C k T \begin{aligned} & E\left[\boldsymbol{y}_k\right] \approx \check{\boldsymbol{y}}_k+\boldsymbol{G}_k\left(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k\right)+\underbrace{E\left[\boldsymbol{C}_k \boldsymbol{n}_k\right]}_0 \\ & E\left[\left(\boldsymbol{y}_k-E\left[\boldsymbol{y}_k\right]\right)\left(\boldsymbol{y}_k-E\left[\boldsymbol{y}_k\right]\right)^{\mathrm{T}}\right] \approx \underbrace{E\left[\boldsymbol{C}_k \boldsymbol{n}_k \boldsymbol{n}_k^{\mathrm{T}} \boldsymbol{C}_k^{\mathrm{T}}\right]}_{C_k \boldsymbol{R}_k \boldsymbol{C}_k^{\mathrm{T}}} \end{aligned} E[yk]yˇk+Gk(xkxˇk)+0 E[Cknk]E[(ykE[yk])(ykE[yk])T]CkRkCkT E[CknknkTCkT] p ( y k ∣ x k ) ≈ N ( y ˇ k + G k ( x k − x ˇ k ) , C k R k C k T ) p\left(\boldsymbol{y}_k \mid \boldsymbol{x}_k\right) \approx \mathcal{N}\left(\check{\boldsymbol{y}}_k+\boldsymbol{G}_k\left(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k\right), \boldsymbol{C}_k \boldsymbol{R}_k \boldsymbol{C}_k^{\mathrm{T}}\right) p(ykxk)N(yˇk+Gk(xkxˇk),CkRkCkT)

把均值和方差的具体形式,带入广义高斯滤波的公式,最终得到 EKF 下得经典五个公式。
P ˇ k = F k − 1 P ^ k − 1 F k − 1 T + B k − 1 Q k B k − 1 T x ˇ k = f ( x ^ k − 1 , v k , 0 ) K k = P ˇ k G k T ( G k P ˇ k G k T + C k R k C k T ) − 1 P ^ k = ( I − K k G k ) P ˇ k x ^ k = x ˇ k + K k ( y k − g ( x ˇ k , 0 ) ) \begin{aligned} & \check{\boldsymbol{P}}_k=\boldsymbol{F}_{k-1} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}_{k-1}^{\mathrm{T}}+\boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^{\mathrm{T}} \\ & \check{\boldsymbol{x}}_k=\boldsymbol{f}\left(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{v}_k, \mathbf{0}\right) \\ & \boldsymbol{K}_k=\check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}\left(\boldsymbol{G}_k \check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}+\boldsymbol{C}_k \boldsymbol{R}_k \boldsymbol{C}_k^{\mathrm{T}}\right)^{-1} \\ & \hat{\boldsymbol{P}}_k=\left(\mathbf{I}-\boldsymbol{K}_k \boldsymbol{G}_k\right) \check{\boldsymbol{P}}_k \\ & \hat{\boldsymbol{x}}_k=\check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{y}_k-\boldsymbol{g}\left(\check{\boldsymbol{x}}_k, \mathbf{0}\right)\right) \end{aligned} Pˇk=Fk1P^k1Fk1T+Bk1QkBk1Txˇk=f(x^k1,vk,0)Kk=PˇkGkT(GkPˇkGkT+CkRkCkT)1P^k=(IKkGk)Pˇkx^k=xˇk+Kk(ykg(xˇk,0))

3.5 迭代扩展卡尔曼滤波(IEKF)推导

由于非线性模型中做了线性化近似,当非线性程度越强时,误差就会较大。但是,由于线性化的工作点离真值越近,线性化的误差就越小,因此解决该问题的一个方法是,通过迭代逐渐找到准确的线性化点,从而提高精度
在EKF的推导中,其他保持不变,仅改变观测的线性化工作点,则有:
g ( x k , n k ) ≈ y o p , k + G k ( x k − x o p , k ) + C k n k \boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right) \approx \boldsymbol{y}_{\mathrm{op}, k}+\boldsymbol{G}_k\left(\boldsymbol{x}_k-\boldsymbol{x}_{\mathrm{op}, k}\right)+\boldsymbol{C}_k \boldsymbol{n}_k g(xk,nk)yop,k+Gk(xkxop,k)+Cknk其中:
y o p , k = g ( x o p , k , 0 ) G k = ∂ g ( x k , n k ) ∂ x k ∣ x o p , k , 0 C k = ∂ g ( x k , n k ) ∂ n k ∣ x o p , k , 0 \begin{aligned} & \boldsymbol{y}_{\mathrm{op}, k}=\boldsymbol{g}\left(\boldsymbol{x}_{\mathrm{op}, k}, \mathbf{0}\right) \\ & \boldsymbol{G}_k=\left.\frac{\partial \boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right)}{\partial \boldsymbol{x}_k}\right|_{\boldsymbol{x}_{\mathrm{op}, k}, \mathbf{0}} \\ & \boldsymbol{C}_k=\left.\frac{\partial \boldsymbol{g}\left(\boldsymbol{x}_k, \boldsymbol{n}_k\right)}{\partial \boldsymbol{n}_k}\right|_{\boldsymbol{x}_{\mathrm{op}, \boldsymbol{k}}, \mathbf{0}} \end{aligned} yop,k=g(xop,k,0)Gk=xkg(xk,nk) xop,k,0Ck=nkg(xk,nk) xop,k,0按照与之前同样的方式进行推导,可得到滤波的校正过程为:
K k = P ˇ k G k T ( G k P ˇ k G k T + C k R k C k T ) − 1 x ^ k = x ˇ k + K k ( y k − y o p , k − G k ( x ˇ k − x o p , k ) ) \begin{aligned} & \boldsymbol{K}_k=\check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}\left(\boldsymbol{G}_k \check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}+\boldsymbol{C}_k \boldsymbol{R}_k \boldsymbol{C}_k^{\mathrm{T}}\right)^{-1} \\ & \hat{\boldsymbol{x}}_k=\check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{y}_k-\boldsymbol{y}_{\mathrm{op}, k}-\boldsymbol{G}_k\left(\check{\boldsymbol{x}}_k-\boldsymbol{x}_{\mathrm{op}, k}\right)\right) \end{aligned} Kk=PˇkGkT(GkPˇkGkT+CkRkCkT)1x^k=xˇk+Kk(ykyop,kGk(xˇkxop,k))可见唯一的区别是后验均值 x ^ k \hat{\boldsymbol{x}}_k x^k 更新的公式与之前有所不同。
滤波过程中,反复执行这 2 个公式,以上次的后验均值作为本次的线性化工作点,即可达到减小非线性误差的目的。
需要注意的是,在这种滤波模式下, 后验方差应放在最后一步进行。
P ^ k = ( 1 − K k G k ) P ˇ k \hat{\boldsymbol{P}}_k=\left(\mathbf{1}-\boldsymbol{K}_k \boldsymbol{G}_k\right) \check{\boldsymbol{P}}_k P^k=(1KkGk)Pˇk

4. 基于滤波器的融合

通过以上推导,滤波问题可以简单理解为“预测 + 观测 = 融合结果”。
结合实际点云地图中定位的例子,预测由IMU给出,观测即为激光雷达点云和地图匹配得到的姿态和位置。
融合流程用框图可以表示如下:
在这里插入图片描述

4.1 状态方程

状态方程 F F F 由误差方程得来,第8讲已经完成误差方程的推导:
δ p ˙ = δ v δ v ˙ = − R t [ a t − b a t ] × δ θ + R t ( n a − δ b a ) δ θ ˙ = − [ ω t − b ω t ] × δ θ + n ω − δ b ω δ b ˙ a = n b a  或  δ b ˙ a = 0 δ b ˙ ω = n b ω δ b ˙ ω = 0  令  δ x = [ δ p δ v δ θ δ b a δ b ω ] , w = [ n a n ω n b a n b ω ] \begin{aligned} & \delta \dot{\boldsymbol{p}}=\delta \boldsymbol{v} \\ & \delta \dot{\boldsymbol{v}}=-\boldsymbol{R}_t\left[\boldsymbol{a}_t-\boldsymbol{b}_{a_t}\right]_{\times} \delta \boldsymbol{\theta}+\boldsymbol{R}_t\left(\boldsymbol{n}_a-\delta \boldsymbol{b}_a\right) \\ & \delta \dot{\boldsymbol{\theta}}=-\left[\boldsymbol{\omega}_t-\boldsymbol{b}_{\omega_t}\right]_{\times} \delta \boldsymbol{\theta}+\boldsymbol{n}_\omega-\delta \boldsymbol{b}_\omega \\ & \delta \dot{\boldsymbol{b}}_a=\boldsymbol{n}_{b_a} \quad \text { 或 } \quad \delta \dot{\boldsymbol{b}}_a=0 \\ & \delta \dot{\boldsymbol{b}}_\omega=\boldsymbol{n}_{b_\omega} \quad\quad\quad { }^{ }{ }^{ }{ }^{ }{ }^{ }{ }^{ }{ }^{ } \delta \dot{\boldsymbol{b}}_\omega=0 \\ & \text { 令 } \delta \boldsymbol{x}=\left[\begin{array}{c} \delta \boldsymbol{p} \\ \delta \boldsymbol{v} \\ \delta \boldsymbol{\theta} \\ \delta \boldsymbol{b}_a \\ \delta \boldsymbol{b}_\omega \end{array}\right], \quad \boldsymbol{w}=\left[\begin{array}{l} \boldsymbol{n}_a \\ \boldsymbol{n}_\omega \\ \boldsymbol{n}_{b_a} \\ \boldsymbol{n}_{b_\omega} \end{array}\right] \end{aligned} δp˙=δvδv˙=Rt[atbat]×δθ+Rt(naδba)δθ˙=[ωtbωt]×δθ+nωδbωδb˙a=nba  δb˙a=0δb˙ω=nbωδb˙ω=0  δx= δpδvδθδbaδbω ,w= nanωnbanbω 则误差方程可以写成状态方程的通用形式:
δ x ˙ = F t δ x + B t w \delta \dot{\boldsymbol{x}}=\boldsymbol{F}_t \delta \boldsymbol{x}+\boldsymbol{B}_t \boldsymbol{w} δx˙=Ftδx+Btw
其中:
F t = [ 0 I 3 0 0 0 0 0 − R t [ a ‾ t ] × − R t 0 0 0 − [ ω ‾ t ] × 0 − I 3 0 0 0 0 0 0 0 0 0 0 ] a ‾ t = a t − b a t ω ‾ t = ω t − b ω t B t = [ 0 0 0 0 R t 0 0 0 0 I 3 0 0 0 0 I 3 0 0 0 0 I 3 ] \begin{aligned} \boldsymbol{F}_t & =\left[\begin{array}{ccccc} 0 & \boldsymbol{I}_3 & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & -\boldsymbol{R}_t\left[\overline{\boldsymbol{a}}_t\right]_{\times} & -\boldsymbol{R}_t & \mathbf{0} \\ 0 & 0 & -\left[\overline{\boldsymbol{\omega}}_t\right]_{\times} & \mathbf{0} & -\boldsymbol{I}_3 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \end{array}\right] \begin{array}{c} \overline{\boldsymbol{a}}_t=\boldsymbol{a}_t-\boldsymbol{b}_{a_t} \\ \overline{\boldsymbol{\omega}}_t=\boldsymbol{\omega}_t-\boldsymbol{b}_{\omega_t} \end{array} \\ \boldsymbol{B}_t & =\left[\begin{array}{cccc} \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \boldsymbol{R}_t & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{I}_3 & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \boldsymbol{I}_3 & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \boldsymbol{I}_3 \end{array}\right] \end{aligned} FtBt= 00000I300000Rt[at]×[ωt]×000Rt00000I300 at=atbatωt=ωtbωt= 0Rt00000I300000I300000I3 注:当选择 δ b ˙ a = 0 , δ b ˙ ω = 0 \delta \dot{\boldsymbol{b}}_a=0 , \delta \dot{\boldsymbol{b}}_\omega=0 δb˙a=0δb˙ω=0 时,矩阵形式不一样,请各位自行推导。

4.2 观测方程

在滤波器中,观测方程 G G G 一般写为:
y = G t δ x + C t n \boldsymbol{y}=\boldsymbol{G}_t \delta \boldsymbol{x}+\boldsymbol{C}_t \boldsymbol{n} y=Gtδx+Ctn此例中观测量有位置、失准角,则:
y = [ δ p ‾ δ θ ‾ ] \boldsymbol{y}=\left[\begin{array}{l} \delta \overline{\boldsymbol{p}} \\ \delta \overline{\boldsymbol{\theta}} \end{array}\right] y=[δpδθ]因此有:
G t = [ I 3 0 0 0 0 0 0 I 3 0 0 ] C t = [ I 3 0 0 I 3 ] \begin{aligned} \boldsymbol{G}_t & =\left[\begin{array}{ccccc} \boldsymbol{I}_3 & \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \boldsymbol{I}_3 & \mathbf{0} & \mathbf{0} \end{array}\right] \\ \boldsymbol{C}_t & =\left[\begin{array}{cc} \boldsymbol{I}_3 & \mathbf{0} \\ \mathbf{0} & \boldsymbol{I}_3 \end{array}\right] \end{aligned} GtCt=[I30000I30000]=[I300I3]而此处 n n n 为观测噪声,
n = [ n δ p ˉ x n δ p ˉ y n δ p ˉ z n δ θ ˉ x n δ θ ˉ y n δ θ ˉ z ] T \boldsymbol{n}=\left[\begin{array}{llllll} n_{\delta \bar{p}_x} & n_{\delta \bar{p}_y} & n_{\delta \bar{p}_z} & n_{\delta \bar{\theta}_x} & n_{\delta \bar{\theta}_y} & n_{\delta \bar{\theta}_z} \end{array}\right]^T n=[nδpˉxnδpˉynδpˉznδθˉxnδθˉynδθˉz]T观测量中, δ p \delta \boldsymbol{p} δp 的计算过程为:
δ p ‾ = p ˇ − p \delta \overline{\boldsymbol{p}}=\check{\boldsymbol{p}}-\boldsymbol{p} δp=pˇp其中 p ˇ \check{\boldsymbol{p}} pˇ 为 IMU 解算的位置,即预测值。 p \boldsymbol{p} p 为雷达与地图 匹配得到的位置,即观测值。
δ θ ‾ \delta \overline{\boldsymbol{\theta}} δθ 的计算过程稍微复杂,需要先计算误差矩阵,
δ R ‾ t = R t T R ˇ t \delta \overline{\boldsymbol{R}}_t=\boldsymbol{R}_t^T \check{\boldsymbol{R}}_t δRt=RtTRˇt其中 R ˇ t \check{\boldsymbol{R}}_t Rˇt 为 IMU 解算的旋转矩阵,即预测值。 R t \boldsymbol{R}_t Rt 为雷达与地图匹配得到的旋转矩阵,即观测值。
由于预测值与观测值之间的关系为:
R ˇ t ≈ R t ( I + [ δ θ ‾ ] × ) \check{\boldsymbol{R}}_t \approx \boldsymbol{R}_t\left(\boldsymbol{I}+[\delta \overline{\boldsymbol{\theta}}]_{\times}\right) RˇtRt(I+[δθ]×)因此:
δ θ ‾ = ( δ R ‾ t − I ) ∨ \delta \overline{\boldsymbol{\theta}}=\left(\delta \overline{\boldsymbol{R}}_t-\boldsymbol{I}\right)^{\vee} δθ=(δRtI)

4.3 构建滤波器

构建滤波器,即把融合系统的状态方程和观测方程应用到 Kalman 滤波的五个公式中。
前面推导的方程是连续时间的,要应用于离散时间,需要按照采样时间对其进行离散化。
状态方程离散化,可以写为:
δ x k = F k − 1 δ x k − 1 + B k − 1 w k \delta \boldsymbol{x}_k=\boldsymbol{F}_{k-1} \delta \boldsymbol{x}_{k-1}+\boldsymbol{B}_{k-1} \boldsymbol{w}_k δxk=Fk1δxk1+Bk1wk其中:
F k − 1 = I 15 + F t T B k − 1 = [ 0 0 0 0 R k − 1 T 0 0 0 0 I 3 T 0 0 0 0 I 3 T 0 0 0 0 I 3 T ] \begin{aligned} \boldsymbol{F}_{k-1} & =\boldsymbol{I}_{15}+\boldsymbol{F}_t T \\ \boldsymbol{B}_{k-1}= & {\left[\begin{array}{cccc} \mathbf{0} & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \boldsymbol{R}_{k-1} T & \mathbf{0} & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{I}_3 T & \mathbf{0} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \boldsymbol{I}_3 \sqrt{T} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0} & \boldsymbol{I}_3 \sqrt{T} \end{array}\right] } \end{aligned} Fk1Bk1==I15+FtT 0Rk1T00000I3T00000I3T 00000I3T 其中, T T T 为 Kalman 的滤波周期。
注:关于 B k − 1 \boldsymbol{B}_{k-1} Bk1 的离散化形式,不同资料有差异,但对实际调试影响不大。
对于观测方程,不需要乘以滤波周期,可以直接写出
y k = G k δ x k + C k n k \boldsymbol{y}_k=\boldsymbol{G}_k \delta \boldsymbol{x}_k+\boldsymbol{C}_k \boldsymbol{n}_k yk=Gkδxk+Cknk将以上各变量,带入kalman滤波的五个方程,即可构建完整的滤波器更新流程。
δ x ˇ k = F k − 1 δ x ^ k − 1 + B k − 1 w k P ˇ k = F k − 1 P ^ k − 1 F k − 1 T + B k − 1 Q k B k − 1 T K k = P ˇ k G k T ( G k P ˇ k G k T + C k R k C k T ) − 1 P ^ k = ( I − K k G k ) P ˇ k δ x ^ k = δ x ˇ k + K k ( y k − G k δ x ˇ k ) \begin{aligned} & \delta \check{\boldsymbol{x}}_k=\boldsymbol{F}_{k-1} \delta \hat{\boldsymbol{x}}_{k-1}+\boldsymbol{B}_{k-1} \boldsymbol{w}_k \\ & \check{\boldsymbol{P}}_k=\boldsymbol{F}_{k-1} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}_{k-1}^{\mathrm{T}}+\boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^T \\ & \boldsymbol{K}_k=\check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}\left(\boldsymbol{G}_k \check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}+\boldsymbol{C}_k \boldsymbol{R}_k \boldsymbol{C}_k^T\right)^{-1} \\ & \hat{\boldsymbol{P}}_k=\left(\boldsymbol{I}-\boldsymbol{K}_k \boldsymbol{G}_k\right) \check{\boldsymbol{P}}_k \\ & \delta \hat{\boldsymbol{x}}_k=\delta \check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{y}_k-\boldsymbol{G}_k \delta \check{\boldsymbol{x}}_k\right) \end{aligned} δxˇk=Fk1δx^k1+Bk1wkPˇk=Fk1P^k1Fk1T+Bk1QkBk1TKk=PˇkGkT(GkPˇkGkT+CkRkCkT)1P^k=(IKkGk)Pˇkδx^k=δxˇk+Kk(ykGkδxˇk)

4.4 Kalman 滤波实际使用流程

4.4.1 位姿初始化

在这里插入图片描述
在点云地图中实现初始定位,并给以下变量赋值,
p ^ 0 \hat{\boldsymbol{p}}_0 p^0 :初始时刻位置
v ^ 0 \hat{\boldsymbol{v}}_0 v^0 :初始时刻速度(可以从组合导航获得)
R ^ 0 \hat{\boldsymbol{R}}_0 R^0 : 初始时刻姿态(也可用四元数,后面不再强调)

4.4.2 Kalman 初始化

在这里插入图片描述a. 状态量 δ x ^ 0 = 0 \delta \hat{\boldsymbol{x}}_0=\mathbf{0} δx^0=0
b. 方差
P ^ 0 = [ P δ p P δ v P δ θ P δ b a P δ b ω ] \hat{\boldsymbol{P}}_0=\left[\begin{array}{ccccc} \boldsymbol{P}_{\delta p} & & & & \\ & \boldsymbol{P}_{\delta v} & & & \\ & & \boldsymbol{P}_{\delta \boldsymbol{\theta}} & & \\ & & & \boldsymbol{P}_{\delta b_a} & \\ & & & & \boldsymbol{P}_{\delta b_\omega} \end{array}\right] P^0= PδpPδvPδθPδbaPδbω 初始方差理论上可设置为各变量噪声的平方,实际中一般故意设置大一些,这样可加快收敛速度。
c. 过程噪声与观测噪声
Q = [ Q a Q ω Q b a Q b ω ] R 0 = [ R δ p R δ θ ] \boldsymbol{Q}=\left[\begin{array}{cccc} \boldsymbol{Q}_a & & & \\ & \boldsymbol{Q}_\omega & & \\ & & \boldsymbol{Q}_{b_a} & \\ & & & \boldsymbol{Q}_{b_\omega} \end{array}\right] \quad \quad \boldsymbol{R}_0=\left[\begin{array}{ll} \boldsymbol{R}_{\delta p} & \\ & \boldsymbol{R}_{\delta \theta} \end{array}\right] Q= QaQωQbaQbω R0=[RδpRδθ]过程噪声与观测噪声一般在 kalman 迭代过程中保持不变。

4.4.3 惯性解算

在这里插入图片描述
按照之前讲解的惯性解算方法,进行位姿更新,该位姿属于先验位姿。
a. 姿态解算
R ˇ k = R ^ k − 1 ( I + sin ⁡ ϕ ϕ ( ϕ × ) + 1 − cos ⁡ ϕ ϕ 2 ( ϕ × ) 2 ) \check{\boldsymbol{R}}_k=\hat{\boldsymbol{R}}_{k-1}\left(I+\frac{\sin \phi}{\phi}(\phi \times)+\frac{1-\cos \phi}{\phi^2}(\boldsymbol{\phi} \times)^2\right) Rˇk=R^k1(I+ϕsinϕ(ϕ×)+ϕ21cosϕ(ϕ×)2)其中
ϕ = ω ‾ k − 1 + ω ‾ k 2 ( t k − t k − 1 ) ω ‾ k = ω k − b ω k ω ‾ k − 1 = ω k − 1 − b ω k − 1 \begin{aligned} & \boldsymbol{\phi}=\frac{\overline{\boldsymbol{\omega}}_{k-1}+\overline{\boldsymbol{\omega}}_k}{2}\left(t_k-t_{k-1}\right) \\ & \overline{\boldsymbol{\omega}}_k=\boldsymbol{\omega}_k-\boldsymbol{b}_{\omega_k} \\ & \overline{\boldsymbol{\omega}}_{k-1}=\boldsymbol{\omega}_{k-1}-\boldsymbol{b}_{\omega_{k-1}} \end{aligned} ϕ=2ωk1+ωk(tktk1)ωk=ωkbωkωk1=ωk1bωk1按照之前讲解的惯性解算方法,进行位姿更新,该位姿属于先验位姿。
b. 速度解算
v ˇ k = v ^ k − 1 + ( R ˇ k a ‾ k + R ^ k − 1 a ‾ k − 1 2 − g ) ( t k − t k − 1 ) \check{\boldsymbol{v}}_k=\hat{\boldsymbol{v}}_{k-1}+\left(\frac{\check{\boldsymbol{R}}_k \overline{\boldsymbol{a}}_k+\hat{\boldsymbol{R}}_{k-1} \overline{\boldsymbol{a}}_{k-1}}{2}-\boldsymbol{g}\right)\left(t_k-t_{k-1}\right) vˇk=v^k1+(2Rˇkak+R^k1ak1g)(tktk1)
其中
a ‾ k = a k − b a k a ‾ k − 1 = a k − 1 − b a k − 1 \begin{aligned} & \overline{\boldsymbol{a}}_k=\boldsymbol{a}_k-\boldsymbol{b}_{a_k} \\ & \overline{\boldsymbol{a}}_{k-1}=\boldsymbol{a}_{k-1}-\boldsymbol{b}_{a_{k-1}} \end{aligned} ak=akbakak1=ak1bak1c. 位置解算
p ^ k = p ˇ k − 1 + v ˇ k + v ^ k − 1 2 ( t k − t k − 1 ) \hat{\boldsymbol{p}}_k=\check{\boldsymbol{p}}_{k-1}+\frac{\check{\boldsymbol{v}}_k+\hat{\boldsymbol{v}}_{k-1}}{2}\left(t_k-t_{k-1}\right) p^k=pˇk1+2vˇk+v^k1(tktk1)

4.4.4 Kalman 预测更新

在这里插入图片描述

执行kalman五个步骤中的前两步,即
δ x ˇ k = F k − 1 δ x ^ k − 1 + B k − 1 w k P ˇ k = F k − 1 P ^ k − 1 F k − 1 T + B k − 1 Q k B k − 1 T \begin{aligned} & \delta \check{\boldsymbol{x}}_k=\boldsymbol{F}_{k-1} \delta \hat{\boldsymbol{x}}_{k-1}+\boldsymbol{B}_{k-1} \boldsymbol{w}_k \\ & \check{\boldsymbol{P}}_k=\boldsymbol{F}_{k-1} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}_{k-1}^{\mathrm{T}}+\boldsymbol{B}_{k-1} \boldsymbol{Q}_k \boldsymbol{B}_{k-1}^T \end{aligned} δxˇk=Fk1δx^k1+Bk1wkPˇk=Fk1P^k1Fk1T+Bk1QkBk1T当然,这需要先根据公式计算 F k − 1 \boldsymbol{F}_{k-1} Fk1 B k − 1 \boldsymbol{B}_{k-1} Bk1

4.4.5 无观测时后验更新

在这里插入图片描述

无观测时,不需要执行kalman剩下的三个步骤,后验等于先验,即
δ x ^ k = δ x ˇ k P ^ k = P ˇ k x ^ k = x ˇ k \begin{aligned} & \delta \hat{\boldsymbol{x}}_k=\delta \check{\boldsymbol{x}}_k \\ & \hat{\boldsymbol{P}}_k=\check{\boldsymbol{P}}_k \\ & \hat{\boldsymbol{x}}_k=\check{\boldsymbol{x}}_k \end{aligned} δx^k=δxˇkP^k=Pˇkx^k=xˇk

4.4.6 有观测时的量测更新

在这里插入图片描述

执行kalman滤波后面的三个步骤,得到后验状态量。
K k = P ˇ k G k T ( G k P ˇ k G k T + C k R k C k T ) − 1 P ^ k = ( I − K k G k ) P ˇ k δ x ^ k = δ x ˇ k + K k ( y k − G k δ x ˇ k ) \begin{aligned} & \boldsymbol{K}_k=\check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}\left(\boldsymbol{G}_k \check{\boldsymbol{P}}_k \boldsymbol{G}_k^{\mathrm{T}}+\boldsymbol{C}_k \boldsymbol{R}_k \boldsymbol{C}_k^T\right)^{-1} \\ & \hat{\boldsymbol{P}}_k=\left(\boldsymbol{I}-\boldsymbol{K}_k \boldsymbol{G}_k\right) \check{\boldsymbol{P}}_k \\ & \delta \hat{\boldsymbol{x}}_k=\delta \check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{y}_k-\boldsymbol{G}_k \delta \check{\boldsymbol{x}}_k\right) \end{aligned} Kk=PˇkGkT(GkPˇkGkT+CkRkCkT)1P^k=(IKkGk)Pˇkδx^k=δxˇk+Kk(ykGkδxˇk)

4.4.7 有观测时计算后验位姿

在这里插入图片描述

根据后验状态量,更新后验位姿。
p ^ k = p ˇ k − δ p ^ k v ^ k = v ˇ k − δ v ^ k R ^ k = R ˇ k ( I − [ δ θ ^ k ] × ) b ^ a k = b ˇ a k − δ b ^ a k b ^ ω k = b ˇ ω k − δ b ^ ω k \begin{aligned} & \hat{\boldsymbol{p}}_k=\check{\boldsymbol{p}}_k-\delta \hat{\boldsymbol{p}}_k \\ & \hat{\boldsymbol{v}}_k=\check{\boldsymbol{v}}_k-\delta \hat{\boldsymbol{v}}_k \\ & \hat{\boldsymbol{R}}_k=\check{\boldsymbol{R}}_k\left(\boldsymbol{I}-\left[\delta \hat{\boldsymbol{\theta}}_k\right]_{\times}\right) \\ & \hat{\boldsymbol{b}}_{a_k}=\check{\boldsymbol{b}}_{a_k}-\delta \hat{\boldsymbol{b}}_{a_k} \\ & \hat{\boldsymbol{b}}_{\omega_k}=\check{\boldsymbol{b}}_{\omega_k}-\delta \hat{\boldsymbol{b}}_{\omega_k} \end{aligned} p^k=pˇkδp^kv^k=vˇkδv^kR^k=Rˇk(I[δθ^k]×)b^ak=bˇakδb^akb^ωk=bˇωkδb^ωk

4.4.8 有观测时状态量清零

在这里插入图片描述
状态量已经用来补偿,因此需要清零。
δ x ^ k = 0 \delta \hat{\boldsymbol{x}}_k=\mathbf{0} δx^k=0后验方差保持不变。

4.4.9 输出位姿

把后验位姿输出给其他模块使用,即输出 p ^ k \hat{\boldsymbol{p}}_k p^k v ^ k \hat{\boldsymbol{v}}_k v^k R ^ k \hat{\boldsymbol{R}}_k R^k (或 q ^ k \hat{\boldsymbol{q}}_k q^k)。

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

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

相关文章

【Python学习笔记】25.Python3 输入和输出(1)

前言 在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用…

Linux手工创建新用户

准备工作(配置流程的理解) Linux中useradd命令即一系列文件操作的结合体,所以我们可以通过查看useradd命令来确认我们手工创建新用户需要完成的文件配置 找到man useradd中涉及的文件部分 对于手工创建用户有用的文件: /etc/pas…

jvm学习的核心(五)---垃圾回收算法和常见垃圾回收器

文章目录1.垃圾回收算法**1.1. 标记阶段****1.2. 清除阶段**1.2.1.标记清除算法1.2.2.标记复制算法1.2.3.标记整理算法1.3.引用2.常见的垃圾回收器2.1.Serial回收器2.2.ParNew回收器2.3.Parallel回收器2.4.CMS回收器<font color red>2.5.G1垃圾回收器ZGC回收器&#xff…

2月面经:真可惜...拿了小米的offer,字节却惨挂在三面

我是2月份参加字节跳动和华为的面试的&#xff0c;虽然我只拿下了小米的offer&#xff0c;但是我自己也满足了&#xff0c;想把经验分享出来&#xff0c;进而帮助更多跟我一样想进大厂的同行朋友们&#xff0c;希望大家可以拿到理想offer。 自我介绍 我是16年从南京工业大学毕…

java ssm idea高校图书借阅管理系统设计2z87z

本论文是以构建高校图书管理系统设计为目标&#xff0c;使用 jsp制作&#xff0c;由前台用户图书借阅、后台管理员图书分类两大部分组成。着重论述了系统设计分析&#xff0c;系统的实现&#xff08;用户注册模块&#xff0c;用户登录&#xff0c;用户图书借阅模块&#xff0c;…

ONNXRUNTUIME c++使用与相关资料(暂记)

下面的教程是在linux系统上运行的&#xff0c;如果想在windows系统上运行&#xff0c;可以看官方链接或中文教程https://bbs.huaweicloud.com/blogs/335706&#xff0c;官方链接中有完整的VS的带.sln的项目。 ONNXRUNTUIME OPENCV不支持某些算子(挤压层在opencv 中不支持) 安…

开关电源环路稳定性分析(10)——OPA和OTA型补偿器传递函数

大家好&#xff0c;这里是大话硬件。 在前面9讲的内容中将开关电源环路分析进行了梳理&#xff0c;我相信很多人即使都看完了&#xff0c;应该还是不会设计&#xff0c;而且还存在几个疑问。比如我随便举几个&#xff1a; 开关电源的带宽怎么设定&#xff1f;开关电源精度和什…

IDEA下java程序的调试(简易实例图示版)

在线排版不太好看&#xff0c;介意的读者可下载word下来看&#xff1a;https://download.csdn.net/download/xijinno1/87441301IDEA下java程序的简单调试-System.out.println首先本次进行调试的一个程序是实现从1累加到100的功能&#xff0c;是在IDEA下进行编写的。如图所示&am…

1626_MIT 6.828 lab1课程大纲学习过程整理

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 现在lab1的内容全都学习完了&#xff0c;该做的练习也都做了。接下来&#xff0c;整理一下自己看这一部分课程讲义的一些笔记。 整理之前&#xff0c;先把自己完成…

c# 跑马灯显示

//本文演示跑马灯//用到了线程、同步委托using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;using System.IO;nam…

鲜花数据集实验结果总结

从read_split_data中得到&#xff1a;训练数据集&#xff0c;验证数据集&#xff0c;训练标签&#xff0c;验证标签。的所有的具体详细路径 数据集位置&#xff1a;https://download.csdn.net/download/guoguozgw/87437634 import os #一种轻量级的数据交换格式&#xff0c; …

常见漏洞之 struts2+ jboss

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 01 Struts2相关介绍 》Struts2概述 》Struts2历史漏洞&#xff08;1&#xff09; 》…

【Linux】Linux多线程(下)

前言 大家好呀,欢迎来到我的Linux学习笔记~ 本篇承上Linux多线程创建,线程互斥(互斥锁),线程同步(条件变量),继下接着学习线程同步的另一个信号量,以及后序的线程池&#xff0c;线程的懒汉单例模式和其他锁相关知识。&#xff08;注意本篇博客代码居多&#xff09; Linux多线程…

C++005-C++选择与分支2

文章目录C005-C选择与分支2条件语句C实现else if 语句题目描述 根据成绩输出成绩等级ABCDEif嵌套语句题目描述 输出三个数中的最大值题目描述 模拟游戏登录switch语句三元运算符题目描述 输出三个数中的最大值-基于3元运算符题目描述 根据1-7输出星期1-星期日案例练习题目描述 …

php的api系统,php api 框架

本文目录一览&#xff1a; 1、php如何开发API接口2、什么是API&#xff1f;PHP的API怎么写&#xff1f;3、API和PHP是什么关系4、php中的API接口怎么写 ?5、如何使用PHP搭建一个restFul风格的API系统6、PHP 的API接口 php如何开发API接口 比如一个自定义函数&#xff1a;fun…

【遇见青山】项目难点:缓存击穿问题解决方案

【遇见青山】项目难点&#xff1a;缓存击穿问题解决方案1.缓存击穿互斥锁&#x1f512;方案逻辑过期方案2.基于互斥锁方案的具体实现3.基于逻辑过期方案的具体实现1.缓存击穿 缓存击穿问题也叫热点Key问题&#xff0c;就是一个被高并发访问并且缓存重建业务较复杂的key突然失效…

RuoYi-Cloud 部署

RuoYi-Cloud部署 1. 下载 点击右侧链接可以进入gitee的源码下载地址&#xff1a; 偌依微服务源码gitee下载地址 2. 数据库部署 依据如下步骤创建系统所需数据环境&#xff0c;脚本执行没有先后次序要求&#xff1a; 在Mysql 中创建 ry-cloud 主数据库&#xff0c;并执行 …

初学者必读:讲解 VC 下如何正确的创建、管理及发布项目

Visual C 的项目文件组成&#xff0c;以及如何正确的创建及管理项目。 本内容是初学者必须要掌握的。不能正确的管理项目&#xff0c;就不能进一步写有规模的程序。 一、项目下各种常见文件类型的功能 1. 代码文件 扩展名为 .cpp、.c、.h 等。 通常情况下&#xff0c;项目…

【Java】Help notes about JAVA

JAVA语言帮助笔记Java的安装与JDKJava命名规范JAVA的数据类型自动类型转换强制类型转换JAVA的运算符取余运算结果的符号逻辑运算的短路运算三元运算符运算符优先级JAVA的流程控制分支结构Java的安装与JDK JDK安装网站&#xff1a;https://www.oracle.com/java/technologies/do…

[项目设计]高并发内存池

目录 1、项目介绍 2、高并发内存池整体框架设计 3、thread cache <1>thread cache 哈希桶对齐规则 <2>Thread Cache类设计 4、Central Cache <1>Central Cache类设计 5、page cache <1>Page Cache类设计 6、性能分析 <1>定长内存池实现…