[ORB_SLAM2]零基础搭建与运行

笔者是在Windows 10 的笔记本利用VMware 搭建虚拟机Ubuntu 20.04,在Ubuntu上配置ORB_SLAM2算法,耗时两天,记录一下自己心酸的历程(本人刚开始学习SLAM一个月,真正零基础教程,希望本文能帮到有需要的人)。

1. 硬件

(1)神州笔记本电脑,配置如下:

处理器:Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz   2.59 GHz

机带RAM:16.0 GB

(2)虚拟机设置:

硬盘:80 G(强烈建议弄大一点,因为之后数据集动不动几个G,小了的话加起来很麻烦,本人就因为刚开始设小了,后面卸载重装了虚拟机 :-(   )

内存: 8 G 

处理器:8

2. 准备工作

2.1 VMware官方下载地址:

 https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html

2.2 Ubuntu 20.04官方下载地址:

https://ubuntu.com/download/desktop

2.3 VMware 安装 Ubuntu 参考博客:

(18条消息) VMware虚拟机快速安装Ubuntu教程_liwu的博客-CSDN博客_ubuntu虚拟机安装教程

2.4 在 Ubuntu 中安装 ROS :

强力安利赵虚左老师的这个课【奥特学园】ROS机器人入门课程《ROS理论与实践》零基础教程_哔哩哔哩_bilibili 宝藏视频,讲解的很详细;

课程文档:http://www.autolabor.com.cn/book/ROSTutorials/

3. ORB_SLAM2的搭建过程(建议使用VMware的快照功能,及时存档)

此过程借鉴了以下大神的博客:

(18条消息) ORB_SLAM2配置过程_Mr.Andy的博客-CSDN博客

(18条消息) Ubuntu16.04下配置ORB-SLAM2与运行单目实例_未见青山老。的博客-CSDN博客

3.1 安装工具

在配置过程中需要cmake、gcc、g++和Git工具。可在终端通过以下命令下载。

 sudo apt-get install cmake

 sudo apt-get install git

 sudo apt-get install gcc g++  

3.2 安装 Pangolin

Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。

在安装Pangolin之前,先要安装必要的依赖项:

 sudo apt-get install libglew-dev

 sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

 sudo apt-get install libpython2.7-dev

安装完依赖项后可以通过以下命令安装Pangolin:

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOSR=1 ..
make 

备注:原博主漏了cd Pangolin;虚拟机性能不好,最好不使用 make -j 。

3.3 安装 Eigen(负责矩阵运算)

可以通过一下命令来安装Eigen库。

sudo apt-get install libeigen3-dev

3.4 安装 OpenCV (划重点!!!这里问题好多,建议进行到这一步快照一下)

ORB_SLAM2所要求的OpenCV版本大于2.4.3,但并不是版本越新越好,笔者一开始装的是最新的OpenCV-4.5.3但后面SLAM编译过程中会找不到OpenCV的包,后面看网上很多人用2.4.11成功了,但我本人也失败了,最后尝试3.4.1版本成功!

OpenCV 官方下载地址:https://opencv.org/releases/

英文好的可参考官方文档:OpenCV: Installation in Linux

也可借鉴此博客:(18条消息) ubuntu安装opencv的正确方法_陶陶name-CSDN博客_ubuntu安装opencv

看别人安装一帆风顺,自己是一波三折。执行下面这条语句时,问题很多。

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

第一个问题:错误:E: 无法定位软件包 libjasper-dev

解决方案:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

成功的解决了问题,其中libjasper1是libjasper-dev的依赖包。参考:(18条消息) ubuntu20.04安装opencv步骤及依赖报错:E: 无法定位软件包 libjasper-dev_BigData_Mining的博客-CSDN博客

第二个问题:Eigen/Eigenvalues: No such file or directory

 出现如图报错,解决办法:在文件 OpenCV3.4.1/cmake/OpenCVDetectCXXCompiler.cmake中,将“dumpversion”更改为“dumpfullversion”。参考:(18条消息) ubuntu安装opencv3.10遇到的坑_qiqzhang的博客-CSDN博客

第三个问题:fatal error: stdlib.h: No such file or directory

[ORB_SLAM2]零基础搭建与运行_第1张图片

 解决方案:gcc 的弱微改动导致找不到,在cmake时,关闭cuda和预编译头文件即可。

sudo cmake ./ -DWITH_CUDA=OFF -DENABLE_PRECOMPILED_HEADERS=OFF

参考:(18条消息) Ubuntu 18.04 编译OpenCV 问题解决stdlib.h: No such file or directory_Mr_Yoky的博客-CSDN博客

第四个问题:make : ***[all] Error 2 (编译到97%失败了,吐血,忘记截图了)

解决方案:

  1. sudo nano opencv-x.x.x/modules/python/src2/cv2.cpp opencv-x.x.x是opencv路径
  2. Ctrl+W 寻找关键字:PyString_AsString(obj)
  3. 在前面加上(char *),修改后为(char *)PyString_AsString(obj);
  4. 保存并退出:Ctrl+x,回车,回车
  5. 重新编译opencv

参考:(18条消息) 【树莓派】安装opencv报错:make : *** [all] Error 2_newbee_man的博客-CSDN博客;

(18条消息) 树莓派安装opencv详细过程及遇到常见问题解析_山重水复疑无路@的博客-CSDN博客_树莓派opencv安装(这里还有一些在编译不同时间报错的解决方式,我没遇到,贴出来帮助有缘人了)

至此,OpenCV-3.4.1安装完毕。

3.5 安装 ORB_SLAM2 (好戏登场)

选择放置ORB_SLAM2工程的文件夹(如果需要在ROS环境下运行ORB_SLAM,最好将工程放在catkin_ws/src文件夹下),在该文件夹中打开终端,执行一下命令:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh

然后不出所料,果然报错了。 :-(  第一个问题:error:'usleep' was not declared in this scope

[ORB_SLAM2]零基础搭建与运行_第2张图片

 解决方案:

在所有遇到错误的脚本中添加头文件:

#include 

参考:(18条消息) compile error:usleep was not declared in this scope_hairuiJY-CSDN博客

 第二个问题:error:static assertion failed:std::map must have the same value_type as its allocator

解决方案:

在ORB_SLAM2的安装路径下打开 /include 文件夹 在 LoopClosing.h 中修改(第49-50行):

//    typedef map,
//        Eigen::aligned_allocator > > KeyFrameAndPose;
    typedef map,
            Eigen::aligned_allocator > > KeyFrameAndPose;

参考:(18条消息) ORB_SLAM编译过程记录_qq_35604674的博客-CSDN博客

至此,ORB_SLAM2 算法编译完成。

如果需要在ROS环境下运行ORB_SLAM,则需要执行一下命令:

chmod +x build_ros.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
./build_ros.sh

如果机器性能较低,可以将build.sh文件和build_ros.sh文件中的命令:

make -j

全部改为:

make

然而编译失败了,笔者还没解决,解决后会再更新。

4. 运行 ORB_SLAM2

编译完成后会在ORB_SLAM2/Examples文件夹下生成各种可执行文件。我们以单目情况为例,展示如何运行ORB_SLAM2程序。

4.1 下载数据集

可以从这个网址下载Tum数据集:https://vision.in.tum.de/data/datasets/rgbd-dataset/download#

下载完成后解压缩,最好放到 ORB_SLAM2 的路径下。

官方建议第一次实验使用“xyz”系列,动作比较小,只覆盖办公桌,成功后可尝试“desk”数据集。本文采用的就是第一条数据集(如图)。

[ORB_SLAM2]零基础搭建与运行_第3张图片

4.2 单目数据运行

执行下边的命令。 把 TUMX.yaml 改成 TUM1.yaml,TUM2.yaml or TUM3.yaml 与 freiburg1, freiburg2 and freiburg3 对应起来. 把路径 PATH_TO_SEQUENCE_FOLDER 改为数据集文件夹路径

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

例如:我下载的数据集是 单目的(Monocular),名称是 rgbd_dataset_freiburg1_xyz ,则我的路径为:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/lucas/ORB_SLAM2/data/rgbd_dataset_freiburg1_xyz

运行截图如下:

[ORB_SLAM2]零基础搭建与运行_第4张图片

 运行结果如图,会生成 KeyFrameTrajectory.txt 文件。

[ORB_SLAM2]零基础搭建与运行_第5张图片

 算法效果如下图:

 [ORB_SLAM2]零基础搭建与运行_第6张图片

 参考:(18条消息) ORB_SLAM2跑TUM——单目和RGBD数据集_xyt723916的博客-CSDN博客

以上只完成了ORB_SLAM2的冰山一角,但对于小白的我已经甚感欣慰了,接下去试着在ROS中跑ORB_SLAM2,以及尝试用笔记本自带的摄像头进行实时计算。

                                                                                                                 — Lucas_ly 写于2021.8.5

For 诗

你可能感兴趣的:(slam)