視覺里程計設計與實現

2021-08-30 13:48:55 字數 1723 閱讀 9271

一、前言

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

有了前面的基礎,我們就可以著手做乙個簡單的視覺里程計(visual odometry,vo)。vo作為slam系統的前端,負責接收影象序列,通過特徵匹配等方法估計相機在相鄰幀間的運動,從而獲得累積的里程資訊。

二、vo系統框架

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

vo系統框架

有了這幾個模組,乙個簡單的vo就可以搭建起來了。

三、vo演算法流程圖

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

首先,程式啟動後等待第一幀抵達,執行初始化操作。這裡的初始化只需要將第一幀設定為關鍵幀,同時把該幀中觀測到的所有路標點新增進地圖。

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

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

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

整個流程如下圖所示。

vo流程圖

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

使用tum資料集rgbd_dataset_freiburg1_desk測試效果如下。

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

該**依賴於opencv 3.2.0,opencv-viz,sophus,g2o,eigen等庫,請特別檢查viz模組是否正確安裝。另外,如果sophus庫找不到,請手動編寫findsophus.cmake。

五、參考資料

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

里程計 推算定位與視覺里程計

以下內容翻譯自wiki百科。里程計是一種利用從移動感測器獲得的資料來估計物體位置隨時間的變化而改變的方法。該方法被用在許多種機械人系統 輪式或者腿式 上面,來估計,而不是確定這些機械人相對於初始位置移動的距離。這種方法對由速度對時間積分來求得位置的估計時所產生的誤差十分敏感。快速 精確的資料採集,裝...

里程計 推算定位與視覺里程計

以下內容翻譯自wiki百科。里程計是一種利用從移動感測器獲得的資料來估計物體位置隨時間的變化而改變的方法。該方法被用在許多種機械人系統 輪式或者腿式 上面,來估計,而不是確定這些機械人相對於初始位置移動的距離。這種方法對由速度對時間積分來求得位置的估計時所產生的誤差十分敏感。快速 精確的資料採集,裝...

里程計 推算定位與視覺里程計

里程計是一種利用從移動感測器獲得的資料來估計物體位置隨時間的變化而改變的方法。該方法被用在許多種機械人系統 輪式或者腿式 上面,來估計,而不是確定這些機械人相對於初始位置移動的距離。這種方法對由速度對時間積分來求得位置的估計時所產生的誤差十分敏感。快速 精確的資料採集,裝置標定以及處理過程對於高效的...