Windows配置PCL点云库kinfu——KinectFusion开源实现

1 准备

1.1 硬件环境

1.Windows 10 64位系统
2.Kinect V1及其适配器
3.Fermi and Kepler架构的英伟达显卡
4.最新版本的显卡驱动

1.2 软件环境

软件准备:

  1. Visual Studio 2010_x86
  2. CMake 3.7.0
  3. OpenNI-Win64-1.5.4.0-Dev.msi
  4. nite-win64-1.5.2.21-dev.msi
  5. SensorKinect092-Bin-Win64-v5.1.2.1.msi
  6. 电脑显卡驱动对应版本的CUDA,可以从官网下载

第三方库:

  1. boost_1.60.0
  2. eigen3.2.8
  3. qhull_2015.2
  4. VTK_7.0.0
  5. flann_1.8.4
  6. PCL 1.8.0 源码
  7. 编译boost时可能还需要用到microsoftmpi

以上所有软件和库,均在:https://download.csdn.net/download/zheng526065191/12584339

2 编译配置环境

2.1 安装OpenNI

准备

想用openi获取Kinect的数据则首先不能安装Kinect官方的SDK,否则SDK会屏蔽openni的驱动,之前安装的话就卸掉。win10需要先设置一下电脑(win7不需要),否则在安装SensorKinect092-Bin-Win64-v5.1.2.1.msi驱动时系统会提示“文件的哈希值不在指定的目录文件中。此文件可能已损坏”的警告导致驱动安装失败。

Win10的设置方法为点击左下角->设置->更新和安全->恢复->立刻重启(等一小会)->疑难解答->高级选项(之后重启)->启动设置->禁用驱动程序强制签名(倒数第三个,对应哪个数字就在键盘按几)->重启之后就可以了。

安装

安装前请确保把旧版本的OpenNI和NITE卸载干净、第三方驱动卸载干净、Kinect不要插入电脑。依次安装OpenNI-Win64-1.5.4.0-Dev.msi、nite-win64-1.5.2.21-dev.msi、SensorKinect092-Bin-Win64-v5.1.2.1.msi(注意以下所有安装的路径最好都不要含有汉字以及空格,纯英文最好)。安装完毕后断网并且退出杀毒软件,否则会自动在网络上寻找Kinect的官方驱动,插上Kinect电源,将Kinect插入电脑,查看设备管理器,如果安装成功会出现驱动图标的图标。如果不能自动找到驱动就右键手动更新驱动,目录在SensorKinect安装目录下。安装完成最好重启一下电脑。

检验

在openni目录下:C:\Program Files\openni1.5.7\Samples\Bin\Release中打开NiViewer.exe可以显示深度图;

在NITE目录下:C:\Program Files\PrimeSense\NITE\Samples\Bin\Release中的Sample-PointViewer.exe显示人体骨架。

都能显示表示OpenNI安装成功。

2.2 编译第三方库

提醒:

  1. PCL编译过程请联网!VS在编译VTK时需要自动下载一些文件,否则会编译失败!
  2. 第三方库最好都安装在默认目录。(也就是在后面cmake中设置CMAKE_INSTALL_PREFIX的值时,用默认目录),或使用可以记得住路径的全英文目录。

2.2.1 编译boost

若需要mpi则首先下载安装它(上面网盘里有),然后到boost_1_60_0\tools\build\src\tools\mpi.jam中修改下面几行:

249-251 line

local microsoft_mpi_sdk_path = "C:\\Program Files (x86)\\Microsoft SDKs\\MPI" ;
local microsoft_mpi_path = "C:\\Program Files\\Microsoft MPI" ;
    if [ GLOB $(microsoft_mpi_sdk_path)\\Include : mpi.h ]



260-262 line

options = <include>$(microsoft_mpi_sdk_path)/Include
          <address-model>64:<library-path>$(microsoft_mpi_sdk_path)/Lib/x64
          <library-path>$(microsoft_mpi_sdk_path)/Lib/x86



268 line

.mpirun = "\"$(microsoft_mpi_path)\\Bin\\mpiexec.exe"\" ;

然后以管理员身份运行VS自带的cmd(“VS2010 工具下的Visual Studio命令提示符”),进入boost文件夹,运行bootstrap.bat,运行结束后会生成project-config.jam,
在这里插入图片描述
这里用到的简单cmd命令:

1、“d:”:进入d盘根目录,这里要进入你的安装盘

2、“dir”:查看当前所在目录的文件和文件夹

3、“cd name”:进入当前文件夹下的name文件夹中(name是想进入文件夹的名字,这里就是boost)

4、“name”:打开当前文件夹下名为name的文件,这里是bootstrap.bat,运行结束后会生成project-config.jam

打开project-config.jam并在第四行加上:using mpi ;(注意“;”前面有一个空格!) 接下来还是用cmd进入boost文件夹,运行如下命令编译boost:

