UZ-SLAMLab/ORB_SLAM3
GitHub: UZ-SLAMLab/ORB_SLAM3
一个能够使用单目、双目和 RGB-D 相机执行视觉、视觉惯性和多地图 SLAM 的精确开源库。
Stars: 8391 | Forks: 3007
# ORB-SLAM3
### V1.0, 2021年12月22日
**作者:** Carlos Campos, Richard Elvira, Juan J. Gómez Rodríguez, [José M. M. Montiel](http://webdiis.unizar.es/~josemari/), [Juan D. Tardos](http://webdiis.unizar.es/~jdtardos/).
[更新日志](https://github.com/UZ-SLAMLab/ORB_SLAM3/blob/master/Changelog.md) 描述了每个版本的功能。
ORB-SLAM3 是第一个能够使用 **单目、双目和 RGB-D** 相机,基于 **针孔和鱼眼** 镜头模型执行 **视觉、视觉惯性 和多地图 SLAM** 的实时 SLAM 库。在所有传感器配置中,ORB-SLAM3 的鲁棒性与文献中现有的最佳系统相当,且精度显著更高。
我们提供了在 [EuRoC 数据集](http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets) 中使用双目或单目(带或不带 IMU)运行 ORB-SLAM3 的示例,以及在 [TUM-VI 数据集](https://vision.in.tum.de/data/datasets/visual-inertial-dataset) 中使用鱼眼双目或单目(带或不带 IMU)的示例。一些示例执行的视频可以在 [ORB-SLAM3 频道](https://www.youtube.com/channel/UCXVt-kXG6T95Z4tVaYlU80Q) 找到。
本软件基于 [Raul Mur-Artal](http://webdiis.unizar.es/~raulmur/), [Juan D. Tardos](http://webdiis.unizar.es/~jdtardos/), [J. M. M. Montiel](http://webdiis.unizar.es/~josemari/) 和 [Dorian Galvez-Lopez](http://doriangalvez.com/) ([DBoW2](https://github.com/dorian3d/DBoW2)) 开发的 [ORB-SLAM2](https://github.com/raulmur/ORB_SLAM2)。
### 相关出版物:
[ORB-SLAM3] Carlos Campos, Richard Elvira, Juan J. Gómez Rodríguez, José M. M. Montiel and Juan D. Tardós, **ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM**, *IEEE Transactions on Robotics 37(6):1874-1890, Dec. 2021*. **[PDF](https://arxiv.org/abs/2007.11898)**.
[IMU-Initialization] Carlos Campos, J. M. M. Montiel and Juan D. Tardós, **Inertial-Only Optimization for Visual-Inertial Initialization**, *ICRA 2020*. **[PDF](https://arxiv.org/pdf/2003.05766.pdf)**
[ORBSLAM-Atlas] Richard Elvira, J. M. M. Montiel and Juan D. Tardós, **ORBSLAM-Atlas: a robust and accurate multi-map system**, *IROS 2019*. **[PDF](https://arxiv.org/pdf/1908.11585.pdf)**.
[ORBSLAM-VI] Raúl Mur-Artal, and Juan D. Tardós, **Visual-inertial monocular SLAM with map reuse**, IEEE Robotics and Automation Letters, vol. 2 no. 2, pp. 796-803, 2017. **[PDF](https://arxiv.org/pdf/1610.05949.pdf)**.
[Stereo and RGB-D] Raúl Mur-Artal and Juan D. Tardós. **ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras**. *IEEE Transactions on Robotics,* vol. 33, no. 5, pp. 1255-1262, 2017. **[PDF](https://arxiv.org/pdf/1610.06475.pdf)**.
[Monocular] Raúl Mur-Artal, José M. M. Montiel and Juan D. Tardós. **ORB-SLAM: A Versatile and Accurate Monocular SLAM System**. *IEEE Transactions on Robotics,* vol. 31, no. 5, pp. 1147-1163, 2015. (**2015 IEEE Transactions on Robotics Best Paper Award**). **[PDF](https://arxiv.org/pdf/1502.00956.pdf)**.
[DBoW2 Place Recognition] Dorian Gálvez-López and Juan D. Tardós. **Bags of Binary Words for Fast Place Recognition in Image Sequences**. *IEEE Transactions on Robotics,* vol. 28, no. 5, pp. 1188-1197, 2012. **[PDF](http://doriangalvez.com/php/dl.php?dlp=GalvezTRO12.pdf)**
# 1. 许可证
ORB-SLAM3 基于 [GPLv3 许可证](https://github.com/UZ-SLAMLab/ORB_SLAM3/LICENSE) 发布。有关所有代码/库依赖项(及相关许可证)的列表,请参阅 [Dependencies.md](https://github.com/UZ-SLAMLab/ORB_SLAM3/blob/master/Dependencies.md)。
如需用于商业目的的 ORB-SLAM3 闭源版本,请联系作者:orbslam (at) unizar (dot) es。
如果您在学术工作中使用 ORB-SLAM3,请引用:
```
@article{ORBSLAM3_TRO,
title={{ORB-SLAM3}: An Accurate Open-Source Library for Visual, Visual-Inertial
and Multi-Map {SLAM}},
author={Campos, Carlos AND Elvira, Richard AND G\´omez, Juan J. AND Montiel,
Jos\'e M. M. AND Tard\'os, Juan D.},
journal={IEEE Transactions on Robotics},
volume={37},
number={6},
pages={1874-1890},
year={2021}
}
```
# 2. 先决条件
我们在 **Ubuntu 16.04** 和 **18.04** 上测试了该库,但在其他平台上编译应该也很容易。一台高性能计算机(例如 i7)将确保实时性能,并提供更稳定、准确的结果。
## C++11 或 C++0x 编译器
我们使用 C++11 的新线程和计时功能。
## Pangolin
我们使用 [Pangolin](https://github.com/stevenlovegrove/Pangolin) 进行可视化和用户界面。下载和安装说明可以在以下地址找到:https://github.com/stevenlovegrove/Pangolin。
## OpenCV
我们使用 [OpenCV](http://opencv.org) 来处理图像和特征。下载和安装说明可以在以下地址找到:http://opencv.org。**至少需要 3.0 版本。已在 OpenCV 3.2.0 和 4.4.0 上测试**。
## Eigen3
g2o 所需(见下文)。下载和安装说明可以在以下地址找到:http://eigen.tuxfamily.org。**至少需要 3.1.0 版本**。
## DBoW2 和 g2o(包含在 Thirdparty 文件夹中)
我们使用修改版的 [DBoW2](https://github.com/dorian3d/DBoW2) 库来执行场景识别,以及 [g2o](https://github.com/RainerKuemmerle/g2o) 库来执行非线性优化。这两个修改后的库(均为 BSD 许可)包含在 *Thirdparty* 文件夹中。
## Python
用于计算轨迹与真值的对齐。**需要 Numpy 模块**。
* (win) http://www.python.org/downloads/windows
* (deb) `sudo apt install libpython2.7-dev`
* (mac) osx 预装
## ROS (可选)
我们提供了一些示例,使用 ROS 处理单目、单目惯性、双目、双目惯性或 RGB-D 相机的输入。构建这些示例是可选的。这些已在 Ubuntu 18.04 下的 ROS Melodic 中进行了测试。
# 3. 构建 ORB-SLAM3 库和示例
克隆仓库:
```
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
```
我们提供了一个脚本 `build.sh` 来构建 *Thirdparty* 库和 *ORB-SLAM3*。请确保您已安装所有必需的依赖项(见第 2 节)。执行:
```
cd ORB_SLAM3
chmod +x build.sh
./build.sh
```
这将在 *lib* 文件夹中创建 **libORB_SLAM3.so**,并在 *Examples* 文件夹中创建可执行文件。
# 4. 使用您的相机运行 ORB-SLAM3
目录 `Examples` 包含几个演示程序和校准文件,用于在所有传感器配置下使用 Intel Realsense 相机 T265 和 D435i 运行 ORB-SLAM3。使用您自己的相机所需的步骤如下:
1. 按照 `Calibration_Tutorial.pdf` 校准您的相机,并编写您的校准文件 `your_camera.yaml`
2. 修改提供的演示之一以适应您的特定相机型号,并构建它
3. 使用 USB3 或适当的接口将相机连接到计算机
4. 运行 ORB-SLAM3。例如,对于我们的 D435i 相机,我们将执行:
```
./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml
```
# 5. EuRoC 示例
[EuRoC 数据集](http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets) 是使用两个针孔相机和一个惯性传感器录制的。我们提供了一个示例脚本,以在所有传感器配置下启动 EuRoC 序列。
1. 从 http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets 下载一个序列(ASL 格式)
2. 在项目根目录打开脚本 "euroc_examples.sh"。更改 **pathDatasetEuroc** 变量,使其指向数据集解压缩的目录。
3. 执行以下脚本以处理所有传感器配置下的所有序列:
```
./euroc_examples
```
## 评估
EuRoC 为 IMU 机体参考系中的每个序列提供真值。由于纯视觉执行报告的轨迹以左相机为中心,我们在 "evaluation" 文件夹中提供了将真值转换到左相机参考系的变换。视觉-惯性轨迹使用数据集中的真值。
执行以下脚本以处理序列并计算 RMS ATE:
```
./euroc_eval_examples
```
# 6. TUM-VI 示例
[TUM-VI 数据集](https://vision.in.tum.de/data/datasets/visual-inertial-dataset) 是使用两个鱼眼相机和一个惯性传感器录制的。
1. 从 https://vision.in.tum.de/data/datasets/visual-inertial-dataset 下载一个序列并解压。
2. 在项目根目录打开脚本 "tum_vi_examples.sh"。更改 **pathDatasetTUM_VI** 变量,使其指向数据集解压缩的目录。
3. 执行以下脚本以处理所有传感器配置下的所有序列:
```
./tum_vi_examples
```
## 评估
在 TUM-VI 中,真值仅在所有序列开始和结束的房间内可用。因此,该误差测量的是序列结束时的漂移。
执行以下脚本以处理序列并计算 RMS ATE:
```
./tum_vi_eval_examples
```
# 7. ROS 示例
### 为 mono, mono-inertial, stereo, stereo-inertial 和 RGB-D 构建节点
已在 ROS Melodic 和 ubuntu 18.04 上测试。
1. 将包含 *Examples/ROS/ORB_SLAM3* 的路径添加到 ROS_PACKAGE_PATH 环境变量中。打开 .bashrc 文件:
```
gedit ~/.bashrc
```
并在末尾添加以下行。将 PATH 替换为您克隆 ORB_SLAM3 的文件夹:
```
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
```
2. 执行 `build_ros.sh` 脚本:
```
chmod +x build_ros.sh
./build_ros.sh
```
### 运行单目节点
对于来自话题 `/camera/image_raw` 的单目输入,运行节点 ORB_SLAM3/Mono。您需要提供词汇表文件和设置文件。请参阅上面的单目示例。
```
rosrun ORB_SLAM3 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
```
### 运行单目惯性节点
对于来自话题 `/camera/image_raw` 的单目输入和来自话题 `/imu` 的惯性输入,运行节点 ORB_SLAM3/Mono_Inertial。将可选的第三个参数设置为 true 将对图像应用 CLAHE 均衡化(主要用于 TUM-VI 数据集)。
```
rosrun ORB_SLAM3 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE [EQUALIZATION]
```
### 运行双目节点
对于来自话题 `/camera/left/image_raw` 和 `/camera/right/image_raw` 的双目输入,运行节点 ORB_SLAM3/Stereo。您需要提供词汇表文件和设置文件。对于针孔相机模型,如果您 **提供了矫正矩阵**(参见 Examples/Stereo/EuRoC.yaml 示例),节点将在线矫正图像,**否则图像必须经过预矫正**。对于鱼眼相机模型,不需要矫正,因为系统使用原始图像工作:
```
rosrun ORB_SLAM3 Stereo PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE ONLINE_RECTIFICATION
```
### 运行双目惯性节点
对于来自话题 `/camera/left/image_raw` 和 `/camera/right/image_raw` 的双目输入,以及来自话题 `/imu` 的惯性输入,运行节点 ORB_SLAM3/Stereo_Inertial。您需要提供词汇表文件和设置文件,如果需要,包括类似于双目情况的矫正矩阵:
```
rosrun ORB_SLAM3 Stereo_Inertial PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE ONLINE_RECTIFICATION [EQUALIZATION]
```
### 运行 RGB_D 节点
对于来自话题 `/camera/rgb/image_raw` 和 `/camera/depth_registered/image_raw` 的 RGB-D 输入,运行节点 ORB_SLAM3/RGBD。您需要提供词汇表文件和设置文件。请参阅上面的 RGB-D 示例。
```
rosrun ORB_SLAM3 RGBD PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
```
**运行 ROS 示例:** 从 EuRoC 数据集 下载一个 rosbag(例如 V1_02_medium.bag)。在终端打开 3 个标签页,并在每个标签页中针对 Stereo-Inertial 配置运行以下命令:
```
roscore
```
```
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml true
```
```
rosbag play --pause V1_02_medium.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
```
一旦 ORB-SLAM3 加载完词汇表,在 rosbag 标签页中按空格键。
**备注:** 对于来自 TUM-VI 数据集的 rosbag,由于块大小的原因,可能会出现一些播放问题。一种可能的解决方案是使用默认块大小重新打包它们,例如:
```
rosrun rosbag fastrebag.py dataset-room1_512_16.bag dataset-room1_512_16_small_chunks.bag
```
# 8. 运行时间分析
`include\Config.h` 中的一个标志激活时间测量。有必要取消注释 `#define REGISTER_TIMES` 行以获取一次执行的时间统计数据,该数据将显示在终端并存储在文本文件(`ExecTimeMean.txt`)。
# 9. 校准
您可以在 `Calibration_Tutorial.pdf` 中找到视觉惯性校准教程以及有效配置文件内容的详细说明
### 相关出版物:
[ORB-SLAM3] Carlos Campos, Richard Elvira, Juan J. Gómez Rodríguez, José M. M. Montiel and Juan D. Tardós, **ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM**, *IEEE Transactions on Robotics 37(6):1874-1890, Dec. 2021*. **[PDF](https://arxiv.org/abs/2007.11898)**.
[IMU-Initialization] Carlos Campos, J. M. M. Montiel and Juan D. Tardós, **Inertial-Only Optimization for Visual-Inertial Initialization**, *ICRA 2020*. **[PDF](https://arxiv.org/pdf/2003.05766.pdf)**
[ORBSLAM-Atlas] Richard Elvira, J. M. M. Montiel and Juan D. Tardós, **ORBSLAM-Atlas: a robust and accurate multi-map system**, *IROS 2019*. **[PDF](https://arxiv.org/pdf/1908.11585.pdf)**.
[ORBSLAM-VI] Raúl Mur-Artal, and Juan D. Tardós, **Visual-inertial monocular SLAM with map reuse**, IEEE Robotics and Automation Letters, vol. 2 no. 2, pp. 796-803, 2017. **[PDF](https://arxiv.org/pdf/1610.05949.pdf)**.
[Stereo and RGB-D] Raúl Mur-Artal and Juan D. Tardós. **ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras**. *IEEE Transactions on Robotics,* vol. 33, no. 5, pp. 1255-1262, 2017. **[PDF](https://arxiv.org/pdf/1610.06475.pdf)**.
[Monocular] Raúl Mur-Artal, José M. M. Montiel and Juan D. Tardós. **ORB-SLAM: A Versatile and Accurate Monocular SLAM System**. *IEEE Transactions on Robotics,* vol. 31, no. 5, pp. 1147-1163, 2015. (**2015 IEEE Transactions on Robotics Best Paper Award**). **[PDF](https://arxiv.org/pdf/1502.00956.pdf)**.
[DBoW2 Place Recognition] Dorian Gálvez-López and Juan D. Tardós. **Bags of Binary Words for Fast Place Recognition in Image Sequences**. *IEEE Transactions on Robotics,* vol. 28, no. 5, pp. 1188-1197, 2012. **[PDF](http://doriangalvez.com/php/dl.php?dlp=GalvezTRO12.pdf)**
# 1. 许可证
ORB-SLAM3 基于 [GPLv3 许可证](https://github.com/UZ-SLAMLab/ORB_SLAM3/LICENSE) 发布。有关所有代码/库依赖项(及相关许可证)的列表,请参阅 [Dependencies.md](https://github.com/UZ-SLAMLab/ORB_SLAM3/blob/master/Dependencies.md)。
如需用于商业目的的 ORB-SLAM3 闭源版本,请联系作者:orbslam (at) unizar (dot) es。
如果您在学术工作中使用 ORB-SLAM3,请引用:
```
@article{ORBSLAM3_TRO,
title={{ORB-SLAM3}: An Accurate Open-Source Library for Visual, Visual-Inertial
and Multi-Map {SLAM}},
author={Campos, Carlos AND Elvira, Richard AND G\´omez, Juan J. AND Montiel,
Jos\'e M. M. AND Tard\'os, Juan D.},
journal={IEEE Transactions on Robotics},
volume={37},
number={6},
pages={1874-1890},
year={2021}
}
```
# 2. 先决条件
我们在 **Ubuntu 16.04** 和 **18.04** 上测试了该库,但在其他平台上编译应该也很容易。一台高性能计算机(例如 i7)将确保实时性能,并提供更稳定、准确的结果。
## C++11 或 C++0x 编译器
我们使用 C++11 的新线程和计时功能。
## Pangolin
我们使用 [Pangolin](https://github.com/stevenlovegrove/Pangolin) 进行可视化和用户界面。下载和安装说明可以在以下地址找到:https://github.com/stevenlovegrove/Pangolin。
## OpenCV
我们使用 [OpenCV](http://opencv.org) 来处理图像和特征。下载和安装说明可以在以下地址找到:http://opencv.org。**至少需要 3.0 版本。已在 OpenCV 3.2.0 和 4.4.0 上测试**。
## Eigen3
g2o 所需(见下文)。下载和安装说明可以在以下地址找到:http://eigen.tuxfamily.org。**至少需要 3.1.0 版本**。
## DBoW2 和 g2o(包含在 Thirdparty 文件夹中)
我们使用修改版的 [DBoW2](https://github.com/dorian3d/DBoW2) 库来执行场景识别,以及 [g2o](https://github.com/RainerKuemmerle/g2o) 库来执行非线性优化。这两个修改后的库(均为 BSD 许可)包含在 *Thirdparty* 文件夹中。
## Python
用于计算轨迹与真值的对齐。**需要 Numpy 模块**。
* (win) http://www.python.org/downloads/windows
* (deb) `sudo apt install libpython2.7-dev`
* (mac) osx 预装
## ROS (可选)
我们提供了一些示例,使用 ROS 处理单目、单目惯性、双目、双目惯性或 RGB-D 相机的输入。构建这些示例是可选的。这些已在 Ubuntu 18.04 下的 ROS Melodic 中进行了测试。
# 3. 构建 ORB-SLAM3 库和示例
克隆仓库:
```
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
```
我们提供了一个脚本 `build.sh` 来构建 *Thirdparty* 库和 *ORB-SLAM3*。请确保您已安装所有必需的依赖项(见第 2 节)。执行:
```
cd ORB_SLAM3
chmod +x build.sh
./build.sh
```
这将在 *lib* 文件夹中创建 **libORB_SLAM3.so**,并在 *Examples* 文件夹中创建可执行文件。
# 4. 使用您的相机运行 ORB-SLAM3
目录 `Examples` 包含几个演示程序和校准文件,用于在所有传感器配置下使用 Intel Realsense 相机 T265 和 D435i 运行 ORB-SLAM3。使用您自己的相机所需的步骤如下:
1. 按照 `Calibration_Tutorial.pdf` 校准您的相机,并编写您的校准文件 `your_camera.yaml`
2. 修改提供的演示之一以适应您的特定相机型号,并构建它
3. 使用 USB3 或适当的接口将相机连接到计算机
4. 运行 ORB-SLAM3。例如,对于我们的 D435i 相机,我们将执行:
```
./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml
```
# 5. EuRoC 示例
[EuRoC 数据集](http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets) 是使用两个针孔相机和一个惯性传感器录制的。我们提供了一个示例脚本,以在所有传感器配置下启动 EuRoC 序列。
1. 从 http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets 下载一个序列(ASL 格式)
2. 在项目根目录打开脚本 "euroc_examples.sh"。更改 **pathDatasetEuroc** 变量,使其指向数据集解压缩的目录。
3. 执行以下脚本以处理所有传感器配置下的所有序列:
```
./euroc_examples
```
## 评估
EuRoC 为 IMU 机体参考系中的每个序列提供真值。由于纯视觉执行报告的轨迹以左相机为中心,我们在 "evaluation" 文件夹中提供了将真值转换到左相机参考系的变换。视觉-惯性轨迹使用数据集中的真值。
执行以下脚本以处理序列并计算 RMS ATE:
```
./euroc_eval_examples
```
# 6. TUM-VI 示例
[TUM-VI 数据集](https://vision.in.tum.de/data/datasets/visual-inertial-dataset) 是使用两个鱼眼相机和一个惯性传感器录制的。
1. 从 https://vision.in.tum.de/data/datasets/visual-inertial-dataset 下载一个序列并解压。
2. 在项目根目录打开脚本 "tum_vi_examples.sh"。更改 **pathDatasetTUM_VI** 变量,使其指向数据集解压缩的目录。
3. 执行以下脚本以处理所有传感器配置下的所有序列:
```
./tum_vi_examples
```
## 评估
在 TUM-VI 中,真值仅在所有序列开始和结束的房间内可用。因此,该误差测量的是序列结束时的漂移。
执行以下脚本以处理序列并计算 RMS ATE:
```
./tum_vi_eval_examples
```
# 7. ROS 示例
### 为 mono, mono-inertial, stereo, stereo-inertial 和 RGB-D 构建节点
已在 ROS Melodic 和 ubuntu 18.04 上测试。
1. 将包含 *Examples/ROS/ORB_SLAM3* 的路径添加到 ROS_PACKAGE_PATH 环境变量中。打开 .bashrc 文件:
```
gedit ~/.bashrc
```
并在末尾添加以下行。将 PATH 替换为您克隆 ORB_SLAM3 的文件夹:
```
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples/ROS
```
2. 执行 `build_ros.sh` 脚本:
```
chmod +x build_ros.sh
./build_ros.sh
```
### 运行单目节点
对于来自话题 `/camera/image_raw` 的单目输入,运行节点 ORB_SLAM3/Mono。您需要提供词汇表文件和设置文件。请参阅上面的单目示例。
```
rosrun ORB_SLAM3 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
```
### 运行单目惯性节点
对于来自话题 `/camera/image_raw` 的单目输入和来自话题 `/imu` 的惯性输入,运行节点 ORB_SLAM3/Mono_Inertial。将可选的第三个参数设置为 true 将对图像应用 CLAHE 均衡化(主要用于 TUM-VI 数据集)。
```
rosrun ORB_SLAM3 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE [EQUALIZATION]
```
### 运行双目节点
对于来自话题 `/camera/left/image_raw` 和 `/camera/right/image_raw` 的双目输入,运行节点 ORB_SLAM3/Stereo。您需要提供词汇表文件和设置文件。对于针孔相机模型,如果您 **提供了矫正矩阵**(参见 Examples/Stereo/EuRoC.yaml 示例),节点将在线矫正图像,**否则图像必须经过预矫正**。对于鱼眼相机模型,不需要矫正,因为系统使用原始图像工作:
```
rosrun ORB_SLAM3 Stereo PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE ONLINE_RECTIFICATION
```
### 运行双目惯性节点
对于来自话题 `/camera/left/image_raw` 和 `/camera/right/image_raw` 的双目输入,以及来自话题 `/imu` 的惯性输入,运行节点 ORB_SLAM3/Stereo_Inertial。您需要提供词汇表文件和设置文件,如果需要,包括类似于双目情况的矫正矩阵:
```
rosrun ORB_SLAM3 Stereo_Inertial PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE ONLINE_RECTIFICATION [EQUALIZATION]
```
### 运行 RGB_D 节点
对于来自话题 `/camera/rgb/image_raw` 和 `/camera/depth_registered/image_raw` 的 RGB-D 输入,运行节点 ORB_SLAM3/RGBD。您需要提供词汇表文件和设置文件。请参阅上面的 RGB-D 示例。
```
rosrun ORB_SLAM3 RGBD PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
```
**运行 ROS 示例:** 从 EuRoC 数据集 下载一个 rosbag(例如 V1_02_medium.bag)。在终端打开 3 个标签页,并在每个标签页中针对 Stereo-Inertial 配置运行以下命令:
```
roscore
```
```
rosrun ORB_SLAM3 Stereo_Inertial Vocabulary/ORBvoc.txt Examples/Stereo-Inertial/EuRoC.yaml true
```
```
rosbag play --pause V1_02_medium.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw /imu0:=/imu
```
一旦 ORB-SLAM3 加载完词汇表,在 rosbag 标签页中按空格键。
**备注:** 对于来自 TUM-VI 数据集的 rosbag,由于块大小的原因,可能会出现一些播放问题。一种可能的解决方案是使用默认块大小重新打包它们,例如:
```
rosrun rosbag fastrebag.py dataset-room1_512_16.bag dataset-room1_512_16_small_chunks.bag
```
# 8. 运行时间分析
`include\Config.h` 中的一个标志激活时间测量。有必要取消注释 `#define REGISTER_TIMES` 行以获取一次执行的时间统计数据,该数据将显示在终端并存储在文本文件(`ExecTimeMean.txt`)。
# 9. 校准
您可以在 `Calibration_Tutorial.pdf` 中找到视觉惯性校准教程以及有效配置文件内容的详细说明标签:AR, C++, CV, DBoW2, DNS解析, Eigen, EuRoC数据集, g2o, IEEE Transactions on Robotics, IMU, OpenCV, ORB-SLAM3, ORB特征, RGB-D相机, ROS, SLAM, TruffleHog, TUM-VI数据集, UAV, VI-SLAM, VO, VR, VSLAM, 三维重建, 传感器融合, 位姿估计, 几何建模, 单目相机, 即时定位与地图构建, 双目相机, 回环检测, 地图合并, 增强现实, 多传感器融合, 多地图SLAM, 学术论文, 开源库, 开源项目, 惯性测量单元, 搜索引擎爬虫, 数据擦除, 无人机, 无人驾驶, 机器人导航, 机器人操作系统, 深度相机, 特征点提取, 空间计算, 自动驾驶, 自动驾驶感知, 虚拟现实, 视觉SLAM, 视觉惯性导航, 视觉里程计, 计算机视觉, 运动推测, 重定位, 针孔相机, 高精度, 鱼眼镜头