在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

ORB-SLAM3整體流程詳解

新機器視覺 ? 來源:古月居 ? 2023-06-19 09:28 ? 次閱讀

0. 簡介

那篇文章中提到了ORB-SLAM3是一個支持視覺、視覺加慣導、混合地圖的SLAM系統,可以在單目,雙目和RGB-D相機上利用針孔或者魚眼模型運行。

與ORB-SLAM2相比,ORB-SLAM3在處理大視差和長時間未觀測到的場景時效果更好。它還提供了更準確的幀間運動估計和更快的處理速度。

此外,ORB-SLAM3還支持更多的傳感器,包括RGB-D攝像頭和車載LIDAR。ORB-SLAM3的代碼結構也比ORB-SLAM2更加簡潔,使得它更容易理解和擴展。

1. 主要貢獻

個單目和雙目的視覺慣導SLAM系統:全部依賴于MAP(最后后驗概率估計),即使是在IMU初始化的時候。

高召回率的場景重識別算法:DBoW2需要匹配三個連續的關鍵幀,太慢了。

作者的方法是:候選的關鍵幀第一次就進行幾何一致性檢測,然后利用三個共視的關鍵幀進行局部的一致性檢驗,這種策略提升了召回率,并簡化了數據關聯,從而提高了地圖準確性,但計算成本變高。

第一個可以解決純視覺或者視覺慣導的完整的混合地圖的SLAM系統。

在單目或者雙目的系統中,Atlas代表的是一系列不連續的地圖,而且可以把他們應用到所有的建圖過程中:場景重識別、相機重定位、閉環檢測和精確的地圖融合。

這就允許地圖是在不同的時間構建的(增量的SLAM系統),純視覺的Atlas是參考的2019年IROS的一篇文章:ORBSLAM-atlas: a robust and accurate multi-map system,本文又添加了視覺慣導的混合地圖系統來實現場景重識別。

抽象的相機表示:使SLAM系統與所使用的相機模型無關。并允許通過提供其投影,非投影和Jacobian函數來添加新模型我們提供了針孔和魚眼模型的實現。

2. ORB-SLAM2 和 ORB-SLAM3 改進代碼

這部分可以看一下作者的《使用ORBSLAM2進行kineticV2稠密建圖,實時轉octomap建圖以及導航》這篇文章。

這里來匯總一下2,3中常見的擴展,算是一個大全吧

1.高翔實現的添加稠密點云地圖

2b4f2fea-0e31-11ee-962d-dac502259ad0.png

2b5fba18-0e31-11ee-962d-dac502259ad0.png

3.使用SVO中直接法來跟蹤代替耗時的特征點提取匹配,在保持同樣精度的情況下,是原始ORB-SLAM2速度的3倍

2b736842-0e31-11ee-962d-dac502259ad0.png

4.雙目VIO版本,加入了LK光流和滑動窗口BA優化

2b928a4c-0e31-11ee-962d-dac502259ad0.png

5.VI-ORB-SLAM2

2ba36042-0e31-11ee-962d-dac502259ad0.png

6.添加了支持魚眼

2bb4f1ae-0e31-11ee-962d-dac502259ad0.png

7.添加保存和導入地圖功能

2bc88d36-0e31-11ee-962d-dac502259ad0.png

8.添加保存和導入地圖功能

2be03f08-0e31-11ee-962d-dac502259ad0.png

9.添加了地圖可視化

2bea8ce2-0e31-11ee-962d-dac502259ad0.png

2bf4d710-0e31-11ee-962d-dac502259ad0.png

11.添加了點線融合

2c04c1ac-0e31-11ee-962d-dac502259ad0.png

12.使用了一種更好的特征選擇方法

2c1b25d2-0e31-11ee-962d-dac502259ad0.png

13.動態語義SLAM 目標檢測+VSLAM+光流/多視角幾何動態物體檢測+octomap地圖+目標數據庫

2c271ba8-0e31-11ee-962d-dac502259ad0.png

14.用YOLO v3的語義信息來增加跟蹤性能

2c2ed596-0e31-11ee-962d-dac502259ad0.png

