毫无疑问,今天的智能手机已经是人们注目的焦点,作为移动计算最坚定的鼓吹者,我实在想不出它将来不风卷整个世界的理由。它小巧,易携,功能却很强大,可以用它当照相,摄像,玩游戏,玩虚拟现实应用,当然,最重要的一点,就是可以拿来装B。它可以通过你的不同动作来辨别你对它的控制期许,根据你的使用情况进行实时反馈。它是未来数字世界智能化的先锋,也是单身青年的泡妞利器。但是,在你在无聊时大玩Labyrinth2迷宫滚球时,当你在追女孩时拿出手机在Google Map上找酒吧时,当你手持iPad在飞机上低调不语还能引来空姐围观时,有没有仔细想过,是什么东西将这种新潮,智能,百般武艺样样精通的光环带给移动手机呢?

是传感器。看看左边这张图。先说明一下,我本来准备放iPhone4的玉照上来的,但实在是每次看见就忍不住想起教主对我们拿手机姿势的教诲,所以还是用一张iPhone3将就了。作为引美女英雄尽折腰的代表,水果公司推出的iPhone是手机设计潮流的引导者,设计精神的集大成者,也是集成传感器的永远的先锋。从光强传感器,接近传感器,加速度传感器,到电子罗盘,然后到最近推出的陀螺仪,当然还有我们平时基本已经司空见惯的传感器,比如GPS,图像传感器,等等。种类多样,让人目不暇接。不过种类的目不暇接,对于很多普通手机用户来说,可能就是乱花渐欲迷人眼。问一下你自己,当你准备挑选一款手机,在琳琅满目的iPhone,Android大军以及Nokia大军中徘徊不定,准备仔细对比spec的时候,你真的对这些传感器能带给你什么都很清楚么?如果不是,那你就是这篇文章的潜在读者了。

恩,在当潜在读者之前,你可能还会对传感器的意义感到怀疑,比如你会觉得太trivial了,这玩意不就是拿来打游戏的么。其实吧,说白了,这实际上就是目前这玩意最吸引人的地方。但我们现在要介绍这东西,总得给它安一些大帽子对不对,得对人类进步,社会高雅有贡献才能登大雅之堂。你说CCAV要整江苏卫视,也要安一个”影响社会风气“的高帽子嘛。你要直接举起摆明了本质的“抢收视率”的大旗,那就没人理你了。所以,这里简单总结一下学术界对手机+传感器的高帽子:这个组合可以用来组建最大的传感器网络,基于这个网络的应用,可以致力于减少污染,预防疾病,高效利用能源,最大化个人社交网络,维护社会和谐稳定,还能给每个人发财的机会。

当然,这些高帽子,大家看看就好了,不见得每一条都是对的,就算都是对的,怎么理解,怎么实现,也是很复杂的事情,要不哥们我早发财了,对吧。总的来说,基于智能手机+传感器的应用现在确实是越来越多。比如下面几个项目:

- Diabetes Meter Mates for  PC/Phone to Track Trends;

- Fitbit;

- The iCarte – a RFID Sensor for iPhone;

- l5 remote,  iPhone remote control;

还有一些有趣的系统原型:

- iPhone + Arduino + Heartrate Monitor = HumanAPI;

- Radar from Nokia in Your Pocket;

Nokia也针对此提出了一个比较高端的概念:

- Nokia Eco Sensor Concept;

基本上,在娱乐,商业和医疗保健领域,传感器的概念已经在逐渐开始渗透了。可以肯定的是,这个市场,主要利润并不会流入制造商的腰包,而是会流入服务提供商的腰包。你,我,他,每一个移动开发者,都可能成为这个服务提供商。

好,不再贫嘴了,进入主题,下面简单介绍一些目前主流手机大多数都配备的传感器,希望能给读者朋友一些基本的概念,不至于在享受各种智能服务的时候不清楚底下的基本原理。下表是一个总结性的表格,包括了除了太简单的光强传感器以外的别的代表性传感器。现在,我们就来一一介绍。

  加速度传感器 电子罗盘 陀螺仪 接近传感器
