从零开始实现ORB_SLAM2编译与运行


前言

ORB_SLAM2作为一种优秀的开源VSLAM解决方案,以其高效的处理性能和强大的功能吸引了众多研究者和工程师的关注。然而,对于初学者来说,安装和编译ORB_SLAM2可能是一个复杂且耗时的过程。官方文档虽然提供了编译指南,但在实际操作过程中,用户可能会遇到各种问题,这些问题往往需要额外的搜索和尝试才能解决。因此,本博客旨在提供一个详尽的步骤说明,从零开始详细记录安装、编译以及运行ORB_SLAM2的全过程,包括基于原始build系统的编译和基于ROS的build_ros系统编译。


一、前期准备

我是在WSL中进行测试安装的,因此需要安装WSL并创建一个Ubuntu子系统,WSL相应的安装可以参考:

我的系统环境:Ubuntu16.04;

注意:WSL默认安装的Ubuntu是没有16.04版本的,因此可以选择Ubuntu20.04进行安装。
WSL中安装Ubuntu16.04可以参考:

二、库安装

由于是一个全新的系统,因此需要更换国内镜像源(可选)、安装必要的编译工具以及编辑器:

  1. 更新镜像源:
sudo cp /etc/apt/sources.list /etc/apt/sources.bak1
#第一个参数是拷贝的文件名称,第二个是拷贝到的文件路径和文件名

阿里云官网复制并导入相应系统的阿里云镜像,因为我是Ubuntu16.04,所以下面是16.04的镜像源:

deb https://mirrors.aliyun.com/ubuntu/ xenial main
deb-src https://mirrors.aliyun.com/ubuntu/ xenial main

deb https://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb https://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src https://mirrors.aliyun.com/ubuntu/ xenial universe
deb https://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb https://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-security main
deb https://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src https://mirrors.aliyun.com/ubuntu/ xenial-security universe

打开sources.list,删除原来内容并将上面的镜像源粘贴上去:

sudo vim /etc/apt/sources.list

更新软件源列表:

sudo apt-get update
  1. 安装必要工具包:
sudo apt-get update
apt-get install vim
apt-get install gcc g++ cmake

1.eigen库安装

方法1:apt安装

sudo apt-get install libeigen3-dev

方法2:源码安装

官网下载源代码压缩包或者GitHub上克隆相应代码:

git clone  -b '3.3.0' https://gitlab.com/libeigen/eigen.git --single-branch
cd eigen
mkdir build && cd build
cmake ..
sudo make install
#默认的eigen安装在/usr/local/include/eigen3/Eigen/ , 为了方便使用,需要将其拷贝一份放到/usr/include/
sudo cp -r /usr/local/include/eigen3/Eigen /usr/include
sudo cp -r /usr/local/include/eigen3 /usr/include

2.Pangolin库安装

  1. 安装依赖:
sudo apt-get install libglew-dev
  1. 安装Pangolin:
git clone -b 'v0.6' https://github.com/stevenlovegrove/Pangolin.git --single-branch
cd Pangolin
mkdir build && cd build 
cmake ..
make 
sudo make install

3.openCV源码安装

参考我写的这篇博客:openCV源码安装与卸载

三、build编译

cd ORB_SLAM2
sudo sh ./build.sh

常见问题:

error "usleep"was not declared in this scope

解决方法:在所有遇到错误的脚本中添加头文件: #include <unistd.h>

四、测试

进入到ORB_SLAM2/Examples/Monocular/目录下(数据集下载并保存在ORB_SLAM2文件下)

 sudo ./mono_tum ../../Vocabulary/ORBvoc.txt TUM1.yaml ../../rgbd_dataset_freiburg1_xyz/

在这里插入图片描述

五、ROS安装

参考这篇文章的安装ROS部分,强烈推荐。
下面是安装ROS所用到的命令行:

sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ xenial main" > /etc/apt/sources.list.d/ros-latest.list'
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv=key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
apt-get update
apt-get install ros-kinetic-openni2-launch
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

测试并初始化ROS:

roscore
pip install rosdepc
rosdepc init
rosdepc update

六、build-ros编译

chmod +x build_ros.sh
sudo sh ./build_ros.sh

常见问题:

CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/private.cmake:102 (message):
  [rosbuild] rospack found package "ORB_SLAM2" at "", but the current
  directory is "/home/ztl/ORB_SLAM2/Examples/ROS/ORB_SLAM2".  You should
  double-check your ROS_PACKAGE_PATH to ensure that packages are found in the
  correct precedence order.