2c4439fe-0e31-11ee-962d-dac502259ad0.png

16.提出了一種構建3D密集語義圖的方法,該方法同時利用YOLOv3[3]的2D圖像標簽和3D幾何信息

2c5daf92-0e31-11ee-962d-dac502259ad0.png

17.ORB-SLAM2在unity中仿真

2c656e76-0e31-11ee-962d-dac502259ad0.png

18.ORB-SLAM2使用CUDA加速

2c70eb34-0e31-11ee-962d-dac502259ad0.png

19.ORB-SLAM2

加入距離最優路徑規劃器利用該模型來約束路徑,使得每個姿勢中相關聯的地圖點的數量高于閾值。

2c871684-0e31-11ee-962d-dac502259ad0.png

20.增加了RGBD-IMU的運行模式和ROS接口,增加了單目IMU和雙目IMU的ROS接口,替換了詞典為二進制格式,加載速度更快。

依據ORB_SLAM3重寫了RGBD-IMU的ROS接口,避免出現隊列擁塞,提供了Kinect for Azure的參數文件

2c9bb8c8-0e31-11ee-962d-dac502259ad0.png

21.將激光雷達數據集成到ORB-SLAM3中

2ca44362-0e31-11ee-962d-dac502259ad0.png

2cbb35ae-0e31-11ee-962d-dac502259ad0.png

23.在ORB-SLAM3中使用深度學習YOLOv3

2ccfc6fe-0e31-11ee-962d-dac502259ad0.png

24.使用ORB-SLAM3創建周圍環境的分段3D八進制圖,可以在八進制圖中刪除或添加特定的分段對象

2ce39774-0e31-11ee-962d-dac502259ad0.png

25.一種基于RGB-D模式將3D激光雷達深度信息集成到現有ORBSLAM3中的新方法。

我們提出并比較了兩種深度圖生成方法:傳統的計算機視覺方法,即逆膨脹操作和基于監督深度學習的方法。

通過添加直接讀取激光雷達點云的所謂RGB-L(LiDAR)模式,將前者直接集成到ORB-SLAM3框架中。

2cedb3bc-0e31-11ee-962d-dac502259ad0.png

3. 主要結構

由于網上對ORB-SLAM3的內容很多了,這里打算換一個形式,如果這里大段重復別人的內容不是很好,這里換一種形式,即用簡單的話語+鏈接的形式來完成整個ORB-SLAM3的介紹。

這里的圖是以單目融合IMU的文件(Mono_inertial_tum_vi.cc)為例的。但是我們需要注意的是我們一般會使用ros作為 warpper,所以我們會使用ros_mono_inertial.cc完成理解

2cf8dbc0-0e31-11ee-962d-dac502259ad0.png

4. 主函數main

(1)首先是ros系統的初始化,以及啟動相關線程

ros::init(argc, argv, "Mono_Inertial");
ros::NodeHandle n("~");

(2)創建SLAM系統,system會初始化所有的系統進程,并且準備好生成幀,此處會調用system的構造函數System::System(),具體見System.cc

 // Create SLAM system. It initializes all system threads and gets ready to process frames.
 ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::IMU_MONOCULAR,true);

(3)準備捕獲圖像,并用SLAM類進行初始化

ImuGrabber imugb;
 ImageGrabber igb(&SLAM,&imugb,bEqual); // TODO


//ImageGrabber類如下
class ImageGrabber
{
public:
  ImageGrabber(ORB_SLAM3::System* pSLAM, ImuGrabber *pImuGb, const bool bClahe): mpSLAM(pSLAM), mpImuGb(pImuGb), mbClahe(bClahe){}//類的初始化


  void GrabImage(const sensor_msgs::ImageConstPtr& msg);//捕獲圖像,并進行跟蹤
  cv::Mat GetImage(const sensor_msgs::ImageConstPtr &img_msg);
  void SyncWithImu();


  queue img0Buf;
  std::mutex mBufMutex;


  ORB_SLAM3::System* mpSLAM;
  ImuGrabber *mpImuGb;


  const bool mbClahe;
  cv::Ptr mClahe = cv::createCLAHE(3.0, cv::Size(8, 8));
};

