2.2 Kinect传感器的硬件组成
如果打开Kinect传感器的外壳(通常建议不这么做),你会发现一个结构复杂的设备,其中包含很多的感应器元件和处理芯片。事实上,内部传感器栏上甚至有一个小风扇,用于冷却所有的电子器件。
相对而言,Kinect是比较容易拆卸的,如图2-4所示。Kinect的电子芯片很多都采用非焊组装的方式,如果你能得到备换的零件,修复率应该会很高。
如图2-5所示,除了语音指令和体感操作指令外,Kinect没有其他形式的用户输入,其输入系统的关键是由麦克风和摄像头组成的感应器系统。
如图2-6所示,Kinect内部的确比想象中要复杂得多,其主板并非标准的单板压模工艺,而是分拆为成三个独立的部分,并且配有专用冷却风扇。
PrimeSense技术是微软Kinect传感器系统的基础。最初,该传感器被设计为与微软Xbox 360控制台游戏系统的自然人机交互输入。它的工作原理容易理解,但执行过程相当复杂。PS1080系统级芯片(SoC)则是一款完美支持PrimeSense技术的产品,可以将其理解为Kinect的“心脏”。
从外观上看,Kinect也有三只“眼睛”,它们自左向右分别是红外投影机、彩色摄像头、红外深度投影头。此外,Kinect还暗藏着四只“耳朵”—L形布局的麦克风阵列。
PS1080这款芯片独立地管理音频和视频信息,这些信息都可以通过USB接口进行访问。USB仅为PrimeSense单元提供电源,Kinect还需要额外的电源供给它的伺服系统。
以下是Kinect的组件的完整列表:
外壳、底座及4个不同类型的螺钉;
Moving Touch传动马达电动机(用于仰角控制);
散热风扇;
彩色摄像头;
红外摄像头;
红外投影机;
麦克风阵列(4个);
3部分主板;
14种关键芯片。
注意 核心的Primesense芯片来自以色列、存储芯片来自韩国三星,部分零配件来自中国台湾。Kinect和Xbox 360一样,都是在中国广东组装制造。
对Kinect的核心芯片描述的摘要如下:
Wolfson Stereo ADC with microphone preamp(立体声ADC与麦克风前置放大器);
Fairchild N-Channel PowerTrench MOSFET;
NEC USB 2.0 hub controller(USB 2.0集线器控制器);
Unidentified SAP package chip;
Camera interface controller(摄像头控制芯片);
Hynix 512Mb DDR2 SDRAM;
Analog Devices CMOS Rail-to-Rail Output Operational Amplifier(CMOS运算放大器);
TI 8-bit, 8-channel Sampling A/D converter;
Allegro low voltage stepper and single/dual motor driver(低功率步进器和单/双直流电动机驱动器);
ST 8Mbit NV flash memory(8MB闪存);
Marvell SoC camera interface controllerAP102(附带摄像头接口控制器的SoC);
PrimeSense PS1080 image sensor processor(SoC成像传感器处理器,PrimeSense的核心芯片);
TI USB audio controller (音频控制器);
KionixKXSD9 accelerometer (三轴加速度,测量是否水平,计算偏移用于补偿)。
你可以从网络上搜索到关于Kinect硬件拆解的相关文章。
Kinect的关键部件如图2-7所示。
图2-7所示Kinect关键部件及说明如下:
1)麦克风阵列:声音从4个麦克风采集,同时过滤背景噪声,可定位声源。
2)红外投影机:主动投射近红外光谱,照射到粗糙物体、或是穿透毛玻璃后,光谱发生扭曲,会形成随机的反射斑点(称为散斑),进而能被红外摄像头读取。
3)红外摄像头:分析红外光谱,创建可视范围内的人体、物体的深度图像。
4)仰角控制马达:可编程控制仰角的马达,用于获取最佳视角。
5)USB线缆:支持USB 2.0接口,用于传输彩色视频流、深度流、音频流等。必须使用外部电源,传感器才能充分发挥其功能。(Kinect的功率达到了12W,而普通USB一般是2.5W。)
6)彩色摄像头:用于拍摄视角范围内的彩色视频图像。
接下来,分别从控制芯片、红外投影、视频输入、音频输入、姿态控制调整等方面来分析Kinect硬件的内部结构。
2.2.1 Kinect的“心脏”—PS1080 SoC
Kinect的“心脏”是PrimeSense的PS1080 系统级芯片(SoC)。PS1080 SoC拥有超强的并行计算逻辑,可控制近红外光源,进行图像编码并主动投射近红外光谱。同时,通过一个标准的CMOS图像传感器接收投影的Light Coding 红外光谱并且将编码后的反射斑点图像传输给PS1080,PS1080对此进行处理并生成深度图像。图2-8所示为PrimeSense的推荐设计。
PrimeSense是一家以色列公司,它赋予电视、机顶盒、客厅计算机等消费电子产品自然交互技术,招牌就两个字—深度。
PS1080 SoC芯片是一个多感应系统,能提供同步深度图像、彩色图像和音频流,如图2-9所示。PS1080通过USB 2.0物理层协议将所有数据传送到主机。PS1080适用于各种主机CPU—所有深度获取算法均在PS1080上运行,主机只需运行最低限度的USB通信层。通过这种设计,即使是计算能力有限的主机设备也能具备“深度图像获取能力”。
深入理解 关于PrimeSense的推荐设计及专利信息,可通过在Micorosoft学术搜索或Google专利搜索中搜索。关键字“INTEGRATED PROCESSOR FOR 3D MAPPING”或其专利号“Pub.No.:US 2010/0007717 A1”进一步了解。
此外,Kinect使用NEC uPD720114的USB 2.0集线器控制器作为数据集成接口,主要控制芯片包括Allegro Microsystems A3906(低电压步进器和单/双路直流电动机驱动器)、Marvell AP102(带摄像机接口控制器的SoC)/PrimeSense PS1080-A2(成像处理器SoC)、TI TAS1020B(USB音频控制器)和其他辅助计算/存储设备。
Kinect在设计时由于平衡Xbox 360商业和技术上的诸多考虑,以150美金的定位包含如此众多的功能,让Xbox 360如虎添翼。Kinect的芯片造型上,要求最大限度分担Xbox 360的处理压力,尽量使Kinect硬件层分担一些预处理的工作。
在Kinect早先原型设计的一个版本里,包含一个额外的硬件传感器用于加速“骨骼跟踪”任务,但最终版本还是基于主机软件来实现的。从商业角度而言,这可以降低20至30美元,并保持更小的体型。
2.2.2 Kinect的“三只眼”—投影机和两个摄像头
你可能已经注意到Kinect有三只不对称的“眼睛”,从左向右分别是红外投影机和一组光学部件—彩色摄像头和红外摄像头,如图2-10所示。
在图2-10所示中,从左向右,分别是OG12/0956/D306/JG05A红外投影机、VNA38209015CMOS彩色摄像头,以及Microsoft/X853750001/VCA379C7130CMOS红外摄像头。中间的摄像头提供了彩色图像;剩余的两个元件通过发射/接收红外线,来提供深度数据,如图2-11所示。尺寸上它们接近于网络摄像头,其镜头大,具备自动对焦功能。
Kinect获得深度数据的原理如下:红外投影机的普通激光源投射出一道“一类普通激光”(Class1 Lasor),这道激光经过磨砂玻璃和红外滤光片,覆盖Kinect的可视范围,红外摄像头接收反射光线,识别目标物体的“深度场”(Depth Field)。后面的章节会进一步介绍相关内容。
- 红外投影机
红外投影机是位于Kinect最左侧的那只“眼睛”,它与最右侧的红外摄像头配合使用。拆解后的红外投影机如图2-12所示。
PS1080 SoC(系统级芯片)对红外光源进行控制,以便通过红外光编码影像放映场景。红外投影机的光源是一类普通激光光源,经过磨砂玻璃和红外滤光片,投射出近红外光,该光波长为830nm,可持续输出,符合IEC 60825-1标准中的一级安全要求。红外摄像头是一个标准CMOS影像传感器,负责接收放出的红外光,并将红外光编码影像传给PS1080。PS1080负责处理红外影像,然后逐帧生成准确的场景深度影像,如图2-13所示。
看到“激光”,你可能心存疑虑:Kinect发射的是红外线还是激光,会不会对人体有害?英文资料里有提到“Laser projector:near infraredlight,830nm,cons-tantoutput, class1 laser”。上述也提到过,事实上,Kinect的光源符合IEC 60825-1标准中的一级安全要求,大家大可放心。
扩展阅读 激光辐射的电磁波波长范围包括长波长的红外的(CO2激光)范围,到近红外(Nd激光:Yag,Nd:YVO4),可见光(Ne或者氩)和不可见的紫外光(受激准分子激光)。在光谱中波长自0.76至400微米的一段称为红外线,红外线是不可见光线。所有高于绝对零度(–273.15℃)的物质都可以产生红外线。有体温的生命体(如人类)发出的光谱属于“远红外线”;Kinect发射的光谱属于“近红外线”,波长更小。
关于激光辐射的规章制度已经建立,它是根据伤害人的程度来定义激光危险不同的等级,从激光一级(在各种情况下,一级激光基本安全)到激光四级(任何情况下,四级激光是危险的)。
- 彩色摄像头和红外摄像头
Kinect是通过彩色摄像头和红外摄像头来观察这个世界的,拆解后的硬件如图2-14所示。
Kinect这两只不同的“眼睛”所看到的世界是如何同步和互相补充的呢?视力又是如何?
为了生成更准确的传感器信息,PS1080系统级芯片(SoC)会执行“PrimeSense注册过程”。什么是PrimeSense注册过程?
为了让深度影像和二维标准色彩影像相互对应,必须进行注册。注册就是将色彩影像和深度影像进行对应,产生像素相互对应的影像,即色彩影像中的每个像素分别与深度影像中的一个像素对应。这能让应用程序准确了解收到的色彩影像中每个像素的深度。所有传感器信息(深度影像、色彩影像和音频)通过一个USB 2.0接口传送给主机,且时序一丝不差。
通过Kinect SDK可以获得同步的深度图像和彩色图像数据流。
2.2.3 Kinect的“四只耳朵”—麦克风阵列
由于Kinect的“三只眼”的不对称分布,Kinect麦克风阵列也是左右不对称,从而保持质量分布的均衡。Kinect的“四只耳朵”分布如图2-15所示。
Kinect的音频系统采用了四元线性麦克风阵列技术。一般而言,麦克风阵列中包含四个相互独立的小型麦克风,每个设备之间相距数厘米,其排列可呈线形,捕捉多声道立体声,通过数字信号处理(DSP)等组件,根据麦克风阵列接听声音的时间差来判断声源方向,如图2-16所示。
从元件上看,除了Kinect所有的四元麦克风阵列以外,还配置了Wolfson Microelectronics WM8737G(配置了前置放大器的24bit立体声ADC)用于进行本地的音频信号处理。Kinect的“四只耳朵”具有以下特点:
音频格式:16kHz, 16bit单声道(PCM)。
音频输入特性:4个带有24bit的数字模拟信号(ADC),用于消除和处理噪声的麦克风阵列。
Kinect共有4个向下的麦克风:右侧3个,左侧1个。
微软认为最佳的声音搜集方向应该是朝下的。这种麦克风阵列的设计是为了尽可能获得优质的声音信号以及判断不同方向的声源,尤其适用于在室内的走动,并识别语音命令。比如玩Kinect Xbox 360游戏前,为了正确识别语音指令,系统会建议用户对房间中的语音进行校准。不过,如果你改变了房间内的家具摆放,就必须要重新校准。在进行设置时,语音识别功能会根据房间的反射性创制一幅音频分布图。音频处理器则利用这幅图来执行多通道上的回声消除,以提高对声音命令的解读能力。
与一般的单麦克风数据相比,Kinect阵列技术包含有效的噪声消除和回波抑制(Acoustic Echo Cancellation,AEC)算法,同时采用波束成形(Beamforming)技术,通过每个独立设备的响应时间确定音源位置,并尽可能避免环境噪声的影响。此外,Kinect还被设计为可以在发言者超过一人时辨别出相应的语音指令。波束形成技术已广泛应用于雷达、声纳和通信等领域。
扩展阅读 上述波束成形技术的细节来源于微软研究院,有兴趣的读者可以参考A New Beamformer Design Algorithmfor Microphone Arrays,原文发表于IEEE-Proceedings of ICASSP 2005 USA。
2.2.4 会摇摆的“相控雷达”—传动马达
Moving Touch传动马达让Kinect感觉像是个“相控雷达”,能根据它与用户之间的相对位置/距离来调整姿态,从而更有效地与用户进行交互,这种机制被命名为Tilt机制(垂直倾斜机制),如图2-17所示。
传达马达可以控制Kinect仰角,调整最佳姿态来适应玩家的位置,确保玩家全身肢体被覆盖。Kinect for Xbox 360视野范围如图2-18所示。
Kinect配备了追焦系统—Tilt仰角控制。如果玩家超出影像范围,底座马达可驱动Kinect垂直调整±28°。而Kinect成像系统自身的视角大小为垂直43°,水平57°。
注意,目前Kinect的传动马达还比较简陋,将其拆开可以发现其中的电动机和塑料齿轮看起来工艺有些粗糙,抗疲劳能力有限,如图2-19所示。当然,从商业成本压缩的角度来说,这也是可以理解的。另外要注意的是:Moving Touch的传动马达不适用于重复性运动,并应避免人为手工的转动。Kinect SDK建议避免频繁调用Tilt功能,其最低标准是每秒不超过1次(或每20秒不超过15次)调用。
2.2.5 姿态控制—三轴加速度计
考虑到Kinect的放置平面未必绝对水平,或者有不固定运动的应用场景,Kinect的硬件设计包含了Kionix KXSD9三轴加速度计。
自iPhone问世,三轴加速度计已在智能手机中得到广泛应用。三轴加速度计除了自动切换水平、垂直显示视角外,还可在GPS信号不好时,用作运动偏移补偿计算。日常生活中的一些计步器也是采用三轴加速度计的。
Kionix KXSD9 三轴加速度计用于倾斜补偿,保证Kinect深度数据的准确性。后面会谈到人体骨骼识别,其中很重要的一点就是判断Kinect是否水平放置,每个骨骼帧都包括一个描述重力的值。该值是由内部的三轴加速度计配合传感器图像测量来计算得到的。
如果你在玩Kinect for Xbox 360游戏时移动了Kinect,界面会跳出一个提示窗口,暂停游戏。系统就是通过三轴加速度计捕捉到这一事件的。
后面章节会谈到利用Kinect Services for RDS 2008 R3进行机器人运动开发,通过Kinect技术充当机器人“眼睛”,对周围3D环境进行实时重建;还会提到“Kinect牌导盲犬”,为盲人指路。因为Kinect处于运动状态,硬件设计上包含三轴加速度计,以用于倾斜补偿。
2.2.6 USB接口及电源
在Primesense的推荐设计中,采用了标准的USB 2.0接口。在Kinect的设计中,USB仅为PrimeSense PS1080 系统级芯片(SoC)单元提供电源。Kinect还需要额外的电源,如用以驱动传动马达、投射红外,这样传感器才能充分发挥其功能。
连接Kinect十分容易,只需插上电源,并将Kinect通过USB接口连接到计算机上。盒装版本的Kinect,都有独立的电源。如果你买的是新版Kinect Xbox 360套装,是不附带电源的,而且不是标准的USB接口。如果想在PC上用Kinect,必须购买独立的电源供应器和一根AUX转USB的接线,如图2-20所示。
Kinect接口支持USB 2.0,用于传输视频流、深度流、音频流等。Kinect LED指示灯位置如图2-21所示,其状态指示如下:
对于Kinect for Xbox 360,仅连接PC后Kinect的LED会点亮,但还不能执行主要功能;连接电源后正常工作,LED绿灯会持续闪亮。
对于Kinect for Windows,只有连接并且加点后,绿色LED才会常亮。
Windows版Kinect的USB线被缩短,并可兼容各种型号的计算机,内置的软件可以确保USB和计算机其他USB设备的兼容性。
Kinect的电源和USB是同一个接口,如图2-22所示。Kinect必须使用外部电源,传感器才能充分发挥其功能。Kinect的功率达到了12W,而普通USB一般是2.5W。
小插曲 微软没有对USB传输的信息进行加密,因此这给黑客最初破解Kinect提供了非常有利的条件。New Scientist网站在Inside the race to hack the Kinect一文中讲述了Kinect被破解的全过程。黑客们通过USB记录仪截获了Kinect与主机之间通信的所有数据,整个破解过程就是一个逆向工程,类似于密码破译,未加密的数据给黑客带来了极大的便利,这可能也是Kinect设计上基于性能的一些考虑。
2.2.7 Kinect风扇控制
为了抑制温度过高导致激光振荡波长变化影响激光散斑,Kinect在近红外激光器上颇费了些心思,实施周密的温度控制。在导热性高的金属部件上安装激光器,在金属部件和激光器之间还配置了冷却用热电效应器件(Peltier Effect Device,TE),旁边还备有冷却风扇。具体如下:
风扇从一端进气、一端出气。
Kinect从自身设计上已考虑如何避免风扇过热。这由传感器硬件控制,当温度过热(超过90℃)时会关闭摄像头。
Kinect For Windows SDK本身没有提供接口来控制风扇。