ORB-SLAM2编译错误

昨天晚上帮大四学弟在Ubuntu16.04(ROS-Kinetic)上编译ORB-SLAM2,在执行build.sh脚本时出现如下错误:

错误信息如下:

Build type: Release
-- Using flag -std=c++11.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wang/SLAM/src/ORB_SLAM2/build
Scanning dependencies of target ORB_SLAM2
[  3%] Building CXX object CMakeFiles/ORB_SLAM2.dir/src/System.cc.o
[  6%] Building CXX object CMakeFiles/ORB_SLAM2.dir/src/Tracking.cc.o
[  9%] Building CXX object CMakeFiles/ORB_SLAM2.dir/src/LocalMapping.cc.o
[ 12%] Building CXX object CMakeFiles/ORB_SLAM2.dir/src/LoopClosing.cc.o
/home/wang/SLAM/src/ORB_SLAM2/src/LoopClosing.cc: In member function ‘void ORB_SLAM2::LoopClosing::CorrectLoop()’:
/home/wang/SLAM/src/ORB_SLAM2/src/LoopClosing.cc:417:20: warning: use of an operand of type ‘bool’ in ‘operator++’ is deprecated [-Wdeprecated]
         mnFullBAIdx++;
                    ^~
In file included from /usr/include/c++/8/map:61,
                 from /home/wang/SLAM/src/ORB_SLAM2/Thirdparty/DBoW2/DBoW2/BowVector.h:14,
                 from /home/wang/SLAM/src/ORB_SLAM2/include/Frame.h:27,
                 from /home/wang/SLAM/src/ORB_SLAM2/include/MapPoint.h:25,
                 from /home/wang/SLAM/src/ORB_SLAM2/include/KeyFrame.h:24,
                 from /home/wang/SLAM/src/ORB_SLAM2/include/LoopClosing.h:24,
                 from /home/wang/SLAM/src/ORB_SLAM2/src/LoopClosing.cc:21:
/usr/include/c++/8/bits/stl_map.h: In instantiation of ‘class std::map<ORB_SLAM2::KeyFrame*, g2o::Sim3, std::less<ORB_SLAM2::KeyFrame*>, Eigen::aligned_allocator<std::pair<const ORB_SLAM2::KeyFrame*, g2o::Sim3> > >’:
/home/wang/SLAM/src/ORB_SLAM2/src/LoopClosing.cc:439:21:   required from here
/usr/include/c++/8/bits/stl_map.h:122:21: error: static assertion failed: std::map must have the same value_type as its allocator
       static_assert(is_same<typename _Alloc::value_type, value_type>::value,
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CMakeFiles/ORB_SLAM2.dir/build.make:134: recipe for target 'CMakeFiles/ORB_SLAM2.dir/src/LoopClosing.cc.o' failed
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/src/LoopClosing.cc.o] Error 1
CMakeFiles/Makefile2:178: recipe for target 'CMakeFiles/ORB_SLAM2.dir/all' failed
make[1]: *** [CMakeFiles/ORB_SLAM2.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

具体原因不详,在网上找到解决办法:打开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;

如下所示:

然后重新编译即可通过。


参考网址:http://freebsd.1045724.x6.nabble.com/usr-include-c-v1-map-837-5-error-static-assert-failed-quot-Allocator-value-type-must-be-same-type-as-td6106482.html

### 回答1: 您好,可能是由于您的环境配置或者依赖库不完整导致的编译失败。建议您检查一下环境配置和依赖库是否正确安装,并且可以尝试重新下载ORB-SLAM2并重新编译。如果问题仍然存在,可以提供更具体的错误信息以便更好地帮助您解决问题。 ### 回答2: ORB-SLAM2是一款基于ORB特征以及单目、双目、RGB-D相机的实时稀疏SLAM系统,常用于机器人导航、增强现实等领域。该系统的编译过程需要经过多个步骤,其中可以使用build.sh脚本自动完成编译,但在实际操作中也可能会出现编译失败的情况。 下面我将就ORB-SLAM2编译build.sh失败的几种可能原因进行一一分析: 1. 缺少必要环境 在编译ORB-SLAM2之前,需要准备好一些必要的库和环境,例如:CMake、OpenCV、Eigen、Pangolin、g2o、OpenBLAS、Boost等。如果某些库没有安装、或者版本不对,就会影响编译过程。可以通过查看控制台输出信息,看看是不是缺少了哪些依赖项,进而尝试安装和配置这些环境。 2. 编译选项不正确 在使用build.sh脚本编译时,需要手动设置编译选项,例如“-DOPENCV_INCLUDE_DIRS”、“-DPangolin_INCLUDE_DIRS”等。如果这些选项设置不正确,就会导致编译失败。可以查看编译选项是否正确,或者尝试在命令行模式下手动编译,并指定正确的编译选项。 3. 文件权限问题 在Linux系统中,有些文件需要有执行权限才能执行,否则就会提示编译错误。如果使用build.sh脚本编译失败,有可能是由于没有给脚本文件赋予执行权限。可以使用“chmod +x build.sh”命令为脚本文件添加可执行权限,并再次进行编译。 4. 安装路径问题 编译ORB-SLAM2时,需要指定安装路径,如果指定的路径不存在或没有权限,则会编译失败。可以查看安装路径是否正确,并确保有相应的写入权限。 在实际操作时,如果编译build.sh失败,可以根据上述几种可能原因逐一排查,解决问题。此外,还可以查看终端控制台打印的错误信息,以便更快地定位问题。同时,建议参考ORB-SLAM2编译指南,详细了解编译过程中可能遇到的问题和解决方法,提高编译的成功率。 ### 回答3: ORB-SLAM2是一种用于实时定位与地图构建(SLAM)的开源代码库,适用于单个移动摄像头或带有RGB-D传感器的机器人。在安装和使用ORB-SLAM2时,经常会出现build.sh编译失败的情况。下面是解决这个问题的一些常见方法: 1. 检查CUDA和OpenCV等依赖库是否已正确安装。在编译ORB-SLAM2之前,请务必确保CUDA和OpenCV等依赖库已正确安装,并正确设置了环境变量。 2. 检查CMakeLists.txt文件是否正确。在编译ORB-SLAM2之前,请检查CMakeLists.txt文件中的路径是否正确,特别是OpenCV库的路径。 3. 创建一个干净的构建目录。如果使用的是原始版本的ORB-SLAM2,请尝试在一个新的构建目录中重新编译代码,以确保缓存和配置文件的问题对编译造成的影响最小。 4. 尝试重新克隆代码。如果在以上步骤下仍然无法解决问题,请尝试重新克隆最新版本的ORB-SLAM2代码,并在干净的构建目录中编译代码。 5. 寻求帮助。如果您已经尝试了以上步骤但仍然无法解决问题,请尝试在ORB-SLAM2社区或其他相应论坛上寻求帮助。可能会有其他使用者遇到过相似的问题,或者有经验的人可以提供更深入的帮助。 总之,编译ORB-SLAM2的过程中可能会出现各种各样的问题,需要耐心地逐一查找。通过仔细检查环境变量、CMakeLists.txt文件、构建目录和代码库等方面,以及求助其他人的帮助,您应该能够处理编译失败的问题,并成功运行ORB-SLAM2。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值