天天看点

基于Ubuntu的ORB-SLAM2项目环境搭建过程

目录

  • 关于ORB-SLAM2
  • 环境搭建
    • 已有环境
    • 创建环境
      • 新建项目目录
      • 安装Pangolin
      • 安装OpenCV 3.2
      • 安装Eigen
      • DBoW2 and g2o (Included in Thirdparty folder)
  • 尝试运行
  • 测试环境搭建是否成功
    • 尝试数据集
    • 出现一系列新bug
    • 成功运行双目数据集
  • 下一步

  • 机器人所研究SLAM的学长介绍,ORB-SLAM2是双目SLAM的很成熟的一个算法
  • 由于项目需要双目摄像头测的距离来调节摄像头焦距,以及后期的实景AR加入,所以从双目视频流,得到每一帧图像上每一点,对应实际的摄像头到实际物体间的空间距离,和摄像头所在实景的三维空间数据,是项目采用ORB-SLAM2算法的原因
  • 相关博客会记录,ORB-SLAM2环境搭建,ORB-SLAM2代码原理和实际测试,双目SLAM测出距离对应焦距调节(后两个,之后完成补上链接)

  • 环境搭建总体参考上节中GitHub链接,以及ORB-SLAM2搭建详细过程
  • 记录如下原因,
    • 一是为针对本项目需要(双目视频流实时测距)的环境搭建提供提醒和参考
    • 二是第一次接触CV工程化代码,希望自己除了乖乖的听话的搭建环境之外,了解工程化代码的依赖、链接...等关系,也为之后项目系统搭建、降低时延优化,夯实基础。
    • 三是虽然环境搭建已经有前车之鉴,但是在计算机学院的诸多环境配置中,博客总结终究纸上得来,无法应对复杂的环境变化;而且博客上的方法,很多还是不如官方库、GitHub - Readme中的方法,下文完全遵循各GitHub - Readme,加之自己bug的补充,或许能提供更舒适的用户体验~

  • 没有如下软件或环境,最好先行安装;检查是否有该环境的最好方式应该是查看

    --version

    了~
    • Ubuntu16.04
    • apt 1.2.29 (amd64)
    • git 2.7.4
    • gcc 5.4.0
    • python 2.7.12

  • SLAM

    (我取的项目名,随意即可~)

  • GitHub for Pangolin,在Readme中已经有一个安装说明,补充一个参考ubuntu Pangolin 从源码安装
  • What is pangolin? 穿山甲hhh~从CV角度,阅读过上小段中GitHub -

    Readme

    中的简介,概述可以说是加快3D可视化和UI交互的OpenGL库
  • Pangolin

    git clone

    之后,安装Pangolin必须的依赖
    1. OpenGL

      sudo apt install libgl1-mesa-dev

    2. Glew

      sudo apt install libglew-dev

      ,也是OpenGL的库
    3. CMake

      sudo apt install cmake

      ,CMake就要好好介绍介绍了~在openCV下载与MacOS系统下的cLion配置一文中,我已经粗浅的接触到C与C++编译环境的配置,此处又涉及而且刚刚结束的一学期OS课程中粗浅地学习了链接等知识,故而在CMake & Make——链接初探一文中看看CMake & Make~
  • Pangolin推荐的和选择性的依赖,下面我会逐一将探索得到的相关软件信息记录,并判断是否有利于项目,决定是否安装
    1. Wayland

      sudo apt install pkg-config

      &

      sudo apt install pkg-config

      按照wiki上的说明,"Wayland是一个通信协议,规定了显示服务器与其客户机之间的通信方式。窗口管理器简化成显示管理服务,专门负责渲染那些屏幕上的程序。这比X Window System中的窗口管理器要更简单、高效。"考虑项目可能涉及阶段性的窗口视频显示来代替VR HMD显示,所以下载
    2. FFMPEG (For video decoding and image rescaling)

      sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev

      项目涉及硬件及软件编解码,FFMPEG也是编解码常用的平台,故下载
    3. DC1394 (For firewire input)

      sudo apt install libdc1394-22-dev libraw1394-dev

      适用于firewire camera,项目仅涉及视频流层面,但为未涉及摄像头层面,故未下载
    4. libuvc (For cross-platform webcam video input via libusb)

      git://github.com/ktossell/libuvc.git

      项目确实采用的是UVC camera,相关介绍可见libuvc与webcam的开发(一) - UVC协议,但是我么购买的是商家集成封装好的直接USB3.0接口导出视频流的摄像机,故此处不需。
    5. libjpeg, libpng, libtiff, libopenexr (For reading still-image sequences)

      sudo apt install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev

      ...GitHub上还有一些,但没有仔细介绍,而且和项目无关,故不写
  • 搭环境(以下关于

    cmake

    指令在“CMake & Make——链接初探“一文中也有介绍)
    • 在搭环境之前,对pangolin源码做一点修改,避免之后出现bug
    • vim打开

      Pangolin/src/display/device/display_x11.cpp

      ,改变第110行的

      GLX_DOUBLEBUFFER , glx_doublebuffer ? True : False,

      GLX_DOUBLEBUFFER , glx_doublebuffer ? False : False,

    • 搭环境:
