2011-12-09 114 views
2

我正在查看文档,试图找到任何将 允许我的Kinect /设备?如何通过OpenNI访问Kinect /设备?

我想获取加速计数据,但不知道如何。到目前为止, 是我在指南和文档中发现的两件事: XnModuleDeviceInterface/xn::ModuleDeviceXnModuleLockAwareInterface/xn::ModuleLockAwareInterface

我想知道是否可以使用ModuleDevice获取/设置方法与设备 对话并询问加速度计数据。 如果是这样,我该如何开始?

另外,我在想,如果有可能暂时“锁定” openni 功能的同时,我试着通过 freenect或类似的东西来获得加速计数据,然后看完后“解锁”是 完成。

有没有人试过这个?有小费吗?

我目前使用SimpleOpenNI包装和处理,但已经使用OpenFrameworks和C++库,所以语言不会很重要。

回答

4

标准OpenNI Kinect驱动程序不会暴露或允许访问任何加速度计,电机或LED控件。所有这些控制均通过SensorKinect Kinect驱动程序不与其通信的“NUI Motor”USB设备(protocol reference)完成。

解决此问题的一个方法是使用经过修改的OpenNI SensorKinect驱动程序,即连接到NUI电机设备的this one,并通过“CameraAngleVertical”整数属性显示基本的加速度计和电机控制。看来你应该能够使用SimpleOpenNI和Processing读/写任意整数属性。

如果您愿意使用非基于OpenNI的解决方案,则可以使用基于libfreenect的Daniel Shiffman's Kinect Processing library。你会得到很好的加速度计,电机等等,但是将失去对OpenNI骨架/手势支持的访问。一个类似的OpenFrameworks库是ofxKinect

关于锁定OpenNI节点,我的理解是,这只是防止属性更新,并在USB驱动程序级别无所作为。在驱动程序之间切换 - 基于PrimeSense的SensorKinect和基于libusb的libfreenect - 在运行时是不可能的。可能(我没有尝试过)为相机设备配置OpenNI,并使用freenect与NUI电机设备进行通信。这些设备之间不需要锁定/同步。

+0

正如xOpenNI的评论包含通过ofxHardwareDriver类的硬件支持(加速计,LED,电机)。所有需要的是使用设备的索引调用setup(),调用update(),然后有控制的所有函数(setTiltAngle(),getTiltAngle(),setLedOption(),getAccelerometers())。 –