欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了

程序员文章站 2022-06-12 09:01:19
...

官方代码地址

https://github.com/UZ-SLAMLab/ORB_SLAM3

开始编译

~/projects/ORB_SLAM3$ ./build.sh

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了DBow2编译成功,但是g2o编译不成功
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了根据报错信息分析问题出在了哪里

CMake Error at CMakeLists.txt:72 (FIND_PACKAGE):
By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH 
this project has asked CMake to find a package configuration file provided by "Eigen3", 
but CMake did not find one.

寻找一下FindEigen3.cmake在哪里

locate FindEigen3.cmake
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
打开看看

gedit /home/eigen-3.2.10/cmake/FindEigen3.cmake

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了

#  EIGEN3_FOUND - system has eigen lib with correct version
#  EIGEN3_INCLUDE_DIR - the eigen include directory
#  EIGEN3_VERSION - eigen version

意思就是这个.cmake文件会找到第三方库的头文件,库文件,Eigen没有库文件
我们再看看OpenCV的

# LIBOPENCV_FOUND - system has LIBOPENCV
# LIBOPENCV_INCLUDE_DIR - the LIBOPENCV include directories
# LIBOPENCV_LIBRARIES - link these to use LIBOPENCV

打开g2o下面的CMakeLists.txt

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了发现这里有这个路径
LIST(APPEND CMAKE_MODULE_PATH ${g2o_SOURCE_DIR}/cmake_modules)
然后实际上下载的代码是没有的所以可以把ORB_SLAM2的拷贝过来或者是给出gedit /home/packages/eigen-3.2.10/cmake/FindEigen3.cmake
这个路径,所以官方这么做肯定是有原因的,所以执行第二个方案。
补充一下这个set命令用法

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
cmake你不用找了,我给你eigen头文件路径

先找到eigen3的路径
locate
/usr/local/include/eigen3
然后添加
set(EIGEN3_INCLUDE_DIRS /usr/local/include/eigen3)
include_directories(${EIGEN3_INCLUDE_DIRS})

把之前的一坨都删掉,换成下面的这个

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
然后就可以顺利编译通过了

然后在编译build_ros.sh的时候出错了

/ORB_SLAM3/Examples/ROS/ORB_SLAM3/../../../include/KeyFrame.h:32:29: fatal error: GeometricCamera.h: 没有那个文件或目录

打开文件,作如下更改就好了,因为官方多了一层目录
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
依次做如下更改
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了

接着编译 结果又报错了

/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_mono.cc:37:18: 
error: ‘ORB_SLAM2’ has not been declared
ImageGrabber(ORB_SLAM2::System* pSLAM):mpSLAM(pSLAM){}

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了我们打开代码看到是代码还用了ORB_SLAM2,所以开始更改
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
不过我不想一个个更改,下面放出大招

sed -i "s/ORB_SLAM2/ORB_SLAM3/g" `grep -rl "ORB_SLAM2"`

解释一下grep和sed替换文件中的字符串命令

sed -i s/"str1"/"str2"/g `grep "str1" -rl --include="*.[ch]" ./`

将当前目录下的所有.c、.h文件中的str1字符串替换为str2字符串。

参数解释:
sed:
-i 表示操作的是文件,"`` "括起来的grep命令,表示将grep命令的的结果作为操作文件
s/"str1"/"str2"/表示查找str1并替换为str2,后面跟g表示一行中有多个str1的时候,都替换,而不是仅替换第一个

grep:
-r表示查找当前目录以及所有子目录
-l表示仅列出符合条件的文件名,传给sed命令做替换操作
--include="*.[ch]" 表示仅查找.c、.h文件

注:如果不需要查找子目录,仅需要在当前目录替换,可直接用sed命令:

sed -i s/"str1"/"str2"/g ./*.[ch]

继续编译有报错了

/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'

打开这个文件:
ORB_SLAM3/Examples/ROS/ORB_SLAM3/CMakeLists.txt
添加代码

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
编译成功
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了

下载的是这两个数据集开始测试
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
把这个数据集的路径填写到下面这个文件 tum_vi_examples.sh
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了在终端运行脚本 tum_vi_examples.sh
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
运行结果截图

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了
欢迎关注公众号小秋SLAM笔记回复"ORB_SLAM3"获取我下载好的官方论文、测试视频、数据集。

支持鱼眼相机和IMU的开源ORB_SLAM3最详细的编译测试教程来了