全景建图算法voxblox++复现详细步骤

目录

  • 简介
  • 复现过程
    • 参考网址
    • 大环境准备
    • 安装依赖
    • 开始安装
    • 我的编译问题
    • 运行测试
    • 结果
  • 总结

简介

voxblox++是2019年ETHZ的RAL论文Volumetric Instance-Aware Semantic Mapping and 3D Object Discovery所提出的全景建图算法,是在voxblox基础上改进的,增加了实例和语义信息。因为感觉效果不错,所以想复现一下看看能不能作为之后工作的基础。

复现过程

参考网址

基本上是参考着官方教程来的
官方安装编译教程
官方运行教程
还有这一篇博客是找到的唯一一个介绍了编译过程的,很多东西都用到了他的,非常感谢
参考编译教程

大环境准备

因为用到了实例分割,所以要配置好运行环境。包括:

  • ROS :这个应该搞机器人的都有吧,我使用的是melodic
  • Python2.7 :ROS自带了,不需要单独安装
  • CUDA、Cudnn:跑网络的应该都有,这个版本要和你显卡驱动版本对应上,我分别是11.1和8.1
  • TensorFlow:要求大于1.3,我使用的是python2.7支持的最高的GPU版本,也就是Tensorflow-GPU==2.1.0。虽然这个和我的CUDA版本不完全对应,但使用的时候只是警告,也可以用。如果版本匹配不上的话,会报错的。可以体现试一下版本能否对应。

安装依赖

其他包依赖,包括:scipy, scikit-image, IPython, Numpy, Pillow, cython, h5py ,Keras>=2.0.8,这些使用pip安装就可以了,注意是安装给我们的python2.7,所以用的是pip2

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.1.6'
pip2 install tensorflow-gpu # 这里就是安装tensorflow-gpu,没有gpu的可以安装tensorflow,注意版本

开始安装

安装完依赖之后,就可以开始编译过程了。首先设置好一些外部参数,在终端输入

export ROS_VERSION=melodic # (Ubuntu 16.04: kinetic, Ubuntu 18.04: melodic)
export CATKIN_WS=~/catkin_ws  # 这里就是你要建的工作空间名字,可以是其他的,因为后面有很多依赖包,建议新开一个工作目录,比如叫voxblox++_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

接着把代码拔下来,顺便更新一下,外网速度慢的可以看下面

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

这一步的话是需要从github上下载,没有外网的话会很慢。因为他用到了很多已有的包,比如mask-rcnn,voxblox-plusplus_https.rosinstall文件里面其实就是用到的依赖包们。这里直接使用大佬整理好的就可以了,解压缩到你的src目录即可。
网盘地址:https://pan.baidu.com/s/1asSIjxbXDpqppEaHZz94-Q,提取码:7jf8
接着就要开始正式编译了,在src目录终端运行

catkin build mask_rcnn_ros depth_segmentation gsm_node

编译时间挺长的,主要在opencv和pcl那两个包那里。
如果编译顺利的话,那就基本没什么问题,说明运气不错。如果编译存在问题的话,可以看看有没有和我下面问题一样的。

我的编译问题

一、缺少文件boostdesc_bgm.i

fatal error: boostdesc_bgm.i: 没有那个文件或目录

这些文件理论上在编译opencv时候会从网上下载下来,但不知道什么原因没有成功,可以手动添加到相应位置去。
我还是上传到网盘吧
网盘地址:https://pan.baidu.com/s/1rJw1iLmtyG8Rqh1exD64LQ,提取码:6d0q
解压之后把里面所有文件copy到目录/home/your_name/voxblok++_ws/build/opencv3_catkin/opencv3_contrib_src/modules/xfeatures2d/src下即可
二、找不到opencv

ImportError: /home/dyn/voxblok_ws/devel/lib/python2.7/dist-packages/cv2.so

其实ros的python2.7是自带了opencv的,为什么找不到呢?打开mask_rcnn_node.py,我们可以看到最上面有一行代码

#!/usr/bin/env python

意思是说用python来运行,但是之前我设置的python默认指的anaconda里面的,所以要修改一下改成python2

#!/usr/bin/env python2

三、tensorflow警告

2020-09-20 21:31:45.455714: W tensorflow/stream_executor/platform/default/dso_loader.cc:59] Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory
2020-09-20 21:31:45.455738: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.

之前说过,这是警告,是因为没有安装TensorRT,其实根本不用管他,因为用不到。
四、tensorflow1和2版本差异

'module' object has no attribute 'placeholder'

上面我们说到我的tensorflow版本为2.1,但官网给的是1.x,这里面存在差异。解决发放就是在出错的位置,将

import tensorflow as tf

替换为

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

一共有两处需要这样替换,其实看报错位置就知道了,一个是mask_rcnn_ros里面的model.py,另一个是在隐藏文件夹里面home/your_name/.local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py
.local是主目录的隐藏文件夹,可以Ctrl+H查看。

运行测试

测试数据集,就使用官网提供的吧:官网数据集
还要下载一个实例分割的模型mask_rcnn_coco.h5,这里还是使用大佬的网盘吧
网盘地址:https://pan.baidu.com/s/190wcUpA8XZkqnqNakcDyfQ,提取码:c72i
下载完之后,要移动到目录~/.ros里面,也是个隐藏文件夹
接着就可以开始测试啦
打开终端,此时还是在src目录下,输入

source ../devel/setup.bash  # 先激活环境
roslaunch gsm_node scenenn_dataset.launch bag_file:=/path/to/scenenn_231.bag #如果下载的第一个数据集
roslaunch gsm_node asl_office_floor_dataset.launch bag_file:=/path/to/asl_office_floor.bag #如果下载的第二个数据集

结果

运行过程中倒是没有出现什么问题,包是0.1倍速播放的,可以完成全景建图,效果如下

完成!!!

总结

这个过程花了一两天才搞出来,主要是环境问题,tensorflow2和1的差异导致的。
不过看最后的建图效果还是不错的,当然没有运行完。

你可能感兴趣的:(复现教程,深度学习,自动驾驶)