ORB-SLAM2在Ubuntu20.04上运行示例demo的踩坑记录

本文目录

前言

2021-11-18日从下午1点一直调试到下午5点半才算跑成功,美中不足的是在运行./build.sh后还会有一部分警告还是报错?不太懂,至少编译出来后按照demo的命令执行:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml /home/zqchen/Desktop/2021Fall-SLAM/rgbd_dataset_freiburg1_xyz /home/zqchen/Desktop/2021Fall-SLAM/ORB_SLAM2/Examples/RGB-D/associations/fr1_xyz.txt

可以把demo跑起来,看到可视化的结果。

如果大家看过Ubuntu20.04 编译安装视觉SLAM十四讲用到的几个库时走过的坑这篇文章的话,应该知道我电脑上相关必要依赖的配置情况:

  • DELL笔记本上Win10Ubuntu20.04双系统
  • 然后eigen3安装的版本是3.3.7Pangolin也是在这个版本上编译并安装的
  • OpenCV安装方法比较奇葩,是选择了3.4.7版本安装在:/usr/local/opencv/3.4.7/路径下。

踩坑记录

踩坑过程如下:

第1个坑

第1个坑是作者官网的./build.shUbuntu20.04下是有问题的,这是winlinux的回车换行键不兼容引起的。
首先需要安装工具dos2unix,再dos2unix ./build.sh把它变成在Ubuntu20.04下可执行的脚本。

第2个坑

第2个坑是OpenCV的路径问题,运行脚本的过程中总会报错说找不到OpenCV,我最初怀疑应该是我奇葩的安装路径导致的吧,于是我参考网上的一些资料,
./Thirdparty下的CMakeLists.txt做了一些修改:

set(OpenCV_DIR /usr/local/opencv/3.4.7/share/OpenCV)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
#find_package(OpenCV 3.0 QUIET)

set那句的目的就是告诉CMakeOpenCVConfig.cmake文件就在该路径中,请去那个路径中找到OpenCV的头文件和库文件!这些可以参考:
CMake找不到opencv库解决办法听说你安装测试 OpenCV 总是不成功?你可能遇到这个find_package坑了!- 知乎以及cmake使用指定版本opencv

继续编译新问题又出来了

第3个坑

第3个坑是报错“opencv/cv.h not found”,我参考了opencv/cv.h not found将其解决。需要将出现这个头文件的地方都给改成:

#include <opencv2/opencv.hpp>

第4个坑

第4个坑是类似“orb_slam2/src/PnPsolver.cc:860:37: error: ‘CvMat’ was not declared in this scope”这样的报错,参考了error installing orb_slam_2_ros using catkin_make with OpenCV 4.1.0 #41解决方法是在所有的头文件中加入

#include <opencv2/imgproc/types_c.h>
#include <opencv2/opencv.hpp>
using namespace cv;

但是我觉得这个不一定是有效的,这个报错可能是被我后续执行的其他方法给解决掉的,我不是很确定。

第5个坑

第5个是类似报错“error: ‘usleep’ was not declared in this scope”,我参考makefile: 83: recipe for target ‘all’ failed, trying to build ORB-SLAM2 #254解决了这个问题,方法是在所有出错的头文件加上(我每个头文件都挨个加了):

#include <unistd.h>

第6个坑

第6个报错是类似“EIGEN_DEPRECATED const unsigned int AlignedBit = 0x80;”的报错,我参考beg for your help #307解决了问题,原因应该是eigen3版本过高,方法是删掉当前版本的eigen3,安装旧版本的,我尝试了3.2.103.2.1,最后3.2.1可以成功。

This core dump is mostly because of the eigen. I suggest you :

  • delete all “build” folder (including pangolin and orbslam build folder)
  • compile pangolin (sudo make install)
  • run build.sh in orbslam
  • run build_ros.sh in orbslam

This should fix the issue and make sure you get no error in each

具体的删除重装和在3.2.1版本的基础上重新编译pangolin的过程参考了在Ubuntu 18.04编译ORB-SLAM2时,出现关于eigien的deprecated错误_u010003609的博客-程序员宅基地

sudo rm -rf /usr/include/eigen3

# 进入到下载完的eigen3.2.1目录下执行
mkdir build
cd build
sudo make install

# 进入到原来的Pangolin-0.6目录下执行
sudo rm -rf ./build
mkdir build
cd build
cmake ..
sudo make install
# 这样Pangolin也重新编译好了

之后需要把ORB-SLAM2/buildORB-SLAM2/Thirdparty/DBoW2/build以及ORB-SLAM2/Thirdparty/g2o/build这3个build文件夹都删掉,然后重新编译。

第7个坑

最后一个坑,这个坑我绝对想不到,当时我看到全是类似这种警告,想着不可能成功了,
ORB-SLAM2在Ubuntu20.04上运行示例demo的踩坑记录
ORB-SLAM2在Ubuntu20.04上运行示例demo的踩坑记录
搜了一些资料,没想到真的有人有类似的错误,参考Corrected typedef so that map value_type and allocator are the same #585
ORB-SLAM2在Ubuntu20.04上运行示例demo的踩坑记录
最后居然成功了!我都不敢想象。
ORB-SLAM2在Ubuntu20.04上运行示例demo的踩坑记录

补充

最后补充两篇别人的类似的经历:

上一篇:什么是数字货币?kinmall告诉你它与区块链到底有什么关系


下一篇:ORB SLAM2源码解读