简介
DROID-SLAM 是一种基于深度学习的实时单目 SLAM(Simultaneous Localization and Mapping)系统。它结合了传统 SLAM 方法和深度神经网络的优势,能够在动态环境中实现高精度的相机定位和三维地图构建。相比于后来的MASt3R-SLAM,它能够保证全局一致性,本文重点关注后端优化部分。
高斯牛顿法
f(x)argxminf(x)=21i∑mri(x)2=21∥r(x)∥2
一阶泰勒展开:
r(x+Δx)J(x)≈r(x)+J(x)Δx=∂x∂r(x)
近似后的优化问题:
f(x+Δx)argΔxmin21∥r(x)+J(x)Δx∥2≈21(r+JΔx)T(r+JΔx)=21(rTr+rTJΔx+ΔxTJTr+ΔxTJTJΔx)
其中:rTJΔx+ΔxTJTr=2rTJΔx
定理:
∂x∂(21xTAx)(CTx)′=Ax=C
令:
∂Δx∂f=JTr+JTJΔx=0
可得正规方程:
JTJΔx=−JTr
迭代公式:
Δx=−(JTJ)−1JTr
其中,H=JTJ 称为近似的 Hessian 矩阵,g=JTr 称为梯度。
DROID-SLAM 后端优化
原帧i,目标帧j,坐标系Fi,Fj。
帧i中的3D点:
Xi=⎣⎢⎢⎢⎡xiyizidi⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡(u−cx)/fx(v−cy)/fy1di⎦⎥⎥⎥⎤
di为逆深度值,使用齐次坐标的好处是能够线性表示:
⎣⎢⎡XYZ⎦⎥⎤world=di1⎣⎢⎡xiyizi⎦⎥⎤
使用SE3变换:
TijXj=[Rij0tij1]∈SE(3)=⎣⎢⎢⎢⎡xjyjzjdj⎦⎥⎥⎥⎤=[RijXi+ditijdi]
可以得到:
⎩⎪⎪⎪⎨⎪⎪⎪⎧xj=Rijxi+ditxyj=Rijyi+dityzj=Rijzi+ditzdj=di
注:dj,di仅为占位变量
归一化到平面:
{x=zixi=zjxjy=ziyi=zjyj
由相机内参得到像素坐标:
{u^=fxx+cxv^=fyy+cy
定义投影函数π:
π(Tij,di,u,v)=[u^v^]
要求的变量为:
∂Tij∂π,∂di∂π
SE3李代数参数化
ζTijζ^=[τϕ]=⎣⎢⎢⎢⎢⎢⎢⎢⎡τxτyτzϕxϕyϕz⎦⎥⎥⎥⎥⎥⎥⎥⎤∈R6=exp(ζ^)∈R4×4
ζ^为ζ的反对称矩阵表示,exp(ζ^)为矩阵指数映射,代表旋转平移矩阵。
在当前变换Tij中加一个扰动:
Tij(ζ)=exp(ζ^)Tij
求:
∂ξ∂∣∣∣∣∣ξ=0[exp(ξ∧)Tij⋅Xi]
- 投影对3D点的导数
∂Xj∂u^=∂Xj∂(fxzjxj+cx)
可以得到:
∂xj∂u^∂xj∂v^=zjfx,∂yj∂u^=0,∂zj∂u^=−fxzj2xj,∂dj∂u^=0=0,∂yj∂v^=zjfy,∂zj∂v^=−fyzj2yj,∂dj∂v^=0
- 3D点对SE3的导数
∂ζ∂Xj=∂ζ∂[exp(ζ^)TijXi]
根据李代数的性质,可以得到:
∂ζ∂[xj,yj,zj]T=[−djI3[xj]×]∈R3×6,ζ=[τ,ϕ]
[xj]×为xj的叉乘矩阵:
[xj]×=⎣⎢⎡0zj−yj−zj0xjyj−xj0⎦⎥⎤
- 链式法则组合:
∂ζ∂u^=[∂xj∂u^∂yj∂u^∂zj∂u^]∂ζ∂[xj,yj,zj]T=[zjfx0−fxzj2xj]⎣⎢⎡−dj000−dj000−dj0zj−yj−zj0xjyj−xj0⎦⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡−fxzjdi0fxzj2xjdifxzj2xjyj−fx(1+zj2xj2)fxzjyj⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤T
由于残差r=utarget−u^,所以:
∂ζ∂ru∂ζ∂rv=−∂ζ∂u^=−∂ζ∂v^
带有负号,最终得到:
∂ζ∂r=[∂ζ∂ru∂ζ∂rv]=⎣⎢⎡fxzjdi00fyzjdi−fxzj2xjdi−fyzj2yjdi−fxzj2xjyj−fy(1+zj2yj2)fx(1+zj2xj2)fyzj2xjyj−fxzjyjfyzjxj⎦⎥⎤
源帧i的位姿变化用伴随表示:
∂ζi∂u^=−AdTij−1T(∂ζj∂u^)T
对应adjSE3函数。
深度参数化
投影对深度的导数:
∂di∂u^∂di∂v^=∂di∂(fxzjxj+cx)=fx(zj1∂di∂xj−zj2xj∂di∂zj)=fx(zjtx−zj2xjtz)=fy(zjty−zj2yjtz)
残差带负号。
计算流程为:

求解
线性化后的正规方程:
[HxxHdxHxdHdd][ΔxΔd]=[bxbd]
通过Schur补消元法,消去深度变量Δd:
Sv=Hxx−HxdHdd−1Hdx=bx−HxdHdd−1bd
得到简化后的方程:
SΔx=v
通过共轭梯度法求解Δx,然后回代求解Δd:
Δd=Hdd−1(bd−HdxΔx)