基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装

写下这篇是为了毕设题目《基于深度相机的电缆识别系统》。使用的设备与环境如下:

  • Ubuntu 20.04

  • ROS

  • Gazebo仿真运行

  • Kinect 2.0

ORB-SLAM2论文地址:https://arxiv.org/abs/1610.06475

GitHub:https://github.com/raulmur/ORB_SLAM2

一、为什么要选择ORB-SLAM2


ORB-SLAM2:一种单目、立体和RGB-D相机的开源SLAM系统。该开源库具有一下特征:

  • 支持单目,双目,RGB相机

  • 实时计算相机位姿和稀疏的三维重建,可进行回环检测和相机重定位。

  • 提供运行示例:配置安装号后,可直接在KITTI、TUM、EUROC数据集中的视频序列下运行。

  • 可在ros中进行编译,也可以不在ros中进行编译。(只是在数据集上运行,不需要ros;如果需要与真实摄像头连接,则需要ros)

  • 支持轻量级定位模式,可以达到零漂移,此时不使用局部建图和回环检测的线程,可以用视觉里程计来跟踪未建图区域。

  • 使用本质图(Essential Graph)来优化位姿实现回环检测,耗时少精度高 。相比于直接法,可以用于宽基线特征匹配,更适合于对深度精度要求较高的场景,比如三维重建。

KITTI数据集:https://www.cvlibs.net/datasets/kitti/eval_odometry.php

TUM数据集:https://vision.in.tum.de/data/datasets/rgbd-dataset/download

二、ORB-SLAM2环境配置


(1)换源


sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

备份一下以前使用的源,之后打开文件进行换源:

sudo gedit /etc/apt/sources.list

推荐使用清华源:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/,到网站上复制对应的源进行更换:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

之后更新源:

sudo apt-get update

(2)安装第三方库


2.1 必要依赖项

sudo apt-get upate
sudo apt-get install git gcc g++ vim make cmake

2.2 安装Pangolin

Pangolin是一个用来可视化的库,ORB-SLAM2用它来进行可视化和人机交互。其下载与安装教程可见:https://github.com/stevenlovegrove/Pangolin。Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。

安装Pangolin 0.6稳定版:https://github.com/stevenlovegrove/Pangolin/archive/refs/tags/v0.6.zip

安装以下依赖项:

sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpng-dev

打开下载好的Pangonlin,配置并编译:

cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install

验证是否安装成功:

cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin

出现这个代表配置成功:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第1张图片

2.3 安装Opencv3

OpenCV肯定是必不可少的了。其下载和安装教程可见:(https://opencv.org/releases/)。找到需要的OpenCV版本,对于Linux系统,应点击其中Sources,下载一个压缩文件,下载完成后应对其进行解压。其安装教程可见:(https://docs.opencv.org/4.2.0/d7/d9f/tutorial_linux_install.html)。ORB-SLAM2要求至少为2.4.3,这里安装Opencv3.4.5,在GitHub中找到对应的release:https://github.com/opencv/opencv/releases

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第2张图片

首先需要配置一些依赖:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev 
sudo apt-get install libavformat-dev libjpeg.dev libtiff5.dev 
sudo apt-get install libswscale-dev libjasper-dev 
sudo apt-get install libcanberra-gtk-module libcanberra-gtk3-module 
#或者
sudo apt-get install libcanberra-gtk*

解压下载好的压缩包,并且进入目录:

mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
#电脑性能差的话,去掉-j4,性能很好可增加数字
make -j4
sudo make install

查询opencv是否安装成功:

pkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs   opencv

2.4 安装Eigen3

Eigen3负责矩阵运算,是一个纯头文件的库,直接安装即可:

sudo apt-get install libeigen3-dev

如果使用源码安装的话,可以去https://github.com/eigenteam/eigen-git-mirror,下载源码后:

cd eigen3
mkdir build && cd build
cmake ..
make
sudo make install

安装后头文件在于:

/usr/local/include/eigen3/

复制头文件到/usr/local/include:

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

2.5 DBW2 and g2o

这个库已经包含在ORB-SLAM2中的第三方库文件夹中,不需要自己编译安装。

2.6 ROS

添加ros源:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

添加密钥:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

更新软件源:

sudo apt update

安装ros,要记得根据Ubuntu的版本来进行选择:

sudo apt install ros-noetic-desktop-full
sudo apt install python3-rosdep2
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list

新版本的ros不需要执行init以及update,设置环境变量:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

加载软件包:

sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool

验证ros是否安装成功:

roscore
基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第3张图片

出现这种问题说明没有安装成功:

sudo apt install ros-noetic-roslaunch
sudo apt install ros-noetic-rosbash
sudo apt install ros-noetic-turtlesim

之后再次运行即可:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第4张图片

打开一个新的终端运行:

rosrun turtlesim turtlesim_node

再打开一个新的终端运行:

rosrun turtlesim turtle_teleop_key

安装成功:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第5张图片

2.7 安装ORB-SLAM2

从GitHub上下载源文件:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

之后打开文件夹执行:

chmod +x build.sh
./build.sh

之后会看到如下报错:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第6张图片

这是因为缺少了一些Linux的头文件,在目录/ORB_SLAM2/include/System.h中加入对应的头文件:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第7张图片

其他报错可于这篇文章中找到解决方法:https://blog.csdn.net/weixin_43693946/article/details/123366935

这篇也可以:https://zhuanlan.zhihu.com/p/411027681

出现第二个错误:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第8张图片

添加头文件:#include

做出替换:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第9张图片
typedef map,
        Eigen::aligned_allocator > > KeyFrameAndPose;

成功界面如下:

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装_第10张图片

你可能感兴趣的:(slam,计算机视觉,Ubuntu,ros)