飞道的博客

DynaSLAM编译安装的血泪史

796人阅读  评论(0)

从4月10日开始准备编译DynaSLAM,断断续续直到现在大致历时3周。其中遇到了太多坑,也跟很多大神进行交流,最终完成了CPU版本的安装,GPU未完待续。谨以此文致敬迷茫的三周。

一、基本介绍

DynaSLAM是一个针对动态环境而设计的SLAM系统,是一个典型的语义帮助SLAM的案例。框架如下所示:
废话不多说,直接开始编译过程

二、编译过程

2.0 写在开头

先介绍自己电脑的环境Ubuntu16.04+OpenCV2.4.11+python2.7+ tensorflow1.12.3(cpu)。
Ubuntu:
已测试能够成功运行该系统的Ubuntu有:
Ubuntu18.04-----CPU版
Ubuntu16.04-----GPU版
Ubuntu16.04-----CPU版

OpenCV2.4.11:
虽然GitHub上已经说明可以使用OpenCV3.X;OpenCV2.X;但是我在实际编译过程中出现了很多不知名的问题,改成OpenCV2.4.11就没有错了。建议使用OpenCV2.4.11,同时不要有因为环境版本太久,效果没有新的好,而想用新的版本的心理,这会导致出现巨多不知名错误!

python2.7:
由于MaskRCNN以及原作者均用python2.7编写程序,所以只能使用python2.7的环境。同时多为大神均无法解决使用python3编译而发生的错误——“PyImport_ImportModule()函数返回为NULL”。
所以建议使用python2.7。

tensorflow1.12.3:
理论上tensorflow版本大于1.3.0,小于1.12.3便可。
我在使用tensorflow-gpu1.5.0,tensorflow-gpu1.4.0时都面临了一些问题,没有搞通,就先搞了一个cpu版。同时千万注意tensorflow与keras,CUDA,cudnn的版本搭配,非常关键,文尾附表。

2.1 ORBSLAM模块

DynaSLAM是基于ORBSLAM系统开发的,因此在这个过程主要安装ORBSLAM所需的相关环境。主要流程如下:

2.1.0 下载正确版本的DynaSLAM

