m0_73794221 2024-04-16 00:58 采纳率: 0%
浏览 406
已结题

ros环境下运行orb-slam一直报错

在进行./ build_ros. sh时一直报错,实在是不知道该怎么办了。

img

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-16 00:58
    关注

    引自免费微信小程序:皆我百晓生

    针对您在运行ORB-SLAM2过程中遇到的问题,我将为您提供详细的解决步骤。以下是您所报告错误的分析及相应的解决方案:

    错误分析:

    1. Eigen库相关警告:

      /usr/local/include/eigen3/Eigen/src/Core/util/Constants.h:167:37: note: declared here
      EIGEN_DEPRECATED const unsigned int AlignedBit = 0x80;
      

      这是一个关于Eigen库的编译警告,表示某个常量已弃用。虽然它不会导致编译失败,但建议更新或配置您的Eigen库以消除警告。

    2. OpenCV版本冲突:

      /usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
      ...
      /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0: error adding symbols: DSO missing from command line
      ...
      undefined reference to `cv::putText(cv::_InputOutputArray const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::Point_<int>, double, int, cv::Scalar_<double>, int, bool)'
      

      错误提示表明存在OpenCV版本冲突,且编译过程中缺少对cv::putText函数的引用。这是由于系统同时安装了OpenCV 3.4和OpenCV 4.2,并且在链接阶段未能正确找到所需的库文件。ORB-SLAM2要求使用OpenCV 3.4.10,而系统默认链接了更高版本的OpenCV库。

    解决方案:

    1. 处理Eigen库警告:

      • 更新Eigen库到最新版本,确保没有弃用的常量。如果您不打算更新Eigen库,可以在CMakeLists.txt中添加 -Wno-deprecated-declarations 编译选项来忽略此警告。例如,在CMakeLists.txt的顶部(或适当位置)添加以下行:
        add_compile_options(-Wno-deprecated-declarations)
        
    2. 解决OpenCV版本冲突:

      • 卸载OpenCV 4.2: 使用以下命令卸载系统中的OpenCV 4.2:

        sudo apt-get remove 'libopencv*'
        sudo apt-get autoremove
        
      • 安装OpenCV 3.4.10: 首先添加OpenCV 3.4的源(适用于Ubuntu 18.04及以上版本):

        sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu bionic-security main"
        sudo apt update
        

        然后安装OpenCV 3.4.10及其依赖:

        sudo apt install libopencv-dev libopencv-imgcodecs-dev libopencv-highgui-dev libopencv-calib3d-dev libopencv-features2d-dev libopencv-video-dev libopencv-videoio-dev libopencv-videostab-dev libopencv-objdetect-dev libopencv-stitching-dev libopencv-flann-dev libopencv-core-dev libopencv-imgproc-dev
        
      • 清理并重新编译ORB-SLAM2: 清除ORB-SLAM2的旧编译结果:

        cd ~/ORB_SLAM2
        rm -rf build
        

        然后重新运行构建脚本:

        ./build_ros.sh
        

    按照上述步骤操作后,应该可以解决Eigen库警告和OpenCV版本冲突的问题,使ORB-SLAM2在ROS环境下成功编译。如果您在执行过程中遇到其他问题,欢迎继续提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月16日
  • 创建了问题 4月16日