Kalman Filter in SLAM (7) ——Error-state Iterated Kalman Filter (EsIKF, 误差状态迭代卡尔曼滤波)

Kalman Filter in SLAM (7) ——Error-state Iterated Kalman Filter (EsIKF, 误差状态迭代卡尔曼滤波)_第1张图片


文章目录

  • 1. EsKF 和 IEKF 公式回顾
    • 1.1. EsKF 误差状态卡尔曼滤波方程
    • 1.2. IEKF 迭代扩展卡尔曼滤波方程
  • 2.EsIKF公式推导
    • 2.1. 预测公式
    • 2.2. 校正公式
      • 2.2.1. 误差状态观测方程
      • 2.2.2. 传感器观测误差值
      • 2.2.3. 校正公式
    • 2.3. R2Live中的 Es-IKF 的校正公式理解
      • 2.3.1. IMU+Camera
      • 2.3.2.IMU+LiDAR

实际 EsIKF 就是把 EsKFIEKF 两个结合起来了,并且如果从本质上来说它就是个迭代卡尔曼滤波 IEKF,只不过是基于误差状态的。

1. EsKF 和 IEKF 公式回顾

1.1. EsKF 误差状态卡尔曼滤波方程

预测公式

δ x ^ k = F δ x ˇ k − 1 P ^ k = F P ˇ k − 1 F T + Q \begin{gathered} \delta \boldsymbol {\hat{x}}_{k} = \boldsymbol F \delta \boldsymbol {\check{x}}_{k-1}\\ \boldsymbol {\hat P}_{k} = \boldsymbol F \boldsymbol {\check P}_{k-1} \boldsymbol F^{T}+ \boldsymbol Q \end{gathered} δx^k=Fδxˇk1P^k=FPˇk1FT+Q

校正公式

K k = P ^ k H T H P ^ k H T + R δ x ˇ k = δ x ^ k + K k ( ( z m − h ( x ^ k , 0 ) − H k δ x ^ k ) − H δ x ^ k ) P ˇ k = ( I − K k H ) P ^ k \begin{gathered} \boldsymbol K_{k}=\frac{ \boldsymbol {\hat P}_{k} \boldsymbol H^{T}}{ \boldsymbol H \boldsymbol {\hat P}_{k} \boldsymbol H^{T} + \boldsymbol R} \\ \delta \boldsymbol {\check {x}}_{k} = \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k}\left( \boldsymbol ( \boldsymbol z_m - \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) - \boldsymbol H_{k} \delta \boldsymbol {\hat{x}}_{k}) - \boldsymbol H \delta \boldsymbol {\hat{x}}_{k}\right)\\ \boldsymbol {\check P}_{k}=\left( \boldsymbol I- \boldsymbol K_{k} \boldsymbol H\right) \boldsymbol {\hat P}_{k} \end{gathered} Kk=HP^kHT+RP^kHTδxˇk=δx^k+Kk((zmh(x^k,0)Hkδx^k)Hδx^k)Pˇk=(IKkH)P^k

1.2. IEKF 迭代扩展卡尔曼滤波方程

预测公式

带入上一时刻的后验状态到自变量中,即 x k − 1 ← x ˇ k − 1 : x ^ k = f ( x ^ k − 1 , 0 ) + F k − 1 ( x ˇ k − 1 − x ˇ k − 1 ) = f ( x ^ k − 1 , 0 ) P ^ k = F k − 1 P ˇ k − 1 F k − 1 T + Q 带入上一时刻的后验状态到自变量中,即\boldsymbol x_{k-1} \leftarrow \boldsymbol {\check{x}}_{k-1} : \\ \boldsymbol {\hat{x}}_{k} = \boldsymbol f(\boldsymbol {\hat{x}}_{k-1} , \boldsymbol 0) + \boldsymbol F_{k-1} (\boldsymbol {\check{x}}_{k-1} - \boldsymbol {\check{x}}_{k-1}) = \boldsymbol f(\boldsymbol {\hat{x}}_{k-1} , \boldsymbol 0) \\ \boldsymbol {\hat P}_{k} = \boldsymbol F_{k-1} \boldsymbol {\check P}_{k-1} \boldsymbol F_{k-1} ^{T}+ \boldsymbol Q 带入上一时刻的后验状态到自变量中,即xk1xˇk1:x^k=f(x^k1,0)+Fk1(xˇk1xˇk1)=f(x^k1,0)P^k=Fk1Pˇk1Fk1T+Q

校正公式:注意为了写成统一的结果,这里把观测方程线性化展开点记为 x o p \boldsymbol x_{op} xop,其中下标 o p op op 代表 o p t m i s e optmise optmise 优化,然后迭代一次之后的结果变成 x ˇ o p \boldsymbol {\check x}_{op} xˇop,这个值再赋值到下一次的线性展开点进行展开。

观测方程在展开点 x o p 处展开。带入 I M U 的先验状态到自变量中,即 x k ← x ^ k : z k = h ( x o p , 0 ) + H k ∣ x o p ( x ^ k − x o p ) K k = P ^ k H T H P ^ k H T + R x ˇ o p = x ^ k + K k ( z m − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) ) P ˇ k = ( I − K k H ) P ^ k 观测方程在展开点\boldsymbol x_{op}处展开。带入IMU的先验状态到自变量中,即\boldsymbol x_{k} \leftarrow \boldsymbol {\hat{x}}_{k} : \\ \boldsymbol z_{k} = \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) \\ \begin{gathered} \boldsymbol K_{k}=\frac{ \boldsymbol {\hat P}_{k} \boldsymbol H^{T}}{ \boldsymbol H \boldsymbol {\hat P}_{k} \boldsymbol H^{T} + \boldsymbol R} \\ \boldsymbol {\check x}_{op} = \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k}\left( \boldsymbol {z}_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) \right) \\ \boldsymbol {\check P}_{k}=\left( \boldsymbol I- \boldsymbol K_{k} \boldsymbol H\right) \boldsymbol {\hat P}_{k} \end{gathered} 观测方程在展开点xop处展开。带入IMU的先验状态到自变量中,即xkx^k:zk=h(xop,0)+Hkxop(x^kxop)Kk=HP^kHT+RP^kHTxˇop=x^k+Kk(zmh(xop,0)Hkxop(x^kxop))Pˇk=(IKkH)P^k

2.EsIKF公式推导

2.1. 预测公式

由于 IEKF 中对预测公式没有改变,所以仍然是 EsKF 的结果

δ x ^ k = F δ x ˇ k − 1 P ^ k = F P ˇ k − 1 F T + Q \begin{gathered} \delta \boldsymbol {\hat{x}}_{k} = \boldsymbol F \delta \boldsymbol {\check{x}}_{k-1}\\ \boldsymbol {\hat P}_{k} = \boldsymbol F \boldsymbol {\check P}_{k-1} \boldsymbol F^{T}+ \boldsymbol Q \end{gathered} δx^k=Fδxˇk1P^k=FPˇk1FT+Q

2.2. 校正公式

2.2.1. 误差状态观测方程

首先还是要推导 不同线性展开点 下的 误差观测方程,根据之前的公式,把观测方程在优化点处展开:

在先验状态处展开: z + δ z = h ( x ^ k , 0 ) + H k ∣ x ^ k ( x ^ k + δ x ^ k − x ^ k ) + V k ∣ x ^ k v k 在优化点处展开: z + δ z = h ( x o p , 0 ) + H k ∣ x o p ( x ^ k + δ x ^ k − x o p ) + V k ∣ x o p v k 在先验状态处展开: \boldsymbol z + \delta \boldsymbol z = \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol {\hat{x}}_{k}} (\boldsymbol {\hat{x}}_{k} + \delta \boldsymbol {\hat{x}}_{k} - \boldsymbol {\hat{x}}_{k}) + \left. \boldsymbol V_{k}\right|_{\boldsymbol {\hat{x}}_{k}} \boldsymbol v_{k} \\ 在优化点处展开: \boldsymbol z + \delta \boldsymbol z = \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} + \delta \boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) + \left. \boldsymbol V_{k}\right|_{\boldsymbol x_{op}} \boldsymbol v_{k} 在先验状态处展开:z+δz=h(x^k,0)+Hkx^k(x^k+δx^kx^k)+Vkx^kvk在优化点处展开:z+δz=h(xop,0)+Hkxop(x^k+δx^kxop)+Vkxopvk

