PrimeSense技术是微软(Microsoft)Kinect传感器系统的基础,该传感器系统被设计为与微软Xbox 360控制台游戏系统一起工作(图1)。它的工作原理非常简单,但执行过程相当复杂。PS1080系统级芯片(SoC)则是一款完美支持PrimeSense技术的产品。
这款芯片独立地管理音频和视频信息,这些信息都可以通过USB连接进行访问。USB仅为PrimeSense单元提供电源,Kinect还需要额外的电源供给它的伺服系统。
大多数设计工程师至少都非常熟悉Kinect与Xbox一起工作的方式。Kinect主要用来向游戏程序提供有关玩家的信息。玩家需要位于电视机前方,并且面对Kinect,然后通过移动和手势与游戏发生交互。了解Kinect如何获得这些信息是非常有趣的一件事。
在Kinect推出之前,像这类手势识别是使用LIDAR(激光诱导差分吸收雷达)或激光雷达实现的。超声波传感器不能提供足够的精度。另外一种方法是使用图像分析,但非常复杂,运算要求很高。
PrimeSense使用截然不同的方法。它是从传感器投射出红外点阵图案,然后使用带红外滤波器的传统CMOS图像传感器进行检测。图案会根据反射光线的物体发生改变。那些点的大小和位置也会随物体与发射源的距离变化而变化。
PS1080接收来自图像传感器的结果,然后通过判断差异来产生深度景象。深度景象的分辨率是1024x758(VGA),但CMOS传感器具有高得多的分辨率。能够被硬件捕获的图像分辨率实际上是1600x1200,这是提供深度景象所必须的,否则就没有足够的分辨率来检测投射出的红外点阵的位置和大小。
PS1080芯片的主要工作是识别红外点,将它们的状态信息转换成深度值。这不是一个简单的任务,也不是一般的微处理器能够处理得了的。幸运的是,PS1080可以按30帧/秒的速率完成这一任务。在一个像素代表的区域内一般能找到好几个点。
最短距离在1米以下(0.8米),最大深度约3.5米。这个范围正好适合位于高清电视机前面的游戏玩家。可视区域是一个矩形锥体,水平垂直方向分别是58度和45度。
分辨率和检测质量取决于物体相对传感器的位置,但对于玩游戏以及机器人对象识别与碰撞避免而言上述指标足够应付。在2米的距离处,深度分辨率是10毫米,而水平与垂直分辨率可达3毫米。
视频传感器和深度CMOS传感器紧邻放置,以方便深度景象和彩色图像的合并。PS1080通过执行一个注册过程来正确地对齐彩色图像(RGB)和深度(D)信息。RGBD信息就是需要传送给主机的内容。
对于需要避开某个物体的机器人来说仅仅深度信息就可以了。有时候在游戏中也足够用了,具体要看在做什么动作,有多少个玩家要被跟踪。而RGBD信息可以被进一步分析,使系统识别出物体以及它们之间的关系,比如手-臂-身体的关系。
主机完成更高层的对象和动作识别。OpenNI(自然交互)组织提供了框架和应用编程接口(API),用于处理像Kinect这样的设备。OpenNI支持包括视频和音频设备在内的许多设备(图3),还能通过更高端的中间件执行对象跟踪等功能。
Kinect在系统中集成了一对麦克风。PS1080可以处理4个外部数字音频源,并通过USB接口以同步方式提供可视视频、深度和音频信息。
微软公司认识到除了与Xbox一起工作外,Kinect应该还能发挥更大的用处。Kinect接口早就已经存在,如今微软针对这个接口发布了一套软件开发套件(SDK)。商用版可能已经投入使用,而PrimeSense也拥有相应的软件开发套件。
PrimeSense技术具有很好的可扩展性,因此非游戏和可能的非机器人应用对它也有兴趣。例如,精确接近检测可能不要求可视的视频部分。PrimeSense技术无疑将改变我们的生活方式。