施炯谈 WP7 设备上的传感器开发

阅读数:526 2012 年 7 月 17 日

话题:语言 & 开发

在 7 月 5 日,由天翼空间·开发者工厂主办,InfoQ 协助策划的第十一期专家讲坛活动上,来自 Windows Embedded 方向 MVP 施炯( @浙万院电信物联网专业 - 施炯)向开发者介绍了 WP7 设备传感器开发的相关知识,主要谈到了 Accelerometer 类、Compass 类和 Gyroscope 类的使用,Motion API 的使用,并针对开源控件 AccelerometerHelper、Shake Gesture Library 进行了分享。

Sensors On WP7讲稿下载

分享主要包含 WP7 设备传感器设备简介,如何使用 Accelerometer、Compass 和 Gyroscope,实例项目 Running Mate 实践等。

WP7 设备上包含的传感器主要有加速计(Accelerometer)、麦克风(Microphone)、A-GPS、摄像头(Camera)、罗盘(Compass)、陀螺仪(Gyroscope)。

加速计主要用来检测手机受到的加速度大小和方向,手机静置时只受到重力加速度影响,所以又有人把加速计功能又叫做重力感应功能。WP7 里的加速度计也能够响应手机的突然移动,比如颤动或突然晃动,可以用来仿真骰子或其他类型的随机运动。加速计通常有三个轴(x,y,z),同时遵循笛卡尔右手坐标体统。在开发过程中,需要注意 Landscape 分为左 Landscape 模式和右 Landscape 模式。

罗盘也称之为磁力计,主要用来测试磁场强度和方向,磁力计的强项在于定位设备的方位。可以测量出当前设备与东南西北四个方向上的夹角。磁力计主要提供了以下层面的数据:

  • HeadingAccuracy:方向指示的精度
  • MagneticHeading:与地磁北极的偏角
  • TrueHeading :与地理北极的偏角
  • MagnetometerReading:从磁力计得到的原始数据,以微特斯拉为单位

由于受到外部电磁场的干扰,会使得手机的 Compass 数据精度降低,在这种情况下,我们必须提示用户远离磁场干扰,并且对 Compass 进行校准。在 Windows Phone 7 上,与 CurrentValueChanged 一样,OS 为 Compass 提供了校准事件处理 compass_Calibrate。在 OS 检测到 heading accuracy 的绝对值大于 20 度时,就会触发该事件。在对 Compass 进行校准时,一般显示一个图片,提示用户对手机进行绕“8”字移动。

陀螺仪就是内部有一个陀螺,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。手机里陀螺仪实际上是一个结构非常精密的芯片,内部包含超微小的陀螺。陀螺仪测量是参考标准是内部中间在与地面垂直的方向上进行转动的陀螺。通过设备与陀螺的夹角得到结果。陀螺仪的强项在于测量设备自身的旋转运动。对设备自身运动更擅长。但不能确定设备的方位。

Motion API 所做的事情,其实质就和 GPSID 类似。在应用程序开发过程中,如果开发者获取原始的传感器数据,然后对其数据进行分析,从而去判断手机的姿态和移动方向,这样一个处理流程确实有点复杂,而且有时候也很难处理,如加速度传感器的返回值中,不仅仅包含了手机移动的加速度,还包括了重力加速度(事实上,在 Windows Phone OS 7.0 上,处理加速度传感器时,我们的确是需要经历上面的过程)。

因此,在 Windows Phone OS 7.1(Mango)中,引入了 Motion API,用它来对底层的传感器数据进行分析和处理,从而得到开发者需要的信息,如设备的姿态(yaw, pitch, and roll)、旋转加速度和线性加速度。需要注意的是,一代的 Windows Phone 7 手机没有开放 Motion API。因此,如果想要在 Windows Phone OS 7.0 上写基于 Motion 的应用程序,那是无法实现的。但是,自从这个月初微软提供了 Mango 升级以后,很多设备厂商都对其生产的 WP7 推送了 Mango 更新。在 OS 升级以后,有些设备就提供了对 Motion API 的支持。

此外,在分享过程中,施炯还罗列了开发中的一些注意点:

  • WP7 OS 7.0 和 7.1 的加速度传感器数据获取方法差异:ReadingChanged vs CurrentValueChanged
  • 硬件限制因素,如 Focus 返回的最大加速度为 2g
  • 传感器数据更新的时间间隔:TimeBetweenUpdates Interval
    • Accelerometer:20 ms
    • Compass:25 ms
    • Gyroscope:5 ms
    • Motion:17 ms
  • Compass 与 Gyro 返回的数值不同:Compass 返回角度,Gyro 返回弧度

在问答环节,施炯回答了网友的提问,详细信息如下:

问:Windows Phone 都有哪些传感器接口?是不是所有 Windows Phone 都具有这些传感器?

答:Windows Phone 主要的传感器包括加速度传感器、数字罗盘、陀螺仪等等。需要注意的是,并不是任何一个 WP7 手机都支持这些传感器。比如,Compass 并不是必须的。换句话说,微软并没有对其进行强制规定,硬件厂商可以根据自己的意愿来选择是否对其生产的 Windows Phone 7 设备加入数字罗盘的支持。例如,对于我的三星 Focus i917 而言,它支持加速度传感器和 Compass,但是却并不支持 Gyro。

问:WP 传感器都可以用来哪些相关类型应用软件的开发,是否需要外界硬件设备的支持?

答:WP 传感器比较多,可以用到很多应用中,有游戏、工具等等。开发这些应用,首先要确保你的手机支持这些传感器,这样才能调试。目前 SDK 的模拟器中,只给出了加速度传感器的模拟。

问:Windows Phone RTM 版本和 Windows Phone Mango 版本有什么不同呢?

答:RTM 就是 OS 7.0,Mango 就是 OS 7.1

问:PhoneGap 是否提供了对传感器的支持?

答:PhoneGap 支持加速度传感器和数字罗盘,具体信息可参考:Getting Started with Windows Phone

问:基于陀螺仪 API 可以开发哪些类型的 wp7 应用呢?感觉对陀螺仪的作用和相关应用还是不太明白?

答:陀螺仪的数据反映了手机在三个轴方向的旋转加速度。相对而言,我觉得 Motion API 中的三个姿态更加有用。

关于讲师

施炯,新浪微博账号@浙万院电信物联网专业 - 施炯,毕业于北京邮电大学信息与通信工程学院,获工学博士学位,曾任 Microsoft Windows Phone/Mobile MVP,现任 Windows Embedded 方向 MVP,微软中文技术论坛(MSDN)版主,业余的兴趣爱好为嵌入式系统,特别是基于 Windows Phone、Windows Mobile 和 Windows Embedded 平台的应用开发。其博客地址:http://www.cnblogs.com/dearsj001/

关于专家讲坛

天翼空间开发者社区专家讲坛是天翼空间开发者社区(www.189works.com)2012 年针对开发者推出的一项提升专业能力的系列讲座,每周四晚,邀请移动互联网开发领域的权威专家,通过语音频道专题讲座,线上论坛访谈,以及微博、QQ 群线上同步直播的形式,为社区的开发者用户提供系统的技术讲座,答疑,以及运营知识方面的培训。

往期内容回顾

关于专家讲坛更多详情,请浏览官方网站。InfoQ 也会对后续的活动进行跟踪报道。

关于社区活动的更多详情,欢迎查看 InfoQ 维护的社区活动日历,也欢迎关注 InfoQ 官网微博(@InfoQ),获取实时的活动信息!