注意到公式中的 z \boldsymbol z z先验状态预测观测值,即 z = h ( x ^ k , 0 ) \boldsymbol z = \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) z=h(x^k,0),带入上面优化点处展开的方程中,可以得到:

δ z = h ( x o p , 0 ) − h ( x ^ k , 0 ) + H k ∣ x o p ( x ^ k + δ x ^ k − x o p ) + V k ∣ x o p v k = h ( x o p , 0 ) − h ( x ^ k , 0 ) + H k ∣ x o p ( x ^ k − x o p ) + H k ∣ x o p δ x ^ k + V k ∣ x o p v k \begin{aligned} \delta \boldsymbol z &= \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} + \delta \boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) + \left. \boldsymbol V_{k}\right|_{\boldsymbol x_{op}} \boldsymbol v_{k} \\ &= \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} \delta \boldsymbol {\hat{x}}_{k} + \left. \boldsymbol V_{k}\right|_{\boldsymbol x_{op}} \boldsymbol v_{k} \end{aligned} δz=h(xop,0)h(x^k,0)+Hkxop(x^k+δx^kxop)+Vkxopvk=h(xop,0)h(x^k,0)+Hkxop(x^kxop)+Hkxopδx^k+Vkxopvk

上面的公式中, x ^ k \boldsymbol {\hat x}_k x^k 是IMU先验状态值, x o p \boldsymbol {x}_{op} xop 是对观测方程进行线性展开的点(可以是IMU先验状态,也可以是迭代开始后的滤波后验状态),都是已知量,因此公式中的前三项都是已知量,即都是常数。

2.2.2. 传感器观测误差值

下面公式中的 z x k t \boldsymbol {z}_{\boldsymbol x_{kt}} zxkt先验状态等于真实状态 的时候,即 x k = x ^ k + δ x ^ k \boldsymbol x_k = \boldsymbol {\hat x}_k + \delta \boldsymbol{\hat x}_k xk=x^k+δx^k,我们计算得到的 真实状态预测观测值。同理这里就是为了评估噪声大小,所以真实状态预测观测值的计算中没有噪声项。

δ z m = z m − z x k t = z m − ( h ( x o p , 0 ) + H k ∣ x o p ( x k − x o p ) ) = z m − ( h ( x o p , 0 ) + H k ∣ x o p ( x ^ k + δ x ^ k − x o p ) ) = z m − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k + δ x ^ k − x o p ) = z m − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) − H k ∣ x o p δ x ^ k \begin{aligned} \delta \boldsymbol z_m &= \boldsymbol z_m - \boldsymbol z_{\boldsymbol x_{kt}} \\ &= \boldsymbol z_m - \left(\boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol x_{k} - \boldsymbol x_{op}) \right) \\ &= \boldsymbol z_m - \left(\boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat x}_{k} + \delta \boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) \right) \\ &= \boldsymbol z_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat x}_{k} + \delta \boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) \\ &= \boldsymbol z_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat x}_{k} - \boldsymbol x_{op}) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} \delta \boldsymbol {\hat{x}}_{k} \end{aligned} δzm=zmzxkt=zm(h(xop,0)+Hkxop(xkxop))=zm(h(xop,0)+Hkxop(x^k+δx^kxop))=zmh(xop,0)Hkxop(x^k+δx^kxop)=zmh(xop,0)Hkxop(x^kxop)Hkxopδx^k

2.2.3. 校正公式

观测方程在展开点 x o p 处展开。带入 I M U 的先验状态到自变量中,即 x k ← x ^ k : z k = h ( x o p , 0 ) + H k ∣ x o p ( x ^ k − x o p ) K k = P ^ k H T H P ^ k H T + R δ x ˇ o p = δ x ^ k + K k ( δ z m − δ z ) P ˇ k = ( I − K k H ) P ^ k 观测方程在展开点\boldsymbol x_{op}处展开。带入IMU的先验状态到自变量中,即\boldsymbol x_{k} \leftarrow \boldsymbol {\hat{x}}_{k} : \\ \boldsymbol z_{k} = \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) \\ \begin{gathered} \boldsymbol K_{k}=\frac{ \boldsymbol {\hat P}_{k} \boldsymbol H^{T}}{ \boldsymbol H \boldsymbol {\hat P}_{k} \boldsymbol H^{T} + \boldsymbol R} \\ \delta \boldsymbol {\check x}_{op} = \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k}\left(\delta \boldsymbol z_m - \delta \boldsymbol z \right) \\ \boldsymbol {\check P}_{k}=\left( \boldsymbol I- \boldsymbol K_{k} \boldsymbol H\right) \boldsymbol {\hat P}_{k} \end{gathered} 观测方程在展开点xop处展开。带入IMU的先验状态到自变量中,即xkx^k:zk=h(xop,0)+Hkxop(x^kxop)Kk=HP^kHT+RP^kHTδxˇop=δx^k+Kk(δzmδz)Pˇk=(IKkH)P^k

下面带入校正公式中的 δ z m \delta \boldsymbol {z}_m δzm δ z \delta \boldsymbol z δz 项,将公式化简(注意带入公式的时候 δ z \delta \boldsymbol z δz 的噪声项为 0,因为我们不知道这个噪声是多少,所以计算的时候简化成了 0):

δ x ˇ o p = δ x ^ k + K k ( δ z m − δ z ) = δ x ^ k + K k ( z m − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) − H k ∣ x o p δ x ^ k ) − K k ( h ( x o p , 0 ) − h ( x ^ k , 0 ) + H k ∣ x o p ( x ^ k − x o p ) + H k ∣ x o p δ x ^ k ) = δ x ^ k + K k ( z m − 2 h ( x o p , 0 ) + h ( x ^ k , 0 ) − 2 H k ∣ x o p ( x ^ k − x o p ) − 2 H k ∣ x o p δ x ^ k ) = δ x ^ k + K k ( z m − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) ) + K k ( h ( x ^ k , 0 ) − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) − 2 H k ∣ x o p δ x ^ k ) \begin{aligned} \delta \boldsymbol {\check x}_{op} =& \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k}\left(\delta \boldsymbol z_m - \delta \boldsymbol z \right) \\ =& \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k} \left( \boldsymbol z_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat x}_{k} - \boldsymbol x_{op}) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} \delta \boldsymbol {\hat{x}}_{k} \right) \\ &- \boldsymbol {K}_{k} \left( \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) + \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} \delta \boldsymbol {\hat{x}}_{k} \right) \\ =& \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k} \left( \boldsymbol z_m - 2 \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) + \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) - 2 \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) - 2 \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} \delta \boldsymbol {\hat{x}}_{k} \right) \\ =& \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k} \left( \boldsymbol z_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op})\right) \\ &+ \boldsymbol {K}_{k}\left(\boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) - 2 \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} \delta \boldsymbol {\hat{x}}_{k} \right) \end{aligned} δxˇop====δx^k+Kk(δzmδz)δx^k+Kk(zmh(xop,0)Hkxop(x^kxop)Hkxopδx^k)Kk(h(xop,0)h(x^k,0)+Hkxop(x^kxop)+Hkxopδx^k)δx^k+Kk(zm2h(xop,0)+h(x^k,0)2Hkxop(x^kxop)2Hkxopδx^k)δx^k+Kk(zmh(xop,0)Hkxop(x^kxop))+Kk(h(x^k,0)h(xop,0)Hkxop(x^kxop)2Hkxopδx^k)

(1) x o p = x ^ k \boldsymbol {x}_op = \boldsymbol {\hat x}_k xop=x^k 时,即第一次迭代时,校正公式化简为
δ x ˇ o p = δ x ^ k + K k ( z m − h ( x ^ k , 0 ) − 2 H k ∣ x ^ k δ x ^ k ) \begin{aligned} \delta \boldsymbol {\check x}_{op} = \delta \boldsymbol {\hat{x}}_{k} + \boldsymbol {K}_{k} \left( \boldsymbol z_m - \boldsymbol h(\boldsymbol {\hat x}_k, \boldsymbol 0) - 2 \left. \boldsymbol H_{k} \right|_{\boldsymbol {\hat x}_k} \delta \boldsymbol {\hat{x}}_{k}\right) \end{aligned} δxˇop=δx^k+Kk(zmh(x^k,0)2Hkx^kδx^k)
可见该公式结果与普通的 基于状态的IEKF 的结果相同。