// under the directory of SLAM (the dir of my project)
  cd Pangolin
  mkdir build
  cd build
  cmake ..
  cmake --build .
  sudo make install		# can not find in the Readme.md of Pangolin GitHub, but it is necessary to install in /usr/local/bin/
           
  • 生成了一堆

    .o

    可执行文件,pangolin配置完成
    基于Ubuntu的ORB-SLAM2项目环境搭建过程
  • 测试安装是否成功,可以在

    /usr/local/bin/include

    目录下查找。

  • 在之前的视频流拼接学习中,发现OpenCV是一款好用的视频图像处理软件,应该也是入门Computer vision的路径之一,只是版本较多更新也很多,网上的源码openCV2、3都有,我之前下载最新版本4.1,无奈网站上的大多数源码都通不过编译,而刚刚入门openCV的本咸鱼还不很了解OpenCV,代码运行常有一筹莫展
  • 所以,我的建议是,在熟练OpenCV之前,版本尽量和源码保持一致,此处GitHub显示ORB-SLAM2支持

    2.4.3

    2.4.11

    3.2

  • 下面说安装搭建OpenCV 3.2环境,部分参考ubuntu 16.04 OpenCV3.2.0完全编译安装(下文和这篇博客有不同的命令行使用习惯,建议完全按照一篇,勿混用)
    1. 下载OpenCV 3.2的.tar.gz版本到项目

      SLAM

      目录下
    2. 解压

      tar -zxvf [filename.tar.gz]

      (Linux下的打包解压,随意搜索即得,至于

      tar

      之后参数的意义倒是非常好奇)
    3. 安装一些官网上没说,但之后发现ORB - SLAM2必须要的依赖,安装libgtk2.0-dev

      sudo adt-get install libgtk2.0-dev

      和 pkg-config

      sudo apt-get install pkg-config

    4. CMake将分散的程序构建为可执行文件
cd opencv-3.2.0/
  mkdir build
  cd build
  cmake ..
  make		# wait for several minutes
  # a lot of guidance of this instruction is `make -j4`
  # but i do not find out the meaning of parameter -j4, so i give up to use it
  sudo make install		# after compiling, install it to /usr/local/bin, so "sudo" higher permission is needed.
           
  • 测试安装是否成功,也可以直接跑一个openCV的程序
    • 输入

      pkg-config --modversion opencv

    • 得到版本号

      3.2.0

  • 初步认为安装成功

  • Eigen官网," is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms."
  1. 官网下载3.3.7版本到项目SLAM目录下
  2. tar -jxvf [filename.tar.bz2]

  3. CMake & Make,同上面几个几乎一样的步骤
  • 代码如下
cd [eigen] # file name of eigen dir
mkdir build
cd build 
cmake ..
make
sudo make install 
           
  • 但在进行了第三行cmake时
    基于Ubuntu的ORB-SLAM2项目环境搭建过程
  • 发现有很多相关库没有装(有点困惑),所以尝试装了

    Boost

    BLAS

    LAPACK

    ,一个基础库,两个和线性代数相关的库
