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

您所在的位置:网站首页 安卓三维扫描 Intel RealSense D435i + BundleFusion 实现实时三维建图

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

2024-07-15 16:13| 来源: 网络整理| 查看: 265

内容概览 摘要操作环境RealSense D435i 介绍BundleFusion工程环境配置安装 RealSense SDKRealSense 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的同级目录下 include libsWindows [...] RealSense D435i 介绍

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

Intel RealSense D435i 系列深度相机

BundleFusion工程环境配置 安装 RealSense SDK

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

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

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

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

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

Intel RealSense Viewer

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 中进行实时三维重建的操作过程与注意事项。期待与其他深度相机的美丽邂逅,哈哈哈!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3