(这里一定要注意,如果你的VS和第三方库都是32位的就只使用下面Win32环境的命令,64位只用X64环境的命令,我一开始两个都编译了结果到后面用VS生成PCL的时候生成失败了)

Win32环境:

b2.exe toolset=msvc-10.0 address-model=32 --build-dir=build\x86 install --prefix="C:\Program Files (x86)\Boost" -j8

X64环境:

b2.exe toolset=msvc-10.0 address-model=64 --build-dir=build\x64 install --prefix="C:\Program Files\Boost" -j8

其中msvc-10.0代表vs2010,msvc-11.0代表vs2012,如果是12.0是vs2013,14.0是vs2015。后面的C:\Program Files\Boost是boost的安装文件夹,你要换成你自己的安装目录。然后等着就好了,时间有点久(大约20分钟),耐心等。完成后在环境变量中建立BOOST_ROOT变量,值为boost文件夹安装地址,比如C:\Program Files\Boost.

2.2.2 编译eigen

使用cmake,分别设置eigen的source和build路径(source路径其实就是含有CMakeLists.txt的文件夹,其实就是source的根目录,我的路径是E:\pcl\Eigen),如build不存在,点击Configure会提示新建build文件夹,选择vs10-2010编译器(注意若选择了64位的编译器,则编译所有第三方库以及PCL都需是64位的),这里注意Configure时有CMAKE_INSTALL_PREFIX这个选项,默认为C:\Program Files\Eigen.这里的路径即为该软件最后的安装路径(也是环境变量中要设置的EIGEN_ROOT的路径,可设置为你想要的其它路径,后边的FLANN,QHULL,VTK也是一样道理).然后Generate在build目录下生成VS工程。

之后以管理员身份运行VS2010(否则install时会失败),打开bulid文件夹下的eigen.sln工程,待加加完文件后,生成ALL_BUILD(Debug和 Release均要生成),完成后生成INSTALL(Debug and Release)就在那一大堆工程里,一般就在ALL_BUILD的下面。可以看到eigen安装路径中出现include文件夹。最后在环境变量中建立EIGEN_ROOT变量,值为eigen的安装路径。

2.2.3 编译qhull

使用cmake,分别设置qhull的source和build路径,如build不存在,点击Configure会提示新建build文件夹,选择vs10-2010编译器(注意若选择了64位的编译器,则编译所有第三方库以及PCL都需是64位的).注意根据需要修改CMAKE_INSTALL_PREFIX,然后添加一个entry:

Name: CMAKE_DEBUG_POSTFIX

 

Type: STRING

 

Value: -d

修改完后再次点Configure,然后Generate。以管理员身份运行VS2010并打开qhull.sln工程文件,待加载完文件后,完成后生成ALL_BUILD(debug和release),然后生成INSTALL(Debugand Release)。完成后可以看到qhull安装路径中出现include和lib文件夹。最后在环境变量中建立QHULL_ROOT变量,值为qhull安装地址。

2.2.4 编译VTK

使用cmake,分别设置VTK的source和build路径,如build不存在,点击Configure会提示新建build文件夹,选择vs10-2010编译器(注意若选择了64位的编译器,则编译所有第三方库以及PCL都需是64位的).注意根据需要修改CMAKE_INSTALL_PREFIX选项,然后添加一个entry:

Name: CMAKE_DEBUG_POSTFIX

 

Type: STRING

 

Value: -gd

修改完后再次点Configure,然后Generate。以管理员身份运行VS2010并打开VTK.sln工程文件,待加载完文件后,生成ALL_BUILD(debug和release)(时间有点久,很久,有时各自需要一两个小时,最快一般也要半个小时,耐心等待),完成后生成install(debug和release)。完成后可以看到VTK文件夹中出现include和lib文件夹。最后在环境变量中建立VTK_ROOT,为VTK安装路径.

2.2.5 编译flann

使用cmake,分别设置Flann的source和build路径(如C:\flann,C:\flann\build),选择vs10-2010编译器(注意若选择了64位的编译器,则编译所有第三方库以及PCL都需是64位的).注意根据需要修改CMAKE_INSTALL_PREFIX,然后去掉BULID_MATLAB_BINDINGS和BULID_PYTHON_BINDINGS的勾选,不bulid它们
在这里插入图片描述
然后添加一个entry:

Name: CMAKE_DEBUG_POSTFIX

 

Type: STRING

 

Value: -gd

修改完后再次点Configure,然后Generate。在C:\flann\src\cpp\flann\util(源码)中找到serialization.h文件 在92行BASIC_TYPE_SERIALIZER(bool)之后加入以下代码:

#ifdef _MSC_VER

 

BASIC_TYPE_SERIALIZER( unsigned __int64 );//注意此处__int64是两个下划线连一起

 

#endif

