【SLAM】——DynaSLAM项目环境配置(超多坑)

DynaSLAM
坑多,慢慢来,不要急

先整体说一下,项目是在ORB-SLAM2项目的基础上,加上maskrcnn的融合。主流程采用还是采用ORB-SLAM2的流程,maskrcnn部分采用c++调用python的实现。其中又穿插opencv2 mat数据转numpy实现c++和python之间数据的交换。所以很多地方容易有坑。慢慢来,先来一张成功的gif安慰一下,给大家一点希望
在这里插入图片描述

几大坑

  • h5py
  • opencv2.4.11(必须)

首先来看一下官方给定的安装步骤:

  • Install ORB-SLAM2 prerequisites: C++11 or C++0x Compiler, Pangolin, OpenCV and Eigen3 (https://github.com/raulmur/ORB_SLAM2).
  • Install boost libraries with the command sudo apt-get install libboost-all-dev.
  • Install python 2.7, keras and tensorflow, and download the mask_rcnn_coco.h5 model from this GitHub repository: https://github.com/matterport/Mask_RCNN/releases.
    Clone this repo:
git clone https://github.com/BertaBescos/DynaSLAM.git
cd DynaSLAM
cd DynaSLAM
chmod +x build.sh
./build.sh

Place the mask_rcnn_coco.h5 model in the folder DynaSLAM/src/python/.

1. 安装ORB-SLAM2的依赖

https://github.com/raulmur/ORB_SLAM2的安装我这里到是很顺利,直接按照官方的步骤一步一步来就ok了。

我没有安装ROS。

ORB-SLAM2跑TUM Dataset的例子,这里就不过多讲了。
在这里插入图片描述

2. 安装libboost

sudo apt-get install libboost-all-dev

我这里没有报错

3. mask-rcnn相关

  1. 下载模型
    下载mask_rcnn_coco.h5把他放到DynaSLAM/src/python/文件夹下

  2. 安装tensorflow,keras
    DynaSLAM采用ubuntu系统环境下的python2.7,用pip安装的时候注意

我安装的各软件版本:

  • tensorflow-gpu (1.14.0)
  • keras 2.0.9

到这里的时候,python的环境基本已经安装好了,可以测试python的环境:

cd DynaSLAM
python src/python/Check.py

输出:Mask R-CNN is correctly working,可能会没有问题

4. 编译DynaSLAM

cd DynaSLAM
chmod +x build.sh
./build.sh

注意,这里需要用opencv2.4.11,opencv3会有错误(亲测)
多个版本opencv的配置与使用,可参考:多个版本opencv的配置与使用

后面就可以运行DynaSLAM的例子了,这里我用的tum_data,最后的output是保存分割出来的mask。如下图所示:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ../slam_data/rgbd_dataset_freiburg1_xyz output

在这里插入图片描述

可能问题1:
this->net != NULL
这是MaskRCNN.py中的Mask类初始化错误造成的。可以首先在python层面进行验证。在MaskRCNN.py文件后添加

if __name__ == "__main__":
	net = Mask()
	image = np.zeros((480, 640))
	mask = net.GetDynSeg(image)
	T = 1

然后执行:

cd DynaSLAM
python src/python/MaskRCNN.py

如何没有报错,那就有可能是h5py的错,后面有方法排查。

排查是否是h5py的错
src/python/model.py文件的1892行开始改为:

import h5py
from keras.engine import topology

if exclude:
    by_name = True
print("11111111111111111")
if h5py is None:
    raise ImportError('`load_weights` requires h5py.')
try:
    f = h5py.File(filepath, mode='r')
except Exception as err:
    print err
if 'layer_names' not in f.attrs and 'model_weights' in f:
    f = f['model_weights']
print("222222222222222222")

print err如果输出的是:
Invalid high library version bound (invalid high library version bound)
就是h5py的报错,需要手动编译安装h5py


5. 手动编译h5py

直接一条命令
PIP_NO_CACHE_DIR=off pip2 install --no-binary=h5py h5py

可能需要pkgconfig
PIP_NO_CACHE_DIR=off pip2 install pkgconfig


6. 编译opencv2.4.11

请参考:https://blog.youkuaiyun.com/u013453604/article/details/49781771

可能问题1.

解决方式:打开opencv2.4.13/cmake/ OpenCVDetectCXXCompiler.cmake,修改第67行"-dumpversion" 为 “-dumpfullversion”

可能问题2

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)

解决方式:
在编译的命令里面添加一条-D WITH_CUDA=OFF就行了。

我的cmake命令如下,供参考:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=../install -D WITH_CUDA=OFF ..

可能问题3

/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
这是因为ubuntu18.04自带的gcc是7.5.0的。难道又要换成gcc5。

解决方式:
参考:https://blog.youkuaiyun.com/qq_17783559/article/details/105078293
在cmake中添加-D ENABLE_PRECOMPILED_HEADERS=OFF

可能问题4
编译的时候,报错:
error: ‘CODEC_ID_H264’ was not declared in this scope
{ CODEC_ID_H264, MKTAG(‘H’, ‘2’, ‘6’, ‘4’) },
^~~~~~~~~~~~~
/home/darknet/CM/profile/opencv-2.4.11/modules/highgui/src/ffmpeg_codecs.hpp:104:7: note: suggested alternative: ‘AV_CODEC_ID_H264’
{ CODEC_ID_H264, MKTAG(‘H’, ‘2’, ‘6’, ‘4’) },

解决方式:在cmake时,将ffmpeg设置为OFF,即:-D WITH_FFMPEG=OFF

