1. 序論
Magnetometer は Generic Sensor API [GENERIC-SENSOR] を拡張し、 デバイスの主要な磁力計センサーにより検出された 磁場についての情報を提供する。 磁力計センサーは、3 つすべての物理軸(x、y、z)について 磁場を μT(マイクロテスラ)単位で測定する。
この仕様は、2 つの新しいインターフェイスを定義する:
-
Magnetometerは校正済み磁場値を報告し、 -
UncalibratedMagnetometerは未校正磁場値を報告する。
磁場とは、 電流、磁性材料、または惑星の自転と地球核内の溶融鉄の運動との複合的効果に起因する 地球の磁力によって生成される磁気効果により、磁力計センサーに磁気力を及ぼす 場である。
硬鉄 歪みは、磁化された鉄など、 磁場を生成する 物体によって作られる。
軟鉄 歪みは、 磁場を伸張または歪ませ、 ニッケルや鉄などの金属によって引き起こされる。
校正済み 磁場とは、磁場に硬鉄歪みおよび軟鉄 歪みの補正を適用したものである。
未校正 磁場とは、 磁場であって、硬鉄 歪み補正は行わず、軟鉄歪み補正を適用したものであり、 そのため、磁力計の近くを移動する磁化された物体によって引き起こされる 磁場の変化を報告する。
2. 例
let sensor= new Magnetometer(); 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);
3. セキュリティとプライバシーに関する考慮事項
Magnetometer は磁場についての情報を提供し、理論上、ユーザーの位置を暴露し得る。 たとえば、攻撃ベクトルとして、特定の場所にある事前に磁化された表面、または 建物によって引き起こされる位置と一定の磁場擾乱との対応付けが考えられる。 地球磁場の強度は一様ではないため、別の攻撃ベクトルとして、ユーザーの位置の暴露または 検証が考えられる。たとえば、エンドユーザーが VPN 経由で接続している場合、 geo IP 情報に関連付けられた磁場を実際の位置での磁力計読み取り値と比較することで、 ユーザーが VPN を使用しているかどうかを判別できる。実装者は、 磁場強度と CPU 実行などの他の側面との相関を介したサイドチャネル漏洩の潜在的リスクに 注意するべきであり、特定の状況下では、他のタブで使用されているアプリケーションや 訪問されたウェブサイトについての情報が漏洩する可能性がある。 [MAGSPY]
未校正磁力計の読み取り値は、宝飾品など近くにある磁化された物体の影響を受ける可能性があり、 それによりキーストローク 監視に使用され得る情報が暴露される可能性がある。
これらの特定の脅威を緩和するため、ユーザーエージェントは 次の緩和戦略の一方または両方を用いるべきである:
-
最大サンプリング周波数を制限する
-
センサー読み取り値の精度を低下させる
これらの緩和戦略は、 Generic Sensor API [GENERIC-SENSOR] で定義される 汎用的な 緩和策を補完する。
4. Permissions Policy との統合
この仕様は、ポリシー制御機能を利用する。この機能は、
[DEVICE-ORIENTATION] で定義される文字列
"magnetometer"
により識別される。
5. モデル
Magnetometer センサー型は、 次の関連データを持つ:
- 拡張センサーインターフェイス
- センサー権限名
- センサー機能名
- 権限失効アルゴリズム
-
"
magnetometer" を用いて 汎用センサー権限失効 アルゴリズムを呼び出す。 - 仮想センサー型
-
"
magnetometer"
センサー型が Magnetometer である
Sensor
についての
最新の読み取り値には、次のものが含まれなければならない:
Uncalibrated Magnetometer センサー型は、 次の関連データを持つ:
- 拡張センサーインターフェイス
- センサー権限名
- センサー機能名
- 権限失効アルゴリズム
-
"
magnetometer" を用いて 汎用センサー権限 失効アルゴリズムを呼び出す。 - 仮想センサー型
-
"
uncalibrated-magnetometer"
センサー型が Uncalibrated Magnetometer である
Sensor
についての
最新の読み取り値には、次のものが含まれなければならない:
-
キーが "x"、"y"、"z" であり、 値が 3 つの異なる軸の周囲における 未校正 磁場を含む、3 つの エントリー。
-
キーが "xBias"、"yBias"、"zBias" であり、 値が 3 つの異なる軸の周囲における 硬鉄歪み 補正を含む、3 つの追加のエントリー。
磁場値の符号は、 ローカル 座標系における右手系の規約に従わなければならない(下図を参照)。
5.1. 参照フレーム
ローカル座標系は、
Magnetometer
および UncalibratedMagnetometer
の
読み取り値に対する参照フレームを表す。
これは、デバイス座標系または画面座標系のいずれかであり得る。
6. API
6.1. Magnetometer インターフェイス
[SecureContext ,Exposed =Window ]interface :Magnetometer Sensor {constructor (optional MagnetometerSensorOptions = {});sensorOptions readonly attribute double ?;x readonly attribute double ?;y readonly attribute double ?; };z enum {MagnetometerLocalCoordinateSystem ,"device" };"screen" dictionary :MagnetometerSensorOptions SensorOptions {MagnetometerLocalCoordinateSystem = "device"; };referenceFrame
new Magnetometer(sensorOptions)
コンストラクター手順は、this
および
sensorOptions を用いて
磁力計オブジェクトを構築する抽象操作を
呼び出すことである。
Magnetometer
に対する
サポートされるセンサーオプションは、"frequency" および "referenceFrame" である。
6.1.1. Magnetometer.x
x
属性は、Magnetometer
インターフェイスにおいて、X 軸周囲の
磁場を表す。
言い換えると、この属性は this および
"x" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.1.2. Magnetometer.y
y
属性は、Magnetometer
インターフェイスにおいて、Y 軸周囲の
磁場を表す。
言い換えると、この属性は this および
"y" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.1.3. Magnetometer.z
z
属性は、Magnetometer
インターフェイスにおいて、Z 軸周囲の
磁場を表す。
言い換えると、この属性は this および
"z" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.2. UncalibratedMagnetometer インターフェイス
[SecureContext ,Exposed =Window ]interface :UncalibratedMagnetometer Sensor {constructor (optional MagnetometerSensorOptions = {});sensorOptions readonly attribute double ?;x readonly attribute double ?;y readonly attribute double ?;z readonly attribute double ?;xBias readonly attribute double ?;yBias readonly attribute double ?; };zBias
new UncalibratedMagnetometer(sensorOptions)
コンストラクター手順は、this
および
sensorOptions を用いて
磁力計オブジェクトを構築する抽象操作を
呼び出すことである。
UncalibratedMagnetometer
に対する
サポートされるセンサーオプションは、"frequency" および "referenceFrame" である。
6.2.1. UncalibratedMagnetometer.x
x
属性は、UncalibratedMagnetometer
インターフェイスにおいて、X 軸周囲の
未校正磁場を表す。
言い換えると、この属性は this および
"x" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.2.2. UncalibratedMagnetometer.y
y
属性は、UncalibratedMagnetometer
インターフェイスにおいて、Y 軸周囲の
未校正磁場を表す。
言い換えると、この属性は this および
"y" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.2.3. UncalibratedMagnetometer.z
z
属性は、UncalibratedMagnetometer
インターフェイスにおいて、Z 軸周囲の
未校正磁場を表す。
言い換えると、この属性は this および
"z" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.2.4. UncalibratedMagnetometer.xBias
xBias
属性は、UncalibratedMagnetometer
インターフェイスにおいて、X 軸周囲の
硬鉄歪み補正を表す。
言い換えると、この属性は this および
"xBias" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.2.5. UncalibratedMagnetometer.yBias
yBias
属性は、UncalibratedMagnetometer
インターフェイスにおいて、Y 軸周囲の
硬鉄歪み補正を表す。
言い換えると、この属性は this および
"yBias" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
6.2.6. UncalibratedMagnetometer.zBias
zBias
属性は、UncalibratedMagnetometer
インターフェイスにおいて、Z 軸周囲の
硬鉄歪み補正を表す。
言い換えると、この属性は this および
"zBias" を引数として
最新の読み取り値から値を取得するを呼び出した結果を返す。
7. 抽象操作
7.1. 磁力計オブジェクトを構築する
- 入力
-
object、
MagnetometerまたはUncalibratedMagnetometerオブジェクトoptions、
MagnetometerSensorOptionsオブジェクト。
-
allowed を、object の センサー型を用いて センサーのポリシー制御機能を確認する を呼び出した結果とする。
-
allowed が false の場合:
-
object および options を用いて センサーオブジェクトを初期化するを 呼び出す。
-
options.
referenceFrameが "screen" の場合:
8. 自動化
この節は、Magnetometer 固有の仮想センサーメタデータを提供することで、 Generic Sensor API § 9 Automation を拡張する。
8.1. Magnetometer の自動化
型ごとの仮想センサーメタデータ マップは、 次のエントリーを持たなければならない:
- キー
-
"
magnetometer" - 値
-
仮想センサーメタデータであって、その 読み取り解析アルゴリズムが XYZ 読み取りを解析するであるもの。
8.2. Uncalibrated Magnetometer の自動化
型ごとの仮想センサーメタデータ マップは、 次のエントリーを持たなければならない:
- キー
- 値
-
仮想センサーメタデータであって、その 読み取り解析アルゴリズムが uncalibrated magnetometer 読み取り解析アルゴリズムであるもの。
8.2.1. Uncalibrated Magnetometer 読み取り解析アルゴリズム
-
reading を、parameters を用いて XYZ 読み取りを解析するを行った結果とする。
-
reading が undefined である場合。
-
undefined を返す。
-
-
keys を、リスト « "
xBias", "yBias", "zBias" » とする。 -
keys の各 key について反復する
-
value を、parameters および key を用いて 単一値数値読み取りを解析する を呼び出した結果とする。
-
value が undefined である場合。
-
undefined を返す。
-
-
-
reading[key] を value[key] に設定する。
-
-
reading を返す。
9. Magnetometer センサーの制限
この節は非規範的である。
地球磁場の方向および大きさは場所、特に緯度によって変化する。たとえば、 大きさは赤道付近で最も低く、極付近で最も高い。 センサーの近くに永久磁石(たとえば電話のスピーカー内の磁石)が存在することを意味する 一部の硬鉄干渉も、読み取り値の精度に影響する。 電子機器、ラップトップ、バッテリーなどの存在も、軟鉄干渉の一因となる。 携帯電話のフライトモードオプションは、電磁干渉を減少させるのに役立つ可能性がある。
上記の磁場の空間的変動に加え、太陽風や磁気嵐のような時間的変動も、 磁気圏または地球の外部磁場を歪ませる。
10. ユースケースと要件
この節は非規範的である。
磁力計は、たとえば次のようなさまざまなユースケースに使用できる:
-
センサーフュージョン。磁力計の一般的なユースケースは、地球平面に対して静止している Absolute Orientation Sensor [MOTION-SENSORS]、 またはコンパスを生成するためのセンサーフュージョンである。コンパスは基本的に前者に、 地理位置に応じた偏角の補正を加え、真北を指すようにしたものである。 コンパス方位の計算については § 11 磁力計を用いたコンパス方位 で詳述する。
-
仮想現実および拡張現実。Magnetometer は、VR エンクロージャー用の磁気ボタンを用いた入力を実装するために使用できる [VRBUTTON]。VR および AR 用のヘッドマウント追跡システムは、 ジャイロスコープ読み取り値の校正、およびヨー読み取り値を磁北に合わせるために磁力計データを使用できる。
-
ジェスチャー認識。書く、署名する、楽器を演奏するなどのさまざまなインタラクションも、 棒、ペン、または指輪のような磁石を用いて有効化できる [MAGITACT]。 ユーザーは、デバイスの周囲の 3D 空間で磁石を用いて粗いジェスチャーを行う。 磁石の動きは、デバイスに統合されたコンパスセンサーにより検知される磁場に影響する。 ジェスチャーの時間的パターンは、モバイルデバイスへ異なるインタラクションコマンドを送るための 基礎として使用できる。ズーム、ページめくり、通話の受諾/拒否、項目のクリックなどがユースケースである。
-
屋内ナビゲーション。ナビゲーションシステムは、建物内の磁場を検出するために、 モバイルデバイス上の磁力計データを使用できる [MAGINDOORPOS]。 十分な局所的変動があれば、その異常を自己位置推定に利用できる。 屋内ナビゲーションのユースケースには、たとえば近接広告、ショッピングモールや空港での経路案内、およびジオフェンシングが含まれる。
-
金属探知。磁力計は、近くに金属が存在することを検出するユーティリティアプリケーションに使用できる。 たとえば、物体の内部に隠れた内包物を見つけることができる。
11. 磁力計を用いたコンパス方位
この節は非規範的である。
地球の磁極に自らを合わせる器具であるコンパスは、 何世紀にもわたって航海に使用されてきた。 地球の自転軸は、地図参照に使用する地理的な北極および南極を定義する。 地理的な極と磁極との間には約 11.5 度(約 1000 マイル)のずれがあることがわかっている。 偏角は、 この状況を補正するために磁気方向に適用される。
デバイスが常に地表に対して水平である場合、コンパス方位は、地球磁場の
x
および y
成分、すなわち地表と同一平面上の方向のみを用いて決定できる。
地理的な北(または真北)方位を決定するには、適切な
偏角を加算する。
磁気 偏角または 偏角とは、水平面上における磁北と真北との間の角度であり、 地表上の位置に依存し、時間とともに変化する。 慣例により、偏角は磁北が真北の東にある場合に正であり、西にある場合に負である。 磁気偏角のリアルタイム値は、たとえば National Oceanic and Atmospheric Administration(NOAA)が提供する Magnetic declination calculator を使用して取得できる。
磁北は次のように計算される:
let sensor= new Magnetometer(); sensor. start(); let heading= Math. atan2( sensor. y, sensor. x) * ( 180 / Math. PI); console. log( '度単位の方位: ' + heading);
所与の緯度および経度における地理的な北は、次のように計算できる:
// 緯度と経度を取得する。ここでは簡潔にするため省略する。 let latitude= 0 , longitude= 0 ; // 所与の緯度と経度における磁気偏角を取得する。 fetch( 'https://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination' + '?lat1=' + latitude+ '&lon1=' + longitude+ '&resultFormat=csv' ) . then( response=> response. text()). then( text=> { let declination= parseFloat( text. replace( /^#.*$/gm , '' ). trim(). split( ',' )[ 4 ]); // 地理的な北を得るために磁気偏角を補正する。 console. log( '度単位の真方位: ' + ( heading+ declination)); });
注: デバイスが地表に対して水平でない場合、 開発者はさまざまな傾き補正技術を適用する必要があり、そのためには 3 軸 加速度計が必要である。加速度計および磁力計センサーの融合である orientation sensor からのデータは、この特定のユースケースを実装するために必要である。
12. 謝辞
Generic Sensor API に関する作業について Tobie Langel に感謝する。
13. 適合性
適合性要件は、記述的な表明と RFC 2119 用語の組み合わせで表現される。 規範的部分におけるキーワード "MUST"、 "MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、 "RECOMMENDED"、"MAY"、および "OPTIONAL" は、RFC 2119 に記述されているように解釈されるものとする。 ただし、読みやすさのため、これらの語はこの仕様のすべてで大文字として現れるわけではない。
明示的に非規範的と示されている節、例、および注を除き、 この仕様のすべてのテキストは規範的である。 [RFC2119]
適合ユーザー エージェントは、この仕様に列挙されている、ユーザーエージェントに適用可能なすべての要件を 実装しなければならない。
この仕様の IDL 断片は、Web IDL 仕様で説明されるように、 適合する IDL 断片に要求されるものとして解釈されなければならない。 [WEBIDL]