寫在前面
本文想討論一下AR的架構和SLAM在其中的作用。
AR
AR的框架可以簡單划分為感知和交互兩部分。
感知部分主要負責信息的收集和處理。信息主要通過不同的傳感器收集,包括圖像、設備加速度、距離(深度)、語音、手勢等。利用這些信息,可以進行運動追蹤(定位)、地圖構建、語音識別、手勢識別等一系列感知行為。這部分主要通過APP或者Default service調用不同的Service模塊實現。
交互部分主要負責根據指令觸發感知行為或者根據感知結果輸出交互行為,比如根據運動追蹤得到的姿態渲染虛擬物體,根據場景掃描的結果控制虛擬物體的運動、控制系統界面等等。這部分主要通過APP調用操作系統命令和渲染模塊實現。
下面是一個簡單的示意圖,虛線代表調用和反饋機制。
如圖所示,一個APP可能同時調用多個service模塊,一個service模塊可能調用多個傳感器。理清service模塊和傳感器之間的最佳組合及最優算法,是AR算法的核心問題。
AR中的SLAM
如果一個設備想要提供3D效果的AR,顯然運動追蹤模塊是必備的。如果想讓虛擬物體和場景交互,或是想要掃描一個真實物體,那么(稠密)三維地圖可以提供場景的三維幾何信息。
而定位(運動追蹤)和建圖(稀疏或者稠密地圖)構成了SLAM的核心功能。因此,SLAM可以說是AR中最基礎的模塊,屬於設備感知周邊環境的范疇。
以Tango為例
下面以Tango的API為例,嘗試說明一下AR中的SLAM算法和各個傳感器之間的關系。
Tango API提供三個核心功能
- 運動追蹤(motion tracking)
- 場景學習(area learning)
- 深度感知(depth percetion)
運動追蹤
運動追蹤的輸出是實時的6DOF姿態。這個模塊有濾波框架和優化框架可供選擇,現在也有結合深度學習在做的。傳感器主要包括單目、雙目、IMU的排列組合。Tango用的算法是VIO(fisheye camera+IMU)。
Tango implements Motion Tracking using visual-inertial odometry, or VIO, to estimate where a device is relative to where it started.
Tango團隊和蘇黎世聯邦理工學院(ETHZ)有深入合作,ETHZ現在還在基於Tango做一些工作。
場景學習
場景學習的輸出是場景中的一些特征,並將它們保存下來,以便將來能夠重新定位以前到過的場景,或者用於校正漂移(drift),提高追蹤算法的整體精度。
Area Learning gives the device the ability to see and remember the key visual features of a physical space—the edges, corners, other unique features—so it can recognize that area again later.
When a Tango device has learned an area, there are two key things it can do to improve upon the information provided by Motion Tracking alone: a. Improve the accuracy of the trajectory by performing "drift corrections." b.
Orient and position itself within a previously learned area by performing "localization."
重定位常用的方法有DBoW2(3)、FabMap、相關性(PTAM)、Fern(Elastic Fusion)以及基於機器學習的算法。校正漂移一般通過回環檢測(和重定位類似)和全局優化實現(g2o、GTSAM、iSAM等優化框架)。
深度感知
深度感知的輸出是一些點雲。通過API調用,可以從Tango設備得到原始點雲。結合motion tracking,可以將不同視角下的點雲拼接起來,得到場景完整的點雲。調用一些APP可以實現距離測量、場景掃描等功能。注意Tango的深度傳感器的測量范圍是0.5m到4m,不方便用於手勢識別(一般小於0.5m)。
這部分主要對應於SLAM中的稠密地圖重建。原始點雲既可通過雙目也可通過結構光、TOF等深度傳感器獲取。點雲拼接可以通過ICP或者運動追蹤輔助實現。點雲處理、網格生成可以通過OctoMap、TSDF重建、Poisson重建實現。
有興趣的同學可以關注
RTAB-Map,目前在Tango設備上實現了接近實時的點雲拼接、單幀點雲的網格生成和紋理貼圖。
展望
隨着硬件的發展和算法的成熟,運動追蹤模塊估計一兩年之內會有大規模的商用,嵌入到手機、VRAR和機器人中。場景掃描模塊對硬件(傳感器性能、工業設計、功耗控制)和軟件(算法、需求定位、架構設計和工程實現)均有較高的要求。由於尚無高效可靠的開源算法,有可能作為一個optional的應用開放一些底層API給開發者。
AR雖然對SLAM的實時性和精度要求較高,但由於能夠看到真實世界,其實容許一定的錯誤率,不像無人車那樣,對錯誤零容忍。