更新日志:
2019-03-26 细化了深度稠密地图步骤,修改了多任务地图合成部分步骤。

一、引言

1.环境安装

maplab的安装及环境编译可以参考该文档:https://blog.csdn.net/wendox/article/details/78734422

项目地址:https://github.com/ethz-asl/maplab

2.Maplab主要功能介绍

maplab是ETH在2018年开源的一个VIO平台,该VIO平台分为在线VIO和maplab_console 两个部分,在线VIO为一个是基于ROVIOLI的VIO算法,可以实现mapping模式、localiztion模式及多任务建图模式。而maplab_console 相当于是一系列的离线包,可以为生成的地图进行二次处理(生成稠密地图等)。
整个maplab主要有以下5个突出的功能:

  • 1.在线的地图构建及定位
    maplab 使用的是ROVIOLI的算法,ROVIOLI则是在ROVIO上添加了回环检测及构图的一个扩展版。

  • 2.多单元协同构图(Multi-Session Mapping)
    多个构图单元进行构图,通过离线处理的方式(回环检测、优化)完成地图的拼接。

  • 3.地图维护(Map Maintenance)
    删除地图中不必要的顶点(也就是关键帧所对应的位姿图)及该关键帧所包含的地标点,以减轻

  • 4.大尺度范围内的地图构建(Large-Scale Mapping)

  • 5.稠密重建(Dense Recoonstruction)
    双目视觉稠密重建,block matcher作用于每一个成对的图相对,从而生成深度图像。
    RGB-D 稠密重建 maplab使用 voxblox (一中构图库)做深度融合及表面重构 (TSDF)

3.maplab_console介绍

maplab_console 相当于是一个离线处理的功能包,在利用ROVIOLI进行位姿估计以后,利用maplab_console可离线生成稠密的地图等。

maplab_console的启动命令是:

cd ~/maplab_ws
source ~/maplab_ws/devel/setup.bash
rosrun maplab_console maplab_console    #启动 maplab_console

启动以后终端会出现如下界面:
在这里插入图片描述

可以使用 help --all 来查看所有功能包的使用,退出终端使用命令 “q” 或者 “exit”

例如,加载地图以后输入命令 ‘v’ ,在另外一个窗口启动rviz可以看到地图信息。

在这里插入图片描述

二、MapLab VIO建图定位

mapping 包可以工作在三种模式下,分别是VIO建图(ROVIOLI in VIO mode)、基于地图定位(Localization mode)、多任务建图(Multi-session mapping with ROVIOLI)

1. VIO mapping 模式

1.在运行ROVIOLI之前需要准备好euroc数据集的rosbag包、及校准文件:
(配置文件放置在 src/maplab/applications/rovioli/share 目录下)

  • Camera calibration, ncamera-euroc.yaml
  • IMU parameters maplab, imu-adis16488.yaml
  • IMU parameters Rovio, imu-sigmas-rovio.yaml
  • Rovio calibration file , rovio_default_config.info

参数文件格式可在 https://github.com/ethz-asl/maplab/wiki/Running-ROVIOLI-in-VIO-mode 地方查看

2.进入到maplab的工作空间

source ~/maplab_ws/devel/setup.bash 
rosrun rovioli tutorial_euroc save_folder MH_01_easy.bag #无中间结果输出 启动方式

其中的“save_folder ” 表示地图输出的路径,这种启动方式是直接传入rosbag,这个是没法看到轨迹及跟踪效果的,我们需要使用tuturrial下的在线节点,然后通过rviz 进行查看

source ~/maplab_ws/devel/setup.bash 
rosrun rovioli tutorial_euroc_live save_folder
rosbag play MH_01_easy.bag  

你可以通过修改maplab/applications/rovioli/scripts/tutorials这个目录下tutorial_euroc_live 脚本的参数进行调整显示的效果,或者直接下载作者配置好的rviz 文件:https://github.com/ethz-asl/maplab/blob/pre_release_public/july-2018/applications/rovioli/share/rviz-rovioli.rviz

下载下来启动rviz就可以看到如下界面了:

 rviz -d rviz-rovioli.rviz

在这里插入图片描述

运行完毕以后算法会在你设置的map输出目录下存放构建的地图

在这里插入图片描述
在这里插入图片描述
构图包中的其他参数在这个链接下有讲解:
https://github.com/ethz-asl/maplab/wiki/Running-ROVIOLI-in-VIO-mode

2.双目稠密重建

maplab 提供了利用双目VIO做稠密重建的模块,具体思路是先利用双目VIO做定位(这个平常的双目VIO一样,这部分为实时计算),计算到了相机的轨迹以后,利用离线的方式用双目稠密化深度图,在对深度图进行点云拼接优化,生产3D稠密的点云地图。

  1. 首先把启动脚本修改为双目构图
    脚本文件放置在 src/maplab/applications/rovioli/scripts (run_rovioli_live)

–map_builder_save_image_as_resources=true

  1. 然后重新利用ROVIO构建地图

  2. 构建完成以后,在终端启动maplab console 选中新构建的地图依次输入如下命令生成ply文件

1> 启动maplab_consloe:

cd ~/maplab_ws
source ~/maplab_ws/devel/setup.bash
rosrun maplab_console maplab_console    #启动 maplab_console