Call Stack (most recent call first):
  /opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:177 (_rosbuild_check_package_location)
  CMakeLists.txt:4 (rosbuild_init)

解决方法:
这是一个很坑的地方,网上的博客都说在bashrc中设置路径:

sudo vim ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ztl/ORB_SLAM2/Examples/ROS
source ~/.bashrc 

但是完全不起作用,即使echo $ROS_PACKAGE_PATH 有结果,仍然无效,需要在ROS的安装路径下面更改路径:

cd /opt/ros/kinetic/
sudo vim setup.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ztl/ORB_SLAM2/Examples/ROS
source setup.sh

七、测试

启动三个终端分别运行:

roscore
cd ORB_SLAM2
rosrun ORB_SLAM2 Mono ./Vocabulary/ORBvoc.txt ./Examples/Monocular/TUM1.yaml
rosbag play --clock rgbd_dataset_freiburg1_xyz.bag

补充:如果出现:Command ‘rosrun‘ not found
解决方法:$ sudo apt install ros-kinetic-rosbash

问题:运行之后发现没有画面,显示一直在等待输入,后面请教实验室同学,发现是话题名有问题,查看bag的信息:

ztl@DELL:~/ORB_SLAM2$ rosbag info rgbd_dataset_freiburg1_xyz.bag
path:         rgbd_dataset_freiburg1_xyz.bag
version:      2.0
duration:     30.4s
start:        May 10 2011 20:38:18.38 (1305031098.38)
end:          May 10 2011 20:38:48.81 (1305031128.81)
size:         480.4 MB
messages:     25626
compression:  bz2 [1598/1598 chunks; 29.14%]
uncompressed:   1.6 GB @ 54.1 MB/s
compressed:   479.4 MB @ 15.8 MB/s (29.14%)
types:        sensor_msgs/CameraInfo         [c9a58c1b0b154e0e6da7578cb991d214]
              sensor_msgs/Image              [060021388200f6f0f447d0fcd9c64743]
              sensor_msgs/Imu                [6a62c6daae103f4ff57a132d6f95cec2]
              tf/tfMessage                   [94810edda583a504dfda3829e70d7eec]
              visualization_msgs/MarkerArray [f10fe193d6fac1bf68fad5d31da421a7]
topics:       /camera/depth/camera_info     798 msgs    : sensor_msgs/CameraInfo        
              /camera/depth/image           798 msgs    : sensor_msgs/Image             
              /camera/rgb/camera_info       798 msgs    : sensor_msgs/CameraInfo        
              /camera/rgb/image_color       798 msgs    : sensor_msgs/Image             
              /cortex_marker_array         3034 msgs    : visualization_msgs/MarkerArray
              /imu                        15158 msgs    : sensor_msgs/Imu               
              /tf                          4242 msgs    : tf/tfMessage

因此需要将ros_mono.cc中订阅的节点名改为/camera/rgb/image_color才行,出现编译运行,输出正常。

ros::Subscriber sub = nodeHandler.subscribe("/camera/rgb/image_color", 1, &ImageGrabber::GrabImage,&igb);

在这里插入图片描述

总结

本博客详细记录了ORB_SLAM2的编译与运行过程,涵盖了基于原始build系统及ROS的build_ros系统。读者通过本指南可获得安装、配置、编译直至运行ORB_SLAM2的全面了解,为进一步探索VSLAM技术奠定了坚实基础。

