从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