Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ORB-SLAM2-ROS2

C++ ubuntu SLAM ROS2

1.介绍

基于ORB_SLAM2的原理,对ORB_SLAM2进行了完全重写

  1. 去掉了ORB_SLAM2中,对单目相机的支持,仅支持双目和深度相机;
  2. 实现了算法和ROS2进行了兼容,可以快速融入到基于ROS2的项目中去;
  3. 使用智能指针代替普通指针,提高内存管理的安全性,但增加了额外的时间开销,与原来ORB-SLAM2系统相比,精度保持一致,但存在20%的额外时间开销;
  4. 基于目前主流的三方库,保证了依赖的主流兼容性
  5. 基于多线程输入输出流Protobuf,实现了高效的地图的保存和加载功能,与字符串实现相比,时间开销降低78%,地图存储开销降低50%
  6. 10000+行代码的工作量,使用cloc工具统计代码C++代码行数如下。
ORB_SLAM2_ROS2

2. 依赖

  1. C++17
  2. OpenCV 4.2
  3. DBoW3
  4. g2o 20241228
  5. Pangolin 0.9.3
  6. Sophus 1.24.6
  7. ROS2 humble
  8. Eigen3
  9. cv_bridge
  10. Protobuf

针对DBoW3g2oPangolinSophusROS2,需要去上述给定的地址下载源码,编译安装。

对于没有指定地址的三方库,可以使用如下命令安装:

sudo apt update
sudo apt install libeigen3-dev 
sudo apt install ros-humble-cv-bridge 
sudo apt install protobuf-compiler

3. 编译

git clone https://github.com/sunshanlu/ORB_SLAM2_ROS2.git
cd ORB_SLAM2_ROS2
colcon build

4. 运行

根据需求,创建配置文件,并运行,配置文件的示例在config文件夹中。其中,值得注意的是,在配置文件中有如下选项需要根据文件路径进行修改:

Path.Vocabulary: "词袋文件路径,可以是ORB_SLAM2官网的词袋文件,需要解压为txt文件后使用"
Path.BriefTemplate: "BRIEF 描述子模版文件路径,就是confg文件夹下的brief_template.txt文件"
Path.Map: "地图的保存和加载路径,需要提前创建文件夹,指定保存的文件夹路径即可"

除此之外,相机的畸变参数信息也需要注意,这里仅支持4参数畸变模型和5参数畸变模型。若要是4畸变参数模型,需要修改的配置文件选项为:

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0

若要是5畸变参数模型,需要修改的配置文件选项为:

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.k3: 0.0

4.1 双目相机KITTI数据集

source ./install/setup.bash
./install/orb_slam2/lib/orb_slam2/kitti_example kitti_data_seq kitti_config_path
  1. kitti_data_seq,为数据集路径信息,例如 xxx/KITTI/sequences/00
  2. kitti_config_path,为配置文件路径信息,例如 xxx/config/KITTI_config.yaml,在config文件夹下有对应00数据序列的配置文件示例。

4.2 深度相机TUM数据集

source ./install/setup.bash
./install/orb_slam2/lib/orb_slam2/tum_example tum_data_seq tum_config_path association_path
  1. tum_data_seq,为数据集路径信息,例如 xxx/dataset/TUM/rgbd_dataset_freiburg2_desk
  2. tum_config_path,为配置文件路径信息,例如 xxx/config/TUM_config.yaml,在config文件夹下有对应rgbd_dataset_freiburg2_desk数据序列的配置文件示例。
  3. association_path, 这是基于TUM的RGBD数据集的工具制作的RGB图和深度图的关系文件

4.3 ROS2示例

需要在./src/ORB_SLAM2/example/ROS2/ROSExample.cc中,将全局变量ConfigPath更改为实际的配置文件路径即可。

source ./install/setup.bash
ros2 run orb_slam2 ros2_example --ros-args -p ConfigPath:=xxx/config/config.yaml
  1. ORB_SLAM2/Camera: 使用的是orb_slam2_interfaces中的Camera消息类型,当ROS系统接收到此消息后,就会进行跟踪。
    1. 对于双目相机来讲,Camera.image0代表的是左图,Camera.image1代表的是右图
    2. 对于深度相机来讲,Camera.image0代表的是RGB图,Camera.image1代表的是深度图
  2. ORB_SLAM2/Pose: 使用的是geometry_msgs中的PoseStamped消息类型,当系统完成跟踪后,会向这个话题发布位姿信息。
  3. ORB_SLAM2/Lost: 使用的是orb_slam2_interfaces中的LostFlag消息类型,当系统跟踪丢失后,会向这个话题发布丢失信息。

About

基于ROS2的ORB-SLAM2,符合现代C++的写法,并且添加地图的保存与加载功能

Resources

Stars

18 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages