Window10 Kinect v2 配置BundleFusion
系统环境:
windows10gtx1070cuda8.0vs2013kinect v2BundleFusion
近期项目需要进行RGBD图片生成地图的过程,并在此详细记录整个配置过程。
环境要求
-
Windows 10
-
Kinect SDK Version 2.0
-
可从该链接获取软件包以完成安装。
然后我们就可以开始下载我们的工程以及相应的依赖了:
下载工程以及依赖
1. BundleFusion
通过GitHub获取这个BundleFusion,并解压后即可获得工程 BundleFusioin-master
2. mLib
通过 GitHub 上的 这个链接 下载 mLib,并将下载好的文件解压之后,在指定路径下替换成 BundleFusion-master\external\mLib 文件。
3. mLib external
Download 获取该 mLibExternal.zip 文件,并将其放置于与 BundleFusioin-master 相同的目录中
你应该有如下目录:
BundleFusion-master/
external/
mLib/ # this is the mLib you replaced
data/
src/
[...]
FriedLiver/
[...]
FriedLiver.sln
[...]
mLibExternal/ # you downloaded this from Download
include
libsWindows
[...]
代码解读
编译工程
接下来我们将使用Visual Studio 2013来启动 BundleFusion-master\FriedLiver\FriedLiver.sln 这个项目。预计会显示以下错误信息:
~\BundleFusion-master\FriedLiver\FriedLiver.vcxproj : error : 无法读取项目文件“FriedLiver.vcxproj”。
~\BundleFusion-master\FriedLiver\FriedLiver.vcxproj(35,5): 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 7.0.props”。请确认 <Import> 声明中的路径正确,且磁盘上存在该文件。
代码解读

因为我们的电脑上安装的CUDA版本不匹配,请修改指定的.vcproj文件内容
# 第35行
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 7.0.props" />
# 将7.0,修改为我们8.0的cuda版本
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 8.0.props" />
# 第375行
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 7.0.targets" />
# 将7.0,修改为8.0
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 8.0.targets" />
代码解读
再次打开则不会报错了
接下来我们需要修改 GlobalAppState.h 文件,如下:

接着升级至 Release 版本,并根据需求设置生成选项为解决方法(可按住Shift + Ctrl快速配置)。在操作过程中可能会遇到以下常见问题:
无法打开 python36_d.lib 的问题
因为我在尝试配置自己的电脑使用Anaconda 3作为Python开发环境时,在编译过程中遇到了安装错误。深入研究后发现该文件中的第293行存在潜在问题,并将其注释掉。
# 注释掉该行
pragma comment(lib,"python36_d.lib")
代码解读

并且还要将第337行 define Py_DEBUG 注释掉:

再次编译的时候就没有出现这个问题了。
在第29行dxut.h处出现了一个严重错误(C1083),无法打开包含文件‘dxsdkver.h’。该文件或目录不存在。
由于未安装 DirectX SDK June 2010 的缘故,请你参考这篇博客:

配置工程
将这两个指定路径下的配置文件复制到指定位置,并使用Notepad++打开配置文件,并进行相应的修改:将两个指定路径下的配置文件复制到指定位置,并使用Notepad++打开配置文件,并进行相应的修改:
# 修改第2行为如下,来使用KinectOne (Kinect v2)
s_sensorIdx = 2;
# 修改第49行为如下,100000视乎是配置文件中默认值
s_hashNumSDFBlocks = 100000; //smaller voxels require more space
代码解读
运行工程
通过电脑连接我们的Kinect v2设备,并双击启动位于BundleFusion-master\FriedLiver\x64\Release\FriedLiver.exe路径上的程序。然后即可观察到项目已成功启动。但界面会出现短暂卡顿现象后直接崩溃,请参考下图进行操作。

然后我们需要对 DepthSensing.cpp 做如下修改:
# 将987行
bGotDepth = g_CudaImageManager->process()
# 替换为
bool bGotDepth;
while (!(bGotDepth = g_CudaImageManager->process()));
代码解读
再次 build 生成后,就可以成功运行该 BundleFusion 工程了

Reference
- Artist Guide to BundleFusion
- Reny
- https://github.com/Niessner’s BundleFusion Issue 6
