Windows10下配置KinectV2以支持OpenNI2和PCL
个人配置及设备
变量 | 值 |
---|---|
系统 | Windows10 64位 |
处理器 | Intel i5-6500 |
设备 | Kinect V2 |
IDE | Visual Studio 2015 |
第一步:设备到手,装驱动装SDK
Kinect适配器按说明书连接,将USB插入电脑USB3.0接口
打开设备管理器,看系统是否识别设备,不识别设备则右键更新驱动,Win10自动搜索下载对应驱动。驱动装完会提示重启,不急,先装完SDK再重启也行。
更新驱动同时,去官网下载Kinect SDK,Kinect for Windows SDK 2.0
安装SDK并重启。
开始菜单多了 SDK Browser 和 Kinect Studio等,进去探索一番,测试一下自带Demo。
记得运行Kinect Configuration Verifier验证配置,查看Kinect能否运行。
USB Controller叹号一般没关系,是因为电脑硬件的USB控制器不是Intel或Renesas的,如果能运行则没事,不然就只能换电脑了。
第二步:安装libfreenet2以支持OpenNI2调用Kinect v2
点云库(PCL)是通过OpenNI技术获取深度传感器等设备的信息的,即PCL需要通过OpenNI调用Kinect。
同时,OpenNI2是不支持 Kinect v2的(v1大概也不支持),或者说Kinect没有对应OpenNI2的驱动。
于是,就需要安装开源的Kinect驱动,使OpenNI2能够支持Kinect v2。
libfreenet2就是这样的开源驱动。
项目地址:https://github.com/OpenKinect/libfreenect2
参考Git推荐步骤Windows / Visual Studio,同时参照了这篇博主的文章,Win10安装OpenNI2并通过python接口调用Kinect 。
虽有点小波折,但是一遍流程就走通了,在此记录一下自己的安装步骤:
预备
- 确认电脑已经装好Git程序和Cmake程序,以及配置好对应的环境变量,后面下载和编译用得到。
- 将源码下载下来,git clone 或者 下载Zip。
Install UsbDk driver(安装UsbDK 驱动)
(Windows 7)必须首先安装Microsoft Security Advisory 3033929,否则USB键盘和鼠标可能不能工作。
在Win10下,我安装完后也出现了鼠标不能动的情况,只需要插拔一下鼠标即可。
从 https://github.com/daynix/UsbDk/releases下载最新的安装包,注意是64位,并安装。
如果UsbDK不能工作的话,需要先卸载UsbDK,然后按照libusbK的步骤安装libusbK。这两个是不能共存的。
由于我的UsbDK可以工作,UsbDK不能工作的请自觉参考 Windows/Visual Studio的**(Alternatively) Install libusbK driver**这一小节安装libusbK,本文不展开了。
Build libusb(编译libusb)
使用Git Bash或者其他能够访问到git.exe和msbuild.exe的shell工具,如果前面安装没问题的话,Windows自带的cmd工具也是可以的。
进入到源码的
depends
目录,并根据自己环境选择脚本运行,我是vs2015,所以选择install_libusb_vs2015.cmdcd depends/
./install_libusb_vs2015.cmd
备注:脚本里有个步骤是git下载libusb源码的,如果嫌慢,可以自己上网下载下来,命名为
libusb_src
,然后修改脚本执行下面的步骤。
Install TurboJPEG(安装TurboJPEG)
从http://sourceforge.net/projects/libjpeg-turbo/files下载libjpeg-turbo。
我的方式是下载带**-vc64.exe**后缀的文件,比如这个libjpeg-turbo-1.5.3-vc64.exe,运行,安装到默认的
c:\libjpeg-turbo64
路径下。设置环境变量,
TurboJPEG_ROOT=c:\libjpeg-turbo64
。
Install GLFW(安装GLFW)
- 从 http://www.glfw.org/download.html下载GLFW,注意是64位文件,即
64-bit Windows binaries
。 - 解压后的文件夹,将
glfw-3.x.x.bin.WIN64
重命名为glfw
,复制到depends
目录下,即路径为depends/glfw
。 - 设置环境变量,
GLFW_ROOT=glfw所在路径
Install OpenCL(安装OpenCL,可选,我没安装)
Install CUDA(安装CUDA,可选,我没安装)
Install OpenNI2(安装OpenNI2)
从http://structure.io/openni下载OpenNI 2.2.0.33 (x64),安装至默认路径(c:\Program Files…)
环境变量已经保存,确认一下,分别是
OPENNI2_INCLUDE64
,OPENNI2_LIB64
,OPENNI2_REDIST64
。备注:如果前面安装过点云库PCL的话应该已经装过OpenNI2了,但是有关PCL的安装教程都是说OpenNI2需要安装在PCL的3rdParty目录下。
所以现在可以卸载掉之前的OpenNI2,重新安装到默认路径下(c:\Program Files…)。
在确保环境变量无误的情况下,不影响PCL的编译运行,注意已有的PCL工程需要重新用CMake构建一下,不然找不到OpenNI的库。
Build(编译构建)
1 | mkdir build && cd build |
运行测试程序
双击或者命令行下运行\install\bin\Protonect.exe
测试OpenNI2
- 将
install\bin
目录下的 freenect2-openni2.dll和别的dll文件 (libusb-1.0.dll, glfw.dll 等等) 复制到C:\Program Files\OpenNI2\Tools\OpenNI2\Drivers
, - 运行
C:\Program Files\OpenNI\Tools\NiViewer.exe
进行测试。
最后一步:善后清理
保留libfreenect2\build
目录下的install文件夹,找个地方备份一下。
需要清理的有:
- 源码libfreenect2-master可以删除
- C盘的libjpeg-turbo64可以删除
- 删除环境变量
TurboJPEG_ROOT
- 删除环境变量
GLFW_ROOT
关于OpenNI2的不要删掉,不然从头到尾就白干了。
后记
freenect2的驱动是弄出来了,但是PCL那边还是没能找到设备,”Device not found!”。
我觉得顺序应该是第一步编译freenect2,第二步再编译PCL,同时引用第一步升级版本的OpenNI2。
由于我的Windows上的PCL是All-in-one版本,所以没有PCL编译这一步。
苦于没法使用,也尝试了一些其他方法。
比如Tsukasa Sugiura的这两篇博客:
- Drawing Point Cloud retrieve from Kinect v2 using Point Cloud Library – part.1 without Grabber
- Drawing Point Cloud retrieve from Kinect v2 using Point Cloud Library – part.2 with Grabber
我尝试第一种方案,方案是结合KinectSDK,在PCL程序中直接通过SDK提供的数据接口,将获取的数据直接封装转换成PCL的pointCloud格式。
能够成功运行,而且效果也还不错,就是帧率低了点。
不过这个方案跳过了传统意义上的OpenNI技术,PCL数据处理也要在程序的转换接口里去进行处理,让我这个接触才两三天的小白觉得怪别扭的。
索性跳到了Ubuntu下进行一波探索,而且编译安装都成功了,下面会另写一篇编译配置的过程。
后记2
原来将测试OpenNI2这一步骤中,将libfreenect文件拷贝到driver文件夹下,然后将整个OpenNI文件夹拷贝到PCL安装路径的3rdParty就可以使用了。
隔了一个月才知道。