【最終版本】ORB_SLAM2系統,代碼詳細總結

Tracking.cc

  1. 先判斷速度模型。速度模型正確則繼續,trackreferencekeyframe()錯誤則與參考關鍵幀匹配,利用詞袋加速匹配,如果匹配的點數小於15,則返回錯誤,若匹配點對大於15,優化時採用motion-only BA優化。優化的同時會把keypoint對應的3D點設置爲外點。並且poseoptimization()函數會返回內點的數目。
  2. TrackWithMotionModel(),裏的第一個函數UpdataLastFrame(),將上一幀裏的關鍵點和其深度通過反投影,將深度排序,傳入到臨時地圖中。TrackWithMotionModel(),當前幀和上一幀通過投影匹配(searchforproject()),如果匹配點對小於20則失敗,反之則成功。然後對當前幀和匹配到的地圖點做motion-only BA優化,之後剔除外點。
  3. TrackReferrenceKeyframe(),計算當前幀的詞袋向量,利用詞袋加速將當前幀和參考關鍵幀匹配,若匹配點的數目小於15,則返回false 跟蹤失敗。當前幀初值設爲上一幀位姿,進行motion-only BA優化。之後剔除外點。
  4. relocation是先計算當前幀的詞袋向量,然後在之前的關鍵幀中尋找詞袋相似對最高的候選關鍵幀序列,對關鍵幀序列中的每一個關鍵幀。利用詞袋加速匹配,如果匹配的點對小於15,則把這個候選關鍵從序列中剔除,如果大於15,就建立一個PnPsolver。之後對這個候選關鍵幀序列,進行pnpsolver Ransac優化,迭代5次,迭代過程中會剔除一些關鍵幀(當Ransac reachs max)。對pnpransac 成功的幀,將其mappoints放入到當前幀的mvppoints中,這樣mvppoints中的點數量就會越來越多(只加內點,外點剔除掉),對當前幀進行motion-only BA。
  5. TrackLocalMap: (UpdataLocalKeyframes)第一步根據當前幀看到的地圖點,只要之前的關鍵幀有看到這個地圖點就加入到LocalMap中去,第二步再加入與第一步的關鍵幀中相連的關鍵幀,但是總和不能超過80幀。(UpdataLocalPoints)把上述關鍵幀看到的地圖點加入到一個mvpLocalMapPoints中去。若優化後的內點數目大於30,則成功。若(剛過去重定位1s的幀數,並且內點數目小於50)就判定失敗,否則就成功。
  6. NeedNewKeyframe():條件1,距離上一幀重定位已經過去 fps 幀了;條件二,localmapping線程空閒;條件三:當前幀跟蹤的內點數 小於 關鍵幀跟蹤到的數目*一個閾值,或者 跟蹤到的近距離點的數目在70-100之間;條件四,條件三 與 內點數要多於15.
  7. CreateNewKeyFrame():將當前幀設爲關鍵幀,將當前幀中的關鍵點對應的深度,按照從小到大排序。最後根據每一個關鍵點和(RGB-D相機觀測的深度或者是三角化的深度),重投影到地圖中,經過計算描述子,更新方向和深度後,加入到地圖mpMap中。把當前關鍵幀放入到mpLocalMapper中,把當前關鍵幀做爲參考關鍵幀。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章