功能
通过测量三个轴的加速度大小来判断人体运动。 通过测量设备周围地磁场的强度和方向来判断朝向 通过测量三个轴的旋转速率来判断朝向 无须物理接触就判断附近物体的存在
主要局限性 受重力干扰大,瞬时误差大 误差大,容易受其他磁场和金属物体影响。主要用于校正其他设备 误差会累积,长时间读数的准确性差 不通用,大多数只针对几种材质
应用 活动测量 导航 导航 智能省电

1. 接近传感器

接近传感器,顾名思义,就是用来检测非常接近的目标物体的。这类传感器通常利用电磁场或者静电场的改变,或者测量发射的电磁波的反射波的改变,来进行判断。因为手段不一样,所以接近传感器的目标物体种类也不一样,有的针对金属物体,有的针对塑料物体。具体到手机上来说,现在的手机都是使用了新一代的反射光学接近传感器,可以针对较多种表面类型来检测。过程很简单,它们会发出人眼看不到的红外光,一旦手机来电话了,你肯定会接听,接听会导致脸部皮肤离传感器很近,这样只需要用光学探测器检测从皮肤反射回来的光的总量的变化,接近传感器就检测到了这个接近。这个传感结果有什么用呢?一个明显的例子,就是可以改进手机的节电功能,比如判断什么时候自动打开或关闭显示屏,键盘背光或者触摸功能,甚至于什么时候自动关机/待机,取决于设备的主人是正在通话,正在打字,还是就直接把设备扔到口袋中了。这些任务,就由接近传感器一肩挑了。

2. 加速度传感器

我个人估计,大家最熟悉的,就是加速度传感器。由于其带来了更多的直觉游戏体验,基本姿态识别和环境感知功能,这类传感器从08年开始井喷,因iPhone、iPod的带动而红火,因Wii的集成而大规模部署,并由此带动了价格的下降。现在如果还有哪款手机或者音乐播放器不配备这个传感器阿,出厂去商店都不好意思和摆在一起的别的设备打招呼。加速度计的原理很简单,现在手机里面基本配备的都是3维线传感器,也就是说,用来测量x,y,z三个轴上的加速力。加速力就是当物体在加速过程中作用在物体上的力,就好比地球引力,也就是重力。用一个简单的图例表示:

我为什么说大家应该都熟悉加速度传感器呢,如果用IBM笔记本的朋友就知道,前IBM,现联想,的Thinkpad系列笔记本,一直都有硬盘保护功能,这个功能利用的就是通过加速度传感器动态监测出笔记本的震动,并根据这个震动选择关闭硬盘还是继续运行。这样可以最大程度的保护由于振动,比如颠簸的工作环境,或者不小心摔了电脑做造成的硬盘损害,最大程度的保护里面的数据。类似的一个非常普及的用处就是目前用的数码相机和摄像机里,用加速度传感器,来检测拍摄时候的手部的振动,并根据这些振动,自动调节相机的聚焦。现在,我们手头都有iPhone,Android军团,Nokia N900等手机,我们至少都知道,加速度传感器可以帮助你打游戏。典型的例子比如Labyrinth2,中文名叫做迷宫滚球。但更广义地说,加速度传感器在检测人的即时背景环境信息上更有用处。比如说,通过三个轴上加速度的变化值的分析处理,手机可以知道你现在是在走路还是骑车还是坐车,是上坡还是下坡,等等。

从理论上讲,有了三个轴的加速度立体信息,我们可以推断出加速方向的信息,比如,你加速骑车的方向,或者你乘坐的电梯正在朝上还是朝下。根据初中数学的知识,这些方向和角度都是可以通过矢量的加减运算算出来的。可惜的是,我们没法仅仅依靠加速度传感器来检测加速方向的角度,也无法得知手机本身的朝向。这是为什么呢?要解释这个,就牵涉到一个困扰加速度仪的大问题,就是重力加速度分量的干扰。

