[Blog翻訳] Windows 7 Sensor プラットフォームの使用について

みなさん、こんにちは。 Windows 開発統括部の古内です。

先週は USB に関する情報を特集しましたが、今週もデバイス関連でいきたいと思います。少し古い記事になりますが、昨年のはじめに Developing for Windows Blog に投稿されたセンサーに関する英語 Blog 記事を 3 つほどご紹介します。 「センサー」 といっても、Sensor and Location プラットフォームについてなので、デバイスそのものというよりは Windows の API、つまりアプリケーション開発のお話ですが...

今日は 2010 年 1 月 28 日に投稿された 「I Can Feel You – Using the Windows 7 Sensor Platform」 の翻訳をお届けします。


センサーで感知する – Windows 7 Sensor プラットフォームの使用

長い間中断してしまいましたが、Windows 7 で新たに導入されたすばらしい API をまた紹介したいと思います。Windows 7 の API を使えば、魅力的なユーザー エクスペリエンスで他を圧倒するようなアプリケーションを必ず作成できます。Windows 7 のタスク バーに関するシリーズの記事もまだ残っているのですが、このセンサー プラットフォームもとてもすばらしいので今回はこちらを紹介します。

API についての詳しい説明を始める前に、まず、Windows 7 Sensor and Location プラットフォームの構築にあたって製品開発チームが基本としてきた考え方をお伝えしておきましょう。(このプラットフォームの 「Location (位置情報)」 については、また今後の投稿で説明します。)

センサーを使用する理由

最近のおもしろいシナリオ (想定される使い方) では、センサーが果たす役割が一層大きくなってきています。たとえば、モバイル デバイスでは、本体の向き (重力の方向に対する相対的な位置) に合わせて画面の向きを縦から横に自動的に変わります。コンピューターでは、周囲の照明の状態が変化したときに自動的に画面の明るさを調整して画面を見やすくすることができます。私が最もよい例だと思うのは、モバイル デバイスのタイム ゾーンの自動変更です。旅行中、飛行機で目的地に到着してまず行うことの 1 つはモバイル デバイスの電源を入れることだと思いますが、いくつかのタイム ゾーンを横断してきたとしても、デバイスは魔法のように正しい時刻を表示します。

機能的な理由はもちろんですが、「プラットフォーム」 という形での提供には、API をひとまとめにし、API の使用や習得にかかる開発者の手間を少なくできるという利点があります。これまで、センサーの使用は対象の狭い、非常に垂直的なソリューションになる傾向がありました。センサーとは何か、どのようなデータ フィールドがあるのか、データ フィールドにどのようにアクセスするのかなど、こうしたことについての明確な定義がなく、標準化が行われてこなかったため、センサーのプログラミングは大変な作業でした。GPS 位置センサーなどのセンサーを使用する場合、さまざまなメーカーがハードウェアを提供していますが、ドライバーや API がそれぞれ異なるので、ハードウェアを操作するにはそれらを 1 つ 1 つ学習していかなければなりませんでした。ハードウェアやメーカーを変更しようと思ったら、同じような情報にアクセスするのにまた新しい API を調べるということの繰り返しでした。

Windows 7 ではこうした問題の根本的な解決を目指しました (私たちは、このような取り組みをいつも行っています)。問題の解決策として用意したのが、すぐに使えるセンサー サポート 「Windows 7 Sensor and Location プラットフォーム」 です。このプラットフォームでは標準インターフェイスのセットが提供されるので、開発者は各メーカーのデバイスについて詳しく知る必要がなくなり、その分の労力をアプリケーション ロジックの開発に使うことができます。センサーは、新しい 「標準」 入力デバイスの 1 つとして扱われることになります。このような標準インターフェイスを提供することにより、Windows 7 Sensor and Location プラットフォームは Win-Win-Win (3 者にとってメリットのある) の状況を生み出します。まず、センサー情報の検出、アクセス、受信に関する開発作業が容易になることで、より多くの開発者が環境の変化に合わせてアプリケーションを最適化するようになります。その結果、センサー ハードウェアに対する需要は拡大し、ハードウェア メーカーは、Windows と一体化させるために API の特定のセットに対象を絞って標準化を図ることができます。そして最も重要な点として、エンド ユーザーは、自分の作業環境にあったアプリケーションを利用できるようになります。

Sensor and Location プラットフォームの 「Location」 に関する部分は、ユーザーのプライバシーを保護しながら地理的位置に関するデータを容易に取得するための抽象層を、このセンサー プラットフォームの上に追加するものです。

センサーの中身

Sensor プラットフォーム API を理解しやすくするために、簡単にこのプラットフォームの概要を説明し、プラットフォームの各コンポーネントの役割について説明します。次の図は、システムの主要コンポーネントを示しています。この図はプラットフォームの全体を示したものではなく、説明をわかりやすくするために、位置情報に関連する部分は省略しています。

sensor_Arch1

プラットフォームの最初のコンポーネントは、図中の 1 に示されている実際のセンサー デバイスです。一般的には、光量、温度、湿度、相対的な重力などの物理的現象を計測する実際の物理デバイスです。ただし、センサーは論理デバイス (仮想センサーとも呼ばれる) の場合もあります。仮想センサーはセンサーの機能を再現するソフトウェア ベースのセンサーで、センサーの 「代理」 としてデータをプラットフォームに提供します。仮想センサーはこの後でも少し登場しますが、実際のセンサーをシミュレーションすることで開発プロセスに役立てることができます。

各センサーには Windows 7 とハードウェア デバイスを仲介するためのドライバーが必要です。この結合は、ユーザー モード デバイス (UMD) センサー ドライバーによって実現されます (図中の 2)。

センサーを Windows 7 で使用するためのデバイス ドライバーを簡単に作成できるようにするために、このプラットフォームにはセンサー クラス拡張 (図中の 3) が用意されています。これは、基本的には、センサー ドライバーで必要となる一般的なコードを実装するドライバー ユーティリティ ライブラリです。この記事ではハードウェアやドライバーの詳細については説明しませんが、センサー ドライバーの作成方法については、Gavin Gear が出演している 2 つのビデオ (「Windows 7 Sensor and Location - ドライバーの開発、パート 1 (英語)」および「パート 2 (英語)」) で詳しく説明されています。

センサーがインストールされ、統合されると、Sensor API (図中の 4) によってアプリケーションから検出できるようになります。

Windows 7 Sensor and Location がもたらす大きな利点の 1 つは、複数の (異なる) アプリケーションで、同時に同一のセンサーからデータを受信できるという点です (図中の 5)。以前のバージョンの Windows では、デバイスは、通常、仮想 COM ポートを使用してシステムと通信していました。仮想 COM ポートの問題点の 1 つとして、拡張性がなく、複数のコンシューマー アプリケーションを同時にサポートできないという点がありました。つまり、複数の同時接続をサポートできるプラットフォームが実現したことは大きな進歩と言えます。

プラットフォームの最後のコンポーネントは、コントロール パネルの [位置センサーとその他のセンサー] ダイアログ ボックスです。このダイアログ (図中の 6) によって、ユーザーはアクセス許可の設定や、センサーが提供するその他のパラメーターを制御できます。次の図は、筆者のコントロール パネルの [位置センサーとその他のセンサー] のスクリーン ショットです。この図から、Sensor Development Kit と Virtual Light Sensor の 2 つのセンサーがインストールされ、いずれも有効になっていることがわかります。

SensorAndLocationControlPannel

API の解説に入る前の最後のトピックとして、プラットフォーム内でセンサーがどのように認識されるのかを説明しておきましょう。

先に説明したように、センサーには物理デバイスの場合と、論理 (仮想) センサーの場合があります。すべてのセンサーは、どのような種類のものでも、次のようなプロパティを持っています。

  • Category (カテゴリ) - 何らかの関連性があるセンサーの集合。たとえば、「気象観測」というカテゴリであれば、温度、大気圧、風速などの自然環境に関するセンサーが含まれます。
  • Type (種類) - 風速や光量など、計測する物理的現象の定義。
  • Properties (プロパティ) - センサーが持つことができるメタデータ情報 (センサーのわかりやすい名前など)。読み取り専用のプロパティと読み書き可能なプロパティがあります。センサーのわかりやすい名前やセンサーのシリアル番号などは読み取り専用プロパティです。要求されるデータ レポートの間隔といったプロパティは読み書き可能なプロパティです。
  • Data Types (データ型) - 定義されている計測の種類に対してセンサーがレポートする実際のデータ型。たとえば、光量はルクス単位で計測され、浮動小数点型変数としてレポートされます。位置情報には緯度と経度が含まれますが、いずれも浮動小数点型変数です。ただし、後で説明するように、位置情報には有効な位置として住所が含まれる場合があり、これは文字列のセットです。データ型はセンサーによって異なり、開発者はセンサーがデータ レポートで返すデータ型を把握している必要があります。
  • Events (イベント) - Sensor and Location プラットフォームとアプリケーションとの主な通信方法。アプリケーションが利用する新しいデータが発生したときや、センサーの状態が変化したときなどに、アプリケーションに対してイベントとして通知が行われます。
  • State (状態) - センサーの動作状態の種類の定義。"センサーを使用する準備ができているか"、"ユーザーは既にセンサーを有効にしているか" などの質問に対する回答に相当します。

さて、準備段階としての説明は以上で終了です。この後は、センサーの操作や API についての詳しい説明に入ります。Sensor and Location プラットフォームの次のブログに進みましょう。

このトピックに関するその他の記事:

(日本語注: 上記のブログ記事の翻訳は、明日以降、順次投稿していきます。)