可能问题5
/home/yinton/opencv-2.4.11/modules/contrib/src/chamfermatching.cpp:969:30: error: the compiler can assume that the address of ‘annotate_img’ will never be NULL [-Werror=address]
if (&annotate_img!=NULL) {
^
/home/yinton/opencv-2.4.11/modules/contrib/src/chamfermatching.cpp:1016:34: error: the compiler can assume that the address of ‘annotate_img’ will never be NULL [-Werror=address]
if (&annotate_img!=NULL) {
^
/home/yinton/opencv-2.4.11/modules/contrib/src/chamfermatching.cpp: In member function ‘cv::ChamferMatcher::Match* cv::ChamferMatcher::Matching::localChamferDistance(cv::Point, cv::Mat&, cv::Mat&, cv::ChamferMatcher::Template*, float)’:
/home/yinton/opencv-2.4.11/modules/contrib/src/chamfermatching.cpp:1111:25: error: the compiler can assume that the address of ‘orientation_img’ will never be NULL [-Werror=address]
if (&orientation_img!=NULL) {

解决方式:
找到Opencv-2.4.11/build/modules/contrib/CMakeFiles/opencv_contrib.dir/flags.make
(如果没创建build来放编译文件的话就没有build),删去-Werror=address重新make,成功!参考自:https://zhuanlan.zhihu.com/p/364633955

<think>好的,用户遇到了DynaSLAM运行时错误的问题,需要解决方案。首先,我得回忆一下DynaSLAM的依赖和常见问题。DynaSLAM基于ORB-SLAM2,所以可能的问题包括依赖库缺失、数据集路径错误、编译配置问题等。 根据用户提供的引用,特别是引用[1]中提到成功编译了DynaSLAM,但运行时报错。引用[3]提到了libjasper-dev缺失的错误,这可能与OpenCV的依赖有关。用户可能没有正确安装所有OpenCV所需的库,比如libjasper-dev,需要安装或者忽略该错误继续编译,但最好还是解决依赖问题。 另外,数据集路径是否正确?引用[1]提到下载数据集,用户需要确认数据集的存放路径是否与运行命令中的路径一致。如果路径错误,程序可能找不到数据,导致崩溃。 还有可能的问题在动态物体检测模块,比如Theano或Matlab相关的问题。引用[2]提到用户卸载了Theano,这可能影响到动态检测部分。如果DynaSLAM使用了基于Theano的模块,卸载后可能导致运行错误。需要检查是否安装了正确版本的Theano,或者是否需要配置Matlab的DIBR渲染部分。 用户可能遇到的错误类型包括:依赖库缺失、数据集路径错误、动态库链接问题(如Boost、Pangolin等)、CUDA/catkin_make编译配置错误,以及动态检测模块的配置问题。 接下来需要分步骤检查这些方面。首先检查依赖库是否安装完整,如OpenCV、Eigen3、DBoW2等。然后确认数据集路径正确,TUM数据集的结构是否符合要求。接着查看编译过程中的警告或错误,特别是与Theano或Matlab相关的部分。如果动态检测模块需要Matlab生成的深度图,用户是否正确生成了这些数据? 可能还需要检查ORB_SLAM2的环境变量是否设置正确,比如在.bashrc中是否正确添加了export ROS_PACKAGE_PATH。此外,运行时的权限问题,比如相机访问权限,也可能导致错误。 总结解决方案步骤:安装缺失的依赖库,确认数据集路径,重新配置和编译项目,检查动态模块的依赖,处理环境变量和权限问题。如果用户提供了具体的错误信息,可以更针对性地解决,比如libjasper-dev的问题可以通过sudo apt-get安装,或者忽略某些OpenCV选项。</think>### DynaSLAM运行时错误的解决方案 DynaSLAM运行时错误可能由依赖缺失、数据集配置或动态模块问题引起。以下是分步排查方法: 1. **检查依赖库安装** - **关键依赖**:确保已安装以下库: ```bash sudo apt-get install libjasper-dev libopenexr-dev libavcodec-dev libgtk2.0-dev ``` 若此前编译OpenCV时报错`libjasper-dev`缺失,需先完成此安装[^3]。 - **Boost/Pangolin配置**:确认`libboost-all-dev`和Pangolin的版本匹配,编译时日志无`undefined reference`错误。 2. **数据集路径验证** - TUM数据集路径需在运行命令中正确指定,例如: ```bash ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml /path/to/dataset/ associations.txt ``` 若路径包含空格或特殊字符,需用引号包裹[^1]。 3. **动态检测模块配置** - **Theano问题**:若使用基于深度学习的动态检测,需确保Theano环境正确: ```bash pip install theano==1.0.5 # 指定兼容版本 ``` 若此前卸载过Theano(如引用[2]),需重新安装并测试示例代码[^2]。 - **Matlab DIBR渲染**:若依赖Matlab生成的深度图,需检查: - MATLAB Runtime版本是否匹配 - 是否执行`mex -setup`配置编译器 4. **重新编译项目** - 清理并重新编译: ```bash cd ~/DynaSLAM rm -rf build/ mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j4 ``` 5. **环境变量设置** - 在`~/.bashrc`中添加: ```bash export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/opt/ros/[version]/share source ~/DynaSLAM/Examples/ROS/ORB_SLAM2/build/devel/setup.bash ``` 6. **权限问题** - 若使用摄像头,添加用户到`video`组: ```bash sudo usermod -aG video $USER ```
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值