PR

センサーのカタログを作っておく

図3●求めるセンサーを検索する
例えば,引き出しの開閉を検知するセンサーと,そこからデータを取得するJavaのプログラムを備えたタンスを部屋の中に設置したとする。このとき,センサーを管理する管理サーバーに対して,センサーの機能を抽象的に記述したデータ(センサー情報)やセンサーの位置や形状,データを処理するプログラムの情報を登録しておく。センサーの情報を利用するアプリケーションは,この管理サーバーで自分が必要なセンサーを検索して,その情報に基づいてサービスを構成する。
図4●ANTH
ANTHで利用可能な機器には,ANTHの専用チップが埋め込まれている。それぞれの機器は,動作のトリガーとなるイベント(event)と起こすアクション(action),そしてそれらを結びつけるコントローラ(controller)という三つの役割を持ち得る。例えば壁と部屋の照明とを結びつける場合。controllerとなる携帯電話を壁の近くに持って行くと,壁に登録されているイベントと動作の一覧が液晶画面に表示される。ここでは叩かれたというイベントをトリガーにしたいので,それに対応するIDを選んで携帯電話のボタンを押す。すると,そのIDが取得できる。次に照明の前に携帯電話をかざしてボタンを押すと,アクションIDが照明に追加される。こうすることで壁を叩くと部屋の照明を操作できる。

 SNMPを使えば各ノードの管理や制御はできるが,センサーノードを取り替えたときに自動的にセンサーを置き換えるといった動作をさせるには,アプリケーションなどその上のレイヤーにおける管理が必要になる。

 これを,各センサーに対し個別に記述しておくのは大変である。手間がかかるし,管理がややこしい。一元管理する仕組みが欠かせない。東京大学大学院 情報理工学系研究科 知能機械情報学専攻の佐藤知正教授の研究室では,ネットワークに接続されたセンサーやアクチュエータを動的に組み合わせるためのミドルウェアをJavaで開発している。

 佐藤研究室での研究は,部屋のさまざまな場所にセンサーを付けて,人間の行動を把握するというもの。一般的な家庭の居間のような部屋でも「人間の行動を詳細に知ろうとすれば,センサーの数は400個を超える。故障や追加のたびにプログラムを書き換えるのは大変。センサーの動的な構成の変更に対応できるメカニズムが必要だった」(佐藤教授)。

 そこで,各センサーの情報を管理するサーバーを用意した(図3[拡大表示])。いわばセンサーのカタログである。管理サーバーに登録する情報は三つ。(1)センサーの情報,(2)センサーが付いた機器の形状や位置,(3)センサーの値などを取得するプログラムの情報である。中でも重要なのがセンサーの情報だ。そのセンサーがどのような機能を持つか,どんな型の値を返すかといった情報を記述する。

 センサーを利用するアプリケーションは,この管理サーバーに対してセンサーの検索を実行する。センサーの種類や場所などが検索の条件となる。検索の結果,現在利用可能なセンサーと,センサーを制御するJavaプログラムの情報が返ってくる。アプリケーションは,返ってきた情報に基づいてJavaのプログラムを呼び出す。

 アプリケーションの稼働中にセンサーが取り外されることも考えられる。このため,サーバーがセンサーの状態を監視しており,センサーが追加されたり削除されたりするとイベントをアプリケーションに対して通知する。こうして,センサーの構成変更に柔軟に対処できるようにした。

ノード同士が直接通信し合う

 一方,直接方式はまだ研究段階のものが多い。「直接方式は,サーバー方式で対処できないときに初めて必要とされる。例えばアプリケーションが非常に多くのセンサーを必要とし,全体の状況を一つのサーバーで管理しきれないような場合。規模の限られたネットワークならサーバー型の方が簡単だし,厳密に管理できる」(米カリフォルニア大学アーバイン校Information&Computer Scienceの須田達也教授)ためだ。
 直接方式で特に大きなテーマとなるのは,連携するノードの発見である。実現手法は大きく二つ。一つは人手で連携するノードを結びつける方法。もう一つは,ノード自身が連携相手を見つける方法である。

人間がノードを結びつける

 前者の研究を進めているのが,東京大学大学院 新領域創成科学研究科 基盤情報学専攻の森川博之助教授の研究室。家の中のライトや目覚まし時計,壁などのモノにセンサーやアクチュエータを持たせ,それらの機能を人間が自由に組み合わせる「ANTH」という基盤技術の開発を進めている。

 無線通信モジュールとANTHの機能を提供するソフトウェアを組み込んだ「ANTHチップ」を身の回りの日用品に取り付けて,相互に情報をやり取りさせる。「夜,ベッドに横たわりながら本を読んでいて眠くなったとする。いちいち起き上がって照明を消しに行くのは面倒。ベッドの横の壁を叩いて照明を消せるようにしたい,という学生の思いつきがヒントになった」(森川助教授)。

 ANTHでは,モノは三つの役割を持ち得る。(1)イベントの発生を通知する「event」,(2)何らかの動作をする「action」,(3)eventとactionを結びつける「controller」である。eventとactionは,IDを使って関連付ける。同じIDを持つeventとactionが連動して働く。

 例えば,壁を叩いて照明を消せるようにしたい場合(図4[拡大表示])。まず,携帯電話をcontrollerとして,壁にかざす。ボタンを押すと,携帯電話のANTHチップに,eventのIDがコピーされる。

 次に照明の前に移動し,IDを追加する。この結果,ユーザーが壁を叩くと,照明をつけたり消したりすることができるようになる。controllerはIDの削除もできるため,結びつけを解除したいときは照明から該当のIDを削除する。

 これだけでは,eventとactionが1対1で対応する単純な動作しか実現できそうにない。それでも機能の結びつけ方を工夫すれば,条件分岐に似た振る舞いを記述できる。例えば「午前7時になって,ユーザーが起きていなかったら目覚まし時計のベルを鳴らす」というサービス。まず午前7時にベルを鳴らすため,目覚まし時計のタイマー機能とベル機能を結びつける。次に結びつけるのは,洗面所のドアやカーテンの開閉を感知するセンサーと,目覚まし時計のタイマー解除機能である。ユーザーが起床して洗面所に入ったりカーテンを開けたりすると,タイマーは解除される。