cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑...

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第1张图片

效果怎么样我就不说了,还是大家亲自感受一下吧!ORB_SLAM3编译的坑我都替大家踩过了! ORB_SLAM3官方代码地址下载好了开始编译吧!我下载好的
官方论文、官方源码、官方测试视频、TUM测试数据集,需要的评论留言!

先来欣赏一下一下官方的测试效果吧!

知乎视频​www.zhihu.com
知乎视频​www.zhihu.com

接下来开始编译源码吧


首先进入到源码根目录 ~/projects/ORB_SLAM3$ ./build.sh

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第2张图片

DBow2编译成功了,但是g2o编译出错了。

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第3张图片

根据报错信息我们一起分析一下问题出在哪里了 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

ddc9e3405faeb0195649ed2c9eee0272.png

打开看看 gedit /home/eigen-3.2.10/cmake/FindEigen3.cmake

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第4张图片

# 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

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第5张图片

发现有这个路径,实际上下载的代码是没有
LIST(APPEND CMAKE_MODULE_PATH ${g2o_SOURCE_DIR}/cmake_modules)
第一个方案是可以把ORBSLAM2下面的g2o路径下面的cmake_modules拷贝过来 第二个方案是用set命令设置一下,把下面这个路径,写到g2o下面的CMakeLists.txt中
/home/packages/eigen-3.2.10/cmake/FindEigen3.cmake
官方这么做肯定是有原因的,所以我执行第二个方案,下面介绍一下set命令用法

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第6张图片

告诉cmake不用找了,我给你eigen头文件路径,哈哈 先找到eigen3的路径
locate /usr/local/include/eigen3
然后添加
set(EIGEN3_INCLUDE_DIRS /usr/local/include/eigen3) include_directories(${EIGEN3_INCLUDE_DIRS})
把之前g2o下面的CMakeLists.txt里面的一坨都删掉,删掉的就是我注释掉的部分,更改之后是下面这样。

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第7张图片

然后就可以顺利编译通过了 然而不要高兴的太早了,在编译build_ros.sh的时候出错了 /ORB_SLAM3/Examples/ROS/ORB_SLAM3/../../../include/KeyFrame.h:32:29: fatal error: GeometricCamera.h: 没有那个文件或目录 打开文件,作如下更改就好了,因为官方多了一层目录

1ce11f15e477aa741d2ed321c5c1fcf1.png

依次做如下更改

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第8张图片

fd5c1587a38ec255d7fdc9ffac3f52a2.png

接着编译 结果又报错了 /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){}

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第9张图片

我们打开代码看到是代码还用了ORB_SLAM2,所以开始更改

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第10张图片

不过我不想一个个更改,下面放出大招 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 添加下图红框中代码

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第11张图片

编译成功

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第12张图片

下载这两个数据集开始测试

c4925689729e4d085d13e9729e43dfa8.png

把这个数据集的路径填写到下面这个文件 tum_vi_examples.sh

9f2d3bf14c9a25f7eb936bf08bdf732e.png

在终端运行脚本 tum_vi_examples.sh

运行结果截图

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第13张图片

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第14张图片

cmake怎么编译 eigen c++_ORB-SLAM3加持鱼眼和IMU我帮你踩了ORB_SLAM3源码编译TUM数据测试的坑..._第15张图片

你可能感兴趣的:(cmake怎么编译,eigen,c++,g++编译命令,nacos,源码,build,报错)