ORB-SLAM2详解(一)简介

ORB-SLAM2是一款实时单目视觉SLAM系统,支持双目及RGB-D输入,适用于室内外各种环境。该系统包含跟踪、建图、重定位及闭环检测等核心模块,实现了鲁棒的宽基线闭环检测与重定位。

ORB-SLAM2详解(一)简介 

欢迎转载,转载请注明网址http://blog.youkuaiyun.com/u010128736/

一、摘要

  ORB-SLAM是由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在IEEE Transactions on Robotics。项目主页网址为:http://webdiis.unizar.es/~raulmur/orbslam/。 
  ORB-SLAM是一个基于特征点的实时单目SLAM系统,在大规模的、小规模的、室内室外的环境都可以运行。该系统对剧烈运动也很鲁棒,支持宽基线的闭环检测和重定位,包括全自动初始化。该系统包含了所有SLAM系统共有的模块:跟踪(Tracking)、建图(Mapping)、重定位(Relocalization)、闭环检测(Loop closing)。由于ORB-SLAM系统是基于特征点的SLAM系统,故其能够实时计算出相机的轨线,并生成场景的稀疏三维重建结果。ORB-SLAM2在ORB-SLAM的基础上,还支持标定后的双目相机和RGB-D相机。

二、ORB-SLAM的贡献:

这里写图片描述

三、系统架构

  ORB-SLAM其中的关键点如下图所示: 
这里写图片描述 
  可以看到ORB-SLAM主要分为三个线程进行,也就是论文中的下图所示的,分别是Tracking、LocalMapping和LoopClosing。ORB-SLAM2的工程非常清晰漂亮,三个线程分别存放在对应的三个文件中,分别是Tracking.cpp、LocalMapping.cpp和LoopClosing.cpp文件中,很容易找到。 
image

(1)跟踪(Tracking) 
  这一部分主要工作是从图像中提取ORB特征,根据上一帧进行姿态估计,或者进行通过全局重定位初始化位姿,然后跟踪已经重建的局部地图,优化位姿,再根据一些规则确定新的关键帧。

(2)建图(LocalMapping) 
  这一部分主要完成局部地图构建。包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点,使用局部捆集调整(Local BA),最后再对插入的关键帧进行筛选,去除多余的关键帧。

(3)闭环检测(LoopClosing) 
  这一部分主要分为两个过程,分别是闭环探测和闭环校正。闭环检测先使用WOB进行探测,然后通过Sim3算法计算相似变换。闭环校正,主要是闭环融合和Essential Graph的图优化。

### ORB-SLAM 源码详解与教程解析 ORB-SLAM个开源的视觉 SLAM 系统,支持单目、双目和 RGB-D 相机。其源码结构复杂,涉及多线程、特征提取、位姿估计等多个模块。以下是对 ORB-SLAM 源码的详细解析和教程内容。 #### 1. ORB-SLAM 的代码框架 ORB-SLAM 的代码框架分为多个模块,包括跟踪(Tracking)、局部映射(Local Mapping)、回环检测(Loop Closing)等[^1]。这些模块通过多线程并行运行,确保系统的实时性和鲁棒性。推荐使用 Understand 工具来分析代码的流程图和依赖关系,这有助于理解整个框架的设计思路。如果预算有限,SourceInsight 也是个不错的选择,可以方便地查看类的定义和方法实现[^1]。 #### 2. 运行 ORB-SLAM 的基本步骤 以 TUM 数据集为例,运行 ORB-SLAM 的命令如下: ```bash ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE ``` 其中: - `ORBvoc.txt` 是词袋模型文件,用于回环检测。 - `TUM1.yaml` 是相机的配置文件,包含内参信息。 - `PATH_TO_SEQUENCE_FOLDER` 是数据集路径。 - `ASSOCIATIONS_FILE` 是时间戳文件,用于同步图像和深度数据[^2]。 #### 3. 跟踪模块的具体实现 跟踪模块的核心任务是估计当前帧的相机位姿,并建立当前帧与地图点(Map Points, MP)之间的对应关系。具体流程如下: - 根据上帧的位姿和匹配的 3D-2D 点对,预测当前帧的相机位姿。 - 将上帧的地图点投影到当前帧的图像平面上。 - 在投影点附近搜索匹配的特征点,更新当前帧与地图点的关系[^3]。 #### 4. 局部映射模块的作用 局部映射模块负责构建和维护局部地图。它通过三角化当前帧中的特征点,生成新的地图点,并优化它们的空间位置。此外,局部映射还会剔除不可靠的地图点,确保地图的质量[^1]。 #### 5. 回环检测模块的功能 回环检测模块通过比较当前帧与全局地图的关键帧,检测是否存在闭环。旦检测到闭环,系统会通过非线性优化调整地图点和关键帧的位姿,消除累积误差[^1]。 #### 6. 学习资源推荐 对于初学者,建议从官方文档和相关论文入手,了解 ORB-SLAM 的设计原理和算法细节。同时,可以参考以下教程: - [ORB-SLAM 官方 GitHub 页面](https://github.com/raulmur/ORB_SLAM2) - [ORB-SLAM 代码详解系列博客](https://blog.youkuaiyun.com/column/details/orb-slam-code-analysis.html) #### 示例代码:初始化 ORB 特征提取器 以下是 ORB-SLAM 中初始化 ORB 特征提取器的代码示例: ```cpp #include <opencv2/opencv.hpp> int main() { cv::Ptr<cv::ORB> orb = cv::ORB::create(); cv::Mat image = cv::imread("example.jpg", cv::IMREAD_GRAYSCALE); std::vector<cv::KeyPoint> keypoints; cv::Mat descriptors; orb->detectAndCompute(image, cv::Mat(), keypoints, descriptors); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值