内容概览
- 摘要
- 操作环境
- 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版本 |
---|---|
F200 | 2016R2、2016R3 |
R200 | 2016R2、2016R3 |
SR300 | 2016R2、2016R3、2.0 |
D415 / D435 | 2.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 中进行实时三维重建的操作过程与注意事项。期待与其他深度相机的美丽邂逅,哈哈哈!