Maplab使用笔记
更新日志:
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稠密的点云地图。
- 首先把启动脚本修改为双目构图
脚本文件放置在 src/maplab/applications/rovioli/scripts (run_rovioli_live)
–map_builder_save_image_as_resources=true
-
然后重新利用ROVIO构建地图
-
构建完成以后,在终端启动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 多多个地图进行离线合成。
- 首先使用ROVIOLI构建多个独立的子地图
这里我们分别利用MH_03_Medium.bag 和 MH_05_difficult.bag 生成了两个地图 mh_03、mh_05
- 利用 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 中建立自己的算法包
未完待续。。。
参考资料
- https://github.com/ethz-asl/maplab/wiki/Multi-session-mapping-with-ROVIOLI
- https://github.com/ethz-asl/maplab/wiki/Running-ROVIOLI-in-Localization-mode
- http://www.404wx.com/read/eDE2M6bxBjYyQ3Oa3P4QW0Pl3VKLvJOZ
欢迎留言讨论或 cenruping@vip.qq.com
更多推荐
所有评论(0)