(4)訂閱話題,獲取彩色圖像,當接收到圖像后便會運行此函數,調用ImageGrabber中的GrabImage函數。

如果運行程序時出現沒有畫面的情形,大概率是因為話題名稱不對應,先使用rostopic list或者rviz查看發布的話題,然后更改下面代碼中的話題名稱。

 // Maximum delay, 5 seconds
 ros::Subscriber sub_imu = n.subscribe("/imu", 1000, &ImuGrabber::GrabImu, &imugb); 
 ros::Subscriber sub_img0 = n.subscribe("/camera/image_raw", 100, &ImageGrabber::GrabImage,&igb);

(5)在回調函數中的GrabImage函數作用是,將訂閱獲取的ros image message轉換為矩陣類型,并將rgb圖像以及時間戳參數壓入img0Buf,并將其傳遞給System中的TrackStereo函數,進行跟蹤。這里會完成和IMU傳感器對齊。

void ImageGrabber::SyncWithImu()
{
 while(1)
 {
  cv::Mat im;
  double tIm = 0;
  if (!img0Buf.empty()&&!mpImuGb->imuBuf.empty())
  {
   tIm = img0Buf.front()->header.stamp.toSec();
   if(tIm>mpImuGb->imuBuf.back()->header.stamp.toSec())
     continue;
   {
   this->mBufMutex.lock();
   im = GetImage(img0Buf.front());
   img0Buf.pop();
   this->mBufMutex.unlock();
   }


   vector vImuMeas;
   mpImuGb->mBufMutex.lock();
   if(!mpImuGb->imuBuf.empty())
   {
    // Load imu measurements from buffer
    vImuMeas.clear();
    while(!mpImuGb->imuBuf.empty() && mpImuGb->imuBuf.front()->header.stamp.toSec()<=tIm)
 ? ? ? ?{
 ? ? ? ? ?double t = mpImuGb->imuBuf.front()->header.stamp.toSec();
     cv::Point3f acc(mpImuGb->imuBuf.front()->linear_acceleration.x, mpImuGb->imuBuf.front()->linear_acceleration.y, mpImuGb->imuBuf.front()->linear_acceleration.z);
     cv::Point3f gyr(mpImuGb->imuBuf.front()->angular_velocity.x, mpImuGb->imuBuf.front()->angular_velocity.y, mpImuGb->imuBuf.front()->angular_velocity.z);
     vImuMeas.push_back(ORB_SLAM3::Point(acc,gyr,t));
     mpImuGb->imuBuf.pop();
    }
   }
   mpImuGb->mBufMutex.unlock();
   if(mbClahe)
    mClahe->apply(im,im);


   mpSLAM->TrackMonocular(im,tIm,vImuMeas);
  }


  std::chrono::milliseconds tSleep(1);
  std::sleep_for(tSleep);
 }
}

5. 視覺SLAM圖像輸入以及初始地圖構建

上面一節展示了這幅圖,我們也將第一列給講述完畢了,當然是使用ROS的方式,這里也可以使用opencv等操作,避免使用ROS。

下面我們將開始介紹

TrackMonocular(im,tIm,vImuMeas);這部分的內容。

2d12f5dc-0e31-11ee-962d-dac502259ad0.png

這部分主要完成的是將圖像傳到SLAM系統中并進行跟蹤,具體可以參考ORB-SLAM3 細讀單目初始化過程(上)和ORB_SLAM3原理源碼解讀系列(1)—— ORB特征點提取。

這一章節中主要介紹了Frame部分,主要完成工作是特征點提取,涉及到的知識點其實很多,包括圖像金字塔、特征點均勻化、四叉樹算法分發特征點、特征點方向計算等等。

然后超詳細解讀ORB-SLAM3單目初始化(下篇)和ORB_SLAM3原理源碼解讀系列(2)——單目初始化這一講主要講述了Tracking::Track()。

Tracking部分作用論文已提及,包含輸入當前幀、初始化、相機位姿跟蹤、局部地圖跟蹤、關鍵幀處理、姿態更新與保存等。

除此以外,單目SLAM系統需要設計專門的策略來生成初始化地圖(局部建圖),這也是為什么代碼中單獨設計一個CreateInitialMapMonocular()函數來實現單目初始化。

在文章ORB-SLAM3 單目地圖初始化(終結篇)、ORB_SLAM3原理源碼解讀系列(3)——創建單目初始化地圖和ORB-SLAM3源碼閱讀筆記1:Tracking、LocalMapping和LoopClosing三線程之間的關系里面有著詳細的解釋,這里作者建議參照著代碼注釋與文章來進行解析。

6. System完成多地圖以及閉環檢測

經過上一節的講述,視覺SLAM圖像輸入以及初始地圖構建部分也已經算是講述完畢了,最后一部分就是

2d360ebe-0e31-11ee-962d-dac502259ad0.png

6.1 多地圖系統

ORB-SLAM3中的地圖,大致上采用了ORB-SLAM1/2和ORB-Atlas的方法完成了重定位、回環和地圖融合。詳細內容可以參考ORB-SLAM3多地圖管理以及ORBSLAM-Altas:多地圖SLAM

6.2 重定位

ORB-SLAM3在重定位的策略上做了一些改進。為了保證重定位不出錯,重定位常常設置了嚴苛的條件,保證高精準率而識別率較低。

舊的方法(ORB-SLAM1/2)中當3個關鍵幀完全匹配上后才判定為重定位成功。然而作者發現,三個關鍵幀經過了很長的時間。

主要改進是,當當前關鍵幀與數據庫的關鍵幀匹配上后,檢測與當前關鍵幀具有共視關系的關鍵幀是否也能夠匹配,如果可以則判定為重定位成功;

否則才繼續使用接下來的關鍵幀進行判定。,具體文章可以參考【ORB-SLAM3】LoopClosing-回環檢測與地圖融合詳述,以及ORB-SLAM3源碼閱讀筆記13:回環檢測與重定位的實現與分析。

6.3 視覺地圖融合

視覺地圖融合方式與ORB-Atlas的大致相同,對融合的區域起了一個新的名字叫做“銜接窗口(welding window)”。

同時指明在銜接后進行完整位姿圖融合時,銜接窗口的關鍵幀固定以保證不會出現gauge freedom。(十三)ORBSLAM3子地圖融合優化

6.4 閉環

閉環檢測部分與ORB-Atlas的基本相同。




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

    關注

    2552

    文章

    51227

    瀏覽量

    754648
  • RGB
    RGB
    +關注

    關注

    4

    文章

    799

    瀏覽量

    58572
  • SLAM
    +關注

    關注

    23

    文章

    425

    瀏覽量

    31861
  • LiDAR芯片
    +關注

    關注

    1

    文章

    17

    瀏覽量

    3240
  • orb
    orb
    +關注

    關注

    0

    文章

    21

    瀏覽量

    9901

