陀螺仪

W3C 候选推荐草案

关于本文档的更多信息
本版本:
https://www.w3.org/TR/2024/CRD-gyroscope-20241008/
最新发布版本:
https://www.w3.org/TR/gyroscope/
编辑草案:
https://w3c.github.io/gyroscope/
以往版本:
历史记录:
https://www.w3.org/standards/history/gyroscope/
反馈:
public-device-apis@w3.org 邮件主题请填写“[gyroscope] … 消息主题 …” (邮件存档)
陀螺仪问题仓库
实现报告:
https://www.w3.org/wiki/DAS/Implementations
编辑:
Anssi Kostiainen (英特尔公司)
前编辑:
Mikhail Pozdnyakov (英特尔公司)
测试套件:
GitHub 上的 web-platform-tests

摘要

本规范定义了一个用于监测设备本地三个主轴旋转速率的具体传感器接口。

本文档状态

本节描述了本文档在发布时的状态。W3C 当前出版物和本技术报告的最新修订版可在 W3C 技术报告索引 https://www.w3.org/TR/ 查阅。

本文档由设备与传感器工作组按照推荐标准流程以候选推荐草案形式发布。本文档计划最终成为 W3C 推荐标准。

如需对本文档发表评论,请发送邮件至 public-device-apis@w3.org订阅存档)。 发送时,请在主题中注明“gyroscope”,建议格式为: “[gyroscope] …评论摘要…”。 欢迎所有意见和建议。

本文作为候选推荐标准发布,并不代表W3C及其成员的认可。候选推荐草案整合了工作组打算纳入后续快照的上一版变更。本文件为草稿,随时可能更新、替换或作废,除“进行中工作”外不应被引用。

进入提案推荐阶段的标准是至少有两个独立且可互操作的用户代理完整实现本规范所有功能,这将通过工作组开发的测试套件判定。工作组将准备一份实施进展报告。

本文由依据 W3C 专利政策 运作的小组制定。W3C 维护与本组成果相关的公开专利披露列表;该页面亦包含披露说明。如有了解某项专利并认为包含必要权利要求者,须遵循W3C 专利政策第6节披露相关信息。

本文档受2023年11月3日W3C流程文档管理。

本文档可随时维护更新,部分内容为进行中工作。

1. 简介

陀螺仪 API 扩展了 Generic Sensor API [GENERIC-SENSOR],用于提供设备本地 X、Y 和 Z 轴周围的角速度信息, 单位为弧度每秒。

2. 用例与需求

用例和需求可参见 Motion Sensors Explainer 文档。

3. 示例

let sensor = new Gyroscope();
sensor.start();

sensor.onreading = () => {
    console.log("绕 X 轴的角速度 " + sensor.x);
    console.log("绕 Y 轴的角速度 " + sensor.y);
    console.log("绕 Z 轴的角速度 " + sensor.z);
};

sensor.onerror = event => console.log(event.error.name, event.error.message);

4. 安全性与隐私注意事项

惯性传感器(如陀螺仪)提供的传感器读数,可能被攻击者用于发动各种安全威胁, 例如 键盘监听位置追踪指纹识别用户识别 甚至 窃听

安全社区发表的研究论文,例如 [KEYSTROKEDEFENSE] 指出, 仅通过降低采样频率无法彻底消除攻击风险,且限频可能大大影响有正当理由使用传感器的 Web 应用的可用性。

[TOUCHSIGNATURES] 研究论文建议, 实现时可在惯性传感器被使用时提供可视化提示,和/或要求用户明确授权传感器读数的访问。 这些缓解策略补充了在 Generic Sensor API [GENERIC-SENSOR] 中定义的通用缓解措施

5. 权限策略集成

本规范使用 策略控制特性,其标识字符串为 "gyroscope", 该字符串在 [DEVICE-ORIENTATION] 中定义。

6. 模型

Gyroscope 传感器类型包含以下相关数据:

扩展传感器接口

Gyroscope

传感器权限名称

"gyroscope"

传感器特性名称

"gyroscope"

权限撤销算法

调用 通用传感器权限撤销算法, 参数为 "gyroscope"。

默认传感器

设备的主陀螺仪传感器。

虚拟传感器类型

"gyroscope"

最新读数Sensor Gyroscope 传感器类型 包含三个 ,其 为 "x", "y", "z",其为该轴当前的角速度

角速度 指设备绕某指定轴在设备定义的本地坐标系中旋转的速率。 单位为弧度每秒(rad/s)[SI]

当前角速度的符号取决于旋转方向, 应符合设备定义的本地坐标系的右手法则:沿轴正方向看去,为顺时针为正。 (见下图)

设备本地坐标系与旋转。