本文档在实验室同学的帮助下完成,很多不懂的地方都是他帮忙解决的,十分感谢大佬的帮忙,这是他的主页。最后,希望这份指南不仅仅是一个技术手册,更是一份知识共享和经验传承的文档。

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要运行ORB-SLAM2的Euroc数据集,您需要按照以下步骤操作: 1.下载Euroc数据集并解压缩。 2.下载ORB-SLAM2代码并编译。 3.将ORB-SLAM2的配置文件设置为使用Euroc数据集。 4.运行ORB-SLAM2并加载Euroc数据集。 5.观察ORB-SLAM2的输出结果并进行分析。 需要注意的是,ORB-SLAM2的Euroc数据集需要较高的计算资源和较长的运行时间。因此,您需要确保您的计算机具有足够的硬件资源,并且您有足够的时间来运行实验。 ### 回答2: ORB-SLAM2是一个开源的、基于视觉的SLAM系统,可以使用单个RGB-D或单目摄像头来创建实时3D地图,同时定位摄像头和跟踪系统的位置。可以应用于机器人、无人机、现代智能推进汽车等领域。而Euroc数据集则是一组经过校准处理的IMU (惯性测量单元)和摄像机数据,用于评估视觉SLAM的精度。 运行ORB-SLAM2和Euroc数据集的过程可以分为以下几个步骤: 1. 下载ORB-SLAM2和Euroc数据集。 ORB-SLAM2可以从GitHub repository中克隆得到。而Euroc数据集可以直接从它们的官方网站下载。需要注意的是,在ORB-SLAM2中,每个example的数据存放在它们各自的文件夹中,因此需要把Euroc数据集放在example所在的对应文件夹中。 2. 启动ORB-SLAM2。 ORB-SLAM2的执行文件位于ORB-SLAM2文件夹中,可以打开终端,cd到ORB-SLAM2文件夹,然后输入./Examples/Monocular/mono_euroc Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml ~/EuRoC_MAV_dataset/MH_01_easy/mav0/cam0 ~/EuRoC_MAV_dataset/MH_01_easy/mav0/imu0/data.csv ,其中第一个参数表示执行文件的路径,第二个参数是ORB-SLAM2的词汇表,第三个参数是配置文件的路径,接下来的两个参数分别是摄像头和IMU数据文件路径。 3. 运行Euroc数据集 在ORB-SLAM2进行初始化之前,需要打开另一个终端运行Euroc数据集。需要注意的是,必须先运行IMU,然后再运行相机。 运行IMU时,可以通过终端输入 rostopic echo /imu0/data_raw 启动ROS节点,查看imu0的数据流。运行相机时,需要先安装ROS和euroc数据集软件包。 4. 实时监控ORB-SLAM2运行状态 ORB-SLAM2提供了一个实时监控窗口,可以实时显示SLAM系统的状态和结果。可以通过终端输入 rqt_image_view 来打开这个实时监控窗口。 总之,ORB-SLAM2和Euroc数据集的结合使用可以帮助研究人员评估SLAM系统的效果和精度。尽管这个过程可能需要一些编程和配置方面的知识,但它为机器人、无人机等领域的发展提供了重要的参考和启示。 ### 回答3: ORB-SLAM2是一种基于光流法的视觉SLAM方法,它可以实现三维空间中自主移动物体的实时跟踪和建图。在ORB-SLAM2中,图像特征被提取为局部特征点和描述符,并通过光流法进行跟踪和匹配,根据这些匹配点进行位姿估计和三维重建。 运行euroc数据集是ORB-SLAM2的一项重要任务。euroc数据集包含了多种不同场景下的图像序列,可以用来测试SLAM算法的鲁棒性和精度。运行euroc数据集需要以下步骤: 1. 下载euroc数据集以及ORB-SLAM2代码。euroc数据集可以从官方网站下载,ORB-SLAM2代码可以从GitHub上下载。 2. 安装必要的依赖项。ORB-SLAM2依赖于opencv、Eigen、g2o等库,需要先安装这些库。 3. 编译ORB-SLAM2代码。在终端中进入ORB-SLAM2代码目录,运行make命令即可。 4. 配置参数。在ORB-SLAM2的配置文件中,需要设置数据集路径、相机参数、ORB特征参数等内容,以适配euroc数据集。 5. 运行ORB-SLAM2。在终端中进入ORB-SLAM2代码目录,运行以下命令: ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml **数据集路径** 其中,需要将**数据集路径**替换为euroc数据集的路径。 6. 查看结果。ORB-SLAM2会在运行过程中生成位姿估计结果和三维地图,可以通过rviz等工具可视化。 在运行euroc数据集时,需要注意以下问题: 1. 需要设置正确的相机参数。euroc数据集中不同场景下使用的相机参数不同,需要根据实际情况设置相应的参数。 2. 需要选择正确的ORB特征参数。ORB特征的参数(如特征点数量、描述符维度等)会影响ORB-SLAM2的跟踪和匹配性能,在选择时需要根据实际情况调整。 3. 需要注意数据集中存在的异常情况。euroc数据集中可能存在遮挡、快速运动等异常情况,需要进行相应的处理才能得到准确的位姿估计和建图结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值