原文標題:ORB-SLAM3整體流程詳解

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ORB_FPGA單層圖像金字塔的ORB特征提取方案分析

    ORB特征是一種圖像識別、追蹤和匹配中常用的特征,大名鼎鼎的ORB-SLAM就是使用的這一特征。它提取FAST特征點,并通過特征點附近的窗口矩計算特征點的方向,含方向的FAST特征也被稱為oFAST
    的頭像 發表于 09-26 11:43 ?5290次閱讀
    <b class='flag-5'>ORB</b>_FPGA單層圖像金字塔的<b class='flag-5'>ORB</b>特征提取方案分析

    PCB工藝流程詳解

    PCB工藝流程詳解PCB工藝流程詳解
    發表于 05-22 14:46

    請問用樹莓派運行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

    機器人SLAM實現

    針對復雜環境下機器人的同時定位與地圖構建( SLAM)存在實時性與魯棒性下降等問題,將一種基于ORB特征點的關鍵幀閉環檢測匹配算法應用到定位與地圖構建巾。研究并分析了特征點提取與描述符建立、幀間配準
    發表于 03-26 10:57 ?6次下載

    SLAM還是存在許多開放性的問題

    我看來,vslam得發展也就是從MonoSLAM->PTAM->圖優化SLAM->ORB-SLAM為代表的現代slam,其中可能還有許多內容,不過這些開源SLAM一定程度上體現了
    的頭像 發表于 06-18 10:40 ?1593次閱讀
    <b class='flag-5'>SLAM</b>還是存在許多開放性的問題

    基于ORB特征的三維定位與地圖構建算法

    SLAM框架上面我肯定自己寫不了,這里研究了一下午,使用了ORB-SLAM
    的頭像 發表于 08-16 10:57 ?1381次閱讀

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

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

    基于視覺傳感器的ORB-SLAM系統的學習

    視覺SLAM是一種基于視覺傳感器的 SLAM 系統,與激光傳感器相比,視覺傳感器具有成本低、保留環境語義信息的優點,能夠與深度學習進行大量結合。
    的頭像 發表于 11-02 15:02 ?1094次閱讀

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

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

    OV2SLAM(高速視覺slam)簡析

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

    基于英特爾開發套件使用ORB-SLAM3實現無人機實時定位

    工業建模對于精度有著高要求,這意味著無人機的 SLAM 算法要提供可靠的實時位姿估計。ORB-SLAM3 是目前融合雙目視覺與 IMU 的優秀算法,其前端是針對實時性優化的 ORB 描述子與關鍵幀
    的頭像 發表于 09-18 10:12 ?1349次閱讀
    基于英特爾開發套件使用<b class='flag-5'>ORB-SLAM3</b>實現無人機實時定位

    視覺SLAM開源算法ORB-SLAM3原理與代碼解析

    地圖點/路標點:將圖像上被觀察到的特征點通過三角化等方式進行深度恢復,我們就可以得到其對應的在三維空間的位置,同時包含幀的觀測信息,這種點就被稱為地圖點或路標點。
    的頭像 發表于 11-09 17:25 ?2543次閱讀
    視覺<b class='flag-5'>SLAM</b>開源算法<b class='flag-5'>ORB-SLAM3</b>原理與代碼解析

    ORB-SLAM3整體結構框架分析

    處理傳感器信息并實時計算當前幀在激活地圖中的姿態。同時該模塊也決定了是否將當前幀作為關鍵幀。在視覺-慣性模式下,通過在優化中加入慣性殘差來估計剛體速度和 IMU 偏差。
    發表于 12-27 10:04 ?1772次閱讀
    <b class='flag-5'>ORB-SLAM3</b><b class='flag-5'>整體</b>結構框架分析

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

    ORB-SLAM是一種基于特征的單目視覺SLAM系統,廣泛用于實時三維地圖構建和機器人定位。該系統使用ORB特征進行高效的視覺識別和地圖重建,支持關鍵幀技術和回環檢測來優化地圖的準確性。
    的頭像 發表于 04-08 10:17 ?2978次閱讀
    工程實踐中VINS與<b class='flag-5'>ORB-SLAM</b>的優劣分析
    主站蜘蛛池模板: 女生扒开尿口让男生舔| 亚州一级毛片| 免费看美女午夜大片| 伊人三级| 久久久xxx| 亚洲伊人99综合网| 亚洲a毛片| 日韩色影视| 美女黄页网站免费进入| 国产一级毛片外aaaa| 99久久婷婷免费国产综合精品| 天天做天天爱夜夜爽| 狠狠插天天干| 69日本xxxxxxxxx19| 九九热在线观看| 啪啪中文字幕| 免费看色视频| 素股中文字幕| 久久国产乱子伦精品免费强| 成人三级在线观看| 天堂在线最新资源| 69精品久久久久| 国产亚洲精品久久久久久午夜| 午色| 猛操女人| 亚洲精品久久久久午夜| 国产精品久久久久久久久免费| 亚洲视频在线网| 亚洲韩国在线一卡二卡| 免费在线观看你懂的| 91精选视频在线观看| 国产小视频在线观看| 亚欧精品一区二区三区| 五月婷婷综合激情网| 久久羞羞视频| 天天色综合天天| 免费看啪| 性色网站| 韩国十八禁毛片无遮挡| 欧美肥胖女人bbwbbw视频| 一区二区三区视频|