2> 加载构建的地图

load --map_folder save_folder_0

注: “save_folder_0” 是我在构图的时候生产地图的路径,如果你加载进来了多个地图要在maplab_consloe终端中使用 select_map 命令来选择当前工作地图

3> 双目恢复深度

sdr --flagfile=src/maplab/algorithms/dense-reconstruction/stereo-dense-reconstruction/parameter/stereo_params.gflags
或
stereo_dense_reconstruction --flagfile=src/maplab/algorithms/dense-reconstruction/stereo-dense-reconstruction/parameter/stereo_params.gflags

以上两个命令都可以,注意必须要--flagefile参数才可以看到恢复深度的过程。
在这里插入图片描述在使用深度恢复前的地图大概是1.1G,使用上述命令构建深度以后,地图文件增加到了7.7G,建议将输出目录定位到移动硬盘上。(我使用的MH_03_medium.bag)

4> voxblox 处理深度融合表面
Compute a globally consistent dense reconstruction based on VOXBLOX.

create_tsdf_from_depth_resource --flagfile=src/maplab/algorithms/dense-reconstruction/stereo-dense-reconstruction/parameter/stereo_params.gflags

运行这一步需要很长的时间,大约15分钟左右。

5> 输出ply文件
将点云文件输出为ply格式,再利用MESH等工具来查看

export_tsdf --dense_result_mesh_output_file=<dataset_folder>/euroc_surface_reconstruction.ply

6> 保存点云地图(Save your map)

save --map_folder mh_03_medium_maplab

“mh_03_medium_maplab”是地图的文件名,这里保存的地图很小,约几百M级别。

在这里插入图片描述

7> 查看点云
在这个博客中提供的ubuntu安装mesh 的方法进行安装, https://blog.csdn.net/lyx_323/article/details/79813986 ,对保存的成功的ply文件选则mesh打开方式进行查看。
在这里插入图片描述
生的稠密图还是不错的。在地图生成的中间过程中,会产生很大中间文件,建立把地图放在移动硬盘或者是空间较大的磁盘上。

3.Localization 模式

1、准备好构建的环境地图

重定位模式需要输入VI map地图,也就是你在mapping 模式下生成的地图

2、在终端中启动:

source ~/maplab_ws/devel/setup.bash
rosrun rovioli tutorial_euroc_localization save_folder_0/ save_map_with_localization MH_02_easy.bag

“save_folder_0/”是你在mapping模式下产生的地图,目录结构为:
在这里插入图片描述
“save_folder_loc_map” 表示定位过程中输出的新地图的路径(环境有可能改变),如果你不需要更新地图可以用 “” 这两个双引号表示空来代替这个路径。
在这里插入图片描述
3、启动rviz 查看定位

 rviz -d rviz-rovioli.rviz

在这里插入图片描述

4.多任务单元建图

maplab 提供的多任务构建单元需要利用ROVIOLI建立多个地图,再利用maplab console 多多个地图进行离线合成。

  1. 首先使用ROVIOLI构建多个独立的子地图
    这里我们分别利用MH_03_Medium.bag 和 MH_05_difficult.bag 生成了两个地图 mh_03、mh_05
    在这里插入图片描述
  2. 利用 maplab console 对多个子地图进行融合

1> 首先加载多个地图到 maplab console 工作空间
加载地图的方式有两种,第一种是直接将一个目录下的所有子地图合成一个地图
启动maplab_consloe:

cd ~/maplab_ws
source ~/maplab_ws/devel/setup.bash
rosrun maplab_console maplab_console    #启动 maplab_console

在console中输入

load_merge_all_maps --maps_folder path/euroc_maps

path/euroc_maps是所有需要合成的地图存放的目录。
在这里插入图片描述
第二种方式是将地图一个一个的加载到工作空间:

load --map_folder outmap/mh_03
load --map_folder outmap/mh_05

#可以利用 ls 指令查看这两个地图是否正确加载到工作空间
在这里插入图片描述

join_all_maps --target_map_key euroc_maps #设定工作空间所有地图合并成 euroc_maps (是在工作空间的名称)

上述两种方式都可以加载地图设定合并任务,正确加载以后可以利用 “ms” 命令来检查多任务模块是否正确加载了任务。
在这里插入图片描述
2> 当准备好多个地图以后在console中输入如下命令对地图进行合成

generate_summary_map_and_save_to_disk --summary_map_save_path your_summary_map

your_summary_map 表示合并生成的地图的名称。会在你设定的目录下生成一个这样的文件:
在这里插入图片描述

这个地方还有些问题,还不知道如何解决。这个地图按照官方说的是可以用在定位模式上的,但是我没法加载到工作空间里面。有知道的小伙伴,可以讨论讨论。

三、MapLab 中建立自己的算法包

未完待续。。。

参考资料

  1. https://github.com/ethz-asl/maplab/wiki/Multi-session-mapping-with-ROVIOLI
  2. https://github.com/ethz-asl/maplab/wiki/Running-ROVIOLI-in-Localization-mode
  3. http://www.404wx.com/read/eDE2M6bxBjYyQ3Oa3P4QW0Pl3VKLvJOZ

欢迎留言讨论或 cenruping@vip.qq.com

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