日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重读ORB_SLAM之Tracking线程难点

發布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重读ORB_SLAM之Tracking线程难点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 初始化

當獲取第一幀圖像與深度圖后,首先設置第一幀位姿為4*4單位矩陣,然后為整個map添加關鍵幀與地圖點。且更新地圖點與關鍵幀的聯系,例如地圖點被哪個關鍵幀觀測到,而此關鍵幀又包含哪些地圖點。而且不得不為ORB的處理細節感動,每個地圖點因為對應著不同關鍵幀的特征點,需要擇優選取地圖點最合適的描述子,pNewMP->ComputeDistinctiveDescriptors()。然后為localmapping線程添加關鍵幀,以及其他一些準備工作。

2. 正常定位建圖模式

后續的定位工作,主要由四個函數完成,首先如果有速度信息,就會采取TrackWithMotionModel,沒有速度信息或者重定位后的第一幀就會采用TrackReferenceKeyFrame(),當運動速度快,或者其他原因導致定位失敗,會一直采用重定位方法。在跟蹤當前幀成功后,還要在TrackLocalMap里繼續對局部地圖做跟蹤以及優化位姿。這個localmap局部地圖很有迷惑性,跟localMapping感覺很相似。但是兩者有很大不同,localmap有兩部分組成,一個是局部關鍵幀,一個是局部地圖點。局部關鍵幀由與當前關鍵幀有共同觀測點的其他關鍵幀組成,且包括其自身。如果localkeyframes不到80幀,則繼續添加每個localkeyframes內的鄰居關鍵幀,孩子與父關鍵幀。localMapping 則是根據傳來的關鍵幀,經過計算,往整體的map中添加數據。localPoints就很容易理解了,把局部關鍵幀內所有的看到的地圖點都添加進去。重定位函數Relocalization,就是在關鍵幀庫里搜索能匹配上的關鍵幀,做相對位姿計算。

3. 只定位不建圖模式

這種模式下,首先會進行重定位,然后根據mbVO 參數判斷是進行正常的跟蹤定位操作還是要結合重定位信息。mbVO為真表示當前圖像和上一幀地圖點匹配數目小于10,有可能是運動過快的原因。

  • 假如上次定位顯示,mbVO為0,則進行正常的定位跟蹤,但是發現跟蹤后mbVO在TrackWithMotionModel里被設置為1了,且定位是成功的,則進行正常的更新速度以及顯示操作,如果mbVO仍然為0,則要先跟局部地圖進行匹配跟蹤,優化位姿,再進行后續操作。因為如果mbVO為1時,也就是跟上一幀地圖點匹配較少時,可能得不到有效的局部地圖信息。
  • 在下次定位時,如果mbVO為1,則先進行TrackWithMotionModel跟蹤,再進行重定位,為的是保證定位不會輕易丟失。但是如果運動速度仍然過快,mbVO 仍然為1,則下次任然重復步驟2。直到TrackWithMotionModel里設置mbVO為0,或者重定位成功把mbVO設置為0。
  • 4. 結尾處理

    此處有兩個點比較難理解:

  • 為什么會存在觀測值小于1的地圖點?
  • // Clean VO matchesfor(int i=0; i<mCurrentFrame.N; i++){MapPoint* pMP = mCurrentFrame.mvpMapPoints[i];if(pMP)if(pMP->Observations()<1){mCurrentFrame.mvbOutlier[i] = false;mCurrentFrame.mvpMapPoints[i]=static_cast<MapPoint*>(NULL);}}

    梳理之后發現,在localMapping中,會對局部地圖進行優化,會對地圖點和關鍵幀的關系做出調整,有些地圖點就會刪掉某些observation。所以這里需要處理。

  • 要刪去一些臨時地圖點,這些點從哪里來的?
  • // Delete temporal MapPointsfor(list<MapPoint*>::iterator lit = mlpTemporalPoints.begin(), lend = mlpTemporalPoints.end(); lit!=lend; lit++){MapPoint* pMP = *lit;delete pMP;}mlpTemporalPoints.clear()

    在TrackWithMotionModel里有一個UpdateLastFFrame函數,在純定位模式下,會根據深度圖新增一些臨時地圖點,為的是增加匹配點數,使位姿更準確。所以后面要把這些臨時的地圖點刪去。

    轉載于:https://www.cnblogs.com/easonslam/p/9077001.html

    總結

    以上是生活随笔為你收集整理的重读ORB_SLAM之Tracking线程难点的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。