Fusion SLAM
  • 概述
  • 介绍
  • 里程计
  • 地图生成
  • 地图优化
  • 数据集与实验
  • 接口与扩展
  • 已知问题
  • 未来工作
  • 附录与参考
  • 相关教程
项目
  • 简体中文
  • English
  • 概述
  • 介绍
  • 里程计
  • 地图生成
  • 地图优化
  • 数据集与实验
  • 接口与扩展
  • 已知问题
  • 未来工作
  • 附录与参考
  • 相关教程
项目
  • 简体中文
  • English
  • 概述
  • 介绍

    • 符号
    • 流程图
    • 流程描述
    • 坐标系定义
    • 主要论文
    • 相关研究
  • 里程计

    • 介绍
    • 初始化
    • 状态估计
    • 时间同步
    • 地图约束
    • 异常处理
  • 地图生成
  • 地图优化
  • 数据集与实验
  • 接口与扩展
  • 已知问题
  • 未来工作
  • 附录与参考

    • 参考文献
    • 附录
  • 相关教程

    • 里程计教程
    • ROVIOLI教程

附录

MU误差状态传播详细推导

Iq¯˙W(t)=12Ω(ω(t))Iq¯W(t)(1)Wp˙I(t)=WvI(t)(2)Wv˙I(t)=Wa(t)(3)bg˙(t)=nwg(t)(4)b˙a(t)=nwa(t)(5)ωm(t)=ω(t)+bg(t)+ng(t)(6)am(t)=C(Iq¯W(t))(Wa(t)+Wg)+ba(t)+na(t)(7)

其中,ωm和am为IMU直接输出(包含偏置和噪声)的线性加速度和角速度,C(Iq¯W(t))为四元数对应的旋转矩阵

角度误差状态

公式(1)四元数对时间导数的详细推导过程:

WL(t)q¯˙(t)=limΔt→01Δt(WL(t+Δt)q¯−WL(t)q¯))=limΔt→01Δt(lL(t)L(t+Δt)q¯⊗WL(t)q¯−q¯0⊗WL(t)q¯)≈limΔt→01Δt([12⋅θ~1]−[01])⊗WL(t)q¯=12[ω0]⊗WL(t)q¯=12[−|ω|×ω−ωT0]WL(t)q¯=12Ω(ω)WL(t)q¯

其中,

Ω(ω)=[−|ω|×ω−ω⊤0],|ω|×≜[0−ω3ω2ω30−ω1−ω2ω10]

连续状态误差方程:

q¯=q¯~⊗q¯^(8)q¯˙=q¯~˙⊗q¯^+q¯~⊗q¯^˙(9)

其中,q¯是JPL单位四元数,q¯~是四元数旋转误差,q¯^是四元数估计值

带入之前(1)的求导结果改写为:

12[ω0]⊗q¯=q¯~˙⊗q¯^+q¯~⊗(12[ω^0]⊗q¯^)(10)q¯~˙⊗q¯^=12([ω0]⊗q¯−q¯~⊗[ω^0]⊗q¯^)(11)q¯~˙=12([ω0]⊗q¯~−q¯~⊗[ω^0])(12)

关于陀螺仪的理想值,通过:

ωm(t)=ω(t)+bg(t)+ng(t)ω^=ωm−b^gb~g=bg−bg^

推出:

ω=ω^−b~g−ng

带入后:

q¯~˙=12([ω^0]⊗q¯~−q¯~⊗[ω^0])−12[b~g+ng0]⊗q¯~=12[−2|ω^|×03×103×1⊤0]⋅q¯~−12[b~g+ng0]⊗q¯~=12[−2|ω^|×03×103×1⊤0]⋅q¯~−12[−|b~g+ng|× (b~g+ng)−(b~g+ng)⊤0]⋅[q~1]=12[−2|ω^|×03×103×1T0]⋅q¯~−12[(b~g+ng)0]−O(|b~g∥q~|,|ng||q~|)

忽略⼆阶项:

q¯~˙=[−|ω^|×q~−12(b~g+ng)0]

其中,

q¯~=[q¯~q~4] =[k^sin⁡(θ~/2)cos⁡(θ~/2)]≈[12θ~1]

代入得:

θ~˙=−|ω^|×θ~−b~g−ng

速度误差状态

估计值:

Wv^˙I(t)=C(Iq¯^W(t))⊤Ia^(t)−Wg

理想值:

Wv˙I(t)=Wa(t)am(t)=C(Iq¯W(t))(Wa(t)+Wg)+ba(t)+na(t)

误差:

v~=v−v^

两边对时间求导数:

v~˙=C(Iq¯W)⊤(am−ba−na)−C(Iq¯^W)⊤a^=C(q¯~⊗q¯^)⊤(am−ba−na)−C(q¯^)⊤a^=C(q¯^)TC(q¯~)⊤(am−ba−na)−C(q¯^)⊤a^

通过WIC(q¯~)≈I3×3−|θ~|×,b~a=ba−ba^,a^=am−ba^,求得:

v~˙=C(q¯^)⊤(I3×3+|θ~|×)(a^−b~a−na)−C(q^)⊤a^=−C(q¯^)⊤b~a−C(q¯^)⊤na+C(q¯^)⊤|θ~|×a^=−C(q¯^)⊤b~a−C(q¯^)⊤na−C(q¯^)⊤|a^|×θ~

位置误差状态

估计值:

Wp^˙I(t)=Wv^I(t)+(C(Iq¯^W(t))TIa^(t)−Wg)Δt

理想值:

Wp˙I(t)=WvI(t)+Wa(t)Δtam(t)=C(Iq¯W(t))(Wa(t)+Wg)+ba(t)+na(t)

误差:

p~=p−p^

两边对时间求导数:

p~˙=v−v^+(C(q¯^)⊤C(q¯~)⊤(am−ba−na)−C(q¯^)⊤a^)Δt=v^+v~−v^+(C(q¯^)⊤C(q¯~)⊤(am−ba−na)−C(q¯^)⊤a^)Δt=v~+(C(q¯^)⊤C(q¯~)⊤(am−ba−na)−C(q¯^)⊤a^)Δt

通过GLC(q¯~)≈I3×3−|θ~|×[13],b~a=ba−ba^,a^=am−ba^,求得:

p~˙=v~−C(q¯^)⊤b~aΔt−C(q¯^)⊤naΔt−C(q¯^)⊤|a^Δt|×θ~

将所有误差状态写成矩阵的形式:

F=[−|ω^|×0303−I303−WIR^⊤|a^Δt|×03I303−WIR^⊤Δt−WIR^⊤|a^|×030303−WIR^⊤03030303030303030303](47)

进⼀步做离散化:

Φ(t+Δt,t)=exp⁡(FΔt)=I6×6+FΔt+12!F2Δt2+…Φ=[I3−|ω^Δt|×0303−I3Δt03−WIR^⊤|a^Δt2|×I3I303−WIR^⊤Δt2−WIR^⊤|a^Δt|×03I303−WIR^⊤Δt030303I30303030303I3](47)

车轮里程计观测误差状态传播详细推导

车轮里程计预积分

考虑在两个克隆时间点ti和ti+1之间对轮式里程计测量进行预积分。连续时间下的2D运动学模型在时间区间tτ∈[ti,ti+1]内给定为:

[OiOτθ˙Oix˙OτOiy˙Oτ]=[−OτωOτvcos⁡(τOiθ)Oτvsin⁡(τOiθ)]=[−OτωOτvcos⁡(iOτθ)−Oτvsin⁡(iOτθ)](23)

其中,OτOiθ是局部偏航角,OixOτ和OiyOτ是{Oτ}在起始积分坐标系{Oi}中的二维位置。请注意,使用−Oτω和−Oτvsin(OiOτθ)是因为遵循全局到局部的方向表示。还请注意,该模型揭示了2D方向在积分周期内的演变事实。