当你的移动设备处于静止状态时,加速度计能告诉你它相对于地平面的朝向,这是没有问题的; 然而,当设备动起来的时候,分析朝向就相当复杂了。这种情况下,要分四种类型讨论

  1. 设备处于水平完全静止或者匀速运动,这时的它会在垂直方向的轴上输出一个值,那就是重力加速度,接近9.8 。
  2. 设备自由落体的时候,会三个轴都输出0呢。
  3. 设备静止或者匀速运动状态时,但没有处于绝对水平。此时任何轴都可能有输出值,但都是重力加速度的分量。一旦处于这种状态,我们可以通过求分量于三个轴的角度来得知手机旋转的角度。
  4. 设备沿着任意方向加速。这时,问题就变复杂了,因为你没办法知道设备目前的方向角度信息,所以你根本就不知道重力加速度的分量到底是怎么分解的,于是……你也就不清楚某个轴所报告的数值,哪些是重力加速度部分,哪些是真正的线性加速度部分

除此之外,另一个加速度传感器无能为力的地方,就是纯水平旋转,或者匀速水平变向,见下图:

File:Ayaw.gif

这类运动,加速度传感器也只会输出一个值:g。因为无论是x,y,还是z轴,都没有真正意义上的加速运动。这会带来什么问题呢?好比你带着一个手机在街上走,沿着一条大街走了一段路,这段路的加速度自然是能被采到的。然后你转弯,在另一条路上走一段,这一段的加速度也是能被采到的。你回到家,拿出手机看数据,没错阿,两端加速度都有,手机知道我走了两段路,很智能阿,缺少了什么东西?你转弯的动作和角度!这个加速度计是采不到的,而这个信息,在很多增强现实的智能应用中,却是非常有用的。

为了解决这个问题,人们开始引入其他种类的传感器,比如接下来要介绍的这个陀螺仪。

3. 陀螺仪

陀螺仪代表着另一个重要的,但可能还需要等待一两年才能腾飞的传感器领域,主要是因为导航级MEMS陀螺仪目前对于手机来说仍然过于昂贵,普通陀螺仪一般厂商都很少看上眼。当然,在iPhone4的带动下,可以预见的手机军备竞赛,迟早会让陀螺仪逐渐普及开来。陀螺仪的主要作用,是基于角动量守恒的理论,沿着某个特定的坐标轴测量旋转速率。在使用中,陀螺仪的转子在高速旋转时,始终指向一个固定的方向,当运动物体的运动方向偏离预定方向时,陀螺仪就可以感受出来。在现代航空装备中,飞机驾驶的时候,就是通过多达十多个的陀螺仪来测量机体是否翻滚,以及如何翻滚的。

下面三个图,是Wiki上关于飞行动力学讲解中的示意图,分别表示飞机上pitch, roll和yaw三个角度变化,这三种变化,都是陀螺仪的测量目标。同样的,在人带着移动设备到处走动的时候,移动设备也会有这三个角度方向上的变化,而监测这种变化,并将该变化以角度变化率的形式输出,就是移动设备中三维陀螺仪的任务。需要注意的是,这里的三个角度,和加速度计的x,y,z三维意义完全不同,不要混淆了。具体的区别,请参考这里。

 File:Ayaw.gif

陀螺仪的测量是随时间累计的,要知道当前的角度,只需要将之前所有的输出数值积分即可。当然,陀螺仪只会输出当前旋转的变化值,比如说,如果一架飞机是以60度的倾斜角度径直飞行,此时陀螺仪的输出为0,因为当前就没有机体旋转。但是,你可以通过之前的输出累计计算出当前机体倾斜角度是多少。陀螺仪有两个好处:

  1. 可测频率比较大,低可以低到直流信号,就是0Hz,高可以高到60-70Hz。这个范围,基本是根据人类的普遍动作频率所决定的,而且也考虑了很大的余量。一般的陀螺仪会对采集到的信号滤波,最终显示的数据基本是在0-20Hz范围的。当然,并不是所有陀螺仪都能测量到这个频率范围,这个取决于具体的档次了。
  2. 在设备中的位置并不重要。陀螺仪测量的角速度本质上是惯性角速度,所以你把它放在设备的前端或者后端,输出的值都会是一样的,没有什么区别。

说完了陀螺仪的优点,说说缺点吧。聪明的读者在看到陀螺仪计算角度的原理是,肯定能一下就发现陀螺仪的缺陷:这玩意的误差是累计的!也就是说,某一个时刻你因为不管什么样的原因引进了角度的误差,可能是静态漂移误差,可能是读数误差,whatever,这个误差就会一直跟着你,一直在后面的读数和计算中延续!更有趣的是,陀螺仪有一个臭名昭著的特性:它会随着时间而漂移!换句话说,每分每秒,它都会自动引入附加的误差!!时间一长,完了,你关于旋转度的测量值就变成了中国有关部门:可信度为0 。当然,科技是在发展的,现在很多高端的陀螺仪的随机误差很小,普通应用有时候都可以不用管这个误差。当然,一分钱一分货,这种高端陀螺仪通常都很贵,很少会采用到手机系统中。

这下好玩了,在一个短的时间刻度里,加速度值噪声特别大,而且还有重力的影响。在长的时间刻度里呢,加速度值总体是靠谱的,没有误差累计。而在短的时间刻度里,陀螺仪很准,因为误差累计的速度还是很慢的。但在长的时间刻度里,陀螺仪就不准得离谱。在某些情况下,加速度传感器可以用来校准陀螺仪,比如设备完全静止的时候,和重力相关的方向上,就可以这样做。那么,什么时候不行呢?回头看我们刚才放的那三个图,其中yaw的示意图

File:Ayaw.gif

yaw角度的变化方向是垂直于重力方向的!所以,通过刚才关于加速度的介绍我们知道,在这个垂直于重力的平面上,加速度传感器就没办法帮陀螺仪了。

本质上,通过三维加速度传感器+三维陀螺仪的合作,我们等同于拥有了一个六维的传感器,但无处不在的误差会让这个六维传感器偶尔感到无助。这时候,我们就需要另外的设备来帮忙做进一步的校正,这就是下面要介绍的电子罗盘。

4. 电子罗盘

电子罗盘,也称磁力计,或者电子指南针,是继加速度计之后,从09年开始井喷的一种传感器。如果我没记错的话,最早集成这个传感器的主流智能手机就是Google的G1,从这个意义上讲,G1对于磁性传感器市场的带动作用,可能堪比iPhone对于加速度传感器的意义。这玩意啥用处?顾名思义,就是告诉你南北极方向的。以前古老的那种指南针,或者叫平面罗盘,可以在你放平罗盘后告诉你南极北极在哪,这样,你就知道了目前你的正前方在地球这个大平面坐标轴上的角度了。当然,出于技术的限制,平面罗盘要求你保持水平,如果有倾斜就不准确了。后来出现的电子罗盘,很多是两轴的,也就是说,等同于电子平面罗盘。在我记忆中,几年前的openmoko手机就是集成的这种,所以有同样的限制。现在高端智能手机里面集成的都是三维电子罗盘,由于加入了倾角传感器,可以对罗盘进行倾斜补偿,这样就克服了这个缺陷,可以输出三维方向上的角度信息。

电子罗盘的原理也很简单,就是我们物理都学过的霍尔效应。当电流通过一个位于磁场中的导体的时候,磁场会对导体中的电子产生一个横向的洛伦兹力,电荷因此产生偏转,偏转的方向垂直于电流方向和磁场方向,而且正电荷和负电荷偏转的方向相反,从而在导体的两端产生电压差。 这个电压差也叫霍尔电压,和两个因素成比例:电流大小和磁场强度。当然这里有一个要注意的问题,如果磁场的方向是和导体非垂直的话,实际作用的磁场实际上是原来磁场的一个矢量分量。如何知道这个磁场分量的角度呢?我们可以用两个或者多个霍尔效应传感器,相互垂直,这样的话,磁场的方向就可以通过不同传感器上霍尔电压的比例值来求出,这个计算过程只需要知道基本的线性代数运算即可。当然,具体的计算中肯定有一些tricky的地方,不过不是关键点,所以这里就暂时不介绍了。所以和陀螺仪不一样的是,电子罗盘输出的是角方向值,而陀螺仪输出的是角方向的加速度。

所以大家应该都明白了,在电子罗盘的应用中,上述的磁场就是地球磁场,电子罗盘测量地球磁场的矢量值,然后再转换并表示在系统坐标中。在理想情况下,这样测出来的方向值也是比较准确的,一旦我知道移动设备刚开始的方向值,就能通过之后电子罗盘的输出,求出该设备接下来的一系列方向改变信息。

不幸的是,这个世界上的理想情况不存在。在我们经常使用移动设备的环境中,有时候会存在除了地球以外的别的,未被有效屏蔽的磁场,这个外加磁场会有很大可能干扰电子罗盘的读书,而让结果不可信。而且,如果移动设备周围有金属,一旦金属被磁化,电子罗盘也会受很大的影响。比如说,下面这张图,是把Nexus One平放在桌面上,旋转一圈,得到的值映射到坐标系上的

但是,当我们把一把剪刀放在Nexus One上,得到的值变成了

很明显的,受剪刀材质的影响,所有的值被聚类成了两类。

很有意思的是,有人根据这个特性,专门做了一个基于Android的金属监测器,参见这里,基本原理就是上面这个金属影响磁场

回过来说电子罗盘,从上面的讲解,我们知道,电子罗盘在实际生活应用中,一是容易受到干扰,二是受了干扰你也很难明白为什么会被干扰,再加上一些民用电子罗盘固有的缺陷,比如低信噪比,低动态范围,等等,所以呢,电子罗盘在很多的实际应用中,都是用来做校正作用的,换句话说,人们不会直接采用它的值,但可以参考这个值来校正陀螺仪或者加速度计计算出的角度。因为不管怎么说,电子罗盘至少误差是不会随着时间增长的,也不会受重力的干扰。

5. 综合应用

看了上面的介绍,相信大家心里面也都有了数。这三个玩意,各有神通,也各有缺陷,很多时候还真得相互配合来使用,才能达到预期的效果,真正准确检测出设备主人的行动信息。这个协作的过程比较复杂,但一般就是两个阶段,一是多传感器信息融合,一是滤波。要知道,高级点的传感器,一个都有几千美元,移动设备上自然不会使用很高档的传感器,同时也就意味着你从移动设备上得来的数值都会有很多噪声。

对于一般的app开发者来说,没有很多控制论方面的背景知识,所以滤波方面,可能简单的固定增益滤波方法就可以了。如果你能确定噪声信号可以被建模为随机过程的话,你还可以用卡曼滤波器。这里要提醒一下,不是所有的噪声都可以建模为随机过程,陀螺仪的通常符合,但加速度传感器的通常不符合:很多噪声是来源于人体的抖动,这个抖动是不能被建模成随机过程的。

下面这张图是学术界使用这三种传感器的典型的框图,供大家参考

说到这里,目前手机普遍集成的最重要的几种传感器就都介绍完了。希望能给普通用户提供一些普及性的知识,也希望能给app开发者们一些参考。多使用传感器,让你的app更加智能,你能从中得到的利润就更多。记住,在移动计算时代,利润瓜分的主人已经从生产制造者,变成了服务提供者。

参考网址:

1 http://www.motusbioengineering.com/index.htm
2 http://droidsensors.com/2010/02/sensors-for-mobile-phones-more-data-more-services-more-profit/
3 http://mylifewithandroid.blogspot.com/2010/03/sensors.html