voxblox++是在voxblox基础上改进的,基于RGB-D相机的用于构建语义地图的ROS包。这两天想使用一下看看效果,因为遇到了挺多问题,所以记录一下。另外,过程中需要下载的一些资源(包括整个source目录下的源码)我已经上传到了百度云里,方便大家下载,希望大家能给我的文章点个赞!
好了,废话不多说,开始安装吧。
步骤基本跟着github上的教程来操作。我的系统是Ubuntu16.04,cuda使用8.0,对应的cudnn为6.0。如果不对的话,这里提供一下各种版本的cuda以及对应的cudnn给大家:https://download.csdn.net/download/qq_35590091/13110716
另外,source目录下的源码:链接: https://pan.baidu.com/s/1asSIjxbXDpqppEaHZz94-Q 提取码: 7jf8
使用nvcc -v以及cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
分别查看cuda以及cudnn版本。
注:如果不使用cuda8.0和cudnn6.0可能后面编译的时候会出现:
ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory
和
ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory
这就是在/usr/local/cuda目录下找不到上面的两个文件。
安装各种依赖:
sudo apt update
sudo apt install python-dev python-pip python-wstool protobuf-compiler dh-autoreconf
pip2 install 'protobuf>=3.0.0a3' scipy scikit-image ipython 'keras==2.0.8'
pip2 install tensorflow-gpu==1.3.0
这里注意,我将keras的版本调整成了2.0.8,官网为2.1.6,之所以这样,是因为我安装2.1.6版本之后,运行时出现错误:
TypeError: softmax() got an unexpected keyword argument 'axis'
经过一番查询之后,发现是keras的版本问题,因此这里给大家一个提醒。
此外,我还把tensorflow-gpu的版本指定为了1.3.0,因为如果不指定,就会安装最新版本的tensorflow-gpu,但是新版本的可能不支持cuda8.0。所以选择了1.3.0。
开始clone以及下载各种文件。
export ROS_VERSION=kinetic # (Ubuntu 16.04: kinetic, Ubuntu 18.04: melodic)
export CATKIN_WS=~/catkin_ws #(这里设置成你自己的工作空间)
如果没有工作空间的话,就自己创建一个工作空间,如下:
mkdir -p $CATKIN_WS/src && cd $CATKIN_WS
catkin init
catkin config --extend /opt/ros/$ROS_VERSION --merge-devel
catkin config --cmake-args -DCMAKE_CXX_STANDARD=14 -DCMAKE_BUILD_TYPE=Release
wstool init src
然后开始clone仓库,以及下载需要的各种第三方的库:
cd $CATKIN_WS/src
git clone --recurse-submodules https://github.com/ethz-asl/voxblox-plusplus.git
wstool merge -t . voxblox-plusplus/voxblox-plusplus_https.rosinstall
wstool update
执行ws update之后,就会开始下载,我的话使用了代理进行下载,否则的话使用国内的网可能个比较慢。
注:另外,我在后面进行编译的时候还出现了:
File "/usr/lib/python2.7/urllib2.py", line 1205, in do_open
raise URLError(err)
urllib2.URLError:
原因可能是前面下载的时候使用的是代理,但是后面catkin build的时候没有用,所以,大家最后在整个安装编译过程一直都要打开代理,因为后面的catkin_build也需要使用代理,也会下载一堆东西。
然后就是开始进行编译工作,执行:
catkin build mask_rcnn_ros depth_segmentation gsm_node
在这个执行过程中可能会出现很多问题,这里我把我遇到的都记录下来。
catkin build mask_rcnn_ros depth_segmentation gsm_node -j1 -l1
只是用一个线程来编译。另外:有可能在编译opencv3_catkin以及pcl_catkin这一部分时卡住很久,这是正常的,等等就好,我就一直开在10%,然后我就给他自己运行,没管他了。
运行时出现:
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5f.pyx", line 88, in h5py.h5f.open
IOError: Unable to open file (truncated file: eof = 53772288, sblock->base_addr = 0, stored_eof = 257557808)
这是因为缺少了模型文件,因为~/.ros目录下应该有一个maskrcnn的模型文件(mask_rcnn_coco.h5),但可能下载有问题,比如我查看了一下我的mask_rcnn_coco.h5文件,大小只有52M,实际上这个文件有200多M。因此:
首先进入:cd ~/.ros
然后删除:rm -f ./mask_rcnn_coco.h5
然后手动下载这个模型文件,然后复制:cp /path/to/your/model/mask_rcnn_coco.h5 ~/.ros/
这里我提供一下我下载的模型文件:链接: https://pan.baidu.com/s/190wcUpA8XZkqnqNakcDyfQ 提取码: c72i
遇到了:
File "/home/azs/.local/lib/python2.7/site-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status
pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InternalError: Failed to create session.
下面的网站也提到了一样的错误:https://blog.csdn.net/qq_31112205/article/details/103186409
但是我重启了一下电脑,又可以运行了。
编时时出现错误:
~/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:673:20: fatal error: boostdesc_bgm.i: No such file or directory
解决:https://blog.csdn.net/u011736771/article/details/85960300
显示protoc版本不对,错误如下:
/home/wei/Documents/project/worspace/build/voxblox/Block.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
/home/wei/Documents/project/worspace/build/voxblox/Block.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
/home/wei/Documents/project/worspace/build/voxblox/Block.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
^
In file included from /home/wei/Documents/project/worspace/build/voxblox/Layer.pb.cc:5:0:
/home/wei/Documents/project/worspace/build/voxblox/Layer.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
解决:重新安装新版本:https://blog.csdn.net/zhou4411781/article/details/100676193 我最后可以运行的版本是:2.6.1
编译时报错:
unsupported/Eigen/MatrixFunctions: No such file or directory
解决:网上找到别人的提问:https://answers.opencv.org/question/7666/build-failure-244-unsupportedeigenmatrixfunctions/
以及:https://www.cnblogs.com/long5683/p/13601705.html
我使用的就是下面一个网页里面的方法。
编译时遇到:/usr/local/include/eigen3/Eigen/src/Core/products/Parallelizer.h:162:19: error: ‘eigen_assert_exception’ is not a member of ‘Eigen’
if (errorCount) EIGEN_THROW_X(Eigen::eigen_assert_exception());
解决:https://blog.csdn.net/qq_25244255/article/details/109268128
估计是cuda和eigen的版本不对应的问题,我这里的,将cuda版本降为8.0,但是还是不行,有可能是eigen版本不对,试一试降级成3.3.5看看。换成3.3.5可以了,具体的更换方法见:https://blog.csdn.net/qq_43247439/article/details/107574195?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
编译时出现:
pcl/visualization/pcl_visualizer.h: No such file or directory
可能是安装pcl_catkin的时候要下载东西,但是有的东西没下载完整,所以把build目录下的pcl_catkin删除了重新build,试一试。可以了。
以上就是编译的时候出现了的问题。接下来就准备运行程序。
首先执行:
source ../devel/setup.bash
然后执行:
roslaunch gsm_node scenenn_dataset.launch bag_file:=/home/wei/Documents/dataset/voxblox/scenenn_231.bag
或者
roslaunch gsm_node asl_office_floor_dataset.launch bag_file:=/home/wei/Documents/dataset/voxblox/asl_office_floor.bag
注意修改路径。
运行时可能遇到的一些问题如下:
运行之后什么画面也没有,就一个map1,里面还是空白的,但是奇怪的是没有任何报错,,,,解决:暂时不知道怎么解决,貌似我这个电脑运行的太慢??给他运行个几十秒就有图像了,另外pangolin的map1里面可能需要鼠标滚轮放大才能显示。
最后,这个项目最近才看到,具体的细节也还没了解,也想尝试一下使用自己的数据集来运行看看,不过之前貌似在github上看到有人也问了类似的问题,而且我比较奇怪的一点是:好像看到最这自己说这个voxblox++只是用于建图的,他里面是没有VO的,这我就纳闷了,提供的数据集bag里面也没有发布每一帧的位姿数据的话题啊,没有位姿数据怎么进行建图呢?如果大家知道可以留个言。
另外这个建图效果在数据集里面看还是比较不错的,就不知道实际效果怎么样,以及如果想使用自己的数据集还需要进行那些参数的修改??
最后,给个运行效果图吧: