視覺里程計設計與實現

一、前言

視覺里程計與傳統的里程計不同,不使用碼盤等設備,只利用攝像頭拍攝的連續圖像幀就可以計算里程,非常方便,因而用途廣泛。本文介紹SLAM中的視覺里程計的設計與實現。

有了前面的基礎,我們就可以著手做一個簡單的視覺里程計(Visual Odometry,VO)。VO作為SLAM系統的前端,負責接收圖像序列,通過特征匹配等方法估計相機在相鄰幀間的運動,從而獲得累積的里程信息。

二、VO系統框架

首先,讓我們來看看VO應該由哪些模塊組成。下圖為VO系統框架圖。

VO系統框架
  • Frame代表每一幀圖像,存儲著拍攝該幀圖像時的相機位姿、圖像的彩色圖和深度圖、以及是否為關鍵幀。
  • Camera代表相機模型,與實際拍攝時的相機對應,只包含內參數,不包含外參數,因此在整個VO過程中只需要一個Camera對象。
  • Map代表一個局部地圖,既包含關鍵幀又包含路標點。關鍵幀和路標點會根據適當的規則添加進地圖中。但需要注意,這里的地圖是局部地圖而不是全局地圖,只包含了當前位置附近的路標點,距離更遠的路標點會被刪除。
  • MapPoint代表路標點,又稱為地圖點。這些點都是通過特征提取篩選出來的點,因而包含了特征描述符。由于同一個特征點會被多個幀觀測到,因此也包含了這些能觀測到該路標點的幀的指針。同時,為了控制地圖規模,記錄了路標點匹配成功的次數和被觀測到的次數,兩者比值一旦過小就丟棄該路標點(因為該點出現次數很多但對VO沒有幫助)。

有了這幾個模塊,一個簡單的VO就可以搭建起來了。

三、VO算法流程圖

接下來我們詳細介紹VO算法的流程。以最簡單的RGBD-VO為例,避免復雜的初始化過程。

首先,程序啟動后等待第一幀抵達,執行初始化操作。這里的初始化只需要將第一幀設置為關鍵幀,同時把該幀中觀測到的所有路標點添加進地圖。

后續幀抵達后,提取關鍵點,計算描述子,與地圖中的路標點匹配。與地圖中的路標點匹配是為了提高匹配的成功率,如果只與上一幀或上一關鍵幀匹配的話很容易導致匹配結果太少。

匹配成功后,執行PnP位姿估計。這里使用的是RANSAC PnP加上非線性優化的方式估計相機位姿,使用g2o構造圖優化問題。

接下來判斷PnP位姿估計是否成功。如果內點個數過少或者估計出的運動距離過大,則認為位姿估計失敗。如果成功則優化地圖點并決定是否添加當前幀為關鍵幀,如果失敗則結束VO。其中,優化地圖點是一個刪除距離較遠或無效點的過程,通過判斷路標點匹配成功的次數與被觀測到的次數之間的比值是否低于某閾值,從而決定是否刪除這個點。總之,優化地圖點的目的是使地圖規模不至于太大且只包含與當前幀最接近的局部環境。

整個流程如下圖所示。

VO流程圖

四、運行效果和存在的問題

使用TUM數據集rgbd_dataset_freiburg1_desk測試效果如下。

左圖為當前視頻幀及局部地圖中路標點的投影,右圖為世界坐標系和當前幀的相機坐標系位置。從后三張圖可以發現,特征點位置出現了一些明顯的偏差,這可能是由于相機位姿估計不準確造成的。說明這個簡單的VO在運動過快的情況下產生了漂移。

在完整的SLAM中,既有前端的VO,又有后端優化和回環檢測,從而可以在一定程度上降低VO的漂移問題。我們將在后續文章中一一介紹。

本文的VO例程完整代碼地址:https://github.com/jingedawang/VO

該代碼依賴于OpenCV 3.2.0,opencv-viz,Sophus,g2o,Eigen等庫,請特別檢查viz模塊是否正確安裝。另外,如果Sophus庫找不到,請手動編寫FindSophus.cmake。

五、參考資料

《視覺SLAM十四講》第9講 實踐:設計前端 高翔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 1. 前言 開始做SLAM(機器人同時定位與建圖)研究已經近一年了。從一年級開始對這個方向產生興趣,到現在為止,...
    壹米玖坤閱讀 1,146評論 4 8
  • 協作SLAM通常是部署在多臺機器人上的多個SLAM系統,它們各自實現自己的定位和建圖,當地圖區域出現重疊時進行地圖...
    金戈大王閱讀 2,712評論 0 2
  • 定位問題的引入 我們所熟知的機器人,可以大致分為以下四類: 1. 操作機器人: 模仿人的手和手臂的動作,特點...
    飛帥閱讀 1,725評論 0 2
  • 一、以小蘿卜機器人為例,引入SLAM概念 1、機器人功能:實現內(自身定位)外(探索環境并建模)兩項功能 (1)執...
    mjwz5294閱讀 1,257評論 0 4
  • 放下所有求關注的心,如同花草樹木不管有沒有人關注都依然活出自己最美的樣子。我就是最美的風景,只要活出自己的精彩就好...
    周海雙閱讀 254評論 0 0