1. 程式人生 > >(五)ORBSLAM關鍵幀的篩選和插入

(五)ORBSLAM關鍵幀的篩選和插入

hub 旋轉矩陣 取出 方案 關聯 五個 鏈接 總結 關鍵幀


ORBSLAM2的關鍵幀簡介

  圖像插入頻率過高會導致信息冗余度快速增加,而這些冗余的信息對系統的精度卻十分有限,甚至沒有提高,反而消耗了更多的計算資源。這等於吃力不討好。

  關鍵幀的目的在於,適當地降低信息冗余度,減少計算機資源的損耗,保證系統的平穩運行。

  ORBSLAM2也是沿襲PTAM的方案,將定位和建圖分成兩個線程,不過ORBSLAM2還增加了回環這個線程,在關鍵幀的問題上做了更靈活的處理,使得系統的跟蹤更流暢和穩定。

  接下來我們將按照ORBSLAM2源碼中的方案將內容分成兩個部分進行介紹:

  1. 關鍵幀的篩選;

  2. 關鍵幀的插入。


關鍵幀的篩選:

  由於關鍵幀的篩選主要涉及一些判斷條件,沒有公式沒有插圖,讀起來想必是十分枯燥的。因此筆者主要提煉大綱,讓大家能夠比較直觀的看出,ORBSLAM2中所用的策略是什麽,並根據筆者的拙見對原因進行分析,不當之處,敬請指正。

  首先是直接不插入關鍵幀的條件,主要有三個:

  1. 若當前處於定位模式,不插入關鍵幀;

    原因:定位模式是只定位不建圖,只利用已有的地圖點對當前相機姿態進行估計,而不更新地圖點,因此沒有插入關鍵幀的必要。

  2. 若局部地圖處於全局閉環情況下,不插入關鍵幀;

    原因:局部地圖被占用,插入關鍵幀會影響全局閉環的優化。

  3. 若距離上一次重定位較近,不插入關鍵幀;

    原因:重定位時,當前幀通過與局部關鍵幀匹配並進行運動估計,能夠很好地恢復其運動姿態。筆者認為,因為重定位時當前幀與重定位候選幀的信息冗余度較低,所以在重定位成功後,當前幀會作為關鍵幀插入地圖中。而新來的一幀,由於重定位時剛剛插入關鍵幀,所以不需要頻繁插入。

  排除了上面三種情況,接下來就需要對關鍵幀進一步檢測,才能確定是否真的需要插入關鍵幀。進一步檢查包含一個必不可少的條件和另外三選一的條件。

  必須滿足的條件:

  1. 內點數必須超過設定的最小閾值,並且重疊度不能太大;

    原因:保證關鍵幀跟蹤的質量,同時,避免引入過多的信息冗余。

  三選一的條件:

  2.1

距離上次插入關鍵幀已經過去MAX幀,MAX是ORBSLAM2預設的最大值;

    原因:防止過去太多幀,跟蹤丟失。

  2.2 距離上次插入關鍵幀至少過去MIN幀,且局部建圖線程處於空閑狀態,MIN是ORBSLAM2預設的最小值;

    原因:防止圖像重疊度太高,並且局部建圖線程有空閑處理新的關鍵幀。

  2.3 局部建圖線程中關鍵幀隊列的關鍵幀數量不超過3個;

    原因:主要也是考慮局部建圖線程的處理能力,以及信息的冗余度問題吧。

  插入關鍵幀的條件即是必須滿足條件1以及滿足2.1-2.3中任意一個條件。


關鍵幀的插入

   確定了當前幀是關鍵幀,那麽就需要將其輸入局部建圖模塊以及回環檢測模塊。但是在輸入這兩個模塊之前,需要將關鍵幀的觀測信息進行更新。為了更加直觀的表達關鍵幀插入的方法,筆者還是以列提綱的方式,為大家介紹這個過程:

  1. 中斷局部建圖線程,即中斷處理地圖點、關鍵幀以及優化相機位姿;

    原因:這是必須插入關鍵幀的情況,強制終止局部建圖。

  2. 更新當前關鍵幀的位姿,即從 $T$ 矩陣中取出旋轉矩陣 $R$ 和位移矩陣 $t$ 以及相機中心 $O$;

    原因:主要用於局部建圖模塊和回環檢測模塊中做重投影。

  3. 將當前幀所對應的地圖點按深度信息進行排序;

    原因:篩除超出深度閾值的地圖點。

  4. 對當前關鍵幀中未關聯的三維點,創建新的地圖點,具體包括觀測信息,更新地圖點的描述子以及法向量和深度;

    原因:非常平凡的創建地圖點的過程。

  5. 將所創建的地圖點插入地圖中,最後將更新後的關鍵幀也插入地圖中。

    原因:插入關鍵幀的過程最後一個步驟。

  插入關鍵幀的流程大體如上面五個步驟所述。大家在設計關鍵幀插入流程時可以參考這幾種方案,當然也可以根據實際需要設計更符合要求的方案。


總結:

  終於又到了寫總結的時候了,寫一篇博客著實不易啊。

  本文主要介紹了ORBSLAM2對待關鍵幀的策略,包括關鍵幀的篩選和插入。

  不同的SLAM系統所采用的的關鍵幀策略有所不同,但是目的都是類似的:一是考慮計算資源的損耗,二是考慮信息的冗余度,最重要的是系統精度提高的可能性。在精度滿足要求的前提下,尋求信息冗余度和計算資源損耗的折中。

  至此,ORBSLAM2的跟蹤線程我們已經全部介紹完了,接下來我們將進入局部建圖線程。

  下一講,筆者將為大家介紹ORBSLAM地圖的更新策略。

PS:

  如果您覺得我的博客對您有所幫助,歡迎關註我的博客。此外,歡迎轉載我的文章,但請註明出處鏈接。

  對本文有任何問題可以在留言區進行評論,也可以在泡泡機器人論壇:http://paopaorobot.org/bbs/index.php?c=cate&fid=1中的SLAM技術交流模塊發帖提問。

  我的github鏈接是:https://github.com/yepeichu123/orbslam2_learn。

(五)ORBSLAM關鍵幀的篩選和插入