最近のセンサー関連技術の進歩は、PC のユーザー エクスペリエンスの加速と進化を促す触媒となっており、環境光の変化、ユーザーの動作、ユーザーの接近、位置情報などに反応する機能は、コンピューターを使用するうえでの一般的で不可欠な要素となりつつあります。環境光センサーによって部屋の明るさを察知し、ディスプレイの明るさを調整するといったシンプルな用途でさえ、デスクトップ PC での基本的なシナリオとなってくる可能性があります。一方でもちろん、こういった周辺機器の使用については、ユーザーが完全に制御できるよう配慮しています。これは、各種センサーによって、ユーザーによっては好まないようなリスクや悪用方法も生じるためです。Device Connectivity (デバイス接続性) チーム所属の PM である Gavin Gear 執筆の今回の記事では、Windows 8 におけるセンサーのサポートについて詳しくご紹介します。
--Steven


センサー類について私たちがまず検討したのは、Windows 8 でバッテリ寿命を維持しつつ PC を環境に適応させるためには、システム レベルでセンサーをどのように使用するべきかという点です。

自動輝度調整

最初に検討したシステムの機能は、ディスプレイの明るさを自動的に調整する "自動輝度調整" です。環境光センサーを使用するこの機能は Windows 7 で最初に導入されたもので、スレート、コンバーチブル PC、ノート PC などのモバイル デバイスをターゲットとしています。今日のディスプレイがサポートする輝度は、ほんの数年前の一般的な水準と比べても約 2 倍となっているため、この機能は非常に重要です。変化する環境光に合わせて画面の明るさを動的に制御することで、画面の見やすさを最適化すると共に、暗い場所では画面の明るさを落としてバッテリを節約することができます。

映り込みはあるが可読性は確保されている 映り込みによって可読性がほぼ失われている

屋外の強い陽光の中でタブレット PC の自動輝度調整をオンにした状態 (左) とオフにした状態 (右)

ご覧のとおり、自動輝度調整によって、明るい環境では自動的に画面も明るくなるため、画面のコンテンツをよりはっきりと確認できます。日当たりの良い部屋で PC を使用されている方は、デスクトップ PC でも時間帯や季節によって同じ状況になることをよくご存知かと思います。

画面の自動回転

多くのスマートフォンやその他のモバイル デバイスの普及によって、デバイスを回転させると画面の表示も回転し、新しい向きに合わせて縦横比なども調整されるのが普通だという認識が一般的になりました。加速度センサーからのデータによってデバイスの基本的な向きを認識し、自動的に画面を回転させることで、ユーザーはデバイス (主にスレートやコンバーチブル) をより自然かつ直感的に使用でき、ソフトウェア コントロールやハードウェアのボタンを使って手動で画面を回転させる必要がありません。

タブレット PC を水平に長い向きで保持した場合の Windows 8 の [Start] (スタート) 画面 タブレット PC を垂直に長い向きで保持した場合の Windows 8 の [Start] (スタート) 画面

Windows 8 の [Start] (スタート) 画面の横向き表示と縦向き表示

センサー関連のアプリ開発サポート

Windows 8 システムによるセンサーの基本的な活用方法だけでなく、アプリによるセンサーの活用方法についても検討する必要がありました。ゲーム、商用アプリケーション、ツール、ユーティリティなど、さまざまなセンサー対応アプリの例を通して、対応するべきシナリオについて検討しました。

最初に検討したのは、アプリがユーザーの動作や画面の回転を認識するシナリオです。これには、重力によって生じる力と、デバイス自体の動きの計測を行う、加速度センサーと呼ばれるデバイスが必要です。しかし多くのシナリオでは、動作と重力とを認識するだけでは不十分です。デバイスの向きも、多くのアプリケーションが必要とする情報です。PC にデバイスの向きを認識させるためには、コンパスの機能を組み込む必要がありました。

コンパスをサポートするには、最低でも 3D 加速度センサー (3 つの軸に沿って加速度を計測するセンサー) と 3D 磁気センサー (3 つの軸に沿って磁場強度を計測するセンサー) が必要です。このセンサーの組み合わせは "6 軸動作/姿勢センサー システム" と呼ばれ、基本的な傾き補正付きコンパス機能、画面の回転、一部のカジュアルなゲーム アプリ ("ラビリンス" 型のゲームなど) をサポートすることができます。しかし、テスティングやプロトタイプの検証から、6 軸動作センサー システムには重要な弱点が 2 つあることがわかりました。コンパスで散発的に誤差が生じることと、インタラクティブな 3D ゲームに必要な応答性がないことです。