为了在不访问状态估计(特别是方向)的情况下,将从时间步i到τ+1的所有轮式里程计测量局部组合起来,可以执行以下测量的积分:

OiOτ+1θ=OiOτθ−∫tτtτ+1Otωdt(24)≈OiOτθ−OτωΔt(25)OixOτ+1=OixOτ+∫tτtτ+1Otvcos(OiOtθ)dt(26)≈OixOτ+∫tτtτ+1vcos⁡(OiOτθ−Oτω(t−tτ))dt(27)=OixOτ−Oτv(sin⁡(OiOτθ−OτωΔt)−sin⁡(OiOτθ))Oτω(28)OiyOτ+1=OiyOτ−∫tτtτ+1Otvsin(Otθ)dt(29)≈OiyOτ−∫tτtτ+1Oτvsin⁡(OiOτθ−Oτω(t−tτ))dt(30)=OiyOτ−Oτv(cos⁡(OiOτθ−OτωΔt)−cos⁡(OiOτθ))Oτω(31)

其中, Δtk = tτ+1−tτ。请注意,假设Oτω和Oτv(离散传感器模型)是恒定的,但考虑了tτ和tτ+1之间的航向角变化,以便拥有比假设它恒定更准确的模型。

内参雅可比矩阵

轮式里程计的积分与内参xWI​相互纠缠在一起,理想情况下,当有新的内参估计可用时,应该重新积分这些测量值,但这会使预积分失去计算效率。为了解决这个问题,对当前内参的预积分里程计测量进行线性化处理,同时适当考虑由于内参的线性化误差和噪声引起的测量不确定性:

zi+1≃g(ωml(i:i+1),ωmr(i:i+1),x^WI)+∂g∂x~WIx~WI+∂g∂nwnw

其中,nw是堆叠的噪声向量,其τ−th块对应于tτ∈[ti,ti+1]时间段内的编码器测量噪声(i.e.,[nωl,τnωr,τ]⊤)。

2D方向扰动的定义。从一般的3D方向OiOτR扰动推导出这个定义:

OiOτR=exp⁡(−OiOτθ)=exp⁡(OiOτθ~)exp(−OiOτθ^)

其中,OiOτθ=OiOτθe3,其中ei是第i个标准单位基向量。需要注意的是,遵循JPL符号约定,使用exp⁡(OiOτθ)=exp⁡(−OiOτθ~)exp(OiOτθ^)。根据上述方程,得到:

exp⁡(OiOτθ~)=exp⁡(−OiOτθ)exp⁡(−OiOτθ^)−1=[cos⁡(OiOτθ)sin⁡(OiOτθ)0−sin⁡(OiOτθ)cos⁡(OiOτθ)0001][cos⁡(OiOτθ^)−sin⁡(OiOτθ^)0sin⁡(OiOτθ^)cos⁡(OiOτθ^)0001]=[cos⁡(OiOτθ−OiOτθ^)sin⁡(OiOτθ−OiOτθ^)0−sin⁡(OiOτθ−OiOτθ^)cos⁡(OiOτθ−OiOτθ^)0001]=exp⁡(OiOτθ^−OiOτθ)

计算结果可以通过去除指数函数将其简化为 OiOτθ~=OiOτθ^−OiOτθ,并得到2D方向误差的定义为:

OiOτθ~=OiOτθ^−OiOτθ(42)

使用推导(42),可以从(25),(28)和(31)得到tτ步骤积分的雅可比矩阵:

OiOτ+1θ~=OiOτθ~+ΔtOτω~(43)=OiOτθ~+hθωOτω~(44)=OiOτθ~+hθωHωxx~WI+hθωHωn(45)=OiOτθ~+H1,τx~WI+H2,τnω,τ(46)Oix~Oτ+1=Oix~Oτ+Oτv^(cos⁡(OiOτθ^−Oτω^Δt)−cos⁡(OiOτθ^))Oτω^Oiτθ~+Oτv^(sin⁡(OiOτθ^−Oτω^Δt)−sin⁡(OiOτθ^)+Oτω^Δtcos(OiOτθ^−Oτω^Δt))Oτω^2Oτω~−sin⁡(OiOτθ^−Oτω^Δt)−sin⁡(OiOτθ^)Oτω^Oτv~(47)=Oix~Oτ+hxθOiOτθ~+hxωOτω~+hxvOτv~(48)=Oix~Oτ+hxθOiOτθ~+hxω(Hωxx~WI+Hωnnω,τ)+hxv(Hvxx~WI+Hvnnω,τ)(49)=Oix~Oτ+hxθOiOτθ~+(hxωHωx+hxvHvx)x~WI+(hxωHωn+hxvHvn)nω,τ(50)=Oix~Oτ+H3,τOiOτθ~+H4,τx~WI+H5,τ(51)Oiy~Oτ+1=Oiy~Oτ−Oτv^(sin⁡(OiOτθ^−Oτω^Δt)−sin⁡(OiOτθ^))Oτω^OiOτθ~+Oτv^(cos⁡(OiOτθ^−Oτω^Δt)−cos⁡(OiOτθ^)−Oτω^Δtsin(OiOτθ^−Oτω^Δt))Oτω^2Oτω~−cos⁡(OiOτθ^−Oτω^Δt)−cos⁡(OiOτθ^)Oτω^Oτv~(52)=Oiy~Oτ+hyθOiOτθ~+hyωOτω~+hyvOτv~(53)=Oiy~Oτ+hyθOiOτθ~+hyω(Hωxx~WI+Hωnnω,τ)+hyv(Hvxx~WI+Hvnnω,τ)(54)=Oiy~Oτ+hyθOiOτθ~+(hyωHωx+hyvHvx)x~WI+(hyωHωn+hyvHvn)nω,τ(55)=Oiy~Oτ+H6,τOiOτθ~+H7,τx~WI+H8,τnω,τ(56)

其中,Hωx,Hωn,Hvx和Hvn是测量(22)关于内部参数和噪声的雅可比矩阵,给定估计值如下:

Oω~=[−ωmlb^ωmrb^−ωmrr^r−ωmlr^lb^2][r~lr~rb~]+[r^lb^−r^rb^][nωlnωr](57)=Hωxx~CI+Hωnnω(58)Ov~=[ωml2ωmr20][r~lr~rb~]+[−r^l2−r^r2][nωlnωr](59)=Hvxx~CI+Hvnnω(60)

可以发现,τ+1步预积分的误差是τ步预积分和测量误差的线性组合。利用上述方程,可以递归计算噪声协方差Pm,τ+1和雅可比矩阵∂gτ+1∂x~WI如下:

Φtr,τ=[100H3,τ10H6,τ01],ΦWI,τ=[H1,τH4,τH7,τ],Φn,τ=[H2,τH5,τH8,τ](61)Pm,τ+1=Φtr,τPm,τΦtr,τ⊤+Φn,τQτΦn,τ⊤(62)∂gτ+1∂x~WI=Φtr,τ∂gτ∂x~WI+ΦWI,τ(63)

其中,Qτ是tτ时刻轮式编码器测量的噪声协方差。这些方程展示了雅可比矩阵和噪声协方差在预积分间隔期间的演化过程。因此,可以根据零初始条件(i.e.,Pm,0,∂g0∂x~WI=03)在预积分结束时递归计算测量噪声协方差Pm和雅可比矩阵∂g∂x~WI的值。假设使用n个测量值进行预积分,可以推导出∂g∂x~WI的闭式表达式:

OiOi+1θ~=∑k=1nhθω,kHωx,kx~CI(64)=∑k=1nΔtk[−ωml,kb^ωmr,kb^−ωmr,kr^r−ωml,kr^lb^2]x~CI(65)=[Γθ1Γθ2Γθ3]x~CI(66)Oix~Oi+1=∑k=1nhxθ,kOiOkθ~+(hxω,kHωx,k+hxv,kHvx,k)x~CI(67)=∑k=1nhxθ,k{∑j=1k−1Δtj[−ωml,jb^ωmr,jb^−ωmr,jr^r−ωml,jr^lb^2]x~CI}+(hxω,k[−ωml,kb^ωmr,kb^−ωmr,kr^r−ωml,kr^lb^2]+hxv,k[ωml,k2ωmr,k20])x~CI(68)=[Γx1Γx2Γx3]x~CI(69)Oiy~Oi+1=∑k=1nhyθ,kOiOkθ~+(hyω,kHωx,k+hyv,kHvx,k)x~CI(70)=∑k=1nhyθ,k{∑j=1k−1Δtj[−ωml,jb^ωmr,jb^−ωmr,jr^r−ωml,jr^lb^2]x~CI}](71)+(hyω,k[−ωml,kb^ωmr,kb^−ωmr,kr^r−ωml,kr^lb^2]+hyv,k[ωml,k2ωmr,k20])x~CI(72)=[Γy1Γy2Γy3]x~CI(73)

其中

Γθ1=∑k=1n−Δtkωml,kb^Γθ2=∑k=1nΔtkωmr,kb^Γθ3=∑k=1n−Δtkωmr,kr^r−ωml,kr^lb^2Γx1=∑k=1n{−hxω,kωml,kb^+hxv,kωml,k2−hxθ,k∑j=1k−1Δtjωml,jb^}Γx2=∑k=1n{hxω,kωmr,kb^+hxv,kωmr,k2+hxθ,k∑j=1k−1Δtjωmr,jb^}Γx3=∑k=1n{−hxω,kωmr,kr^r−ωml,kr^lb^2−hxθ,k∑j=1k−1Δtjωmr,jr^r−ωml,jr^lb^2}Γy1=∑k=1n{−hyω,kωml,kb^+hyv,kωml,k2−hyθ,k∑j=1k−1Δtjωml,jb^}Γy2=∑k=1n{hyω,kωmr,kb^+hyv,kωmr,k2+hyθ,k∑j=1k−1Δtjωmr,jb^}Γy3=∑k=1n{−hyω,kωmr,kr^r−ωml,kr^lb^2−hyθ,k∑j=1k−1Δtjωmr,jr^r−ωml,jr^lb^2}

得到内参状态的雅可比行列式为:

∂g∂x~WI=[Γθ1Γθ2Γθ3Γx1Γx2Γx3Γy1Γy2Γy3]

外参雅可比矩阵

请注意,预积分的轮式测量(33)仅提供里程计平面上的2D相对运动,而VIWO状态向量(34)包含3D IMU/相机姿态。为了建立预积分里程计与状态之间的联系,需要明确IMU和里程计之间的相对变换(外部校准)[参见(32)]:

zi+1=[OiOi+1θOidOi+1]=[e3⊤Log(IORGIi+1RGIiR⊤IOR⊤)ΛIORGIiR(GpIi+1+GIi+1R⊤IpO−GpIi−GIiR⊤IpO)]

其中,Λ=[e1e2]⊤,Log(⋅)是SO(3)矩阵对数函数[8]。由于这个测量依赖于连续的两个姿态以及里程计/IMU的外部参数,当在MSCKF中使用它进行更新时,需要计算测量残差和相应的测量雅可比矩阵,计算方法如下。

每次测量的残差可以定义为:

rθ=e3⊤Log(IOR^GIi+1R^GIiR^⊤IOR^⊤)−OiOi+1θrd=OidOi+1−ΛIOR^GIiR^(Gp^Ii+1+GIi+1R^⊤Ip^O−Gp^Ii−GIiR^⊤Ip^O)

请注意,由于2D方位扰动(42)的定义,在方向残差中采用了预测-测量形式。

首先,扰动姿态以获取相对于姿态的雅可比矩阵(83):