(2) x o p ≠ x ^ k \boldsymbol {x}_op \neq\boldsymbol {\hat x}_k xop=x^k 时,即后面的几次迭代,首先注意到此时先验误差 δ x k = 0 \delta \boldsymbol {x}_k = \boldsymbol 0 δxk=0。然后对于公式中的 h ( x ^ k , 0 ) − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) \boldsymbol h(\boldsymbol {\hat{x}}_{k}, \boldsymbol 0) - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) h(x^k,0)h(xop,0)Hkxop(x^kxop) 这一项,可以发现其值为下图中所示的 真实的先验预测观测值线性化的先验预测观测值 的差。

Kalman Filter in SLAM (7) ——Error-state Iterated Kalman Filter (EsIKF, 误差状态迭代卡尔曼滤波)_第2张图片

如果这里将其作为 一阶小量忽略,则迭代公式化简为:

δ x ˇ o p = K k ( z m − h ( x o p , 0 ) − H k ∣ x o p ( x ^ k − x o p ) ) \delta \boldsymbol {\check x}_{op} = \boldsymbol {K}_{k} \left( \boldsymbol z_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) - \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op})\right) δxˇop=Kk(zmh(xop,0)Hkxop(x^kxop))

同理,要注意经过多次迭代后,只有最后一次迭代需要计算后验误差的协方差矩阵,然后将最后一次迭代得到的后验误差补偿到先验状态上去。

2.3. R2Live中的 Es-IKF 的校正公式理解

2.3.1. IMU+Camera

这里只推导迭代过程中的校正公式,初始化时候的预测公式不做推导。

首先明白 x ^ k \boldsymbol {\hat x}_k x^k 始终是IMU状态方程得到的 预测状态值,在 IEKF 的过程中它始终是不变的,同理 先验误差协方差矩阵 也是保持不变的。

在迭代过程中,上一次迭代得到了一个更接近真实状态的点 x o p \boldsymbol {x}_{op} xop,然后这一次迭代就把它作为线性化展开点对观测方程进行线性展开得到系数矩阵 H k ∣ x o p \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} Hkxop 和这个点的观测值 h ( x o p , 0 ) \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) h(xop,0),从而 h ( x o p , 0 ) \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) h(xop,0) 就知道了, H k ∣ x o p ( x ^ k − x o p ) \left. \boldsymbol H_{k} \right|_{\boldsymbol x_{op}} (\boldsymbol {\hat{x}}_{k} - \boldsymbol x_{op}) Hkxop(x^kxop) 这一项也可以计算出来了。注意 h ( x o p , 0 ) \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) h(xop,0) 就是把 x o p \boldsymbol {x}_{op} xop 点的相机位姿带入观测方程中,得到路标点的重投影像素坐标,然后 z m − h ( x o p , 0 ) \boldsymbol z_m - \boldsymbol h(\boldsymbol x_{op}, \boldsymbol 0) zmh(xop,0) 就是本次计算的重投影误差。

2.3.2.IMU+LiDAR

这里只推导迭代过程中的校正公式,初始化时候的预测公式不做推导。

首先明白 x ^ k \boldsymbol {\hat x}_k x^k 始终是IMU状态方程得到的 预测状态值,在 IEKF 的过程中它始终是不变的,同理 先验误差协方差矩阵 也是保持不变的。

在迭代过程中,上一次迭代得到了一个更接近真实状态的点 x o p \boldsymbol {x}_{op} xop。那么LiDAR的观测方程是什么呢?我们计算的残差项是世界坐标系中 点到平面的距离,而这个平面是上一次SLAM过程中保存在kdtree中的点组成的,所以 平面是不变 的。而点是从这一帧的LiDAR坐标系转换到世界坐标系,因此点的坐标和这一帧的 LiDAR坐标系的位姿 有关。

那么这样我们计算的测量值应该就是点到平面的距离,那么实际观测的测量值应该是什么?TODO


Kalman Filter in SLAM (7) ——Error-state Iterated Kalman Filter (EsIKF, 误差状态迭代卡尔曼滤波)_第3张图片

你可能感兴趣的:(SLAM,机器学习,人工智能,算法)