修改完后以管理员身份运行VS2010并打开flann.sln工程文件,待加载完文件后,(debug和release)生成all_build,完成后生成install(Debugand Release)。完成后可以看到flann安装路径下出现include和lib文件夹。最后在环境变量中建立FLANN_ROOT变量,值为flann安装路径。

2.2.7 安装CUDA

最好安装最新且适配电脑显卡驱动版本的CUDA,安装CUDA过程中不要用默认的精简安装,选择自定义,全选后继续安装,安装完毕重启下电脑。

推荐教程

注意:

  1. 一定要先安装VS2010,再安装CUDA,不然CUDA会找不到编译器导致在VS2010中不能使用CUDA
  2. 系统是win10的话还需要安装一个Microsoft.NET Framework(去百度一搜Microsoft.NET Framework下载,上面网盘里也有)不然会报错,我安装的是4.0。
  3. 在选项->选择安装位置时不能选择一开始的解压目录下,不然安装完成后解压目录会被删除,安装的文件也会随之删除造成失败
    在这里插入图片描述

2.2.8 配置PCL(重点)

可以在Github:网页中下载到PCL最新的源码,本例使用的是PCL1.8.0版本。

使用cmake选择source和build文件夹,点击Configure(此时最好把Grouped和Advanced勾选,),选择vs10-2010编译器(注意若选择了64位的编译器,则编译所有第三方库以及PCL都需是64位的),正常情况下不会出现什么问题:(警告可以忽略,如果出现错误八成是前面的库没有配置好,按照错误提示去修改) 运行完展开bulid,可以选择我们要编译的模块,有些模块不能勾选,否则生成会出错,具体勾选哪些模块参考下面截图,如果漏选可能会导致生成的VS工程中没有Kinfu解决方案。其中如果要使用kinfu需要勾选GPU,以及CUDA,还要勾选WITH下面的openni:
在这里插入图片描述
在这里插入图片描述
参考的博客里说有时在configure后会出现找不到Boost的情况,解决办法是手动添加,下面是Boost下拉栏中的截图,可以作为参考,配置那些没有找到的库:
在这里插入图片描述
如果VTK没有找到,可手动添加,它自己找到的话就不用管了:
在这里插入图片描述
注意根据需要修改CMAKE_INSTALL_PREFIX(默认的路径为C:\ProgramFiles\PCL),再次点击Configure,检查BUILD目录下有没有BUILD_gpu_kinfu、BUILD_gpu_kinfu_large_scale 并且确认勾选(没有的话生成的工程中就没有BUILD_gpu_kinfu、Kinfu_larger_Scale)
在这里插入图片描述
然后generate生成.以管理员身份运行VS2010并打开PCL.sln,生成ALL_BUILD(Debug和Release模式,各自得半小时左右). 随后生成INSTALL(Debug and Release),最后在环境变量中建立PCL_ROOT变量,值为PCL安装路径。PCL成功安装!

想看Kinfu的运行效果只需连接Kinect V1,用VS2010打开PCL.sln,右键pcl_kinfu_app或pcl_kinfu_lager_scale解决方案->设置为启动项目,然后点运行即可看到三维重建效果!
在这里插入图片描述

3 问题总结

1.在win10上编译PCL1.8.0的时候,编译到visualization模块时,如下语句会报错。

if (!pcl::visualization::getColormapLUT (static_cast<LookUpTableRepresentationProperties>(value), table))
    break;

解决方式:
将所有的

static_cast<LookUpTableRepresentationProperties>(value)

修改成

static_cast<LookUpTableRepresentationProperties>(int(value))

2.PCL在VS环境下能够编译成功,但是在运行kinfu程序时,出现“计算机丢失vtkIOPLY-7.0-gd.dll文件”等的提示报错。

发生这种问题的根本原因在于环境变量的设置上,计算机只会在path下包含的目录里去寻找程序所要运行的.dll文件,若我们所要使用到的.dll文件没有包含在环境变量path中,则会发生错误:计算机丢失xxx.dll文件。

解决方式:
找到VTK的安装目录下的bin文件夹(包含vtkIOPLY-7.0-gd.dll),我的bin文件夹是在C:\Program Files (x86)\PCL 1.8.0\3rdParty\VTK\bin将上述目录添加到环境变量Path中。重新开启项目,重新生成解决方案,则问题就会解决。

3.运行程序时出现下面类似invalid device fuction报错
在这里插入图片描述

解决方式:
修改Cmake中参数CUDA_ARCH_BIN中的参数,添加修改为自己电脑显卡计算能力参数。

4 运行结果

在这里插入图片描述
在这里插入图片描述

参考

  1. https://blog.csdn.net/Alan_1550587588/article/details/54582192.
  2. https://blog.csdn.net/eggsdandan/article/details/75670825.
  3. https://blog.csdn.net/Linear_Luo/article/details/52658984.
  4. https://www.cnblogs.com/is-smiling/p/3343625.html.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值