Direct Sparse Visual-Inertial Odometry using Dynamic Marginalization
- 把尺度,重力方向放進模型中進行聯合優化
- 由於尺度不是立刻就可觀的,因此我們以任一尺度進行初始化,而不是延遲初始化到量都變得可觀之後(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