携帯電話のプラットフォームで最近見られるようになってきた新しい種類のセンサーとして、ジャイロ センサーがあります。ジャイロ センサーは、通常は 3 つの軸に沿って、角速度を計測します。また、ジャイロ センサーのデータによって、3D 動作センサー システムの応答性と精度を向上させることも可能です。ジャイロ センサーは非常に高精度ですが、重力や方位のような、姿勢 (向き) を判断する基準は持ち合わせていません。

次の図に示すとおり、ジャイロのデータは、デバイスの 3 つの主軸それぞれの回転という形で表現されます。

ヨーの回転は +Z、ロールの回転は +Y、ピッチの回転は +X と表されている

当初は、このようなセンサーが必要になるのは、たとえば特殊なゲームなど、ごく一部のアプリに限られるのではないかという見方もありました。しかし、3D 動作/姿勢センサーの問題について調べれば調べるほど、シェイク (揺らす動作) やツイスト (ねじる動作)、多次元的な回転といった人間にとって理解しやすい動作に反応することができれば、アプリケーションがずっと没入的で魅力的なものとなることがわかってきました。これらのセンサーを使用すれば、非常に没入的な 3D ゲームを製作できることはもちろんですが、それ以外の多くの分野でも、さまざまな動作を使った入力に自然に応答するアプリを実現できるでしょう。マップ/ナビゲーション アプリケーション、計測ユーティリティ、マシン間で対話的に動作するアプリケーション、カジュアルなゲームのようなシンプルなアプリなど、さまざまな用途が考えられます。

エンジニアリング面の課題

動作を使ったアプリの探求は、いくつかの 3D エクスペリエンスをプロトタイプ化して検証することから始まりました。最初の課題は、デバイスの物理的な向きを、アプリ内の仮想的な 3D 環境に直接マッピングすることでした。シンプルな拡張現実の例として、タブレットを "窓" 代わりにして仮想世界を覗くことができるというエクスペリエンスをモデル化してみることにしました。コンセプト自体は簡単で、画面を見ながらデバイスを動かすと、画面を通して見える仮想環境 (部屋の中のようすを再現したもの) はそのまま静止しているように見えるというものです。

まずは、加速度センサーを使って、デバイスの上下動を 3D 環境の上下動に連動させるという実験を行いました。デバイスを静止させていれば、画面に映っている情景もそのまま動きません。デバイスを上下に傾けると、画面に映っている情景が上下に傾くはずです。実際にやってみると、すぐに問題に行き当たりました。デバイスを静止させていても、加速度センサーからのデータに含まれる "ノイズ" によって、3D 環境がぶれるように動いてしまうのです。加速度センサーのデータを取り出してグラフ化すると、はっきりとノイズを確認することができました。

加速度 (X) と加速度 (Y) は 0 付近で、加速度 (Z) は -1 付近で、それぞれギザギザの直線を描いている

ノイズを除けばグラフはいずれもまっすぐな線になり、高低偏差はありません。このようなノイズを取り除くには、通常、生のデータ ストリームに対してローパス フィルターを適用します。プロトタイプにこの対策を組み込んだところ、ぶれがなく、スムーズで安定した動作を得ることができました。しかし、ローパス フィルターを使用することで別の問題が生じました。アプリの応答性が失われ、動作に対する反応が鈍くなってしまったのです。応答性を犠牲にすることなく、ぶれを解消する方法が必要でした。

次に行った実験は、仮想 3D 環境のアプリに、"左を向く"、"右を向く" という動作を追加することです。この動作は、6 軸コンパス式 (3D 加速度センサー + 3D 磁気センサー) のソリューションを使って実現しました。この方法は、それなりにはうまくいったものの、6 軸コンパスの全体的な不安定さが原因で動きが一貫せず、また、上下の動きと左右の動きを融和させることも困難でした。

これらの実験結果から、このセンサーの組み合わせでは、私たちが求める滑らかで応答性の高いエクスペリエンスは実現できないことがはっきりしました。加速度センサーでは、純度の高いデータを得ることができず、それ単体でデバイスの向きを認識することはできません。磁気センサーは更新が遅く、また電磁的な干渉を受けやすいという弱点がありました (コンパスの針がときどき一方向に固まってしまうような状態です)。ジャイロ センサーを使ったテストはまだこれからでしたが、回転速度しか検出できないジャイロがどう役に立つのかは、まだはっきりしませんでした。

"センサー フュージョン" の導入

しかしさらに実験を重ねていくうちに、3 つのセンサーをすべて組み合わせて使うことで解決の可能性が見えてきました。加速度センサー、磁気センサー、そしてジャイロが互いに弱点を補い合うことで、データとデータ応答性のギャップを埋めることができるのです。これらのセンサーを組み合わせて使用すれば、各センサーを個別に使った場合よりも応答性が高く滑らかな、より優れたエクスペリエンスを作り出すことができます。複数のセンサーからの情報を組み合わせて、総合的により優れた結果を生み出すことを、"センサー フュージョン" (センサー融合) と呼びます。

