从零开始实现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
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值