代码编织梦想

ORB-SLAM2编译、安装等问题汇总大全(Ubuntu20.04、eigen3、pangolin0.5、opencv4.5.5)

1. 环境说明

  • 使用的Linux发行版本为Ubuntu 20.04.
  • eigen版本为3.2.92,本来是3.3.7,为了避免与ceres的冲突降了版本。
  • pangolin版本为0.5,貌似高版本在编译ORB-SLAM2时会出现很多问题。
  • opencv版本为4.5.5,版本非常新,较opencv3有比较大的改动,还是建议opencv3.
  • Sophus使用的是非模板类的
  • G2O和DBoW2 都是使用第三方文件夹自带的。

2. 源码下载

ORB-SLAM2有许多改进版本、注释版本等,我安装的是初始版本。

地址为:raulmur/ORB_SLAM2: Real-Time SLAM for Monocular, Stereo and RGB-D Cameras, with Loop Detection and Relocalization Capabilities (github.com)

另外还有大佬在博客整理了许多改进版本的下载地址: 超全汇总 | ORB-SLAM2 / ORB-SLAM3 相关改进代码!_3D视觉工坊的博客-CSDN博客

还有一个比较推荐的注释版本:推荐的注释版地址

数据集及associate.py下载地址:Computer Vision Group - Dataset Download (tum.de)

3. 报错处理

3.1 Opencv相关报错

  • FATAL_ERROR "OpenCV > 2.4.3 not found."的错误

    • 修改cmakelist.txt,将opencv3.0改为4.5.5,我遇到两个地方,一个是orbslam2文件夹,另一个好像是DBoW2文件夹,可以根据错误信息查看。比如:
     find_package(OpenCV 4.5.5 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()
    
  • 多个文件出现#include <opencv/cv.h>的错误

    这个问题主要是opencv4更换了一些定义,需要替换为:

    #include<opencv2/imgproc/imgproc_c.h>
    #include <opencv2/highgui/highgui_c.h>
    

    CV_LOAD_IMAGE_UNCHANGED的错误
    同样的,在opencv4中名称也改了不少,对应处替换为:

    cv::IMREAD_UNCHANGED
    
  • 这个错误我倒是没有遇到过:

    undefined reference to symbol '_ZN5boost6system15system_categoryEv’的报错
    需要在cmakelists.txt中增加-lboost_system,如下所示:

    set(LIBS
    ${OpenCV_LIBS}
    ${EIGEN3_LIBS}
    ${Pangolin_LIBRARIES}
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
    ${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
    -lboost_system
    )
    
  • 这个也没有遇到:

    运行rosrun ORB_SLAM2 RGBD xxxxxxx时出现Failed to load module "canberra-gtk-module"的错误

    sudo apt-get install libcanberra-gtk-module
    

    参考:(15条消息) ORB-SLAM2在OpenCV4.1.1下的编译问题_K4762的博客-CSDN博客

3.2 Pangolin 环境配置

下载地址:Pangolin 0.5下载

  • error: ‘AV_PIX_FMT_XVMC_MPEG2_MC’ was not declared in this scope

    解决方法:在/Pangolin/CMakeModules/FindFFMPEG.cmake中63,64行,

            sizeof(AVFormatContext::max_analyze_duration2);
          }" HAVE_FFMPEG_MAX_ANALYZE_DURATION2
    

    换成:

            sizeof(AVFormatContext::max_analyze_duration);
          }" HAVE_FFMPEG_MAX_ANALYZE_DURATION
    

    /Pangolin/src/video/drivers/ffmpeg.cpp中第37行 namespace pangolin上面加上:

    #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
    

    第78,79行

    TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC); 
    TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
    

    改为:

    #ifdef FF_API_XVMC
        TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC);
        TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
    #endif
    

    101-105行

        TEST_PIX_FMT_RETURN(VDPAU_H264);
        TEST_PIX_FMT_RETURN(VDPAU_MPEG1);
        TEST_PIX_FMT_RETURN(VDPAU_MPEG2);
        TEST_PIX_FMT_RETURN(VDPAU_WMV3);
        TEST_PIX_FMT_RETURN(VDPAU_VC1);
    

    改为:

    #ifdef FF_API_VDPAU
        TEST_PIX_FMT_RETURN(VDPAU_H264);
        TEST_PIX_FMT_RETURN(VDPAU_MPEG1);
        TEST_PIX_FMT_RETURN(VDPAU_MPEG2);
        TEST_PIX_FMT_RETURN(VDPAU_WMV3);
        TEST_PIX_FMT_RETURN(VDPAU_VC1);
    #endif
    

    127行

    	TEST_PIX_FMT_RETURN(VDPAU_MPEG4);
    

    改为:

    #ifdef FF_API_VDPAU
        TEST_PIX_FMT_RETURN(VDPAU_MPEG4);
    #endif
    
  • error: ‘AVFMT_RAWPICTURE’ was not declared in this scope

    解决办法,在Pangolin/include/pangolin/video/drivers/ffmpeg.h开头加上

    #define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
    #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
    #define AVFMT_RAWPICTURE 0x0020
    
    • 如果报pangolin找不到eigen

      到Pagolin/src文件夹下,在CMakeList.txt中删去下面这段代码(屏蔽掉ffmpeg的影响):

      find_package(FFMPEG QUIET)
      if(BUILD_PANGOLIN_VIDEO AND FFMPEG_FOUND)
        set(HAVE_FFMPEG 1)
        list(APPEND INTERNAL_INC  ${FFMPEG_INCLUDE_DIRS} )
        list(APPEND LINK_LIBS ${FFMPEG_LIBRARIES} )
        list(APPEND HEADERS ${INCDIR}/video/drivers/ffmpeg.h)
        list(APPEND SOURCES video/drivers/ffmpeg.cpp)
        list(APPEND VIDEO_FACTORY_REG RegisterFfmpegVideoFactory )
        list(APPEND VIDEO_FACTORY_REG RegisterFfmpegVideoOutputFactory )
       
        if(_GCC_)
          # FFMPEG is a real pain for deprecating the API.
          set_source_files_properties(video/drivers/ffmpeg.cpp    PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations")
        endif()
        message(STATUS "ffmpeg Found and Enabled")
      endif()
      

    参考:(15条消息) 视觉SLAM十四讲 Ubuntu20.04 Pangolin 环境配置_图南i的博客-CSDN博客_pangolin配置

3.3 usleep(3000)错误

在System.h中,加一下这些头文件:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

3.4 value标红

(https://img-blog.csdnimg.cn/2cfbf883e1714a25846a763ec31a10a7.png)
在这里插入图片描述

3.5 ORB-SLAM2一直初始化

将src文件夹下的Initializer.cc 892行

if(cosParallax<0.99998){
	vbGood[vMatches12[i].first]=true;
}

改为:

if(cosParallax<0.99998){
	vbGood[vMatches12[i].first]=true;
	nGood++;
}

ORBmatcher.cc文件第478行

int bin = round(rot*factor);

改为:

int bin = round(rot/(360.0f*factor));

参考:https://github.com/raulmur/ORB_SLAM2/issues/59

3.6 associate.py 没安装numpy

在运行RGB-D时,需要利用associate.txt把深度图与颜色图结合起来:

缺少numpy库时:

sudo apt-get install python3-pip#安装pip
pip3 install numpy #或者其他包,注意这里需要用pip3

然后运行

python associate.py rgb.txt depth.txt > associate.txt

如果报错,那么由于Python2和python3语法的差别,需要将associate.py中第86行87行的:

    first_keys = first_list.keys()
    second_keys = second_list.keys()

改为:

    first_keys = list(first_list.keys())
    second_keys = list(second_list.keys())

参考:(16条消息) TUM数据集associate.py使用小坑_u012796629的博客-CSDN博客

3.7 测试数据集

参考:(15条消息) 视觉SLAM ——用TUM数据集测试orb-slam2_Zachary Yu的博客-CSDN博客

github的官方文档里也写得很清楚。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_52519143/article/details/127000332

ORB-SLAM介绍以及ORB-SLAM2的安装与测试-爱代码爱编程

1. 介绍 ORB-SLAM 是西班牙 Zaragoza 大学的 Raúl Mur-Arta 编写的视觉 SLAM 系统。 它是一个完整的 SLAM 系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目 SLAM 系统,同时还有单目、双目、RGBD 相机的接口。其核心是使用 ORB (Orinted FAST and BRIEF) 作为整

Ubuntu20.04编译orb-slam2中的问题及解决方案-爱代码爱编程

前前后后折腾了两三天,终于配好了orb-slam2的环境,写篇博客纪念一下,也给尚未解决orb-slam2环境的同志一点点帮助。主要是编译Pangolin容易出错,导致Orb-slam2也没编译好。建议使用Pangolin0.3版本,在此放在百度云盘啦!!!链接: https://pan.baidu.com/s/1vPdGBZZLxjzQfmITnkslS

ORB-SLAM3的编译与测试[Ubuntu20.04且已经安装了ROS]-爱代码爱编程

简单起见在ubuntu20.04上推荐先安装ros,以及intel-full,熟悉的话可以自己编译安装所需的库,主要是OpenCV4,根据自己的机器提供优化选项。需要安装Pangolin。在编译之前按照GitHub的上的提示,运行script下的脚本文件,安装推荐的依赖,在cmake的时候会提示找不到Catch2, 如果通过make的方式安装这个库,仍会提

ubuntu20.04搭建ORB-SLAM2系统-爱代码爱编程

1、换源(清华源) 终端里任意目录下sudo gedit /etc/apt/sources.list deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse # deb-src https://mirrors.tuna.tsin

ubuntu20.04安装并运行orb_slam3(一路顺风版)_9527风先生的博客-爱代码爱编程

1、引言 网上各种安装教程,会出错,很麻烦,大家电脑在安装前,最好把之前的残留卸载干净,我在此出一个一路顺风版,哈哈哈,望大家喜欢。 2、准备工作 2.1、安装git,g++ sudo apt-get install git sudo apt install g++ 2.2、安装cmake 不推荐大家使用自动安装命令,那个安装的版本太老了。一