センサー フュージョンでは、複数のセンサーを組み合わせることで、個々のセンサーから得られる成果の合計よりも大きな成果を生み出します。センサー フュージョン システムとして一般的なのは、3D 加速度センサー、3D 磁気センサー、3D ジャイロを組み合わせた "9 軸センサー フュージョン" システムです。システムのしくみがわかりやすいよう、入出力を見てみましょう。

ハードウェア (3D 加速度センサー、3D ジャイロ センサー、3D 磁気センサー) から "パススルー" と "センサー フュージョン" に向けて矢印が出ており、そこからセンサー出力 (3D 加速度センサー、3D ジャイロ センサー、3D コンパス、3D 傾斜センサー、デバイスの向き) へと矢印が出ている
9 軸センサー フュージョン システム

この図では、2 種類の出力が示されています。パススルー出力ではセンサーのデータがアプリケーションに直接パスされ、センサー フュージョン出力では各センサーのデータからより強力なデータ タイプを合成します。

一部のアプリケーションでは、センサーからのパススルー データを直接活用できます。"額面どおり" のデータが役立つシナリオとしてはさまざまなものが考えられますが、たとえば歩数計を組み込んだアプリなどがその一つです。下のグラフは、タブレット PC を持って歩いた際の加速度センサーの出力データを示したものです。一歩一歩が確実に認識されていることが、グラフからはっきりとわかります。

加速度 (X)、加速度 (Y)、加速度 (Z) が、それぞれユーザーの一歩一歩に対応する規則的な変化を伴う線としてグラフに示されている。

 

しかし、実験でわかったように、多くのアプリケーションではセンサーの生データは効果的ではありません。こういったアプリケーションには、次のようなものがあります。

  • コンパス アプリ
  • 強化ナビゲーション アプリや拡張現実アプリ
  • カジュアルなゲーム
  • 3D ゲーム アプリ

以下はサンプルの 3D ゲームのスクリーンショットです。

3D で仮想的に表された部屋の中に標的が設置されたシンプルな 3D ゲーム

