编译ORB_SLAM2中遇到的问题

入门ORB_SLAM2,在编译上花费了较大时间,在这里作以下总结。

源码编译ORB_SLAM2

我的环境:

  1. Ubuntu 22.04

  2. OpenCV 3.4.16

  3. Pangolin v0.5

  4. Eigen3 3.4.0

  5. DBoW2 and g2o Latest


官方推荐的OpenCV的版本是OpenCV 3,但是在github上的pr中有大神改过OpenCV 4 的编译版本:Update to OpenCV4 and fix some build errors by Windfisch · Pull Request #790 · raulmur/ORB_SLAM2 · GitHub 同时修改一些编译错误,可以作为参考尝试一下。

Pangolin版本似乎只能用v0.5,最新的肯定不行,有人说v0.6的也可以,我没有尝试。如果不用v0.5的Pangolin会出现找不到Eigen等错误,最后我的解决办法就是卸载原有的Pangolin,并安装v0.5版本。

其他修改:

如果出现double free or corruption 问题,很大可能是因为在编译g2o和ORB_SLAM2的时候没有在cmake option -march=native 上做到统一。如果不统一会导致内存没有对齐,所以就会出现以上问题。我的解决办法是将ORB_SLAM2/Thirdparty/g2o/里的CMakeLists.txt里面所有的-march=native 删掉,然后再将ORB_SLAM2/里的CMakeLists.txt里的-march=native 删掉,编译安装。注意要改Thirdparty里的g2o的CMake文件,因为在运行./build.sh编译安装的时候他会安装的是Thirdpary里面的第三方库,自己下载源码安装的可能会被覆盖。


出现static assertion failed 问题,需要修改ORB_SLAM2/include/LoopClosing.h文件:

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

出现‘usleep’ was not declared 问题,在ORB_SLAM2/include/System.h文件中添加引用头文件:

#include

 以上是我遇到的编译方面问题总结。


在运行TUM数据集时我还遇到了初始化时会出现段错误的情况,改正方法为修改ORB_SLAM2/src/Initializer.cc中第892行部分:

if(cosParallax<0.99998){
    vbGood[vMatches12[i].first]=true;
    //添加如下代码
    nGood++;
}

issue中提到的另一个bug(我暂时没有遇到,但是还是改了)在ORB_SLAM2/src/ORBmatcher.cc中第478行:

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

至此我的ORB_SLAM2可以正常运行。

你可能感兴趣的:(slam,opencv,人工智能,计算机视觉)