ubuntu20.04配置并编译ORB-SLAM2

以前成功配置过一次,后来电脑出了点问题重装了系统,现重新配置一下,比上次出的错多多了,特来记录一下。

第一遍安装时不知道是哪里除了问题,后面编译的时候报了巨多error,看到有人说可能是安装了anaconda之后虚拟环境的问题,也可能是某个依赖库版本不对的问题,干脆又重装一遍系统,从头开始。

主要包括以下几个步骤:

安装依赖项;

安装Pangolin库;

安装Opencv3;

安装Eigen3;

编译ORB-SLAM2

安装依赖项

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

安装Pangolin库

安装0.5版本的,之前安装了0.6的(说是稳定版),但是后面编译ORBSLAM2时报了超多的错,不知道是不是因为这个

下载地址 进去之后通过 master–tags–0.5 选择0.5版本下载,下载后解压到根目录

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
cd Pangolin 
mkdir build && cd build
cmake ..
make
sudo make install

在make的过程中出现报错,参考文献 ,亲测有效,后面编译会有warning,但不影响编译成功。

验证:

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

若出现一个彩色立方体则为安装成功。

安装opencv

版本是3.4.15,下载链接

安装依赖项:

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 

编译:

mkdir build && cd build 
cmake ..
make -j4
sudo make install

通过查询版本来判断是否安装成功

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

安装eigen3

直接安装

sudo apt-get install libeigen3-dev

默认安装地址是 /usr/local/include/eigen3/ ,但不知道为什么我没有这个文件,应该没安装成功,于是选择源码安装:

下载地址 ,编译:

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

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

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

编译ORB-SLAM2

下载地址

cd ORB_SLAM2
chmod +x build.sh
./build.sh

最后一步会报错

  • 报错 error: ’usleep’ was not declared in this scope ,在对应文件的头文件加上

    #include <unistd.h>
    

    大概有十来个文件需要加。

  • 出现错误:

    error: static assertion failed: std::map must have the same value_type as its allocator
    

    把源码中的include/LoopClosing.h文件中的

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

    改为:

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

再次 ./build.sh,则编译成功。

下一篇运行ORB-SLAM2,有人要看的话就写!