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
- Kinect SDK 2.0
- Download 下载并安装
然后我们就可以开始下载我们的工程以及相应的依赖了:
下载工程以及依赖
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
[...]
编译工程
接着我们需要用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> 声明中的路径正确,且磁盘上存在该文件。
这是由于我们电脑上的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
文件,如下:
然后修改为 Release
版本,然后选择 生成->生成解决方法
或者使用快捷键 CTRL + SHIFT + B
,期间可能会出现如下错误。
无法打开 python36_d.lib 的问题
因为自己电脑是使用Anaconda3配置的python环境,然后编译的时候就报了这个错误,自己通过对Anaconda3\include
中的 pyconfig.h
文件进行如下修改,将第293行注释掉了:
# 注释掉该行
pragma comment(lib,"python36_d.lib")
并且还要将第337行 define Py_DEBUG
注释掉:
再次编译的时候就没有出现这个问题了。
错误:dxut.h(29): fatal error C1083: Cannot open include file: ‘dxsdkver.h’: No such file or directory
这个是由于没有安装 DirectX SDK June 2010
的原因,你可以参考这篇博客
期间还可能出现一系列错误,你需要百度或Google找到相应的解决方法。
当你正式编译通过的时候,如下:
配置工程
将BundleFusion-master\FriedLiver
目录下的 zParametersBundlingDefault.txt
和 zParametersDefault.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
然后就可以看到已经可以成功运行该项目了,但显示的界面会卡死,然后崩溃,如下图:
然后我们需要对 DepthSensing.cpp
做如下修改:
# 将987行
bGotDepth = g_CudaImageManager->process()
# 替换为
bool bGotDepth;
while (!(bGotDepth = g_CudaImageManager->process()));
再次 build
生成后,就可以成功运行该 BundleFusion
工程了