使用に適したセンサーの選択 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

センサーは、デバイスとその周囲の実際の世界の関係をアプリに通知します。つまり、デバイスの方角や向き、動きをアプリに伝えることができます。こうしたセンサーは、デバイスのモーションを使って画面上に文字を配置すること、コックピット内のハンドルとしてデバイスのユーザー操作をシミュレートすることなど、ユニークな入力形態を提供することにより、ゲーム、拡張現実アプリ、ユーティリィティ アプリをより有用かつ対話的にするために役立ちます。

一般に、アプリがセンサーのみに依存するかどうか、またはセンサーにより追加制御機構が提供されているかどうかを最初に特定しておきます。 たとえば、仮想ハンドルとしてデバイスを使うドライビング ゲームで、代わりに画面上の GUI を通じた制御が可能な場合が考えられます。この場合、システムでセンサーが使用できるかどうかにかかわらずアプリが動作します。 それに対して、ビー玉傾斜迷路ゲームでは、適切なセンサーを備えるシステムでのみ動作するようにコーディングされる場合も考えられます。 センサーに完全に依存するかどうかについて、戦略的な選択を行う必要があります。 マウス/タッチ制御スキームでは、没入感とより微細な制御性が両立しないことに注意してください。

センサーの一括処理

一部のセンサーは、一括処理の概念をサポートします。このサポートは、利用できる個々のセンサーによって異なります。センサーが一括処理を実装すると、指定された期間のいくつかのポイントでデータを収集してから、そのすべてのデータを一度に転送します。これは、センサーによる読み取りと同時に検出結果が報告されるといった通常の動作とは異なります。次の図について考えてみましょう。この図では、データがどのように収集され、配信されるかが示されています。最初に示されているのが通常の配信で、次に一括処理による配信が示されています。

センサーの一括処理による収集

センサーで一括処理を行う主な利点は、バッテリの寿命が延長されることです。データを直ちに送信しない場合は、プロセッサの電力が節約され、データをすぐに処理する必要がなくなります。システムの一部は、必要とされるまでスリープ状態になる場合があり、消費電力の大幅な削減につながります。

待機時間を調整すると、一括処理によるデータをセンサーが送信する頻度が影響を受けます。たとえば、Accelerometer センサーには ReportLatency プロパティがあります。このプロパティをアプリケーション用に設定すると、センサーは指定された時間の経過後にデータを送信します。ReportInterval プロパティを設定することで、指定の待機時間に対して蓄積されるデータ量を制御できます。

待機時間の設定について注意事項がいくつかあります。最初の注意事項は、各センサーの MaxBatchSize プロパティによるサポートは、センサー自体に基づいて実行されるという点です。このプロパティは、強制的にイベントが送信されるまでにセンサーがキャッシュできるイベントの数を表します。MaxBatchSizeReportInterval を乗算すると、ReportLatency の最大値が決まります。この値よりも高い値を指定した場合は、データが失われないようにするために、最大待機時間が使われます。また、複数のアプリケーションのそれぞれで、目的の待機時間を設定できます。ただし、すべてのアプリケーションのニーズに対応するために、最短の待機時間が使われます。このため、アプリケーションで設定した待機時間が実際の待機時間とは一致しない場合があります。

センサーで一括処理のレポートを使う場合は、GetCurrentReading を呼び出すことによって、現在の一括処理のデータが消去され、新しい待機時間が開始されます。

加速度計

Accelerometer センサーは、デバイスの X、Y、Z 軸に沿った重力加速度値を測定するもので、簡単なモーション ベースのアプリに適しています。 重力加速度値には、重力による加速度が含まれることに注意してください。デバイスがテーブルの上にあり FaceUpSimpleOrientation である場合、加速度計の読み取り値は Z 軸で -1 G になります。 したがって、加速度計では必ずしも座標での加速度 (速度の変化率) のみを測定するわけではありません。 加速度計を使う場合、重力によるベクターと、モーションによる直線加速度ベクターとを区別する必要があります。 静止するデバイスでは重力ベクターを 1 に正規化する必要があることに注意してください。

次に、図でこれを説明します。

  • V1 = ベクター 1 = 重力
  • V2 = ベクター 2 = デバイス シャーシの -Z 軸 (画面の背面方向)
  • Θi = 傾斜角 (傾き) = デバイス シャーシと重力ベクターの Z 軸間の角度

加速度計加速度計の測定

加速度計センサーを使うアプリとしては、デバイスを傾けた方向 (重力ベクター) に画面のビー玉が転がるゲームなどが考えられます。 このタイプの機能は、Inclinometer の機能を厳密に反映したもので、ピッチとロールの組み合わせによりセンサーを扱うこともできます。 この処理は、加速度計の重力ベクターを使い、デバイスの傾きに対して簡単に数学的に操作されたベクターを提供することにより、ある程度簡素化されます。 もう 1 つの例としては、ユーザーが空中でデバイスをすばやく動かしたときに (直線加速度ベクター)、むちを打つ音を出すアプリが挙げられます。

Gyrometer

Gyrometer センサーは、X 軸、Y 軸、Z 軸に沿った角速度を測定します。 これは、デバイスの向きにかかわらず、さまざまな速度でのデバイスの回転を検出する簡単なモーション ベースのアプリで非常に便利です。 ジャイロメーターでは、データのノイズ、または 1 つ以上の軸に沿った一定のバイアスの影響を受ける場合があります。 ジャイロメーターがバイアスの影響を受けているかどうかを判断するために、加速度計を照会してデバイスが移動しているかどうかを確認する必要があります。その結果に応じてアプリで補正が必要になります。

ピッチ、ロール、ヨーに対応するジャイロメーター

ジャイロメーター センサーを使うアプリの例としては、デバイスの急な回転の動きに基づいてルーレットのホイールを回転させるゲームなどが考えられます

Compass

Compass センサーは、地球の水平面に基づいて、磁北を基準にした 2 次元の方位を返します。 コンパス センサーは、特定のデバイスの向きを特定するため、または 3 次元空間での何らかの要素を表すために使用しないでください。 地理的な特徴により、方位に自然なずれが生じる場合があります。したがって、一部のシステムでは、HeadingMagneticNorthHeadingTrueNorth を共にサポートしています。 それぞれのアプリでいずれが好ましいかを考えてください。ただし、すべてのシステムで真北値がレポートされるとは限らないことに注意してください。 ジャイロメーターおよび磁力計 (磁気の強度を測定するデバイス) センサーは、コンパスの方位を生成するためにデータを組み合わせます。これは最終的に、データを安定させる効果があります (電気的なシステム コンポーネントのために、磁場の強さは非常に不安定です)。

磁北を基準にしたコンパスの読み取り値

羅針図の表示、地図のナビゲートを行うアプリは通常、コンパス センサーを使います。

Inclinometer

Inclinometer センサーは、デバイスのヨー、ピッチ、ロール値を示すもので、空間内でデバイスがどのように位置しているかを検出するアプリに最適な機能を提供します。 ピッチとロールは、加速度計の重力ベクターを読み取り、ジャイロメーターからのデータを統合することにより算出されます。 ヨーは、磁力計とジャイロメーターのデータから確定します (コンパスの方位と同様です)。傾斜計は、理解しやすい方法で詳細な方向データを提供します。 デバイスの方向が必要であっても、センサー データを操作する必要がない場合は、傾斜計を使用します。

ピッチ、ロール、ヨーのデータを提供する傾斜計

デバイスの方向に合わせてビューを変更するアプリでは、傾斜計センサーを使うことができます。また、デバイスのヨー、ピッチ、ロールに合わせて飛行機を表示するアプリでも、傾斜計の読み取り値を使います。

方位センサー

デバイスの方位は、四元数と回転マトリックスの両方で表されます。 OrientationSensor では、空間内で絶対方位を基準にしてデバイスがどのように位置しているかを高い精度で決定できます。OrientationSensor のデータは、加速度計、ジャイロメーター、磁力計から取得されます。 このため、傾斜計とコンパスの両センサーの値を四元数から取得できます。 四元数および回転マトリックスは高度な数学的演算に適しており、グラフィカル プログラミングでよく使われます。 複雑な演算を使うアプリでは、多数の変換が四元数および回転マトリックスに基づくために、方位センサーを選択してください。

方位センサーのデータ

方位センサーは、デバイスの背面の方向に基づいて、周囲にオーバーレイして描画する高度な拡張現実アプリでよく使われます。

簡易方位

SimpleOrientationSensor は、指定のデバイスの現在の象限方位 (表向きまたは裏向き) を検出します。6 つの可能な SimpleOrientation の状態 (NotRotatedRotated90Rotated180Rotated270FaceUpFaceDown) があります。

デバイスが水平または垂直のいずれで保持されているかに基づいて表示を変更するリーダー アプリでは、デバイスがどのように保持されているかを決定するために SimpleOrientationSensor からの値を使います。

関連トピック

センサー データと表示の向き