那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ORB-SLAM2的變量命名規則代碼運行流程簡析

工程師鄧生 ? 來源:CSDN ? 作者:ncepu_Chen ? 2022-09-29 09:49 ? 次閱讀

運行官方Demo

以TUM數據集為例,運行Demo的命令:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

rgbd_tum.cc的源碼:

poYBAGM0-gOAXumXAAGdQ4YQ8ns561.jpg
pYYBAGM0-gyAehCOAAEtp0ovUKg988.jpg

運行程序rgbd_tum時傳入了一個重要的配置文件TUM1.yaml,其中保存了相機參數和ORB特征提取參數:


poYBAGM0-jyAI7fXAAELEC16DeQ600.jpgpoYBAGM0-kaAJXHhAABrtvyeWDY012.jpg閱讀代碼之前你應該知道的事情 變量命名規則 ORB-SLAM2中的變量遵循一套命名規則: 1、變量名的第一個字母為m表示該變量為某類的成員變量. 2、變量名的第一、二個字母表示數據類型: ·p表示指針類型 ·n表示int類型 ·b表示bool類型 ·s表示std::set類型 ·v表示std::vector類型 ·l表示std::list類型 ·KF表示KeyFrame類型 這種將變量類型寫進變量名的命名方法叫做匈牙利命名法. 理解多線程 為什么要使用多線程? 1、加快運算速度: 

poYBAGM0-nyAJcUxAABrR2C_b6Y862.jpg

開兩個線程同時計算兩個矩陣,在多核處理器上會加快運算速度 2. 因為系統的隨機性,各步驟的運行順序是不確定的 . Tracking線程不產生關鍵幀時,LocalMapping和LoopClosing線程基本上處于空轉的狀態 . 而Tracking線程產生關鍵幀的頻率和時機不是固定的,因此需要3個線程同時運行,LocalMapping和LoopClosing線程不斷循環查詢Tracking線程是否產生關鍵幀,產生了的話就處理.

406907ac-3f83-11ed-9e49-dac502259ad0.png


poYBAGM0-siAG2huAAEV_81wYwY762.jpgpYYBAGM0-tCARGafAACXQYjc83I836.jpg多線程中的鎖 為防止多個線程同時操作同一變量造成混亂,引入鎖機制: 將成員函數本身設為私有變量(private或protected),并在操作它們的公有函數內加鎖. 

pYYBAGM0-uyAbZBtAACaF0bno9M743.jpg

一把鎖在某個時刻只有一個線程能夠拿到,如果程序執行到某個需要鎖的位置,但是鎖被別的線程拿著不釋放的話,當前線程就會暫停下來;直到其它線程釋放了這個鎖,當前線程才能拿走鎖并繼續向下執行. 什么時候加鎖和釋放鎖? unique_lock lockCon(mMutexConnections);這句話就是加鎖,鎖的有效性僅限于大括號{}之內,也就是說,程序運行出大括號之后就釋放鎖了.因此可以看到有一些代碼中加上了看似莫名其妙的大括號.

poYBAGM0-xiABa0JAACNoQ9tg8M303.jpg

SLAM主類System System類是ORB-SLAM2系統的主類,先分析其主要的成員函數和成員變量:

409ead8a-3f83-11ed-9e49-dac502259ad0.png

40bfc844-3f83-11ed-9e49-dac502259ad0.png

構造函數 System(const string &strVocFile, string &strSettingsFile, const eSensor sensor, const bool bUseViewer=true): 構造函數

poYBAGM0-1yAe5G5AAH7Aw9eI_U257.jpgpYYBAGM0-2OAT08BAABoaeVDoMs467.jpg

LocalMapping和LoopClosing線程在System類中有對應的std::thread線程成員變量,為什么Tracking線程沒有對應的std::thread成員變量? 因為Tracking線程就是主線程,而LocalMapping和LoopClosing線程是其子線程,主線程通過持有兩個子線程的指針(mptLocalMapping和mptLoopClosing)控制子線程. (ps: 雖然在編程實現上三大主要線程構成父子關系,但邏輯上我們認為這三者是并發的,不存在誰控制誰的問題).

跟蹤函數

System對象所在的主線程就是跟蹤線程,針對不同的傳感器類型有3個用于跟蹤的函數,其內部實現就是調用成員變量mpTracker的GrabImageMonocular(GrabImageStereo或GrabImageRGBD)方法.

40df2ee6-3f83-11ed-9e49-dac502259ad0.png

傳感器類型用于跟蹤的成員函數 pYYBAGM0-36ASEIEAACHrnznLmI311.jpg

審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2553

    文章

    51407

    瀏覽量

    756633
  • SLAM
    +關注

    關注

    23

    文章

    426

    瀏覽量

    31931