6.1. 参考系

本地坐标系表明 Gyroscope 读数的参考系。可以是设备坐标系,也可以是屏幕坐标系

7. API

7.1. Gyroscope 接口

[SecureContext, Exposed=Window]
interface Gyroscope : Sensor {
  constructor(optional GyroscopeSensorOptions sensorOptions = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

enum GyroscopeLocalCoordinateSystem { "device", "screen" };

dictionary GyroscopeSensorOptions : SensorOptions {
  GyroscopeLocalCoordinateSystem referenceFrame = "device";
};
new Gyroscope(sensorOptions) 构造函数 步骤如下:调用 构造陀螺仪对象 抽象操作,参数为 thissensorOptions

GyroscopeGyroscope 支持的传感器选项包括 "frequency" 和 "referenceFrame"。

7.1.1. Gyroscope.x

x 属性表示 Gyroscope 接口当前绕 X 轴的角速度。 换句话说,该属性返回对 get value from latest reading 的调用结果,参数为 this 和 "x"。

7.1.2. Gyroscope.y

y 属性表示 Gyroscope 接口当前绕 Y 轴的角速度。 换句话说,该属性返回对 get value from latest reading 的调用结果,参数为 this 和 "y"。

7.1.3. Gyroscope.z

z 属性表示 Gyroscope 接口当前绕 Z 轴的角速度。 换句话说,该属性返回对 get value from latest reading 的调用结果,参数为 this 和 "z"。

8. 抽象操作

8.1. 构造陀螺仪对象

输入

objectGyroscope 对象。

optionsGyroscopeSensorOptions 对象。

  1. allowed 为调用 check sensor policy-controlled features ,参数为 object传感器类型的结果。

  2. allowed 为 false:

    1. 抛出 SecurityError DOMException

  3. objectoptions 调用 initialize a sensor object

  4. 如果 options.referenceFrame 为 "screen",则:

    1. object本地坐标系设置为屏幕坐标系

  5. 否则,将 object本地坐标系设置为设备坐标系

9. 自动化

本节扩展了 Generic Sensor API § 9 Automation,提供Gyroscope 专属的虚拟传感器元数据。

gyroscope 虚拟传感器类型及其在 每类型虚拟传感器元数据map 中的对应项,见 Device Orientation and Motion § automation

10. 致谢

Tobie Langel 对 Generic Sensor API 的工作。

11. 一致性

一致性要求通过描述性断言和 RFC 2119 术语的组合表达。关键字 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 在本规范的强制性内容中, 均按 RFC 2119 描述解释。为可读性,这些词在规范并不全部大写。

除明示为非规范性、示例和注释外,规范的所有内容均为规范性文本。[RFC2119]

一致的用户代理 必须实现本规范中适用于用户代理的所有要求。

本规范的 IDL 片段须依《Web IDL》规范的要求进行解释和遵循。[WEBIDL]

索引

本规范定义的术语

引用中定义的术语

参考文献

规范性引用

[ACCELEROMETER]
Anssi Kostiainen. 加速度计. URL: https://w3c.github.io/accelerometer/
[DEVICE-ORIENTATION]
Reilly Grant; Raphael Kubo da Costa; Marcos Caceres. 设备方向与运动. URL: https://w3c.github.io/deviceorientation/
[GENERIC-SENSOR]
Rick Waldron. 通用传感器 API. URL: https://w3c.github.io/sensors/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 标准. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres; Mike Taylor. 权限. URL: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland. 权限策略. URL: https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner. 用于 RFC 要求等级的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 标准. Living Standard. URL: https://webidl.spec.whatwg.org/

补充性引用

[KEYSTROKEDEFENSE]
Song, Yihang, et al. 两种针对运动数据键盘推断攻击的新型防御方法. 2014年. Informational. URL: https://arxiv.org/abs/1410.7746
[SI]
国际单位制手册,第八版. 2014年. URL: http://www.bipm.org/en/publications/si-brochure/
[TOUCHSIGNATURES]
Mehrnezhad, Maryam, et al. Touchsignatures: 基于手机传感器数据识别用户触控行为和密码. 2016年. Informational. URL: https://arxiv.org/abs/1602.04115

IDL 索引

[SecureContext, Exposed=Window]
interface Gyroscope : Sensor {
  constructor(optional GyroscopeSensorOptions sensorOptions = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

enum GyroscopeLocalCoordinateSystem { "device", "screen" };

dictionary GyroscopeSensorOptions : SensorOptions {
  GyroscopeLocalCoordinateSystem referenceFrame = "device";
};

MDN

Gyroscope/Gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/x

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/y

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/z

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Headers/Feature-Policy/gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?