Intel RealSense D435i + BundleFusion 实现实时三维建图

编程入门 行业动态 更新时间:2024-10-21 04:05:17

Intel RealSense D435i + BundleFusion 实现<a href=https://www.elefans.com/category/jswz/34/1771422.html style=实时三维建图"/>

Intel RealSense D435i + BundleFusion 实现实时三维建图

内容概览

  • 摘要
  • 操作环境
  • RealSense D435i 介绍
  • BundleFusion工程环境配置
    • 安装 RealSense SDK
    • RealSense SDK 本地环境配置
    • BundleFusion 工程属性表
    • 相机类型设置
      • 修改 GlobalAppState.h 文件
      • 修改 FriedLiver.h 文件
    • 添加 RealSense 相关实现类
  • 生成解决方案
    • error C3646
      • 出错原因
      • 解决方案
    • error LNK2001
      • 出错原因
      • 解决方案
  • 配置文件修改
    • 修改 zParametersDefault.txt
    • 修改 zParametersBundlingDefault.txt
  • 模型生成
  • 结语

摘要

BundleFusion由斯坦福大学、德国 MPII 以及微软研究院共同开发,用于实时构建高精度三维模型,是目前效果最好的开源算法框架。论文:《BundleFusion: Real-time Globally Consistent 3D Reconstruction using Online Surface Re-integration》。本文主要介绍了如何使用 Intel RealSense D435i 系列深度相机在开源算法框架 BundleFusion 中实现实时三维建图。

操作环境

环境项版本/型号
操作系统Win10_x64
开发工具集Visual Studio 2013
计算架构CUDA 8.0
深度相机Intel RealSense D435i
显卡NVIDIA GeForce 940MX

其中,CUDA 8.0 与 DirectX SDK 的安装配置、BundleFusion 工程代码生成(包括 mLib 与 mLib external 配置、CUDA 设置以及显卡算力设置等)可参照博文《BundleFusion在win10+vs2013+cuda8.0上的实现》。

请务必将 FriedLiver.vcproj 文件中的 cuda 版本修改为本地安装版本,否则 VS2013 将无法打开 BundleFusion 工程!!!

BundleFusion工程代码的最终目录结构如下所示:

 BundleFusion-master/external/mLib/   # 下载后进行替换data/src/[...]FriedLiver/[...]FriedLiver.sln[...]mLibExternal/   # 下载解压后放至BundleFusion-master的同级目录下includelibsWindows[...]

RealSense D435i 介绍

RealSense D435 提供全局快门感应器和更大的镜头,以获得比 D415 更好的低光照性能。D435 还具有更强大的 RealSense 模块 D430,捕捉最远距离可以达到 10 米并且可在户外阳光下使用,支持输出 1280x720 分辨率的深度画面,在视频传输方面可以达到 90fps。D435i 在 D435 的基础上增加了一个 IMU 单元 BMI055,可以实时同步 IMU 数据和深度。

BundleFusion工程环境配置

安装 RealSense SDK

不同系列的深度相机所对应的SDK版本也各不相同,具体如下表所示:

相机系列SDK版本
F2002016R2、2016R3
R2002016R2、2016R3
SR3002016R2、2016R3、2.0
D415 / D4352.0

本文使用的是RealSense D435i 系列的深度相机,故需要下载 RealSense SDK 2.0。双击安装包并按照默认安装路径进行安装,成功安装后,电脑桌面将出现三个图标。


使用USB线连接好深度相机和电脑后,查看设备管理器,在“图像设备”中将出现如下两项:


双击打开 “ Intel RealSense Viewer ”,自动检测到 D435i 的接入,并在右侧窗口成功显示彩色图及深度图信息。此时说明 RealSense SDK 2.0 驱动程序成功安装,RealSense D435i 能够正常工作。

RealSense SDK 本地环境配置

在环境变量中新建一个名为 RealSenseSDK 的系统变量,如下图所示:

BundleFusion 工程属性表

BundleFusion 工程属性表的配置参照博文《BundleFusion 中 RealSense 深度相机数据流流程》。首先,将 RealSense SDK 2.0 安装路径下的 realsense2.dll 和 realsense2.lib 拷贝至 “ BundleFusion-master/FriedLiver" 目录下,如下图所示:


