Window10 Kinect v2 配置BundleFusion

系统环境: windows10 gtx1070 cuda8.0 vs2013 kinect v2 BundleFusion

最近项目需要用到RGBD图片重建地图,然后就花了一天配置好了Kinect v2使用BundleFusion,在此记录一下自己的配置过程。

环境要求

  • Windows10
  • NVIDIA驱动 (如果安装好了的则不需要)
  • CUDA8.0
  • VS2013,官方好像说只能用VS2013编译,其他版本自己未尝试。
  • DirectX SDK June 2010
    • Download ,注意安装的时候会报错,可以参考这篇博客
  • Kinect SDK 2.0

然后我们就可以开始下载我们的工程以及相应的依赖了:

下载工程以及依赖

1. BundleFusion

HomePage Paper Github

从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
  [...]

编译工程

接着我们需要用VS2013打开 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> 声明中的路径正确,且磁盘上存在该文件。

Window10 Kinect v2 配置BundleFusion这是由于我们电脑上的cuda版本不对,我们只需要修改 BundleFusion-master\FriedLiver\FriedLiver.vcxproj 文件,用notepad打开该文件,并修改如下两行:

# 第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 文件,如下:
Window10 Kinect v2 配置BundleFusion
然后修改为 Release 版本,然后选择 生成->生成解决方法 或者使用快捷键 CTRL + SHIFT + B ,期间可能会出现如下错误。

无法打开 python36_d.lib 的问题

因为自己电脑是使用Anaconda3配置的python环境,然后编译的时候就报了这个错误,自己通过对Anaconda3\include 中的 pyconfig.h 文件进行如下修改,将第293行注释掉了:

# 注释掉该行
pragma comment(lib,"python36_d.lib")

Window10 Kinect v2 配置BundleFusion
并且还要将第337行 define Py_DEBUG 注释掉:
Window10 Kinect v2 配置BundleFusion
再次编译的时候就没有出现这个问题了。

错误:dxut.h(29): fatal error C1083: Cannot open include file: ‘dxsdkver.h’: No such file or directory

这个是由于没有安装 DirectX SDK June 2010 的原因,你可以参考这篇博客
期间还可能出现一系列错误,你需要百度或Google找到相应的解决方法。
当你正式编译通过的时候,如下:Window10 Kinect v2 配置BundleFusion

配置工程

BundleFusion-master\FriedLiver 目录下的 zParametersBundlingDefault.txtzParametersDefault.txt 拷贝到 BundleFusion-master\FriedLiver\x64/Release ,然后用Notepad++打开 zParametersDefault.txt 配置文件,并做如下修改:

# 修改第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
然后就可以看到已经可以成功运行该项目了,但显示的界面会卡死,然后崩溃,如下图:
Window10 Kinect v2 配置BundleFusion
然后我们需要对 DepthSensing.cpp 做如下修改:

# 将987行
bGotDepth = g_CudaImageManager->process()
# 替换为
bool bGotDepth;
while (!(bGotDepth = g_CudaImageManager->process()));

再次 build 生成后,就可以成功运行该 BundleFusion 工程了
Window10 Kinect v2 配置BundleFusion

Reference