1. 程式人生 > >論文閱讀 <Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM>

論文閱讀 <Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM>

看了一下港科的基於vins拓展的論文<relocalization, global optimization and merging for vins>,在迴環的實現部分總體沒有什麼變化,DBoW2 + PnPRANSAC + 4DOF pose graph,唯一的改動是在pnp前面加了個fundamental matrix RANSAC,應該是有效果調優的,但是根據之前VINS和LDSO的寫法,DBoW2 + PnPRANSAC也是夠用的.別的一些不同的操作就是在用迴環幀更新當前pose的位姿的時候不是直接修正,而是把迴環幀作為一個固定幀加入到當期那滑窗.其他的工作更偏向純實現吧,包括地圖的儲存和讀取.

Abstract

VINS會漂移並且不能提供絕對的位姿估計.

衡量歷史資訊來進行重定位然後修正漂移是一個熱點話題.

通過高效的儲存和載入地圖來重複使用地圖.

現在的地圖和以往的可以被融合,通過全域性pose graph.

程式碼已經被融合近VINS-Mono了.

Introduction

里程計會產生drift,及時IMU可以修正在roll和pitch角的drift,其他4個維度還是會漂的.

另一個問題是里程計是一個基於第一幀計算相對變化的系統而不是計算一個絕對的位姿.每一次我們啟動系統的時候,起始點都會變成第一幀然後輸出一個不是固定座標系下的里程.

[7, 8]鬆耦合IMU和相機,然後用KF.

一個比較有名的基於EKF的VIO方案是MSCKF.幾個相機的位姿會被保持在狀態向量裡.所以連續幀看到的同樣的特徵會形成multi-constraint update.

重定位演算法可以基於地圖的類別分為兩類.

  • offline-built地圖

[17]-[19]

[18],[19] build an offline map in geometric configuration

[17] build the offline map by learning method.

  • online-built地圖

[20]和[22]用BRISK特徵,[21]用ORB.這些方法都缺少載入和複用之前地圖的能力.

System Overview

基本pipeline就這樣.

Algorithm

A. Visual-Inertial Odometry

就是個VINS簡介.

B. Loop Detection

我們用了DBoW2,每一個關鍵幀,我們用了500個FAST特徵,然後用BRIEF描述子.

比之前的VINS裡迴環操作多了一個2D-2D,可能是有好處的,不知道出於什麼考量.因為只是PnPRANSAC工作的也很好,包括LDSO也是這麼操作的.

我們用了兩步,

  • 先是2D-2D的Fundamental Matrix RANSAC.
  • 然後是3D-2D的PnP RANSAC

C. Tightly-Coupled Relocalization

我們沒有隻是計算了兩個匹配幀的相對位子,我們通過在區域性滑窗聯合優化loop closure frame來解決.

這個迴環幀被看做一個區域性滑窗中的固定的額外幀.

在cost function中也只是加了個迴環幀的重投影誤差.

這種聯合優化的方式會生成更高精度的結果.

D. Global Pose Graph Optimization

當我們固定過去的狀態的時候,local window會立刻飛到一個"沒有漂移"的地方. 這樣的話,軌跡就會有一個跳躍.為了使得整個軌跡持續而平滑,我們用了一個輕量級的4DOF的pose graph.

4DOF的優化是比一般的pose graph不一樣一些,因為重力可觀以後,角度中只有yaw角不可觀.

1) Four Accumulated Drift Direction

pitch和roll是可觀的.

2) Adding Keyframes into the Pose Graph

每一幀在它被邊緣化呢以後就會被加入pose graph. (?)為啥

然後會有兩種變,順序邊和迴環邊.

3) 4-DOF Pose Graph Optimization

4) Map Merging

E. Map Reuse

1) Pose Graph Saving

我們只需要儲存每一個節點和邊,和每一個關鍵幀描述子(節點).

原圖被扔了(這個和VINS中的操作一致.)

特徵的描述子消耗的記憶體最多,就是500*32一個關鍵幀.

2) Pose Graph Loading

沒啥.

Experiment Result

..

Conclusion