本文目录
前言
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笔记本上
Win10
和Ubuntu20.04
双系统 - 然后
eigen3
安装的版本是3.3.7
,Pangolin
也是在这个版本上编译并安装的 -
OpenCV
安装方法比较奇葩,是选择了3.4.7
版本安装在:/usr/local/opencv/3.4.7/
路径下。
踩坑记录
踩坑过程如下:
第1个坑
第1个坑是作者官网的./build.sh
在Ubuntu20.04
下是有问题的,这是win
和linux
的回车换行键不兼容引起的。
首先需要安装工具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
那句的目的就是告诉CMake
,OpenCVConfig.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.10
和3.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/build
和ORB-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:
最后居然成功了!我都不敢想象。
补充
最后补充两篇别人的类似的经历: