SLAM之BundleFusion测试自制Rosbag数据集的可行方案

SLAM之BundleFusion测试自制Rosbag数据集

前言

最近在做三维重建与轨迹定位相关的研究,需要以一些传统的重建算法做Baselines,我们选择了KinectFusion、ElasticFusion、BundleFusion、ORB-SLAM、VINS等典型的算法为基础,为了使发布的数据集更具有代表性,我们采用了RealSense录制了ROS格式的数据集,并基于此数据集和SLAM算法展开研究。下面是我基于BundleFusion跑通自制数据集的记录,由于本人接触三维相关技术不久,相关操作有些生疏请多见谅。

本机配置

显卡:NVIDIA GTX 1060

内存:16GB

环境:Ubuntu+Windows+Visual Studio2013

大致流程

  1. 已录制好的Rosbag格式的数据集
  2. 基于VS2013测试BundleFusion的Demo
  3. 将源深度图和源RGB封装成.sens格式
  4. 提取Rosbag中的深度图和RGB,制作成源格式
  5. 将制作数据集封装成.sens格式
  6. 查看BundleFusion对自制数据集的效果

效果展示

我们在实验室搭建了规则的轨道,RealSense在轨道上匀速移动录制了Rosbag数据集,下图是BundleFusion对我们自己数据集重建的结果。

具体流程

基于VS2013测试BundleFusion的Demo

https://graphics.stanford.edu/projects/bundlefusion/ (BF官网)

https://bericht.neopostmodern.com/posts/artist-guide-to-bundlefusion (如何配置BF)

其中在官网页面,我们要下载一个Dataset作为Demo,例如我下载了apt1作为我的样例来研究。

其中,解压apt1.zip,是原始深度图、RGB图像以及其他信息,这些数据会被封装成.sens文件作为BF的输入。

关于数据的具体内容,官网有给出详细说明:

Each sequence contains:

  • Color frames (frame-XXXXXX.color.jpg): RGB, 24-bit, JPG
  • Depth frames (frame-XXXXXX.depth.png): depth (mm), 16-bit, PNG (invalid depth is set to 0)
  • Camera poses (frame-XXXXXX.pose.txt): camera-to-world (invalid transforms -INF)
  • Camera calibration (info.txt): color and depth camera intrinsics and extrinsics.

We also have the above data in our custom .sens format, please see the c++ reader for how to load the file.

这里官网给出了如何载入.sens的程序,是基于VS2013运行的SensReaderNoMLib,但是可惜我们需要实现封装原始数据到.sens的操作,这个程序缺乏各种依赖,不能满足我们的需求,因此我后续操作从BF源程序中修改,里面的依赖较为完善。

配置BundleFusion过程中需要注意的几点是

  • 依赖需要下载完整,并且保持原始的目录结构以避免大的修改
BundleFusion-master/
  external/
    mLib/ # this is the submodule you replaced
      data/
      src/
      [...]
  FriedLiver/
    [...]
    FriedLiver.sln
    [...]
mLibExternal/ # you downloaded this from Dropbox
  include
  libsWindows
  [...]
  • 我尝试过VS2015,但遇到的“尝试引用已删除的函数”的报错我没办法解决,因此我就安装了官方的VS2013,最终一路无报错。
  • 我使用的是CUDA 8.0,源程序使用的是CUDA 7.0,因此需要将FriedLiver.vcxproj中的7.0改成8.0程序才能加载。
  • zParametersBundlingDefault.txt和zParametersDefault.txt拷贝到BundleFusion-master\FriedLiver\x64\Release文件夹里面,方便可执行程序直接运行。
  • 修改zParametersDefault.txt中第二行s_sensorIdx = 8,即指定使用离线数据。
  • 修改第58行,指定你要重建的.sens数据存放的位置,建议给出绝对路径
s_binaryDumpSensorFile = 
"D:/Compressed/BundleFusion-master/FriedLiver/x64/data/sequence.sens";
  • 编译通过后,执行程序,会出现命令行窗口显示正在处理第几帧,同时出现深度图窗口,程序结束之后会在上一级目录的data中生成ply点云文件,我在上一级目录中有创建data文件夹。即创建目录BundleFusion-master/FriedLiver/x64/data。
  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值