写下这篇是为了毕设题目《基于深度相机的电缆识别系统》。使用的设备与环境如下:
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
出现这个代表配置成功:
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
首先需要配置一些依赖:
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
出现这种问题说明没有安装成功:
sudo apt install ros-noetic-roslaunch
sudo apt install ros-noetic-rosbash
sudo apt install ros-noetic-turtlesim
之后再次运行即可:
打开一个新的终端运行:
rosrun turtlesim turtlesim_node
再打开一个新的终端运行:
rosrun turtlesim turtle_teleop_key
安装成功:
2.7 安装ORB-SLAM2
从GitHub上下载源文件:
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
之后打开文件夹执行:
chmod +x build.sh
./build.sh
之后会看到如下报错:
这是因为缺少了一些Linux的头文件,在目录/ORB_SLAM2/include/System.h中加入对应的头文件:
其他报错可于这篇文章中找到解决方法:https://blog.csdn.net/weixin_43693946/article/details/123366935
这篇也可以:https://zhuanlan.zhihu.com/p/411027681
出现第二个错误:
添加头文件:#include <unistd.h>
做出替换:
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
成功界面如下: