当前位置:   article > 正文

ORB-SLAM3的CMake与ROS编译以及测试(亲自总结,亲测可用)_基于ros2实现orb-slam3

基于ros2实现orb-slam3

目录

ORB-SLAM3的CMake编译

1  配置环境

1.1 确定g++的版本

1.2 安装Pangolin

1.3 Eigen3版本确认

1.4  安装openCV 4.4.0

1.5 下载编译 DBoW2

1.6 下载编译 g2o

2 编译ORB_SLAM3

2.1 编译过程遇到的错误1:交换空间的内存不足

 2.2 编译过程会报错 error: ‘decay_t’ is not a member of ‘std’

        这篇博客的主要目的是实用性地记录如何成功地运行ORB-SLAM3。ORB-SLAM3有两个版本,分别是常规版本和ROS版本,因此本文也将重点介绍这两个部分。为了方便编译,源代码中提供了两个脚本,分别是build.sh和build_ros.sh,可以自动进行编译,非常方便实用。

ORB-SLAM3的CMake编译

1  配置环境

1.1 确定g++的版本

        检查G++版本,查看是否支持C++11,一般g++版本大于4.7即可

g++ -v

1.2 安装Pangolin

Pangolin以轻量级和易用性为主要优点,使用起来可以大大简化OpenGL视觉化编程,非常适合用于SLAM系统的可视化辅助。它在ORB-SLAM中发挥着绘制关键帧、地图点等重要作用。

        先安装Pangolin的依赖,OpenGL,Glew

  1. sudo apt install pkg-config
  2. sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
  3. sudo apt-get install doxygen
  4. sudo apt install libgl1-mesa-dev
  5. sudo apt install libglew-dev

        安装Pangolin,注意:要想ORB-SLAM3编译通过请使用std=c++17

  1. git clone https://github.com/stevenlovegrove/Pangolin.git
  2. cd Pangolin
  3. mkdir build
  4. cd build
  5. # cmake .. #某些新版本的GCC编译器中
  6. cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-std=c++17
  7. cmake --build .
  8. sudo make install

         如果你想建立文档,你已经安装了Doxygen,你可以执行:

  1. cmake --build . --target pangolin_doc
  2. sudo make install

        编译构建出现问题,如果卸载一些依赖后,编译仍有问题,最好重新下载源码安装,make claen 没用,删除build也没用。

1.3 Eigen3版本确认

        ORB-SLAM3 中使用的Eigen3需要最少3.1.0,

pkg-config --modversion eigen3

 安装

  1. sudo apt install libeigen3-dev
  2. # 若默认安装的是 /usr/include/eigen3 下,
  3. # 将Eigen文件夹拷贝一份到/usr/local/include 下
  4. sudo cp -r /usr/include/eigen3/Eigen /usr/local/include

1.4  安装openCV 4.4.0

        按照下面的方法安装openCV 4.4.0(虽然下面写的是4.8.0 ,但是4.4.0也可以用)。

Ubuntu18.04 安装opencv 4.8.0教程(亲测可用)_RobotsRuning的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u014374826/article/details/132094361?spm=1001.2014.3001.5502

1.5 下载编译 DBoW2

        虽然orb-slam3项目中自带DBoW2 and g2o,但还是先源码编译了一遍,对后面的编译无影响。

  1. git clone https://github.com/dorian3d/DBoW2.git DBoW2
  2. cd DBoW2
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make
  7. sudo make install

1.6 下载编译 g2o

         这一步对Cmake有较高的版本要求,需要先升级Cmake,详细参考下面这一篇文章:

cmake升级(ubuntu 18.04)——千万不要删除原来版本的cmake_RobotsRuning的博客-CSDN博客千万不要卸载删除ubuntu原有的cmake,否则之前经过原有cmake编译过的文件将也会被删除,比如 ros。千万不要使用下面这句命令删除原有的 cmake!!!!!!超级大坑,坑爹操作!!!https://blog.csdn.net/u014374826/article/details/132051306?spm=1001.2014.3001.5502

  1. git clone https://github.com/RainerKuemmerle/g2o.git g2o
  2. cd g2o
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make
  7. sudo make install

如果不升级cmake ,当有如下报错时,可以采用如下方法(该方法未测试,因为感觉很有意思,故记录之)

        这是因为他要求的EIgen3必须要是3.1.0的版本,而你的电脑上没有对应版本(比他高也不行)。解决办法也非常简单,你可以修改g2o文件夹下的CMakeLists.txt,如下,将其中的3.1.0删掉保存,再重新cmake即可。

 最后make生成,生成结果如下。

2 编译ORB-SLAM3

        在上述环境没差错,即可编译orb-slam3项目。需要注意的是,ORB-SLAM3编译对于内存的使用相对较大,推荐16GB及以上。当然也可以在8GB内存上编译,不过编译的时候记得尽可能多腾出点空间,把用不到的程序关掉。否则编译内存不够的话,会直接卡死。

  1. git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
  2. cd ORB_SLAM3
  3. chmod +x build.sh
  4. ./build.sh

2.1 编译过程遇到的错误1:交换空间的内存不足

出现如下报错,导致编译中止:

  1. C++: fatal error: Killed signal terminated program cc1plus
  2. compilation terminated.

增加交换空间大小

  1. sudo fallocate -l 5G /var/swapfile
  2. sudo chmod 600 /var/swapfile
  3. sudo mkswap /var/swapfile
  4. sudo swapon /var/swapfile
  5. sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'

如果你已经创建了一个较小的交换文件,你可以尝试删除它,然后再创建一个较大的交换文件。可以使用以下命令删除交换文件:

  1. sudo swapoff /var/swapfile
  2. sudo rm /var/swapfile

 2.2 编译过程会报错 error: ‘decay_t’ is not a member of ‘std’

         修改CMakeLists.txt中的c++版本:

  1. CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
  2. CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
  3. if(COMPILER_SUPPORTS_CXX11)
  4. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  5. add_definitions(-DCOMPILEDWITHC11)
  6. message(STATUS "Using flag -std=c++11.")
  7. elseif(COMPILER_SUPPORTS_CXX0X)
  8. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  9. add_definitions(-DCOMPILEDWITHC0X)
  10. message(STATUS "Using flag -std=c++0x.")
  11. else()
  12. message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
  13. endif()
  14. 修改成c++14版本
  15. CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
  16. CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
  17. if(COMPILER_SUPPORTS_CXX11)
  18. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
  19. add_definitions(-DCOMPILEDWITHC11)
  20. message(STATUS "Using flag -std=c++14.")
  21. elseif(COMPILER_SUPPORTS_CXX0X)
  22. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  23. add_definitions(-DCOMPILEDWITHC0X)
  24. message(STATUS "Using flag -std=c++0x.")
  25. else()
  26. message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
  27. endif()

编译

通过后的提示: 

        至此,ORB-SLAM3的CMake编译就完成了。我们可以在Examples文件夹下看到很多生成的可执行文件。

 同时在源码根目录的lib文件夹下看到一个.so库文件。

3 运行ORB-SLAM3

使用数据集运行ORB-SLAM3请参考这一篇文章

ORB-SLAM3运行_RobotsRuning的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u014374826/article/details/132612800?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132612800%22%2C%22source%22%3A%22u014374826%22%7D

Realsense D435i实时运行ORB-SLAM3请参考这一篇文章

Realsense D435i实时运行ORB-SLAM3_RobotsRuning的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u014374826/article/details/132612899?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132612899%22%2C%22source%22%3A%22u014374826%22%7D


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/660494
推荐阅读
相关标签
  

闽ICP备14008679号