SLAM (Simultaneous Localization and Mapping), 即時定位與地圖構建,最早由美國著名學者Smith於1988年提出,它是解決機器人視覺的關鍵核心技術,被很多學者認為是實現真正全自主移動機器人的關鍵。由於早期SLAM演算法設計的侷限性,以及感測器技術、計算機處理能力的限制,未能廣泛推廣應用。下面部分內容來源周平的ppt內容。

VSLAM在實際應用中的作用:定位,建圖,導航,避障

幾種開源VSLAM

ORB_SLAM

ORB-SLAM 是西班牙薩拉戈薩(Zaragoza)大學的 Raúl Mur-Arta 編寫的視覺 SLAM 系統。論文發表於2015年,獲得 IEEE Transactions on Robotics Best Paper Award(最佳論文獎)。它是一個完整的 SLAM 系統,包括視覺里程計、跟蹤、迴環檢測,是一種完全基於稀疏特徵點的單目 SLAM 系統,同時還有單目、雙目、RGBD 相機的介面。它的核心是使用 ORB (Orinted FAST and BRIEF) 作為整個視覺 SLAM 中的核心特徵。

特點:旋轉不變性

支持單目,雙目,RGB-D相機。

單目需要專門初始化。

雙目的初始化階段很快,幾乎原地不動就可以完成初始化。

整個代碼邏輯清晰,有利於初學者學習。

問題: 純旋轉容易丟;cpu消耗比較大,不適合運行在arm上。

VI_ORB

作者王京,源起:ORB_SLAM的作者, 後來寫了一篇基於慣導的單目VSLAM的論文,它可以解決純旋轉問題,論文地址:arxiv.org/abs/1610.0594,但並沒有代碼實現。根據論文進行了簡單的代碼實現,並且聲明,這個代碼僅是實驗性質,可能存在bug。從實際運行看,並沒有達到論文中的效果。具體應該是兩個原因:1)由於是實驗性質的代碼,相關參數並沒有很好的調參。 2)論文中有沒有公佈的細節。

VINS

VINS-Mono和VINS-Mobile是香港科技大學沈劭劼老師開源的單目視覺慣導SLAM方案。2017年發表在《IEEE Transactions on Robotics》。另外,VINS的最新一篇論文獲得了iROS 2018最佳學生論文獎。它是基於優化和滑動窗口的VIO,使用IMU預積分構建緊耦合框架,同時還有自動初始化,在線外參標定,重定位,閉環檢測,以及全局位姿圖優化功能。其中,VINS-Mono基於單目,VINS-Mobile可以運行在iOS系統上。

首先從measurement preprocessing 啟動。從攝像頭拿到圖像,進行特徵點的提取和跟蹤。imu則從兩個連續的圖像幀之間,進行預積分處理。然後則是初始化部分(initialization), 提供了啟動必須的信息, 包括 位姿,速度,重力向量,陀螺儀的bias, 當前位姿的3d特徵, 用於進行非線性優化計算。 重定位模塊,則是 根據特徵點檢測,並結合了imu預積分 進行迴環檢測。位姿估計根據 全局非線性優化和重定位的結果計算得出。

OKVIS

論文在2014年12月首次發表,它由著名的ETH Zurich, Autonomous Systems Lab (蘇黎世聯邦理工學院自動系統實驗室) 開發,它基於圖像和imu緊耦合預估位姿。okvis的輸出的只有6自由度的位姿,沒有迴環檢測,沒有地圖,因此並不是完整的SLAM。測試時經常會出現在相機(含imu)放在桌子上靜止不動,過一段時間,估計的位姿飄走的現象。

okvis使用BRISK演算法來進行特徵點提取,同時okvis支持多個感測器之間的融合, 如多個攝像頭和imu之間的數據融合。okvis的代碼框架清晰,但只限於定位功能這一部分,它包含了緊耦合和多感測器整合,代碼實現清晰優雅。如果對SLAM有了基本的瞭解,並想再進一步學習圖像和imu緊耦合的原理和代碼實現,可以從okvis的代碼入手。

okvis使用BRISK演算法來進行特徵點提取,同時okvis支持多個感測器之間的融合, 如多個攝像頭和imu之間的數據融合。

代碼的目錄結構如下:

├──okvis_apps:SLAM應用的入口

├──okvis_ceres:後端主要代碼,包括估計,誤差處理等

├──okvis_common:common目錄, 如參數讀取等操作

├──okvis_cv:圖像和幀相關操作

├──okvis_frontend:前端代碼, 圖像檢測,三角測量,初始化等等

├──okvis_kinematics:運動檢測相關,如座標轉換,四元數等

├──okvis_matcher:特徵點匹配

├──okvis_multisensor_processing:多感測器同步

├──okvis_time:時間處理

└──okvis_util:其他

Maplab

maplab出現在2018年5月份,它由著名的ETH Zurich, Autonomous Systems Lab (蘇黎世聯邦理工學院自動系統實驗室) 開發。 maplab主要由兩部分組成: ROVIOLI(在線SLAM前端, RObust Visual Inertial Odometry with Localization Integration)。maplab-console(SLAM離線處理)。

ROVIOLI(在線SLAM前端, RObust Visual Inertial Odometry with Localization Integration)。 它實現VIO和定位,它接收圖像與慣性感測器數據作為輸入,輸出6自由度的全局位姿估計,並為maplab離線工具保存數據。 同時可以,根據之前保存下來的地圖,進行重定位。

maplab-console(SLAM離線處理)。 以離線批處理方式在地圖上進行各種演算法處理,支持演算法插件,可以作為新演算法的研究試驗平臺。

單目,雙目對比

單目優勢:

成本低

搭建簡單

劣勢:

1)需要專門初始化

2)尺度問題

在單張圖片裏,無法確定一個物體的真實大小。它可能是一個很大但很遠的物體,也可能是一個很近很小的物體。

3)深度計算存在缺陷

a.3D假圖問題

b.機器學習的樣本問題

雙目優勢:

1) 不需要專門初始化

2) 能夠計算深度

3) 能夠用於室內和室外

劣勢:

1) 標定較為複雜

2) 視差計算比較耗資源,需要GPU/FPGA 或 專門的ASIC晶元 協助

視覺SLAM框架:前端Visual Odometry,後端Optimization,迴環Loop Closing,建圖Mapping

視覺里程計:估計鄰近時刻的相機運動,簡化兩個圖像的相對運動

方法:特徵點法,直接法

後端:從帶有雜訊的數據中估計最優軌跡與地圖,最大後驗概率估計,濾波器,圖優化

迴環檢測:檢測相機是否到達過之前位置,判斷與之前位置的差異,計算圖像間相似性,詞袋模型

建圖:導航、規劃、通訊、交互、可視化,度量地圖、拓撲地圖,稀疏地圖、稠密地圖

-------------------------------------------

掃描二維碼,關注交流學習

推薦閱讀:

相關文章