First Estimate Jacobian (FEJ)经典论文中的EKF SLAM的error-state equation的推导过程

论文A First Estimate Jacobian EKF for Improving SLAM Consistency中首次提出了First Estimate Jacobian (FEJ),这篇论文是FEJ的经典论文了,值得深入研读。本文先贴出这篇论文中EKF SLAM的Error-State Equation的推导过程。感兴趣的同学,如果有需要讨论的地方,可以email联系[email protected]

在标准化的SLAM公式中,机器人的状态向量包括在全局参考坐标系下的机器人位姿和路标的位置。因此在时刻k的状态向量可以表示为(在这篇论文中,为了表示的简洁,状态向量中只包含了一个路标):

(1)xkT=[pRkTϕRkpLT]=[xRkTpLT]

其中xRkT=[pRkTϕRk]表示机器人的位姿,pL表示路标的位置。

EKF-SLAM包含两个步骤:propagation和update。

EKF Propagation

EKF propagation公式如下:

(2)p^Rk+1|k=p^Rk|k+C(ϕ^Rk|k)Rkp^Rk+1(3)ϕ^Rk+1|k=ϕ^Rk|k+Rkϕ^Rk+1(4)p^Lk+1|k=p^Lk|k

其中C()表示2×2的旋转矩阵,而Rkx^Rk+1=[Rkp^Rk+1TRkϕ^Rk+1]T是从基于里程计估计的从时刻k到时刻k+1机器人的运动。毫无疑问这个估计是含有均值为0的高斯白噪声wk=RkxRk+1Rkx^Rk+1,其协方差矩阵为Qk

除了上述的状态递推公式外,EKF还需要线性化的error-state递推公式,该公式由公式(5)给出

(5)x~k+1|k=[ΦRk03×202×3I2][x~Rk|kx~Lk|k]+[GRk02×2]wk=Φkx~k|k+Gkwk

其中ΦRkGRk可以从状态递推公式得到
(6)ΦRk=[I2JC(ϕ^Rk|k)Rkp^Rk+101×21]=[I2J(p^Rk+1|Kp^Rk|k)01×21](7)GRk=[C(ϕ^Rk|k)02×101×21]

其中J=[0110]

First Estimate Jacobian (FEJ)经典论文中的EKF SLAM的error-state equation的推导过程

state和error state
- x^是状态向量x的估计;
- x~=xx^是error state;

对于不包含噪声的机器人状态向量也满足

(8)pRk+1|k=pRk|k+C(ϕRk|k)RkpRk+1(9)ϕRk+1|k=ϕRk|k+RkϕRk+1

公式(8)和(2)的两边相减,可以得到

p~Rk+1|k=p~k|k+C(ϕRk|k)RkpRk+1C(ϕ^Rk|k)Rkp^Rk+1

p~Rk+1|k=p~k|k+(C(ϕRk|k)C(ϕ^Rk|k))RkpRk+1+C(ϕ^Rk|k)Rkp~Rk+1

(10)p~Rk+1|kp~k|k+(C(ϕRk|k)C(ϕ^Rk|k))Rkp^Rk+1+C(ϕ^Rk|k)Rkp~Rk+1

显然ϕRk|k=ϕ^Rk|k+ϕ~Rk|k,所以

(11)C(ϕRk|k)C(ϕ^Rk|k)=C(ϕ^Rk|k+ϕ~Rk|k)C(ϕ^Rk|k)

对于这种2D旋转,我们可以将旋转矩阵C写成:

(12)C(ϕ)=[cos(ϕ)sin(ϕ)sin(ϕ)cos(ϕ)]

易得,其导数为
(13)DϕC=JC

可以得到如下的一阶近似:
(14)C(ϕ^Rk|k+ϕ~Rk|k)C(ϕ^Rk|k)=JC(ϕ^Rk|k)ϕ~Rk|k

所以,可以得到公式(10)为:

(15)p~Rk+1|k=p~Rk|k+JC(ϕ^Rk|k)Rkp^Rk+1ϕ~Rk|k+C(ϕ^Rk|k)Rkp~Rk+1

由公式(2)知C(ϕ^Rk|k)Rkp^Rk+1=p^Rk+1|kp^Rk|k,所以

(16)p~Rk+1|k=p~Rk|k+J(p^Rk+1|kp^Rk|k)ϕ~Rk|k+C(ϕ^Rk|k)Rkp~Rk+1

EKF Update

EKF SLAM的测量模型是关于路标相对机器人的位置的函数:

(17)zk=h(RkpL)+vk

其中RkpL=CT(ϕRk)(pLpRk)是时刻k路标相对于机器人的位置,vk是均值为0,协方差为Rk的高斯测量噪声。

为了不失一般性,我们假定h是非线性函数。线性化的measurement-error equation为:

(18)z~k[HRkHLk][x~Rk|k1x~Lk|k1]+vk=Hkx~k|k1+vk

其中HRkHLk分别是h对机器人位姿和路标的Jacobian矩阵。

First Estimate Jacobian (FEJ)经典论文中的EKF SLAM的error-state equation的推导过程

注意:和EKF Propagation不同, 是因为h是非线性的,我们要在x^k|k1处线性化,并且采用链式法则。

首先计算HLkHLk=DhDpLRkpL=(h)DpLRkpL, 而

(19)DpLRkpL(x^k|k1)=(h)CT(ϕ^k|k1)

接下来计算HRk,可以把HRk写成分块矩阵的形式HRk=DhDxRkRkpL=(h)[G1G2],其中

(20)G1=DpRkRkpL=CT(ϕ^Rk|k1)(21)G2=DϕRkRkpL=(DϕRkCT(ϕ^Rk|k1))(p^Lk|k1p^Rk|k1)

又因为
(22)DϕRkCT(ϕ^Rk|k1)=(JCT(ϕ^Rk|k1))T=CT(ϕ^Rk|k1)JT=CT(ϕ^Rk|k1)(J)

所以,
(23)G2=DϕRkRkpL=CT(ϕ^Rk|k1)(J)(p^Lk|k1p^Rk|k1)

相关文章:

  • 2021-10-07
  • 2021-06-16
  • 2021-09-23
  • 2021-10-16
  • 2021-12-15
  • 2021-11-10
  • 2021-08-22
  • 2021-09-16
猜你喜欢
  • 2021-12-23
  • 2022-01-11
  • 2021-08-29
  • 2022-01-09
  • 2021-12-05
  • 2021-10-31
相关资源
相似解决方案