根据知乎大神哈利菠萝在文章“DynaSLAM排坑指南”中所述:“要下载含carla的branch(作者的cmakelists中包含了carla的编译配置,然而在master中删去了carla的源文件,如果你下载的是master,那么编译的时候需要将cmakelists最后的carla相关配置删除”。
因此我们选择下载含carla的branch,附链接:https://github.com/BertaBescos/DynaSLAM/tree/bbescos/feature/carla

2.1.1 Pangolin

安装所需依赖项:

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

安装Pangolin(可以提前下载)

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j4
sudo make install
2.1.2 OpenCV2.4.11

安装opencv(尽量提前下载正确版本)

git clone https://github.com/opencv/opencv.git

但是下载下来的OpenCV有问题,需要做些改动才能编译成功,具体改动内容参见文章“ubunto18.04编译Dynaslam的痛苦历程-----cpu的版本”。
或者直接下载别人改动好的OpenCV(提取码: ph4w),本文采用该博客
的方法安装:
1:安装所需依赖项:

sudo apt-get install build-essential
sudo apt-get install libopencv-dev libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

2:在usr/local下创建一个文件夹opencv2.4.11;
不能直接创建,用root创建 不然没权限;
如果不创建的话,自己改一下下面cmake语句中安装的位置。
3:

cd opencv2.4.11
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2.4.11  -D WITH_CUDA=ON -D BUILD_PYTHON_SUPPORT=ON -D WITH_FFMPEG=OFF -D BUILD_EXAMPLES=ON   -D BUILD_TIFF=ON ..
make -j4
sudo make install

4:在bashrc文件后面添加以下两行

sudo gedit ~/.bashrc
 export PKG_CONFIG_PATH=/usr/local/opencv2.4.11/lib/pkgconfig  
 export LD_LIBRARY_PATH=/usr/local/opencv2.4.11/lib 
source ~/.bashrc
2.1.3 eigen3
sudo apt-get install libeigen3-dev

2.2 MaskRCNN模块

(可以下载一个MaskRCNN,编译一下,以确定环境是否满足)

2.2.0 下载相关文件

1:mask_rcnn_coco.h
注意版本要下coco,而不是balloon。提前下载,下载速度较慢
下载完成后放入,"dynaslam/src/python"文件夹内
2:pycocotools
git clone https://github.com/waleedka/coco.git
3: tensorflow1.12.3
https://pypi.tuna.tsinghua.edu.cn/packages/84/db/5ba3fa1dedc0cdf02fc7cb19592a52974cff8cdbbf788c172b68d5371bc3/tensorflow-1.12.3-cp27-cp27mu-manylinux1_x86_64.whl

2.2.1 安装tensorflow1.12.3

在终端下载容易出错,因此最好提前下载好。找到本地文件之后:

sudo pip install tensorflow-1.12.3-cp27-cp27mu-manylinux1_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装与该版本tensorflow对应的keras2.0.9

sudo pip install keras==2.0.9 -i https://pypi.tuna.tsinghua.edu.cn/simple 
2.2.2 安装依赖项

将requirements.txt里面的tensorflow,keras去掉,不然装的就是高版本的。

sudo pip2 install -r requirements.txt

或者直接打开该文件,对应每一项使用命令行:

pip install -i https://pypi.douban.com/simple XXXX==x.x.x

但是imgaug通过这种方式安会提醒,需要下载imageio,最新的imageio只支持python3.5以上的版本;
因此可以通过上面那行命令加上 imageio==2.6.0,就可以了。(支持2.7的imageio版本需要小于等于2.6.1);
之后,重新输入安装imgaug的命令即可。

2.2.3 安装MaskRCNN
sudo python2 setup.py install
2.2.4 安装pycocotools
cd coco-master/PythonAPI
make
sudo make install

将编译好的pycocotools(在coco/PythonAPI/中)放置到我们下载好的dynaslam的src/python目录下,

2.2.5 检查环境

1:打开Check.py 文件(在src/python文件夹下),将17行的

ROOT_DIR = "./src/python"

改为

ROOT_DIR = "./"

意为——”原地址是主程序需要的地址,然而此时我们需要用Check.py来进行Mask_RCNN的debug,所以暂时改成Check.py能找到的地址,“
2:运行检查文件

python Check.py

记得改回来,并针对报错添加相应内容。

2.3 DynaSLAM编译

chmod +x build.sh     
./bulid.sh

我所遇到的问题大多是OpenCV的问题导致的,如果顺利,将直接编译成功,下面将介绍错误自查指南

2.4 排坑过程

1、其他问题

问:

WARNING: The directory '/home/zhex/.cache/pip/http' or its parent directory is not owned by the cur。。。。sudo’s -H flag

解:

sudo chown -R root /home/$USERNAME/.cache/pip/
sudo chown -R root /home/$USERNAME/.cache/pip/http/
2、Check.py自检问题

问题1:

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

解:
根据博客https://www.jianshu.com/p/6c649b1969c7
采取第二种方法,

sudo ldconfig /usr/local/cuda-9.0/lib64

问题2

ImportError: No module named _mask


coco编译出错,应该先make,再make install

3、编译DynaSLAM
can‘t find opencv2.X 或 can‘t find opencv3.X

这个是opencv路径问题,或者是opencv版本问题,由这个问题导致的错误还有可能为:

fatel error: ndarryobject.h 等等

显示为numpy的问题,但实际很可能跟opencv有关
因此,具体分析,先解决OpenCV的问题:

1、找不到OpenCV,就在cmakelists.txt中加入OpenCV的绝对路径:
添加方式如下:找到”OpencvConfig.cmake“所在的路径,我的是在
"OpenCV-2.4.11/build"中,相对应的Cmakelists.txt改法应为:
在find_package(OpenCV 2.4.11.QUIET)之前加一句

set(Opencv_DIR /home/XXX/***/opencv-2.4.11/build)//改成自己的路径

具体表现为:

set(Opencv_DIR /home/XXX/***/opencv-2.4.11/build)//改成自己的路径
find_package(OpenCV 2.4.11.QUIET)
message("PROJECT_SOURCE_DIR: " ${Opencv_DIR})
if(NOT OPENCV_FOUND)
。。。
。。。
endif()

运行DynaSLAM

执行以下命令。对于freiburg1、freiburg2和freiburg3序列,将TUMX.yaml更改为TUM1.yaml、TUM2.yaml或TUM3.yaml。
将PATH_TO_SEQUENCE_文件夹更改为图片序列文件夹。
将关联文件更改为相应关联文件的路径。
PATH_TO_MASKS和PATH_TO_OUTPUT是可选参数,对应着相应生成的分割结果图。

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE (PATH_TO_MASKS) (PATH_TO_OUTPUT)

此刻会遇到初始化失败的问题,
针对这个问题更改rgbd文件夹下的TUMX。yaml文件
将特征点数量改为3000

#ORB Extractor: Number of features per image
ORBextractor.nFeatures: 3000

其他问题参见博客:
https://blog.csdn.net/qq_43525260/article/details/105746452

知乎文章:
https://zhuanlan.zhihu.com/p/119422186


转载:https://blog.csdn.net/Mac0327/article/details/105861895
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场