ORBSLAM2 安装与运行(Ubuntu 18.04下测试)

本文详细介绍了在Ubuntu18.04上安装和运行ORBSLAM2的步骤,包括依赖项的安装、Pangolin、OpenCV、Eigen3、DBoW2、g2o等库的配置,以及解决编译过程中遇到的问题。此外,还提供了单目和ROS环境下ORBSLAM2的示例运行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORBSLAM2 安装与运行(Ubuntu 18.04下测试)

依赖项

Pangolin

github地址:https://github.com/stevenlovegrove/Pangolin.git

安装方式

# Required
# OpenGL (Desktop / ES / ES2)
sudo apt install libgl1-mesa-dev
# Glew
sudo apt install libglew-dev
# CMake
sudo apt install cmake

# Recommended
# Python2 / Python3, for drop-down interactive console
sudo apt install libpython2.7-dev
# Wayland
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

# Optional
# FFMPEG (For video decoding and image rescaling)
sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
# DC1394 (For firewire input)
sudo apt install libdc1394-22-dev libraw1394-dev
# libuvc (For cross-platform webcam video input via libusb)
git://github.com/ktossell/libuvc.git
# libjpeg, libpng, libtiff, libopenexr (For reading still-image sequences)
sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev

# 以上依赖除了Required项,其他的可以自己选装,对ORBSLAM2的编译影响不大

# build and install
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make
sudo make install

Opencv

需要Opencv版本>=2.4.11, 安装方式可以参见Opencv安装文档

Eigen3

Eigen3版本需要>=3.1.0,一般来说16.04和18.04使用apt安装的版本就符合这个要求

sudo apt-get install libeigen3-dev

DBoW2 and g2o

已经包含在ORBSLAM2中的第三方库文件夹中,不需要自己编译安装

ROS

ROS的安装方式参见ROS melodic install help。此外,对于目前的SLAM领域来说,不求深刻掌握,但了解ROS的基本使用方式,大致看的懂ROS的代码是非常有必要的。对于学习ROS,最推荐的还是官方的21讲,里面将ROS的基本工作原理和使用方式讲的非常清楚,具体参见ROS Toturials,看Beginner Level就可以了。

ORBSLAM库文件编译(包含基本例程)

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh

其中遇到的最主要的问题为

error: ‘usleep’ was not declared in this scope

解决方式为在ORB_SLAM2/include/System.h中添加一句

#include "unistd.h"

运行结束后将会生成libORB_SLAM2.solib文件夹中 以及测试程序 mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_eurocstereo_eurocExample文件夹中。

单目示例

此处以单目模式下的TUM数据集为例,演示以下作者提供的例程如何运行。

首先从 http://vision.in.tum.de/data/datasets/rgbd-dataset/download中下载任意一个数据包并解压,这里以fr1/xyz为例。解压后的路径为/home/teamo/rgbd_dataset_freiburg1_xyz

接下来执行以下命令

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

注意,此处的TUMX.yaml文件要对应于你下载的数据集类型,PATH_TO_SEQUENCE_FOLDER要对应于你的数据集文件夹路径,在我的电脑上,上述命令应修改如下:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/teamo/rgbd_dataset_freiburg1_xyz/

运行结果如下

| 在这里插入图片描述在这里插入图片描述

ROS示例

构建

首先需要将Examples/ROS/ORB_SLAM2路径导入到ROS_PACKAGE_PATH环境变量中,具体做法为打开终端,输入sudo gedit ~./bashrc,并在文件最后一行添加

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

此处的PATH为你的ORBSLAM2文件夹所在的绝对路径,比如在我的电脑上需要添加

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/teamo/ORB_SLAM2/Examples/ROS

之后执行构建脚本

chmod +x build_ros.sh
./build_ros.sh

如果仍然出现以下错误

[rosbuild] rospack found package "ORB_SLAM2" at "", but the current
  directory is "/home/teamo/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.

则需要在/opt/ros/<你的ros版本>/setup.bash文件中最后一行添加

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/teamo/ORB_SLAM2/Examples/ROS

之后重新执行构建脚本即可。

若在编译过程中出现如下错误

/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'

则需要修改ORB_SLAM2/Examples/ROS/ORB_SLAM2C中的CMakeLists.txt文件,将第51行的代码修改如下

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system)

之后重新构建即可。

例程

以双目模式为例,演示ROS下的ORBSLAM2运行结果。

首先,从数据集下载地址上下载一个rosbag文件,我这里选择的是Machine Hall 01,解压之后的放置路径为/home/teamo/ORBSLAM2/MH_01_easy.bag

之后打开三个不同的终端,运行以下三句代码

roscore
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
rosbag play --pause /home/teamo/ORB_SLAM2/MH_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw

这里的后两句为ROS的消息映射,因为bag包中的消息与作者程序中接收的消息名称并不一致。

需要注意的是,我们需要等待ORB词典读取完成后,再切换到播放bag的shell并按下空格开始播放,若提前播放,会丢失部分数据。

其实,仔细分析ros代码后可以发现,与非ros的例程并没有本质区别,只是将按文件名逐帧读取图片更改为了按照固定频率接受ros消息后读取图片,其他调用方式与非ros基本一样。

结果如下

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值