Direct Sparse Visual-Inertial Odometry using Dynamic Marginalization1
- 把尺度,重力方向放进模型中进行联合优化
- 由于尺度不是立刻就可观的,因此我们以任一尺度进行初始化,而不是延迟初始化到量都变得可观之后(VIORB)。
- 对旧的量进行部分边缘化,为了保证一致性,提出“动态边缘化”策略。因此在尺度远离最优值时也可以采用边缘化。
DIRECT SPARSE VISUAL-INERTIAL ODOMETRY
DSVIO
初始化和可观性

零速和恒速运动都会导致无法进行初始化,VIORB使用15s初始化来保证所有量都可观。
我们是把scale,gravity都放入优化中使其和pose一起优化。
- 使用DSO的初始化方式,得到粗略位姿估计,和近似的逆深度,保证平均逆深度为1.
- 初始重力方向采用40个加速度测量数据的平均值。
- 初始化速度和IMU-bias的值为0.
基于Sim(3)的世界表示方式
为了能够以尺度,重力初始值来优化。除了度量坐标系,定义一个DSO坐标系,它是度量系的一个被尺度放缩,和旋转的版本。定义为Tm_d∈{T∈SIM(3)∣ translation (T)=0},ξm_d∈log(Tm_d)∈sim(3).
光度误差使用DSO系,独立于尺度和重力方向,惯导误差使用度量系(metric frame)
Scale-aware Visual-inertial Optimization

关键帧之间不能超过0.5s,边缘化中可以违反这个部分,确保长期关联。优化的位姿是在DSO坐标系下的,不依赖于环境尺度。
1) Nonlinear Optimization
每个关键帧优化的变量为:
si:=[(ξcami−wD)T,viT,biT,ai,bi,di1,di2,…,dim]T(1)
所有的向量为:
s=[cT,ξm−dT,s1T,s2T,…,snT]T(2)
相机和IMU的的residual是没有重叠部分的,因此可以独立开:
H=Hphoto+Himu and b=bphoto+bimu(3)
惯性器件的残差需要使用相对IMU的metric坐标系,因此定义新的状态:
si′:=[ξw−imuiM,vi,bi]T and s′=[s1′T,s2′T,…,sn′T]T(4)
惯性的残差导出:
Himu′=Jimu′TWimuJimu′ and bimu′=−Jimu′TWimurimu(5)
这个之前的位姿表示定义不同,需要一个Jrel
Himu=JrelT⋅Himu′⋅Jrel and bimu=JrelT⋅bimu′(6)
详细推导见补充材料。
2)Marginalization using the Schur-Complement:
这里为了保证零空间,会使用FEJ,把Jrel固定线性化点,他是和ξm_d相关的。
3)Dynamic Marginalization for Delayed Scale Convergence
边缘化时不固定尺度的线性化点。
动态边缘化就是保持几个边缘化先验,当尺度估计离线性化点交远时,重置当前使用的。保留三个边缘化先验,Mvisual,Mcurr,Mhalf
Mvisual包含之前视觉状态的与尺度无关的信息,不能用来推断全局尺度。
Mcurr包含设置线性点以来的所有尺度信息。
Mhalf包含最近尺度接近当前值的状态信息。
当尺度估计和线性点差很多时,设置Mcurr=Mhalf,Mcurr=Mvisual,确保优化有之前的信息。
定义Gmetric包含VI factor,Gvisual包含其它的factor,不包括边缘化先验