其次,使用 VS2013 打开 BundleFusion工程,打开“属性管理器”, 右键工程,选择“添加现有属性表”,从 RealSense SDK 2.0 的安装路径下选择已有属性表,如下图所示:



最后,切换回“解决方案资源管理器”,右键工程,选择属性,添加 RealSense SDK 2.0 的引用目录和库目录并设置平台工具集,如下图所示:




相机类型设置

BundleFusion 工程所支持的输入数据包括 Kinect V1、Kinect V2、PrimeSenseSensor、IntelSensor、RealSense、StructureSensor以及SensorDataReader(离线数据集)。

修改 GlobalAppState.h 文件

本文使用的是 RealSense 深度相机,所以将 GlobalAppState.h 中的 REAL_SENSE 取消注释,而将其他深度相机全部注释掉,如图所示:

修改 FriedLiver.h 文件

在 FriedLiver.h 文件中添加支持库 realsense2.lib 如下图所示:

添加 RealSense 相关实现类

由于 BundleFusion 工程中没有对于 RealSenseSensor 类的实现部分,为使 BundleFusion 工程能够使用 D435i 相机,需要编写其实现类(包括头文件和实现文件)。适用于 D415/D435/D435i 深度相机 的 RealSenseSensor 实现类可从 RealSenseSensor for D415/D435/D435i in BundleFusion 获取。下载解压后将头文件与实现文件拷贝至 “ BundleFusion-master/FriedLiver/Source ” 路径下,如图所示:

生成解决方案

error C3646

在 VS2013 中将 BundleFusion 工程设置为 Release 版本并选择“生成-生成解决方案”以进行编译。此时,解决方案生成失败,报错 error C3646: “no except”:未知重写说明符,如下图所示:

出错原因

此处为编译 RealSense SDK 2.0 报错,因为 “ noexcept ” 是基于 c++14 编译器编译,而 VS2013 编译器是基于c++11。

解决方案

只需将出错文件相应位置的 “ noexcept " 修改为 ” throw() “ 即可。

error LNK2001

再次编译BundleFusion工程。此时,解决方案生成失败,报错 error LNK2001: “无法解析的外部符号”,如下图所示:

出错原因

在添加 RealSense 相关实现类时,将头文件及实现文件直接拷贝到Source目录下,并没有真正将其包含在项目中,导致 “ RealSenseSensor ” 为无法解析的项目外部符号。

解决方案

点击“显示所有文件”图标,查看Source目录下 RealSenseSensor.cpp 以及 RealSenseSensor.h 文件,发现两个文件前面均有小红点,如下图所示:


此时选中两个文件,右键选择“包含在项目中”,如图所示:


再次生成解决方案,最终在 “ BundleFusion-master/FriedLiver/x64/Release ” 目录下成功生成 FriedLiver.exe 。

配置文件修改

将 ” BundleFusion-master/FriedLiver " 目录下的 zParametersBundlingDefault.txt 和 zParametersDefault.txt 拷贝至 “ BundleFusion-master/FriedLiver/x64/Release ” 目录下。

修改 zParametersDefault.txt

打开 zParametersDefault.txt 配置文件,选择输入类型为 REAL_SENSE,设置 s_sensorIdx = 6


设置 s_hashNumSDFBlocks = 100000

修改 zParametersBundlingDefault.txt

为避免出现窗口崩溃或没有响应直接跳出,打开 zParametersBundlingDefault.txt 配置文件,设置 s_maxNumImages = 400

模型生成

配置修改后,双击运行 FriedLiver.exe 即可使用 RealSense D435i 深度相机进行实时三维建图。室内实时三维重建效果如下所示:


此时,按下 tab 建,即可与应用程序进行交互。在 “ BundleFusion-master/FriedLiver/x64/Release ” 目录下新建文件夹 scans , 通过快捷键 Ctrl + 9 即可导出当前模型到 " BundleFusion-master/FriedLiver/x64/Release/scans ",可用 Meshlab 查看当前的三维重建效果。

结语

以上就是使用 Intel RealSense D435i 系列深度相机在开源算法框架 BundleFusion 中进行实时三维重建的操作过程与注意事项。期待与其他深度相机的美丽邂逅,哈哈哈!

更多推荐

Intel RealSense D435i + BundleFusion 实现实时三维建图

本文发布于:2024-02-25 15:19:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699408.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实时   RealSense   Intel   BundleFusion   D435i

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!