3D ファーストパーソン シューティング ゲーム (//build/ で紹介されたもの)

これらのアプリケーションで実装される機能には、センサー フュージョンのデータが必要です。センサー フュージョンの特性は、3 つすべてのセンサーからのデータを数学的に総合して、傾き補正付きコンパス、傾斜センサー (ヨー、ピッチ、ロールの値を示すセンサー)、デバイスの向きのより高度な表現といった、洗練された出力を提供することにあります。この種のデータを活用することで、自然な動作に対して、速く滑らかで応答性に優れた反応を示す、洗練されたアプリを作成することができます。

センサー フュージョン ソリューションの導入により、Windows 8 はあらゆるアプリケーションに対応する完全なソリューションを提供します。センサー フュージョンによって、ぶれるような動作や不安定な画面切り替えを防ぐと共にデータの不整合を減らし、3D 空間内でデバイスの完全な動きを (不自然な画面切り替えを伴うことなく) シームレスに再現することを可能にするデータが提供されます。

ハードウェア パートナーとの協力

Windows におけるセンサー フュージョン ソリューションを設計する一方で、同時にハードウェア メーカーがこのソリューションを活用できるよう、早い段階からパートナーとして連携していく必要がありました。デバイスが 1 種類なら、それに向けてセンサー フュージョン システムを設計することは比較的簡単です。しかし Windows はさまざまなフォーム ファクターの多種多様な PC で実行され、各ハードウェア コンポーネントにもさまざまな製造元のものが使用されます。Windows のハードウェア パートナー各社が形成するエコシステム全体が参加できるようなソリューションを提供する必要がありました。

最初のステップは、Windows のセンサー フュージョン ソリューションと連動させることができるセンサー パッケージのパフォーマンスのベースラインを定めることでした。Windows の認定ガイドラインを使って、センサーのパフォーマンスの仕様を示すと共に、ハードウェア メーカーが自社ソリューションと Windows の互換性を検証できるよう、さまざまなテストを作成して Windows 認定キットと共に提供しました。

もう一つの課題は、ドライバーの開発とサポートのコストを削減することでした。センサー ハードウェアの製造元や PC メーカーにとってシンプルになるよう、USB や、I2C のような低電力バスで接続されたすべての Windows 対応センサー パッケージに対応する、単一のドライバーを作成し、Microsoft から提供することにしました。このセンサー クラス ドライバーの提供によって、センサー ハードウェアのサポートは Windows に同梱されるドライバーで簡単かつ確実に処理できるため、ハードウェア メーカーは安心してセンサーを使ったイノベーションに取り組むことができます。

クラス ドライバーの導入を加速するため、Microsoft は業界のパートナー企業と協力して、この仕様を公的な標準規格に組み込みました。2011 年 7 月には、USB-IF の HID (ヒューマン インターフェイス デバイス) 仕様に、センサーについての標準規格が導入されています (HID 仕様バージョン 1.12、レビュー申請 #39 (英語) にて導入)。この標準化によって、すべてのセンサー メーカーが、公的な規格である USB-IF 仕様に準拠したデバイス ファームウェアを用意することで、Windows 8 対応のセンサー パッケージを作成することができます。このことは、Windows 8 PC にセンサー ハードウェアを組み込むために必要になる時間とコストの削減に役立ちます。また、その他のメリットとして、サポート コストの低減や、センサーを搭載した Windows 8 PC のハードウェア性能の一貫性向上などがあります。

一方、クラス ドライバーを標準化するだけでなく、センサー フュージョン ソリューションのパフォーマンスを最適化すると共に、バッテリ寿命への影響を最低限に抑えたいとも考えました。システム上にアクティブなセンサーがあれば、その一つ一つが電力を消費します。また、センサーがスタックにデータを送ると、メモリと CPU 時間の両方が消費されます。Windows 8 では、センサー フュージョン システムによる電力とパフォーマンスへの影響を最低限に抑えるため、次の 2 つの対策を講じました。

1.Windows 8 のセンサー フュージョン インターフェイスは、センサー フュージョン データの処理の多くが、ハードウェアのレベルで行われるような設計になっています。ハードウェア レベルでセンサー フュージョンに対応することにより、メイン CPU で処理コストの高いアルゴリズムを実行する必要がなくなり、電力と CPU サイクルを節約することができます。

2.強力なフィルター機構を組み込み、その時点で実行されているセンサー アプリのニーズに直結させました。このペイ フォー プレイ型のデータ/イベント モデルでは、センサーのデータは、アプリがデータを必要とするペースでスタックに送られ、それ以上速くなることはありません。これによって、センサー データの処理のための CPU 使用量を大幅に削減することができます。

センサーと Metro スタイル アプリ

これらすべてを総括する最後の課題は、センサー フュージョンのパワーと可能性を、Metro スタイル アプリ開発者が利用できるようにすることでした。これを実現するため、新しい WinRT の一部として、センサー API の開発を行いました。これらの API によって、すべての Metro スタイル アプリからセンサー フュージョンを活用することができます。API はクリーンかつシンプルでありながら、カジュアルなゲームから仮想現実アプリケーションに至るまで、あらゆるシナリオに対応するデータへのアクセスを提供します。また、これらの機能はもちろん Win32 API としても利用でき、ゲームやその他のデスクトップ アプリケーションに使用することができます。

次の JavaScript コード スニペットは、Windows Runtime で加速度センサーにアクセスし、イベントにサブスクライブすることがいかに簡単かをよく示しています。

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 Runtime でのセンサーのサポートの詳細については、アプリでの位置情報とセンサーの活用 (英語) を扱ったこちらの //build/ セッションを参照してください。

ここまでお読みいただいた方の中には、Windows 8 のセンサー フュージョンを実際に試すことはできないのか、あるいはこれらの新しい機能を使ったアプリを書いてみることはできないのかとお考えの方もいらっしゃるかと思います。2011 年の //build/ カンファレンスに参加された開発者の方には、Windows 8 Developer Preview と共にこれらのセンサーの完全なパッケージを搭載した、Samsung のスレート PC が配布されていますが、これは全部で 4,000 台くらいの限定配布で、だれにでも手に入るものではありませんでした。しかし、さいわいなことに、このデバイスに組み込まれていたものと同じ 9 軸センサー フュージョン システムが、ST Microelectronics からオンライン販売されています。この "ST Microelectronics eMotion Development Board for Windows 8" (モデル番号 STEVAL-MKI119V1) は、USB による接続が可能で、Windows 8 に含まれる HID センサー クラスに対応しています。既に Windows 8 Developer Preview をダウンロードされていて、センサーのエクスペリエンスを早く試してみたいという方は、このデバイスの入手をご検討ください。

USB ドングルに接続された回路基盤

ST Microelectronics eMotion Development Board for Windows 8

それでは、センサー フュージョンが実際に動作しているようすをご覧ください!


ビデオをダウンロードしてお好みのメディア プレーヤーで再生することができます:
高画質 MP4 | 低画質 MP4

-- Gavin