• ORB-SLAM3复现过程中遇到的问题及解决办法


    因为环境比较干净,所以遇到的问题相对少一些,不过每一个问题都进行了完善的解决
    我的环境是刚装完Ubuntu20.04之后,并进行了Ubuntu系统安装之后首需要做的事情的操作之后的一个环境。

    1. 版本检查

    因为ORB-SLAM3对环境的要求和ORB-SLAM2有一些不一样,有的版本过低是会导致错误的。
    所以,在开始之前,先来检测一下自己环境中的库的版本。
    注意:使用的是Ubuntu20.04

    1.1 Opencv版本的检测

    执行以下命令,可以发现版本为4.2.0

    pkg-config --modversion opencv
    # 4.2.0
    //或者
    opencv_version
    # 4.2.0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2 Eigen版本的检测

    执行以下命令:

    whereis eigen3
    # 我的是在/usr/include/eigen3
    gedit /usr/include/eigen3/Eigen/scr/Core/util/Macros.h
    
    • 1
    • 2
    • 3

    文件开头的几行如下所示,意味着我的Eigen版本为3.3.7

    #ifndef EIGEN_MACROS_H
    #define EIGEN_MACROS_H
    
    #define EIGEN_WORLD_VERSION 3
    #define EIGEN_MAJOR_VERSION 3
    #define EIGEN_MINOR_VERSION 7
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.3 查看Python版本

    1. 执行以下命令:
    xiaoduan@fighter:~$ python3 --version
    Python 3.8.10
    
    • 1
    • 2
    1. 也可以在终端输入python接着连着按两下tab键,也能看到自己的python版本。

    1.4 其他

    1. 在c++方面,我的是C++11。
    2. DBoW2 and g2o在项目文件中直接存在,无需手动安装,在编译的过程中会自动安装。
    3. Pangolin还没有安装。

    2. 编译过程中遇到的问题及解决办法

    2.1 ./build.sh遇到的问题

    1. 问题一:

    出现下图所示错误:

    在这里插入图片描述
    原因分析:

    版本不匹配,所以更改版本即可。

    解决办法:

    打开文件/home/xiaoduan/project/source2/orb_slam3/CMakeLists.txt
    更改以下两个内容:

    • 第33行Opencv的版本改为4
    • 第41行Eigen的版本改为3

    2. 问题二:

    错误展示:

    ‘slots_reference’ was not declared in this scope 1180 | cow_copy_type

    原因分析:
    因为我的是C++11,这里C++ 11 不支持本项目的一些编译,把 C++版本换到 C++14 就可以了

    解决办法:在终端输以下命令

    sed -i 's/++11/++14/g' CMakeLists.txt
    
    • 1

    3. 问题三:

    错误展示:

    ./Monocular/mono_euroc: error while loading shared libraries: libpango_windowing.so: cannot open shared object file: No such file or directory

    原因分析:

    原因一:运行的文件夹位置不对,注意看自己运行命令时的位置,保证能够找到运行的文件。
    原因二:配置文件没生效

    解决办法:

    针对第一种情况,只需要cd到对应的文件夹中即可。针对第二种情况,执行以下命令即可:

    sudo ldconfig
    
    • 1

    2.2 ./build_ros.sh遇到的问题

    1. 问题一:

    错误展示:

    Error: the rosdep view is empty: call ‘sudo rosdep init‘ and ‘rosdep update‘

    原因分析:

    因为ROS是一键安装的,所以rosdep没有进行初始化,所以只需要执行终端报错中的提示语句即可

    解决办法:

    执行以下命令:

    sudo rosdep fix-permissions
    sudo rosdep init
    rosdep update
    
    • 1
    • 2
    • 3

    注意: 在这个过程中可能会由于网络问题,总是不成功,所以多进行几遍就好了。如果实在不行运行一个sudo apt install python2在重新执行。

    2. 问题二:

    错误展示:

    ‘slots_reference’ was not declared in this scope 1180 | cow_copy_type

    原因分析:

    版本不匹配,所以更改版本即可。

    解决办法:

    打开文件/home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt
    更改以下两个内容:

    • 第33行Opencv的版本改为4
    • 第41行Eigen的版本改为3

    3. 问题三:

    错误展示:

    fatal error: sophus/se3.hpp: No such file or directory
    29 | #include

    原因分析:

    找不到sophus文件的位置,添加即可。

    解决办法:

    打开文件
    /home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt
    第49行加入
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
    
    • 1
    • 2
    • 3
    • 4

    4. 问题四:

    错误展示:

    /usr/local/include/sigslot/signal.hpp:1180:65: error: ‘slots_reference’ was not declared in this scope cow_copy_type ref = slots_reference();

    原因分析:
    因为我的是C++11,这里C++ 11 不支持本项目的一些编译,把 C++版本换到 C++14 就可以了

    解决办法:
    在终端输以下命令

    sed -i 's/++11/++14/g' CMakeLists.txt
    
    • 1

    5. 问题五:

    错误展示:

    4. 问题四:

    错误展示:

    /usr/local/include/sigslot/signal.hpp:1180:65: error: ‘slots_reference’ was not declared in this scope cow_copy_type ref = slots_reference();

    原因分析:
    Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错,应该是不能直接转换,不过可以换个办法

    解决办法:在终端输以下命令

    sed -i 's/++11/++14/g' CMakeLists.txt
    
    • 1

    原因分析:
    因为我的是C++11,这里C++ 11 不支持本项目的一些编译,把 C++版本换到 C++14 就可以了

    解决办法:
    解决办法参考文章ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行—Ubuntu20.04中的2.4。按照2.4的步骤进行修改源码即可。

    至此,就是我遇到的所有的问题。

  • 相关阅读:
    【STL】:反向迭代器
    如何利用WPS文字引用参考文献
    Java中ExecutorService线程池的使用(Runnable和Callable多线程实现)
    【yaml文件的编写】
    在AWS VPC中运行Nagios检查时指定自定义DNS解析器的选项
    java-php-python-ssm实验室主页系统计算机毕业设计
    Redis入门完整教程:发布订阅
    JAVA------基础篇
    一文详解用 eBPF 观测 HTTP
    金仓数据库 KingbaseGIS 使用手册(6.21. 长事务支持)
  • 原文地址:https://blog.csdn.net/qq_44164791/article/details/132652174