ORB-SLAM3的CMake与ROS编译以及测试(亲自总结,亲测可用)

目录

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

sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt-get install doxygen
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev

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

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

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

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

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

1.3 Eigen3版本确认

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

pkg-config --modversion eigen3

 安装

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

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,但还是先源码编译了一遍,对后面的编译无影响。

git clone https://github.com/dorian3d/DBoW2.git DBoW2
cd DBoW2
mkdir build
cd build
cmake ..
make
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

git clone https://github.com/RainerKuemmerle/g2o.git g2o
cd g2o
mkdir build
cd build
cmake ..
make
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内存上编译,不过编译的时候记得尽可能多腾出点空间,把用不到的程序关掉。否则编译内存不够的话,会直接卡死。

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

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

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

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

增加交换空间大小

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

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

sudo swapoff /var/swapfile
sudo rm /var/swapfile

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

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

CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
   add_definitions(-DCOMPILEDWITHC11)
   message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++0x.")
else()
   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()


修改成c++14版本

CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
   add_definitions(-DCOMPILEDWITHC11)
   message(STATUS "Using flag -std=c++14.")
elseif(COMPILER_SUPPORTS_CXX0X)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++0x.")
else()
   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
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


 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值