BundleFusion是目前效果最好的实时稠密三维重建项目,它支持多种类别的深度相机,本次使用英特尔的RealSense D435i深度相机来采集颜色图和深度图,配置的方式如下:
一、环境与资源准备
1、操作系统
目前支持windows系统,不过也有大神在ubuntu系统上移植成功实现过,本次使用win10系统。
2、IDE
Visual Studio 2013,为了避免引起不必要的麻烦,还是老老实实使用2013的版本,2015、2019的都会有问题,版本的重要性不多说了。
2013版可以在Visual Studio官网下,有免费的社区版。
地址:https://docs.microsoft.com/zh-cn/visualstudio/releasenotes/vs2013-update5-vs
3、CUDA
使用cuda8.0,安装后命令行输入nvcc -V,验证安装是否成功。
地址:https://developer.nvidia.com/cuda-80-ga2-download-archive
4、DirectX SDK
安装DirectX SDK
地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
如果有问题,可参考https://www.dazhuanlan.com/2019/12/13/5df30b9d0f239/
5、RealSense SDK
安装 RealSense SDK2.0
地址:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_windows.md
安装成功后,桌面会有三个图标RealSense Viewer、Depth Quality Tool for Intel RealSense Cameras和Examples for Intel RealSense SDK 2.0。
USB连接好D435i相机后在设备管理器中能看到相机设备中会出现D435i RGB和D435i Depth。打开RealSense Viewer,可以查看D435i相机的工作情况。
设置RealSense SDK 环境变量
在环境变量中新建一个RealSenseSDK的系统变量,如下图:
添加 RealSense 相关实现类
原生的BundleFusion并不包含 D435i等较新深度相机的相关实现类,通过网址https://github.com/hqWaynee/lidar_vision_slam
下载文件解压,将解压后的文件复制粘贴到BundleFusion-master/FriedLiver/Source 路径下,如图:
6、代码文件
BundleFusion 工程代码下载地址:https://github.com/niessner/BundleFusion
,解压后得到文件夹BundleFusioin-master
mLib 下载地址:https://github.com/niessner/mLib
,解压后替换 BundleFusion-master/external/mLib
mLib external下载地址:
http://kaldir.vc.in.tum.de/mLib/mLibExternal.zip
或者https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0
,
解压后,放到 BundleFusioin-master 同级目录,网址访问不了的话可以使用这篇文章提供的网盘文件mLibExternal.zip:链接:https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew
提取码:0x4t
最终的文件目录结构为:
二、文件修改与项目配置
1、修改相关文件
修改cuda版本
BundleFusion的项目原生使用的cuda7.0,需要改成我们使用的cuda8.0,在BundleFusion-master/FriedLiver/FriedLiver.vcxproj,打开FriedLiver.vcxproj文件,将其中包含cuda7.0的改为cuda8.0,如下:
修改GlobalAppState.h
由于bundlefusion支持很多种类的设备,因此需要将其他类型的设备注释掉,如下图:
修改 FriedLiver.h
在FriedLiver.h中添加对库 realsense2.lib 的支持:
修改 FriedLiver.cpp
在FriedLiver.cpp第73行将g_sensor = RealSenseSensor;改为g_sensor = new RealSenseSensor;
2、项目配置
配置工程属性表
将RealSense SDK 2.0 安装路径下(默认为C:\Program Files (x86)\Intel RealSense SDK 2.0)的 realsense2.dll(bin\x64)和 realsense2.lib (lib\x64)复制粘贴 到“ BundleFusion-master/FriedLiver" 目录下,如下图:
打开FriedLiver的属性管理表,右键FriedLiver,选择添加现有属性表,添加RealSense SDK 2.0 安装路径下的intel.realsense.props文件
然后打开解决方案资源管理器,右键FriedLiver工程,选择属性,添加 RealSense SDK 2.0 的引用目录和库目录。在VC++ Directories的Include Directories中添加C:\Program Files (x86)\Intel RealSense SDK 2.0\include和C:\Program Files (x86)\Intel RealSense SDK 2.0\include\librealsense2;在VC++ Directories的LibraryDirectories中添加C:\Program Files (x86)\Intel RealSense SDK 2.0\lib\x64。
设置平台工具集为VS2013 v120
三、生成方案与运行
生成解决方案
设置工程版本为Release-x64版本,并选择生成-生成解决方案。过程中可能会有一些问题
参考https://blog.youkuaiyun.com/Claiborne696/article/details/107928892
运行
若成功生成方案,在BundleFusion-master\FriedLiver\x64\Release路径下会有FriedLiver.exe文件。将 BundleFusion-master\FriedLiver 目录下的 zParametersBundlingDefault.txt 和 zParametersDefault.txt 复制粘贴到BundleFusion-master\FriedLiver/x64/Release,然后修改相关参数:
打开zParametersDefault.txt,把s_sensorIdx的值改为6
将s_hashNumSDFBlocks的值改为100000
打开zParametersBundlingDefault.txt ,将s_maxNumImages改为400
插上D435i相机,打开FriedLiver.exe,应该能够正常使用。按Tab键可显示信息和帮助;按Ctrl+2显示有颜色的深度图;按Ctrl+3显示RGB图像;按Ctrl+9保存.ply文件到BundleFusion-master\x64\Release\scans路径下。.ply文件可用meshlab软件打开。
*可能遇到的问题
cudasafecall() Runtime API error 10: invalid device ordinal
这是因为有多显卡设备(集显+独显或有多张独立显卡)的问题,如果是笔记本电脑,一般会自动切换不会发生此问题。如果是台式机,一定要把显示器的DP或HDMI接口接到主机的显卡接口而不是主板的接口上,否则默认的GPU是集显。此外如果出现显存不够的情况,需要更改zParametersDefault.txt或zParametersBundlingDefault.txt 的参数,自己尝试吧。。
按Ctrl+3显示RGB图像时红蓝颜色颠倒
因为RealSenseSensor.cpp文件中使用的是BGR格式,把RS2_FORMAT_BGR8改为RS2_FORMAT_RGB8就行了。
参考:
https://blog.youkuaiyun.com/Claiborne696/article/details/107928892
https://www.dazhuanlan.com/2019/12/13/5df30b9d0f239/