(I−|e3OiOi+1θ~|×)OiOi+1R^=IOR^(I−|GIi+1θ~|×)GIi+1R^GIiR^⊤(I+|GIiθ~|×)IOR^⊤OiOi+1θ~≈e3⊤IOR^GIi+1θ~−e3⊤IOR^GIi+1R^GIiR^⊤GIiθ~Oid^Oi+1+Oid~Oi+1=ΛIOR^(I−|GIiθ~|×)GIiR^(Gp^Ii+1+Gp~Ii+1)+ΛIOR^(I−|GIiθ~|×)GIiRGIi+1R⊤(I+|GIi+1θ~|×)Ip^O−ΛIOR^(I−|GIiθ~|×)GIiR^(Gp^Ii+Gp~Ii)−IOR^Ip^OOid~Oi+1≈ΛIOR^|GIiR^(Gp^Ii+1+GIi+1R^⊤Ip^O−Gp^Ii)|×GIiθ^−ΛIOR^GIiR^Gp~Ii−ΛIOR^GIiR^GIi+1R^⊤|Ip^O|×GIi+1θ~+ΛIOR^GIiR^Gp~Ii+1

此外,空间外部参数的扰动为:

(I−|e3OiOi+1θ~|×)OiOi+1R^=(I−|OIθ~|×)IOR^GIi+1R^GIiR^⊤IOR^⊤(I+|OIθ~|×)OiOi+1θ~≈e3⊤(I−IOR^GIi+1R^GIiR^⊤IOR^⊤)OIθ~Oid^Oi+1+Oid~Oi+1=Λ(I−|IOθ~|×)IOR^GIiR^Gp^Ii+1−Λ(I−|IOθ~|×)IOR^GIiR^GIi+1R^⊤IOR^⊤(I+|IOθ~|×)(Op^I+Op~I)−Λ(I−|IOθ~|×)IOR^GIiR^Gp^Ii+Λ(Op^I+Op~I)Oid~Oi+1≈Λ(|IOR^GIiR^(Gp^Ii+1+GIi+1R^⊤Ip^O−Gp^Ii)|×+IOR^GIiR^GIi+1R^⊤IOR^⊤|Op^I|×)IOθ~+Λ(I−IOR^GIiR^GIi+1R^⊤IOR^⊤)Op~I

将上述方程整理成矩阵形式,得到相对于每个状态的以下雅可比矩阵:

∂h∂x~Ii+1=[e3⊤IOR^01×301×9−ΛIOR^GIiR^GIi+1R^⊤|Ip^O|×ΛIOR^GIiR^02×9]∂h∂x~Ci+1=[−e3⊤IOR^GIi+1R^GIiR^⊤01×3ΛIOR^|GIiR^(Gp^Ii+1+GIi+1R^⊤Ip^O−Gp^Ii)|×−ΛIOR^GIiR^]∂h∂x~WE=[e3⊤(I−IOR^GIi+1R^GIiR^⊤IOR^⊤)01×3HWE1Λ(I−IOR^GIiR^GIi+1R^⊤IOR^⊤)]HWE1=Λ(|IOR^GIiR^(Gp^Ii+1+GIi+1R^⊤Ip^O−Gp^Ii)|×+IOR^GIiR^GIi+1R^⊤IOR^⊤|Op^I|×)

请注意,雅可比行列式 (94) 和 (95) 与[3]相同。

观测误差状态传播

zk+1:=g(ωl(k:k+1),ωr(k:k+1),xWI)=h(xIk+1,xCk+1,xWE)≈g(ωml(k:k+1),ωmr(k:k+1),x^WI)+∂g∂x~WIx~WI+∂g∂nωnω≈h(x^Ik+1,x^Ck+1,x^WE)+∂h∂x~Ik+1x~Ik+1+∂h∂x~Ck+1x~Ck+1+∂h∂x~WEx~WEz~k+1:=g(ωml(k:k+1),ωmr(k:k+1),x^WI)−h(x^Ik+1,x^Ck+1,x^WE)≈[∂h∂x~Ik+1∂h∂x~Ck+1∂h∂x~WE−∂g∂x~WI]⏟Hk+1x~k+1−∂g∂nωnω

Prev
参考文献