ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-11-19 10:03:05  阅读:606  来源: 互联网

标签:Ubuntu20.04 编译 示例 demo OpenCV SLAM2 报错 build ORB


本文目录

前言

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个坑

最后一个坑,这个坑我绝对想不到,当时我看到全是类似这种警告,想着不可能成功了,
在这里插入图片描述
在这里插入图片描述
搜了一些资料,没想到真的有人有类似的错误,参考Corrected typedef so that map value_type and allocator are the same #585
在这里插入图片描述
最后居然成功了!我都不敢想象。
在这里插入图片描述

补充

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

标签:Ubuntu20.04,编译,示例,demo,OpenCV,SLAM2,报错,build,ORB
来源: https://blog.csdn.net/chenzz444/article/details/121406471

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有