原文標題:ORB-SLAM2代碼運行流程

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    代碼里的命名規則:錯誤的和正確的對比

    命名規則。這樣做的主要作用就是使源代碼更易讀易懂。所以,也就更容易維護和擴展。這篇文章里,我將舉出一些例子,說明什么是“不好的代碼”,什么是“清楚的
    發表于 06-13 22:33

    請問用樹莓派運行ORB-SLAM2算法可行嗎?

    最近想用樹莓派3B跑ORB-SLAM2,現在的問題就是Pangolin無法執行,每次執行都報錯 Pangolin X11: Unable to retrieve framebuffer
    發表于 03-15 22:30

    視覺SLAM特征點法與直接法對比分析

    視覺SLAM——特征點法與直接法對比以及主流開源方案對比 ORB LSD SVO DSO
    發表于 06-02 16:56

    變量命名應簡單清晰

    代碼中使用了超長的命名會影響代碼的清晰性。同時,超長的變量命名會造成換行,這會影響代碼的結構,不
    發表于 09-26 11:48 ?14次下載

    javascript變量命名規則與規范

    JavaScript 變量與代數一樣,JavaScript 變量可用于存放值(比如 x=2)和表達式(比如 z=x+y)。變量可以使用短名稱(比如 x 和 y),也可以使用描述性更好的
    發表于 12-05 10:03 ?3643次閱讀
    javascript<b class='flag-5'>變量</b><b class='flag-5'>命名</b><b class='flag-5'>規則</b>與規范

    Python公認的命名規則總結

    對于模塊名/包名、函數名、變量名、類名、常量名的命名,Python有一些公認的規則,具體如下。
    的頭像 發表于 01-23 11:25 ?1826次閱讀

    編程代碼的書寫規則

    為大家搜集到編程代碼的書寫規則,小伙伴們千萬要記住這些規則。 如果對現在的工作不滿意,掌握這些技巧也是可以順利離職的小竅門哦~ 01 以一種代碼已經被混淆的方式
    的頭像 發表于 11-12 18:03 ?2502次閱讀

    獲取單片機代碼運行時間的方法資料下載

    電子發燒友網為你提供獲取單片機代碼運行時間的方法資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考
    發表于 04-24 08:49 ?12次下載
    <b class='flag-5'>簡</b><b class='flag-5'>析</b>獲取單片機<b class='flag-5'>代碼</b><b class='flag-5'>運行</b>時間的方法資料下載

    ORB SLAM中涉及的一些基礎概念

    ORB-SLAM 3提供了多地圖的存儲和拼接功能,在跟蹤丟失后可以嘗試將現有地圖和歷史地圖進行匹配、融合,并更新當前的活躍地圖(Active Map)
    的頭像 發表于 10-28 14:28 ?1343次閱讀

    ORB-SLAM3與ORB-SLAM2相比有哪些優勢呢?

    自主導航是機器人基礎性和關鍵性技術,是機器人實現其他更高級任務的前提。視覺 SLAM (Simultaneous Localization And Mapping) 利用視覺傳感器獲取環境圖像信息,基于多視圖幾何算法構建環境地圖。
    的頭像 發表于 01-16 10:58 ?3158次閱讀

    OV2SLAM(高速視覺slam)

    視覺里程計最近幾年越來越受到學術界以及工業界的認可,以ORB和VINS為代表的視覺SLAM已經可以滿足絕大多數場景,而OV2SLAM在其他VSLAM中脫穎而出,其實時性以及具體的回環性能在測試中都得到了認可。
    的頭像 發表于 03-21 17:16 ?1718次閱讀

    ORB-SLAM3整體流程詳解

    ORB-SLAM2相比,ORB-SLAM3在處理大視差和長時間未觀測到的場景時效果更好。它還提供了更準確的幀間運動估計和更快的處理速度。
    的頭像 發表于 06-19 09:28 ?3660次閱讀
    <b class='flag-5'>ORB-SLAM</b>3整體<b class='flag-5'>流程</b>詳解

    python變量命名規則

    規則和約定。本文將詳盡、詳實、細致地探討Python變量命名規則,幫助讀者了解如何正確命名變量
    的頭像 發表于 11-23 15:44 ?1632次閱讀

    工程實踐中VINS與ORB-SLAM的優劣分析

    ORB-SLAM是一種基于特征的單目視覺SLAM系統,廣泛用于實時三維地圖構建和機器人定位。該系統使用ORB特征進行高效的視覺識別和地圖重建,支持關鍵幀技術和回環檢測來優化地圖的準確性。
    的頭像 發表于 04-08 10:17 ?3118次閱讀
    工程實踐中VINS與<b class='flag-5'>ORB-SLAM</b>的優劣分析

    基于多攝像頭的高魯棒性視覺SLAM系統設計

    本文的主要目標是通過擴展ORB-SLAM2的功能來增強準確性,從多個攝像頭中的姿態估計和地圖重用開始。所有這些多攝像頭的圖像特征將被合并到跟蹤模塊中進行特征匹配,以及在閉環檢測期間進行位置識別。
    發表于 04-20 17:51 ?720次閱讀
    基于多攝像頭的高魯棒性視覺<b class='flag-5'>SLAM</b>系統設計
    新2百家乐现金网百家乐现金网| 现金游戏网| 百家乐官网剁手| 巴比伦百家乐的玩法技巧和规则| 百家乐官网巴厘岛平台| 百家乐威尼斯人| 百家乐官网注码调整| 百家乐长胜攻略| 百家乐官网庄闲分布概率| 温州市百家乐ktv招聘| 百家乐官网实战技术| 足球.百家乐投注网出租| 丰镇市| 百家乐游戏大厅下| 百家乐官网一直下注庄家| 迪士尼百家乐的玩法技巧和规则| 真人百家乐官网轮盘| 水果老虎机的规律| 月华百家乐官网的玩法技巧和规则| 大发888注册送钱| 百家乐官网游戏单机牌| 大发888官方 黄埔网| 皇室百家乐官网的玩法技巧和规则 | 中华百家乐官网娱乐城| 大发888游戏平台 17| 百家乐投注办法| 百家乐官网玩法说明| 澳门百家乐论| 七匹狼百家乐官网的玩法技巧和规则 | 百家乐官网赌场牌路分析| 德州扑克玩法说明| 百家乐官网职业打| 3d俄罗斯轮盘| 百家乐如何制| 百家乐官网群b28博你| 东方夏威夷网站| 送彩金百家乐平台| 百家乐官网五子棋| 博彩旅游业| 澳门百家乐博牌| 百家乐官网赌场走势图|