文章目录
- 前言
- 一、前期准备
- 二、库安装
- 1.engin库安装
- 方法1:apt安装
- 方法2:源码安装
- 2.Pangolin库安装
- 3.openCV源码安装
- 三、build编译
- 四、测试
- 五、ROS安装
- 六、build-ros编译
- 七、测试
- 总结
前言
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可以参考:
二、库安装
由于是一个全新的系统,因此需要更换国内镜像源(可选)、安装必要的编译工具以及编辑器:
- 更新镜像源:
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
- 安装必要工具包:
sudo apt-get update
apt-get install vim
apt-get install gcc g++ cmake
1.engin库安装
方法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库安装
- 安装依赖:
sudo apt-get install libglew-dev
- 安装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技术奠定了坚实基础。
本文档在实验室同学的帮助下完成,很多不懂的地方都是他帮忙解决的,十分感谢大佬的帮忙,这是他的主页。最后,希望这份指南不仅仅是一个技术手册,更是一份知识共享和经验传承的文档。