原因就是由于OpenNI2.2不支持Kinect V2,导致我没法在PCL中调用Kinect设备。
在Windows上的尝试失败了,来一波Linux下的尝试。
话不多说,下面是实实在在的解题步骤。

第一步:libfreenect2的编译

注意:libfreenect2是Kinect v2的开源驱动。如果用的是Kinect v1,出门右转git搜索libfreenect1。
项目地址:libfreenect2
参照的官网Linux编译指导:Linux
注意:我的作业本是Ubuntu16.04的,其他作业本请点进去仔细查看指导Linux,有很多不同之处

以下是16.04下的编译步骤:

下载libfreenect2源码

1
2
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2

安装编译工具

1
sudo apt-get install build-essential cmake pkg-config

安装linusb

1
sudo apt-get install libusb-1.0-0-dev

安装TurboJPEG

1
2
sudo apt-get install libturbojpeg libjpeg-turbo8-dev

安装OpenGL

1
sudo apt-get install libglfw3-dev

安装OpenCL(可选,我没选,选择安装的同学查看 Install OpenCL 这一小节)

安装CUDA(可选,我没选,选择安装的同学查看 Install CUDA 这一小节)

安装VAAPI(可选,我没选,选择安装的同学查看 Install VAAPI 这一小节)

安装OpenNI2(必选啊,有了这个PCL才能调用Kinect)

1
sudo apt-get install libopenni2-dev

编译

1
2
3
4
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
make
make install

安装路径CMAKE_INSTALL_PREFIX自己定义。
当第三方的应用CMake需要libfreenect2路径时,你要用cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2来指定。

设定设备访问规则

1
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/

然后重新插拔一下Kinect V2设备。

运行测试程序

1
./bin/Protonect

运行OpenNI2测试(重要)

1
2
3
sudo apt-get install openni2-utils
sudo make install-openni2
NiViewer2

如果遇到设备找不到,不要着急,试试重新插拔一下Kinect设备。

第二步:PCL的编译

参考链接:ubuntu16.04 安装PCL库

安装依赖项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre

下载源码

1
2
3
4
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
mkdir build
cd build

编译及安装

我是使用CCMake进行的自定义编译,因为默认的编译没有把文档doc编译出来(文档和tutorial代码很重要)。

1
2
3
4
5
sudo apt-get install cmake-curses-gui # 安装ccmake
ccmake .. # 进入cmake配置界面,根据自己需求进行修改,基本不用动,把WITH_DOC=OFF改为WITH_DOC=ON即可

sudo make -j4 #多核处理,编译有点久,耐心等待
sudo make install

安装之后,doc文件夹在/usr/local/share,可以拷出来,随用随查。

第三步:测试

源码:

CMake文件:

运行成功,即能够获取到数据流和帧率信息
OpenNIGrabber

提示设备找不到的话,记得插拔一下Kinect啊