【安装学习】Ubuntu20.04安装ORB_SLAM2的ROS版

Ubuntu 20.04完整安装ORB_SLAM2及配置对应ROS

0、创建包路径

  • 强烈建议,先在终端创建路径Packages,然后在这个文件夹下进行后续的1、2、3、这三个包的安装

1、安装Opencv4.2.0

  • 下载压缩包

    1
    https://github.com/opencv/opencv/archive/4.2.0.zip
  • 使用unzip -x opencv4.2.0.zip 解压,进入文件夹后依次运行如下命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # 依赖库安装
    sudo apt-get install build-essential cmake git
    sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev
    sudo apt-get install libavformat-dev libswscale-dev
    sudo apt-get install python-dev python-numpy python3-dev python3-numpy
    sudo apt-get install libtbb2 libtbb-dev libjasper-dev libdc1394-22-dev
    sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
    # 正式安装
    mkdir build && cd build
    cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D CMAKE_BUILD_TYPE="Release" -D OPENCV_GENERATE_PKGCONFIG=ON ..
    make -j4
    sudo make install
    # 检查安装
    sudo gedit /etc/ld.so.conf.d/opencv.conf
    # 进入编辑页面后输入
    /usr/local/opencv4/lib
    # 然后ctrl+s保存,关闭gedit页面后还在这个终端下运行
    sudo ldconfig
    # 编辑bashrc文件,运行
    sudo gedit ~/.bashrc
    # 在文件最后添加
    #opencv-4.2.0
    export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opencv4/lib/pkgconfig
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./usr/local/opencv4/lib
    # 然后ctrl+s保存,关闭gedit页面后还在这个终端下运行
    source ~/.bashrc
    # 最终检查,依次运行下列命令
    pkg-config --modversion opencv4
    pkg-config --cflags opencv4
    pkg-config --libs opencv4
    # 均有正常输出即可,其中第一个命令输出为4.2.0

2、安装依赖Pangolin

  • 安装依赖项

    1
    2
    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

    安装Pangolin 0.6(稳定版)(官网下载地址),不要下载最新master版,编译的时候可能有错误)

  • 配置并编译

    1
    2
    3
    4
    5
    cd Pangolin 
    mkdir build && cd build
    cmake -DCPP11_NO_BOOST=1 ..
    make
    sudo make install
  • 验证

    1
    2
    3
    4
    5
    cd ../examples/HelloPangolin
    mkdir build && cd build
    cmake ..
    make
    ./HelloPangolin

    成功后会弹出一个终端,里面是一个立方体有三色,关闭即可。

3、安装依赖Eigen3

  • 方案一:直接安装

    Eigen3是一个纯头文件的库,这个特点让使用者省去了很多安装和环境配置的麻烦,可以直接安装:

    1
    sudo apt-get install libeigen3-dev
  • 方案二:源码安装

    源码(地址)安装,执行以下指令:

    1
    2
    3
    4
    5
    cd eigen3
    mkdir build && cd build
    cmake ..
    make
    sudo make install

    安装后头文件在:

    1
    /usr/local/include/eigen3/

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

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

4、安装ORB_SLAM2

  • 使用鱼香ROS的一键配置命令,配置rosdepc,终端执行下列命令,然后输入密码,选择rosdepc,然后配置好了之后会提示让rosdep init之类的命令,执行命令就好了

    1
    wget http://fishros.com/install -O fishros && . fishros
  • 进入到自己的ROS工作空间的src文件夹下,下载并解压源文件,然后打开,此处我的工作空间地址为:/home/zhao/WS/Now/ant_ws/src/ORB_SLAM2

  • 修改各个CMakeLists.txt,将其中关于OpenCV的部分做如下修改:

    1、主目录ORB_SLAM2下的CMakeLists.txt

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 注释掉下面这7行,类似的也是把涉及到的部分注释调
    # find_package(OpenCV 3.0 QUIET)
    # if(NOT OpenCV_FOUND)
    # find_package(OpenCV 2.4.3 QUIET)
    # if(NOT OpenCV_FOUND)
    # message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
    # endif()
    # endif()

    # 然后添加这两行
    set(CMAKE_PREFIX_PATH "/usr/local/opencv4")
    find_package(OpenCV 4.0 QUIET)

    2、ORB_SLAM2/Thirdparty/DBoW2文件夹下的CMakeLists.txt

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # find_package(OpenCV 3.0 QUIET)
    # if(NOT OpenCV_FOUND)
    # find_package(OpenCV 2.4.3 QUIET)
    # if(NOT OpenCV_FOUND)
    # message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
    # endif()
    # endif()

    set(CMAKE_PREFIX_PATH "/usr/local/opencv4")
    find_package(OpenCV 4.0 QUIET)

    3、ORB_SLAM2/Examples/ROS/ORB_SLAM2文件夹下的CMakeLists.txt

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # find_package(OpenCV 3.0 QUIET)
    # if(NOT OpenCV_FOUND)
    # find_package(OpenCV 2.4.3 QUIET)
    # if(NOT OpenCV_FOUND)
    # message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
    # endif()
    # endif()

    set(CMAKE_PREFIX_PATH "/usr/local/opencv4")
    find_package(OpenCV 4.0 QUIET)
  • 修改ros示例源文件,为Examples/ROS/ORB_SLAM2/src路径下的所有.cc文件添加头文件

    1
    #include <unistd.h>
  • ORB_SLAM2/Examples/文件夹下的所有示例源文件中导入图像数据的参数 CV_LOAD_IMAGE_UNCHANGED 修改为下列表述,建议在这个文件夹下使用code . 命令开启vscode,使用侧边栏的搜索,然后全局替换(应该是6个)

    1
    cv::IMREAD_UNCHANGED
  • 把ORB-SLAM2源码目录中include/LoopClosing.h文件中的

    1
    2
    typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
    Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;

    修改成:

    1
    2
    typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
    Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;
  • 解压源文件,在该文件夹下打开终端:

    这里建议使用记事本打开build.sh,然后逐个命令执行,方便检查错误,且注意!每次运行到最后的make命令如果失败了,在修复了之后需要依次删除对应的build文件夹,重新创建并编译!

    1
    2
    3
    cd ORB_SLAM2
    chmod +x build.sh
    ./build.sh

    如果在运行时出现问题:

    1
    error: ’usleep’ was not declared in this scope

    那么找到对应的.cc文件,在其开头的#include部分添加内容:

    1
    #include <unistd.h>

    然后,需要对照着build.sh中的内容,将涉及到的所有build文件夹全部删除并重新开始!

  • 在终端添加ROS路径,执行以下两行命令

    1
    2
    echo 'export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:'"`pwd`/Examples/ROS" >> ~/.bashrc
    source ~/.bashrc
  • 编译ros节点,此时便不再会出现问题了

    1
    ./build_ros.sh

5、Reference