1. 序論
Accelerometer、
LinearAccelerationSensor
および GravitySensor
API は Generic Sensor API [GENERIC-SENSOR]
インターフェイスを拡張し、デバイスにより定義される
ローカル座標系において、デバイスの
X、Y、Z 軸に加えられる加速度に関する情報を提供する。
2. 例
let sensor= new Accelerometer(); sensor. start(); sensor. onreading= () => { console. log( "Acceleration along X-axis: " + sensor. x); console. log( "Acceleration along Y-axis: " + sensor. y); console. log( "Acceleration along Z-axis: " + sensor. z); } sensor. onerror= event=> console. log( event. error. name, event. error. message);
let sensor= new GravitySensor({ frequency: 5 , referenceFrame: "screen" }); sensor. onreading= () => { if ( sensor. y>= 9.8 ) { console. log( "Web page is perpendicular to the ground." ); } } sensor. start();
const shakeThreshold= 25 ; let sensor= new LinearAccelerationSensor({ frequency: 60 }); sensor. addEventListener( 'reading' , () => { if ( sensor. x> shakeThreshold) { console. log( "Shake detected." ); } }); sensor. start();
3. ユースケースおよび要件
ユースケースおよび要件は、 Motion Sensors Explainer および Sensor use cases 文書に列挙されている。
4. セキュリティおよびプライバシーの考慮事項
加速度センサーなどの慣性センサーにより提供されるセンサー読み取り値は、 攻撃者により、たとえば キーロギング、位置 追跡、 フィンガープリンティングおよびユーザー 識別など、さまざまなセキュリティ脅威を悪用するために使用される可能性がある。
セキュリティコミュニティにより公開された研究論文、たとえば [KEYSTROKEDEFENSE] は、周波数を絞っても攻撃成功のリスクは完全には排除されない一方で、 スロットリングは、センサーを使用する正当な理由を持つウェブアプリケーションの有用性に 大きく影響し得ることを示している。
[TOUCHSIGNATURES] および [ACCESSORY] の研究論文は、 実装が、慣性センサーの使用中に視覚的な表示を提供したり、 センサー読み取り値へアクセスするために明示的なユーザー同意を要求したり できることを提案している。これらの軽減戦略は、Generic Sensor API [GENERIC-SENSOR] で定義される 一般的な軽減策を補完する。
この仕様は、センサーキャリブレーションフィンガープリンティング [SENSORID] および高精度のセンサー読み取り値に依存する攻撃を軽減するため、 加速度センサー読み取り値量子化 アルゴリズム (最新の読み取り値から値を取得する操作から呼び出される) を定義する。 量子化アルゴリズムの詳細は、W3C Privacy Interest Group の 勧告に従う。
5. Permissions Policy 統合
この仕様は、[DEVICE-ORIENTATION] で定義される、
文字列
"accelerometer"
により識別されるポリシー制御機能を利用する。
6. モデル
6.1. Accelerometer
Accelerometer センサー型は、 次の関連データを持つ:
- 拡張センサーインターフェイス
- センサー権限名
- センサー機能名
- 権限失効アルゴリズム
-
"
accelerometer" を用いて 汎用センサー権限失効 アルゴリズムを呼び出す。 - 既定のセンサー
-
デバイスの主たる加速度センサー。
- 仮想センサー型
Accelerometer センサー型の
Sensor
に対する最新の読み取り値は、"x"、"y"、"z" である
キーを持ち、かつ対応する軸についてのデバイスの
加速度を含む
値を持つ 3 つの
エントリを含む。
加速度は、 時間に関するデバイスの速度の変化率である。その単位は メートル毎秒毎秒 (m/s2) [SI] である。
加速度測定の参照フレームは慣性系でなければならず、たとえば、 自由落下中のデバイスは各軸について 0 (m/s2) の 加速度値を提供する。
加速度 値の符号は、ローカル座標系における右手系の規約に従わなければならない (下図を参照)。
6.2. Linear Acceleration Sensor
Linear Acceleration Sensor センサー型は、 次の関連データを持つ:
- 拡張センサーインターフェイス
- センサー権限名
- センサー機能名
- 権限失効アルゴリズム
-
"
accelerometer" を用いて 汎用センサー権限 失効アルゴリズムを呼び出す。 - 仮想センサー型
Linear Acceleration Sensor センサー
型の Sensor
に対する最新の読み取り値は、"x"、"y"、"z" である
キーを持ち、かつ対応する軸についてのデバイスの
線形加速度を含む
値を持つ 3 つの
エントリを含む。
線形 加速度は、センサーをホストするデバイスに加えられる加速度であり、 重力の寄与を含まない。
注: 重力と線形加速度の関係は、 Motion Sensors Explainer § gravity-and-linear-acceleration で論じられている。
6.3. Gravity Sensor
Gravity Sensor センサー型は、次の関連データを持つ:
- 拡張センサーインターフェイス
- センサー権限名
- センサー機能名
- 権限失効アルゴリズム
-
"
accelerometer" を用いて 汎用センサー権限 失効アルゴリズムを呼び出す。 - 仮想センサー型
-
"
gravity"
Gravity
Sensor センサー型の
Sensor
に対する最新の読み取り値は、"x"、"y"、"z" である
キーを持ち、かつ対応する軸についての
重力による加速度を含む
値を持つ 3 つの
エントリを含む。
重力は、 近くの質量へ向かってデバイスの速度が増加することを防ぐ、デバイスの加速度の成分である。 短時間を超えて自由落下しているデバイスは、重力について誤った値を計算する可能性がある。
注: 重力と線形加速度の関係は、 Motion Sensors Explainer § gravity-and-linear-acceleration で論じられている。
6.4. 参照フレーム
ローカル座標系は、
Accelerometer、
LinearAccelerationSensor、
および GravitySensor
読み取り値の参照フレームを表す。それは
デバイス座標系
または画面座標系のいずれかであり得る。
デバイス座標 系は、物理デバイスに結び付けられた 3 次元 直交座標系 (x, y, z) として定義される。 表示装置を持つデバイスでは、デバイス座標系の原点は デバイス表示の中心である。デバイスが既定の位置で保持される場合、 Y 軸は表示の上部へ向かい、X 軸は表示の右へ向かい、 Z 軸は X 軸と Y 軸のベクトル積であり、 表示から外向きに、閲覧者へ向かって指す。デバイス座標系は、 dom screen の向きにかかわらず静止したままである (下図を参照)。
画面座標 系は、dom screen に結び付けられた 3 次元直交座標系 (x, y, z) として定義される。 画面座標系の原点は dom screen の中心である。Y 軸は常に dom screen の上部へ向かい、 X 軸は dom screen の右へ向かい、 Z 軸は X 軸と Y 軸のベクトル積であり、 dom screen から外向きに、閲覧者へ向かって指す (下図を参照)。
デバイス座標系と画面座標系の 主な違いは、画面座標系が常に dom screen の向きに追従することである。 すなわち、現在の向きの種類 が変化した場合、デバイスに対して X 軸と Y 軸を入れ替える。対照的に、 デバイス座標系は常に デバイスに対して静止したままである。
7. API
7.1. Accelerometer インターフェイス
[SecureContext ,Exposed =Window ]interface :Accelerometer Sensor {constructor (optional AccelerometerSensorOptions = {});options readonly attribute double ?;x readonly attribute double ?;y readonly attribute double ?; };z enum {AccelerometerLocalCoordinateSystem ,"device" };"screen" dictionary :AccelerometerSensorOptions SensorOptions {AccelerometerLocalCoordinateSystem = "device"; };referenceFrame
Accelerometer
に対する対応センサーオプションは
"frequency" および "referenceFrame" である。
7.1.1. Accelerometer.x
x
属性は、Accelerometer
インターフェイスの属性であり、
this と "x" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは x 軸方向の加速度を表す。
7.1.2. Accelerometer.y
y
属性は、Accelerometer
インターフェイスの属性であり、
this と "y" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは y 軸方向の加速度を表す。
7.1.3. Accelerometer.z
z
属性は、Accelerometer
インターフェイスの属性であり、
this と "z" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは z 軸方向の加速度を表す。
7.2. LinearAccelerationSensor インターフェイス
[SecureContext ,Exposed =Window ]interface :LinearAccelerationSensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
new LinearAccelerationSensor(options)
コンストラクター手順は、this
と
options を用いて、加速度センサーオブジェクトを構築する抽象操作を
呼び出すことである。
LinearAccelerationSensor
に対する対応センサーオプションは
"frequency" および "referenceFrame" である。
7.2.1. LinearAccelerationSensor.x
x
属性は、LinearAccelerationSensor
インターフェイスの属性であり、
this と "x" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは x 軸方向の線形加速度を表す。
7.2.2. LinearAccelerationSensor.y
y
属性は、LinearAccelerationSensor
インターフェイスの属性であり、
this と "y" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは y 軸方向の線形加速度を表す。
7.2.3. LinearAccelerationSensor.z
z
属性は、LinearAccelerationSensor
インターフェイスの属性であり、
this と "z" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは z 軸方向の線形加速度を表す。
7.3. GravitySensor インターフェイス
[SecureContext ,Exposed =Window ]interface :GravitySensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
GravitySensor
に対する対応センサーオプションは
"frequency" および "referenceFrame" である。
7.3.1. GravitySensor.x
x
属性は、GravitySensor
インターフェイスの属性であり、
this と "x" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは 重力による x 軸方向の
加速度の影響を表す。
7.3.2. GravitySensor.y
y
属性は、GravitySensor
インターフェイスの属性であり、
this と "y" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは 重力による y 軸方向の
加速度の影響を表す。
7.3.3. GravitySensor.z
z
属性は、GravitySensor
インターフェイスの属性であり、
this と "z" を引数として 最新の読み取り値から値を取得するを呼び出した結果を返す。
これは 重力による z 軸方向の
加速度の影響を表す。
8. 抽象操作
8.1. 加速度センサーオブジェクトを構築する
- 入力
-
object、
Accelerometer、LinearAccelerationSensorまたはGravitySensorオブジェクト。options、
AccelerometerSensorOptionsオブジェクト。
-
object のセンサー型を用いて センサーポリシー制御 機能をチェックするを呼び出した結果を allowed とする。
-
allowed が false なら、次を実行する:
-
object および options を用いて センサーオブジェクトを初期化するを呼び出す。
-
options.
referenceFrameが "screen" なら、次を実行する:
8.2. 加速度センサー読み取り値量子化アルゴリズム
Accelerometer センサー型は、 次の読み取り値量子化アルゴリズムを定義する:
- 入力
-
reading、センサー 読み取り値
- 出力
-
reading を quantizedReading とする。
-
quantizedReading["x"] が null でないなら、quantizedReading["x"] を 最も近い 0.1 m/s2 に設定する。
-
quantizedReading["y"] が null でないなら、quantizedReading["y"] を 最も近い 0.1 m/s2 に設定する。
-
quantizedReading["z"] が null でないなら、quantizedReading["z"] を 最も近い 0.1 m/s2 に設定する。
-
quantizedReading を返す。
9. 自動化
この節は、Generic Sensor API § 9 Automation を拡張し、Accelerometer 固有の仮想センサーメタデータを提供する。 この仕様で使用される仮想センサー型の一部は、 [DEVICE-ORIENTATION] で定義されている。
9.1. Accelerometer 自動化
accelerometer 仮想センサー型および 型ごとの仮想センサーメタデータ マップ におけるその対応するエントリは、Device Orientation and Motion § automation で定義される。
9.2. Linear Accelerometer 自動化
linear-acceleration 仮想センサー型および 型ごとの仮想センサーメタデータ マップ におけるその対応するエントリは、Device Orientation and Motion § automation で定義される。
9.3. Gravity 自動化
型ごとの仮想センサーメタデータ マップ は、次のエントリを持たなければならない:
- キー
-
"
gravity" - 値
-
仮想センサーメタデータであって、その 読み取り値解析アルゴリズムが XYZ 読み取り値を解析するであるもの。
10. 謝辞
Generic Sensor API に関する作業について Tobie Langel に感謝する。
センサーキャリブレーションフィンガープリンティング軽減提案および議論について、 W3C Privacy Interest Group と Paul Jensen に感謝する。