在Mavericks下编译OpenNI2+libfreenect

最近打算折腾一下Kinect,懒得给Mac装windows,所以准备用OpenNI2.

查了一下资料,发现OpenNI2已经变成了一个独立的软件平台,硬件设备通过一个统一的接口编写驱动。对于Kinect来说,微软是不会为它在Mac OS上写驱动的,所以这时候就有了一个叫做“OpenKinect”的组织。

OpenKinect是一个Hack微软Kinect的开放组织。目的就是为了扔掉微软的Kinect SDK而只用其硬件。OpenKinect下的一个开源项目“libfreenect”就能够完成这个功能。

libfreenect是一个单独特开发框架,它提供了一组接口能够直接与Kinect通讯。话虽如此,libfreenect虽然已经能够完成直接操纵Kinect,但单纯地使用它还不能够用到OpenNI的一堆特性。所以OpenKinect利用它们的研究成果,封装了一个能够被OpenNI所使用的Kinect驱动。这个驱动作为libfreenect的一部分发布,项目叫做“OpenNI2-FreenectDriver”。

除此之外,libfreenect和OpenNI2都依赖libusb。

本机编译器配置:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1  
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)  
Target: x86_64-apple-darwin13.1.0  
Thread model: posix  

本机操作系统:Mac OS X Mavericks。已安装依赖:cmake。

下面就开始介绍详细的安装过程。

首先下载libusb

编译时一定要注意把它编译成Universal Binary,执行下面几条语句:

export CFLAG='-arch i386 -arch x86_64'  
./configure
make all  
make install  

然后下载编译libfreenect:

git clone https://github.com/OpenKinect/libfreenect.git  
cd libfreenect  
mkdir build  
cd build  
cmake .. -DBUILD_OPENNI2_DRIVER=ON  
make  
make install  

这时候所有相关的内容会被编译到build文件夹中。然后下载编译OpenNI2:

git clone https://github.com/OpenNI/OpenNI2.git  
cd OpenNI2  
make ALLOW_WARNINGS=1  

在make的过程中,可能会出现编译错误。是因为Glu源码中的一个宏定义跟系统的一个函数定义重名了。解决方案看这里

这时候所有编译工作的都做好接下来回到libfreenect目录中,在build/lib/OpenNI2-FreenectDriver/中有一个libFreenectDriver.dylib文件,可以创建一个软连接到OpenNI2/Bin/x64-Release/OpenNI2/Drivers/lib中。这样OpenNI2就能识别Kinect了。

Friskit

继续阅读此作者的更多文章