在Windows8中支持传感器
传感器技术的最新进展推动了电脑用户体验的加速演变。能够对环境光线、运动、人体接触以及位置的变化作出反应,已成为计算体验的常见基本因素。即便是一些很简单的事情,例如使用氛围光传感器根据房间内光线的明暗变化来调节显示器的 亮度,也可能会成为台式电脑的一种基本应用情境。当然,我们知道,各种传感器可能会带来各种风险或造成滥用,一些用户不希望出现此类情况,因此,我们还希望确保用户对这些外围设备的使用拥有完全的控制能力。本博文对 Win8 中的传感 器支持进行了详细介绍,由设备连接性团队的项目经理 Gavin Gear 供稿。--Steven
为了使电脑在保持电池使用寿命的同时还要适应环境变化,我们对于传感器的第一项探索就是要了解 Windows 8 在系统一级上如何使用这些传感器。
自适应亮度
第一项系统功能是屏幕亮度的自动控制,或者称之为“自适应亮度”。我们在 Windows 7 中使用氛围光传感器 (ALS) 首次引入了这一功能,该功能是针对移动设备(如平板电脑、平板笔电和便携式计算机)设计的。如今,显示面板所支持的亮度 级别大概是几年前的普遍亮度级别的两倍,因此,此项功能具有空前的重要性。根据环境光线的明暗变化来动态控制屏幕亮度,可以优化阅读的舒适度,在屏幕处于较暗的环境下时节省电量消耗。
在户外强光下,采用自适应亮度的平板电脑(左)以及未采用自适应亮度的平板电脑(右)
大家在上图中可以看到,采用自适应亮度的平板电脑在进入光亮环境中时屏幕会自动调亮,因此自适应亮度调节功能可以帮助我们更清晰地阅读屏幕上的内容。同样,对于那些在阳光充足的房间内使用台式电脑的人来说,在不同季节以及在一天中的 不同时间段,其电脑屏幕也会发生自动调整亮度的情况。
自动旋转屏幕
许多智能手机和其他移动设备在旋转设备时,图形显示也随之旋转并适应新的方向(包括适应屏幕高宽比的变化)。利用加速计提供的数据,设备可以确定基本方向。利用自动旋转屏幕,用户可以更加自然、更加直观地使用设备(主要指平板电脑和平板 笔电),而无需借助软件控件或硬件按钮来手动旋转屏幕。
横向和纵向放置的 Windows 8 [Start](开始)屏幕
针对传感器的开发人员支持
除了要理清 Windows 8 系统如何使用传感器的基本知识,我们还需要考虑应用程序如何使用传感器。我们对支持传感器的各种应用程序(包括游戏、商业应用程序、工具和实用程序)进行了深入分析,来帮助我们确定要支持的各种应用情境。
位居首位的需求是应用程序应具备判断运动和屏幕旋转的能力。这就要求配备加速计,加速计是一种能够用来测量由重力以及设备本身的运动所产生的力量的设备。不过,大多数应用情境的能力需求并不仅限于于对运动和重力的判断。在许多应用程 序中,方向也是一项重要需求。为了赋予电脑对方向的判断能力,我们需要在电脑中集成罗盘的功能。
要提供罗盘支持,必须至少具备一个 3D 加速计(用来测量三个轴上的加速度)和一个 3D 磁力计(用来测量三个轴上的磁场强度)。将这两个传感器组合到一起可构成“6 轴运动与方向传感系统”,能够支持基本的倾斜补偿罗盘、屏幕旋 转以及某些休闲游戏应用程序(如迷宫类游戏)。然而,在我们的测试和原型设计过程中,我们发现 6 轴运动传感系统存在两个关键性的缺陷:偶尔出现罗盘指向失准问题,并且在响应能力方面达不到 3D 互动游戏的要求。
近来,一种新型传感器开始在手机平台上得到应用,那就是陀螺仪传感器。陀螺仪传感器可以测量角速度,通常是沿着 3 个轴进行的测量。您还可以利用陀螺仪传感器提供的数据来改善 3D 运动传感系统的响应能力和准确性。陀螺仪传感器非常灵 敏,但是它缺乏任何形式的方向参考(比如重力或者北方)。
下图显示了如何利用陀螺仪传感器数据沿着设备的主轴表示三种旋转方向:
最初,有些人认为具有此类传感器需求的应用程序非常稀少,例如仅限于某些专业游戏。但是,随着我们对 3D 运动和方向传感问题的研究逐步深入,我们逐渐认识到,如果应用程序能够对人类容易理解的运动做出反应,例如在多维空间中摇晃、转动 和旋转,那么这些应用程序将会变得更具沉浸感,更加富有吸引力。借助此类传感器,我们不仅可以构建极具沉浸感的 3D 游戏,而且还能使许多其他应用程序更加自然地响应各种运动输入,这些应用程序包括地图和导航应用程序、测量实用程序、互动( 两个机器之间的)应用程序以及诸如休闲游戏之类的简单应用程序。
工程挑战
我们通过对一些 3D 体验进行原型设计,开始了对运动应用程序的探索。我们面对的第一项挑战是在设备的物理方向与应用程序中的虚拟 3D 环境之间建立直接的关系映射。我们决定通过将平板电脑模拟成通向虚拟世界的窗口,来创建简单的增强 现实体验的模型。这一概念非常简单:当您眼睛直视屏幕并移动设备时,虚拟环境(一个房间的内部)会保持静止状态。
最初,我们做过一项试验,利用加速计将设备的上下运动映射为 3D 环境的上下运动。当您握住设备静止不动时,画面应保持静止不动。当您倾斜设备时,画面应向上或者向下倾斜。我们立刻遇到了一个问题:当设备静止不动时,加速计传感器数据的“ 噪声”会造成 3D 环境的抖动。通过捕获加速计数据并绘制成图表,可以清楚地看到此类噪声。
没有噪声的时候,图表中的线是平直的,没有垂直位移的情况发生。去除此类噪声的传统方法是对原始数据流应用低通滤波器。当我们在原型中实施这一缓解措施之后,合成的运动曲线平缓而稳定(无抖动)。但是低通滤波器却带来了另一个问题:应用 程序的响应能力下降,对运动作出的反应变得迟钝。我们需要一种不会降低响应能力的抖动补偿方法。
下一个实验是要为人们提供在虚拟 3D 环境应用程序中“向左看”和“向右看”的能力。我们采用了一种 6 轴罗盘解决方案(3D 加速计 + 3D 磁力计)来支持这种类型的运动。尽管这一方案切实有效,但是由于 6 轴罗盘的整体稳定性 较差,运动轨迹缺乏连贯性。如何将上下运动和左右运动结合起来也极具挑战性。
从这些实验中,我们清楚地认识到上述传感器组合并不能提供我们所期望的响应敏锐的流畅体验。加速计传感器无法提供纯净的数据,也不能够单独用来判断设备的方向。磁力计更新速度缓慢,并且很容易受到电磁干扰的影响(想象一下罗盘指针偶尔 会始终指向一个方向的情况)。我们还没有对陀螺仪传感器进行测试,但是由于陀螺仪传感器只能判断旋转速度,因此我们还不清楚它到底有多大帮助。
创建“传感器融合”
但是进一步的实验表明,同时使用这三种传感器可以解决该问题。事实证明,加速计,磁力计和陀螺仪可以相互弥补弱点,有效地弥补数据和数据响应的不足。将这些传感器进行组合,可以创造比单一传感器效果更佳、响应更灵敏、更流畅的 操作体验。将多个传感器的输入进行组合以产生更佳的整体效果的过程称为“传感器融合”。
实质上,传感器融合是整体大于局部总和的一个典型实例。典型的传感器融合系统使用一个 3D 加速计、一个 3D 磁力计以及一个 3D 陀螺仪来创建一个组合的“9 轴传感器融合”系统。为了了解这一系统的工作原理,让我们来看看该系统的输入 和输出。
上图显示了两种类型的输出:直接将传感器数据传递到应用程序的直通输出,以及将传感器数据合成为更强大的数据类型的传感器融合输出。
一些应用程序可以直接使用直通传感器数据。在各种应用情境中,可以直接使用这些数据来利用其“表面价值”。例如,通过实现计步器来统计行走步数的应用程序就属于此类应用。下图显示了一个携带平板电脑步行的人的加速计输出。从该图中可以 清楚地看出,我们能够检测到这个人行走的每一步。
然而,我们的实验表明,许多应用程序并不能有效地使用原始传感器数据。这些应用程序包括:
- 罗盘应用程序
- 增强导航和增强现实应用程序
- 休闲游戏
- 3D 游戏应用程序
下面一个 3D 游戏示例的屏幕截图:
3D 第一人称射击游戏(在 //Build/ 大会上曾进行过演示)
这些应用程序需要使用传感器融合数据以支持所实现的功能。传感器融合的“作用”是以数学方法来组合三种传感器的数据,从而产生更为复杂的输出,包括一个倾斜补偿罗盘、一个倾角计(显示偏转、侧倾和俯仰)以及多种表示设备方向的输出指标。 利用这些数据,更为复杂的应用程序可以对自然动作产生快速、流畅、灵敏的反应。
通过集成传感器融合解决方案,Windows 8 为各种应用程序提供了全面的解决方案。Windows 中的传感器融合解决方案解决了抖动和急促变换的问题,减少了数据完整性问题,利用该系统所提供的数据,可以在 3D 环境中无缝呈现全部设备动 作(不会出现动作变换迟钝的情况)。
与硬件合作伙伴协作
在设计 Windows 的传感器融合解决方案的同时,我们还需要提前与硬件设计人员协助,帮助他们有效利用这一解决方案的强大优势。如果您设计的是单一设备,那么传感器融合系统的设计就会相对简单一些。但是,Windows 需要在多种外形尺 寸的各种电脑上运行,而这些电脑所采用的硬件组件来源于许多不同的制造商。我们需要提供一种允许 Windows 硬件合作伙伴的整个生态系统参与的解决方案。
第一步是提供一个传感器组件的性能基准,确保传感器组件与 Windows 的传感器融合解决方案兼容。通过 Windows 认证指南,我们提供了传感器性能的规格要求。为了帮助硬件公司验证其解决方案是否与 Windows 兼容,我们构建了大量 的测试程序,并将这些测试程序附在 Windows 认证工具包中一并提供。
降低驱动程序开发和支持费用是我们所面临的另一项挑战。为了简化传感器硬件制造商和电脑制造商的驱动程序开发工作,我们编写了由 Microsoft 提供的单一驱动程序,该驱动程序适用于通过 USB 甚至低功耗总线(如 I2C)连接的所有与 Windows 兼容的传感器组件。利用该传感器类驱动程序,硬件公司在不断对其传感器硬件推陈出新之时,可以确保 Windows 操作系统附带的驱动程序能够轻松支持这些传感器硬件。
为了加快类驱动程序的推广应用,Microsoft 与行业合作伙伴密切协作,积极推动将该规范纳入公共标准。2011 年 7 月,传感器标准成功纳入了 USB-IF 的 HID(人机交互设备)规范(HID 规范版本 1.12,通过审查申请第 39 号纳入)。成功提升为标准之后,任何传感器公司都能够通过遵循兼容设备固件的公共标准 USB-IF 规范,来构建 与 Windows8 兼容的传感器组件。这大大缩短了在 Windows 8 电脑中集成传感器硬件所需的时间,并降低了集成费用。其他好处包括:可以降低支持费用,并且,配备有传感器的 Windows 8 电脑的硬件性能更加一致。
除了推动类驱动程序的标准化之外,我们还希望优化传感器融合解决方案的性能,最大限度地降低该解决方案对电池电量的消耗。系统中启用的每一个传感器都会消耗电量,并且将数据发送至堆栈也会占用内存和 CPU 时间。我们主要从以下两个方 面入手,最大限度地降低 Windows 8 中运行的传感器融合系统对电量和性能的影响:
1.我们在 Windows 8 中构建了传感器融合接口,将大量的传感器融合数据处理工作放在硬件级别来完成。硬件级别的传感器融合功能意味着,繁重的算法运算无需在主 CPU 上运行,从而可以节省电量并减少 CPU 计算周期。
2.我们实施了强大的过滤机制,可以及时掌握传感器应用程序在任何给定时间点的数据需求。采用这种按需提供式的数据和事件模型意味着,传感器数据仅以应用程序所需的数据传输速度发送至堆栈,不会出现数据传输速度过高的情况。这样可以大 幅度降低传感器数据传输对 CPU 的占用。
传感器与 Metro 风格的应用程序
为了充分利用上述所有功能,我们所面临的最后一项挑战是如何才能将传感器融合的强大功能尽快提供给编写 Metro 风格应用程序的开发人员。为了实现这一目标,我们设计了传感器 API,并将其纳入新的 WinRT 中。通过这些 API,开发人 员可以在任意 Metro 风格的应用程序中利用传感器融合的强大功能。这些 API 简单明了,开发人员可以利用这些 API 访问任何所需的数据,为休闲游戏乃至虚拟现实应用程序提供全方位的支持。当然,我们同样为桌面应用程序的游戏开发人员或 其他用户提供了上述功能的对应 Win32 API。
以下 JavaScript 代码片段显示了如何使用 Windows 运行时访问加速计并订阅事件:
var accelerometer; accelerometer = Windows.Devices.Sensors.Accelerometer.getDefault(); accelerometer.addEventListener("readingchanged",onAccReadingChanged); function onAccReadingChanged(e) { var accelX = e.reading.accelerationX; var accelY = e.reading.accelerationY; var accelZ = e.reading.accelerationZ; }
有关 Windows 运行时中传感器支持的更多信息,请参阅 //build/ 讨论会在您的应用程序中使用位置和传感器。
看到这里,您可能会想我如何才能尝试一下 Windows 8 中的传感器融合功能,甚至会如何编写一些应用程序来利用这些新功能。参加了 2011 年 //build/ 大会的开发人员已经获得了 Samsung Windows 8 开发人员预览版平板电脑 ,其中包含了全部的传感器组件。我们仅发放了大约 4,000 台平板电脑,因此,并不是每个人都有机会获得。好消息是,现在,您可以从 ST Microelectronics 在线购买 Windows 开发人员预览版设备中内置的 9 轴传感器融合系统。“适用 于 Windows 8 的 ST Microelectronics eMotion 开发板”(型号:STEVAL-MKI119V1)可以通过 USB 进行连接,它与 Windows 8 中附带的 HID 传感器类驱动程序兼容。如果您已经下载了 Windows 8 开发人员预览版并急 于体验传感器,您可以考虑购买这些设备。
适用于 Windows 8 的 ST Microelectronics eMotion 开发板
现在,让我们来实际看一下传感器融合的真面目吧!