Gfull =Gmetric ∪Gvisual (7)
优化使用的因子图集是:
Gba=Gmetric ∪Gvisual ∪Mcurr (8)
当一个关键帧被边缘化掉,我们在因子图Gvisual ∪Mvisual 上进行边缘化操作来更新Mvisual ,意味着它包含所有的边缘化的视觉因子,没有惯性因子,因此和尺度无关。
对于边缘化的关键帧,定义i帧被边缘化时的尺度估计值为si,包含惯性因子被边缘化时,强制下面的约束:
∀i∈Mcurr:si∈[smiddle/di,smiddle ⋅di](9)
∀i∈Mhalf :si∈{[smiddle ,smiddle ⋅di],[smiddle /di,smiddle ], if scurr >smiddle otherwise (10)
smiddle是当前允许尺度范围的中间值,di是时间i尺度区间大小,scurr是当前的尺度估计
我们在因子图Gba上面边缘化更新Mcurr,在因子图
Gmetric ∪Gvisual ∪Mhalf 上边缘化更新 Mhalf.
为了保证尺度约束,边缘化后使用算法:

作用:
- 确保当前使用的边缘化因子中尺度的差异小于di2的约束条件被满足
- 另一方面,因子中总是包含惯性因子,因此可以持续进行尺度估计
- FEJ被分别使用在Mcurr和Mhalf中
这里的di选择应该足够小来保证一致性,也不能太小需要确保包含惯性因子,因此使用动态调整:
di=min{dminj∣j∈N\{0},si−1si<di}(11)
理解:di太小则容易按照算法1进行更新,视觉把curr给占据了。di太大了则覆盖的范围小,则无法保证和之前的状态有一致性。
公式(11)确保不会发生,Mhalf被Mvisual給重置,然后Mhalf又赋值给了Mcurr,我们选择dmin=1.1
每个新帧联合优化完成后,跟踪会使用新估计的尺度、重力方向、bias和速度重新初始化,以及设置新的关键帧为参考帧。当估计完新的一帧变量,边缘化掉所有变量除了关键帧pose和最新帧的变量。因为没有涉及尺度,不需要动态边缘化。
Supplementary Material
对参数的评价
- 由于IMU的加入,点可以少一些,而且点少还会提高精度,因为可靠地点数目变多了

公式推导
使用以下公式来判断尺度是否收敛,n是队列里最大数目取60:
c=minj:=i−n+1nsjmaxj:=i−n+1nsj−1(12)
当c<0.005时认为收敛,固定ξm_d。
计算Jrel
相机和IMU是在两个不同的坐标系下表示的,因此位姿变换有
Tw_imuMξw−imuM=Tm_d(Tcam_wD)−1(Tm_d)−1Tcam_imuM=ξm−d⊞(ξcam−wD)−1⊞ξm−d−1⊞ξcam−imuM=:Ψ(ξcam−wD,ξm_d)(13)
公式含义是:Metric系下imu转到cam变换矩阵,先转到DSO系下,DSO系下转为imu到world变换矩阵,再把DSO系转为Metric系得到结果
对于函数Ω(ξ):sim(3)→sim(3),我们定义导数:
Ω(ξ)−1⊞Ω(ξ⊞ϵ)=dϵdΩ(ξ⊞ϵ)⋅ϵ+η(ϵ)⋅ϵ(14)
η(ϵ)→0当∥ϵ∥→0
对于函数f(ξ):sim(3)→R,导数为
dϵdf(Ω(ξ⊞ϵ))=δdf(Ω(ξ)⊞δ)⋅ϵdΩ(ξ⊞ϵ)(15)
1) 下面推导Jacobian相对于位姿导数
∂ϵ∂Ψ(ξcam−wD⊞ϵ,ξm_d)
其中伴随性质有:
T⋅exp(ϵ)=exp(AdjT⋅ϵ)⋅Tlog(T⋅exp(ϵ)⋅T−1)=AdjT⋅ϵ(16)
其中T∈SIM(3),使用公式(13)(16)的结果
Ψ(ξcam−wD,ξm−d)−1⊞Ψ(ξcam−wD⊞ϵ,ξm−d)=(ξm−d⊞(ξcam−wD)−1⊞ξm−d−1⊞ξcam−imuM)−1⊞(ξm−d⊞(ξcam−wD⊞ϵ)−1⊞ξm−d−1⊞ξcam−imuM)=(ξcam−imuM)−1⊞ξm−d⊞ξcam−wD⊞=0ξm−d−1⊞ξm−d⊞ϵ−1⊞(ξcam−wD)−1⊞ξm−d−1⊞ξcam−imuM=log((Tcam−imuM)−1⋅Tm−d⋅Tcam−wD⋅exp(ϵ)−1⋅(Tcam_wD)−1⋅Tm−d−1⋅Tcam−imuM)=Adj((Tcam−imuM)−1⋅Tm−d⋅Tcam−wD)⋅(−ϵ)(17)
所以最后得到Jacobian相对于位姿导数公式(17)
∂ϵ∂Ψ(ξcam_wD⊞ϵ,ξm_d)=−Adj((Tcam−imuM)−1⋅Tm−d⋅Tcam−wD)(18)
**2)**推导Jacobian相对于尺度和重力方向的导数
∂ϵ∂Ψ(ξcam−wD,ξm−d⊞ϵ)
根据BCH公式:
log(exp(a)⋅exp(b))=a+b+21[a,b]+121([a,[a,b]]+[b,[b,a]])+481([b,[a,[b,a]]]+[a,[b,[b,a]]])+…(19)
李括号:[a,b]=ab−ba
同公式(17)的推导一样凑成Adj形式:

根据公式(16)得到:
a=Adj(Tcam−imu−1⋅Tm_d⋅Tcam−w)⋅ϵ(19)
b=−Adj(Tcam−imu−1⋅Tm−d)⋅ϵ(20)
把公式(19)(20)带入BCH公式,即公式(19)
a⋅b=μ1(ϵ)Adj(Tcam_imu−1⋅Tm_d⋅Tcam_w)⋅ϵ⋅(−Adj(Tcam_imu−1⋅Tm_d))⋅ϵ(21)
b⋅a=μ2(ϵ)−Adj(Tcam_imu−1⋅Tm_d)⋅ϵ⋅Adj(Tcam_imu−1⋅Tm_d⋅Tcam_w)⋅ϵ(22)
[a,b]=ab−ba=(μ1(ϵ)+μ2(ϵ))⋅ϵ(23)
公式(23)在ϵ→0时,μ1μ2为0
所以Jacobian相对于尺度和重力方向的导数为:
∂ϵ∂Ψ(ξcam_wD,ξm_d⊞ϵ)=Adj(Tcam−imu−1⋅Tm−d⋅Tcam−w)−Adj(Tcam−imu−1⋅Tm−d)(24)
Reference
-
Supplementary Material to: Direct Sparse Visual-Inertial Odometry using Dynamic Marginalization ↩︎