sudo apt-get update
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev
           
  • 然后再进行

    cmake ..

    及其之后的指令操作
  • 这种方法,最终可用

    /usr/local/include/eigen3/Eigen/src/Core/util$ vim Macros.h

    查看版本

    3.3.7

    ,认为安装成功
  • 安装Eigen的另一种简单方法,在进行到第一次cmake之后,我在网上查了安装Eigen的步骤,ubuntu16.04+eigen3安装,但是上一种方法比较知根知底...
  • 发现

    sudo apt-get install libeigen3-dev

    ,一条指令即可完成安装,之后

    cd /usr/include/eigen3/Eigen/src/Core/util/

    目录下的

    Macros.h

    查看版本号为

    3.2.92

    符合版本要求
基于Ubuntu的ORB-SLAM2项目环境搭建过程

  • 最初以为这两个库也需要安装,但发现在下载的ORB-SLAM2的 GitHub中的

    Thirdparty

    中有,而且

    build.sh

    文件里面也有想过安装,故不需要自己安装。

  1. 在项目目录SLAM下

    cd ORB_SLAM2-master/

  2. 一系列cmake & make:给权限

    chomd +x build.sh

    ,运行

    ./build.sh

  • 点评一二,为什么此处的cmake和make,跟上面见到的诸多cmake make不同呢~个人以为这是非常优秀的工程化开发习惯。
  • vim build.sh

    查看shell文件,发现在此文件中运行环境已经全部配置好
  • 提醒,有说法

    make -j

    使用多编译器,容易崩,本机运行也崩了一次,在vim中将所有

    make -j

    改为

    make

echo "Configuring and building Thirdparty/DBoW2 ..."

cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../g2o

echo "Configuring and building Thirdparty/g2o ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../../

echo "Uncompress vocabulary ..."

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..

echo "Configuring and building ORB_SLAM2 ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
           
  1. Debug(回忆起了OS vim 干de bug的心酸经历...不过目前碰到的几个bug相对课上任务来说非常容易)
  • error: usleep is not declared in this scope

    ,加入下面的头文件:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
           
  • 这条error出现的非常频繁,我猜测可能是Ubuntu16.4和14.4环境不同的原因,假如搭建过程中Ubuntu14.4中没出现这个问题,那我的猜测才可能有几分道理。
  • 也思考过把这三条头文件加入某个库函数比如

    system.h

    但是未找到,故尚未实施
  • 最终得到可执行的“ libORB_SLAM2.so at lib folder and the executables mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc and stereo_euroc in Examples folder."

  • 下载Vicon Room 1 01到项目SLAM文件夹下,在ORB...文件夹下输入

    /ORB_SLAM2-master$ ./Examples/Stereo/stereo_euroc Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml ../mav0/cam0/data ../mav0/cam1/data ./Examples/Stereo/EuRoC_TimeStamps/V101.txt

  • 提醒:下文中所有的bug,均已在上文过程中修复🙏
  • 新bug1 :

    terminate called after throwing an instance of 'std::runtime_error' what(): Pangolin X11: Unable to retrieve framebuffer options Aborted (core dumped)

    • 对于这个问题,GitHub上我找到两种解决方案,方案1 & 方案2
    • 我采用方案2解决该问题之后,出现又一个新bug
  • 新bug2:

    /parallels/Desktop/slam/opencv-3.2.0/modules/highgui/src/window.cpp:565: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvNamedWindow

    • 按照要求,乖乖的install libgtk2.0-dev

      sudo adt-get install libgtk2.0-dev

      and pkg-config

      sudo apt-get install pkg-config

      ,然后re-run

基于Ubuntu的ORB-SLAM2项目环境搭建过程

  • 基于项目需求,分析SLAM算法,或融入或提取出项目需要的部分
    • 双目视频流导入
    • 实时求出每几帧视频图像上点阵对应实物到摄像头的距离

上述内容如有问题,恳请指正