スマートスペースを対象としたデバイス間通信シミュレータの 開発

スマートスペースを対象としたデバイス間通信シミュレータの
開発
玉井 森彦 † , 柴田 直樹 ‡ , 安本 慶一 † , 伊藤 実 †
†
奈良先端科学技術大学院大学 情報科学研究科
‡
滋賀大学 経済学部 情報管理学科
Development of a Network Simulator for Smart Spaces
Morihiko Tamai† , Naoki Shibata‡ , Keiichi Yasumoto† and Minoru Ito†
†
1
Graduate School of Information Science, Nara Institute of Science and Technology
‡
Department of Information Processing and Management, Shiga University
はじめに
ユビキタス社会の実現のため,ネットワーク基盤の整備に加
え,スマートスペース上の多数の情報通信機器やセンサを外部
環境の状況や利用者のコンテキストに従って適切に制御するユ
ビキタスアプリケーションの効率のよい開発技術が求められて
いる.
ユビキタスアプリケーションは,家電やセンサなど我々の身
近に存在するデバイス上で動作するため,起こりうる様々な状
況において,堅牢に,かつ安全に動作することが求められる.し
かし,これらのアプリケーションをテストするためには,テス
トベッド上へ多数の家電やセンサを設置し,さらにその上で被
験者に様々な行動をとってもらう必要があるため,テストの実
施には膨大なコストや労力が必要となる.
このような問題に対し,ユビキタスアプリケーションを仮想
的な 3D 空間上でテストするためのスマートスペースシミュレー
タに関する研究が行われている [1, 2].スマートスペースシミュ
レータに求められる機能として,(1) 仮想 3D 空間上への(情報
家電やセンサなどの)デバイス設置機能,(2) デバイス間の通信
のシミュレート機能(有線・無線混合),(3) エアコンなどの機
器の動作による空間の物理量(室内温度など)の時間的変化を
再現する機能,(4) 標準的な情報家電制御用プロトコル(UPnP
など)のサポート,が挙げられる.また,アプリケーションの
テストを容易化するためには,(5) デバイスの配置やパラメタ
値の組合わせに対し,テスト系列を系統的に生成するための機
能,(6) 実環境デバイスの制御用コードと,それに対するシミュ
レータ用のコードとを互換にする機能,が求められる.さらに,
一部のデバイスの動作を人の感覚をとおしてテストしたい場合
には,(7) 実環境で動作しているデバイスと,シミュレータ上
で動作しているデバイスが混在した環境においてテストを行う
ための機能,が有用であると考えられる.これらの要件に関し,
既存のスマートスペースシミュレータでは,(1),(2) に関して
は実現されているものの,その他の項目については考慮されて
いなかった.
著者らは現在,上記 (1)∼(7) を実現すべく,スマートスペー
スシミュレータ UbiREAL[3] の開発を行っている.本稿では
UbiREAL が実現する機能の内,デバイス間の通信シミュレー
ト機能(以下,UbiREAL ネットワークシミュレータ)に焦点
を当て,そのアーキテクチャについて述べる.
1.1
関連研究
既存のスマートスペースシミュレータとして,TATUS[1],お
よび UbiWise[2] が挙げられる.TATUS は,ユビキタスアプリ
ケーションの動作を仮想空間上でシミュレートすることで,実環
境でのテストに必要なコストの削減を主な目的としている.ま
た UbiWise は,ユビキタス環境用の新たなデバイスや,組込み
ソフトウェアのプロトタイプの開発・テストの容易化を主な目
的としている.いずれも 3D 仮想空間上でのユビキタスアプリ
ケーションの実行,および可視化機能を提供しており,アプリ
ケーションの動作を直観的にテストすることができる.しかし
ネットワークシミュレート機能に関しては,MAC 層レベルで
通信をシミュレートする機能は備えているものの,実環境用の
コードとシミュレータ用のコードとの互換性の確保や,家電制
御用プロトコルのサポート,実空間のデバイスと連係したシミュ
レーションの実行等に関しては考慮されていない.
一方,より汎用的なネットワークシミュレータとして,ns2[4],GlomoSim[5],GTNetS[6],ENTRAPID[7],NCTUns[8]
が挙げられる.ns-2,GlomoSim,GTNetS は,有線やアドホッ
クネットワーク上のプロトコルやアプリケーションのテスト・
評価に際し,既存研究の多くで用いられている.しかしこれら
のシミュレータを利用するためには,実環境用のコードとは別
にシミュレータ用のコードを作成する必要があり,シミュレー
タの利用者の負担が大きい.一方 ENTRAPID,NCTUns は,
FreeBSD 等既存の OS のネットワークスタックのコードをシ
ミュレータ内で用いるため,実環境用のコードを改変すること
なくシミュレータ上で使用することができる.しかし,スマー
トスペースを対象としたシミュレータではないため,無線通信
のシミュレートに関してはサポートが不十分であり,仮想空間
上の部屋の間取り,デバイス,家具の位置,または物理量等の
情報を利用した通信のシミュレートは考慮されていない.
2
アーキテクチャ
スマートスペース用ネットワークシミュレータに求められる
機能として,(1) 有線,無線が混在する環境での通信のシミュ
レート機能,(2) シミュレーション結果の可視化機能,(3) 実デ
バイスの制御用コードと,それに対するシミュレータ用のコー
ドとの互換性の確保,(4) 実環境のデバイスとシミュレータ上の
デバイス間の通信をブリッジする機能,(5) シミュレーションの
規模の増加に対するスケーラビリティの確保,が挙げられる.
UbiREAL ネットワークシミュレータでは,上記 (1) に対し,
有線および無線プロトコルの MAC 層レベルでのシミュレート
機能を提供している.無線通信のシミュレートを行なう際には,
スマートスペース上の家具やデバイスの位置を考慮し,デバイ
ス間の電波干渉や障害物による影響を考慮したシミュレートを
行なう.また,上記 (2) を実現するため,仮想空間上の部屋やオ
ブジェクトを 3D グラフィックスで描画するためのツールの提供
を行なう.シミュレーション結果の可視化は,シミュレータの
実行と同時にリアルタイムで行なえるようにする.上記 (3) に
対しては,実アプリケーションの実装に使用されるネットワー
クプログラミング用のライブラリを,それと同様の API を持つ
シミュレータ用のライブラリと置き換えることで,実環境とシ
ミュレータ用のコードとの互換性を確保する.また上記 (4) に
関しては,ネットワークシミュレータ上の NAT 機能により実
現する.また,シミュレータを複数の計算機上で並列実行する
ことで,上記 (5) のスケーラビリティを確保する.
以下では,上で述べた各要件の実現方法について,より詳細
に説明する.
オブジェクトに関しては,プルダウンメニューから選択し,ド
ラッグアンドドロップで設置する.また,移動オブジェクトに
関しては,移動の軌跡(図 1 の折れ線)をマウスで入力する.
図 1: 仮想空間への GUI によるデバイスの設置
2.1
サポートするプロトコル
UbiREAL ネット ワ ー ク シ ミュレ ー タ は ,MAC 層 の プ
ロ ト コ ル と し て 通 常 の イ ー サ ネット(IEEE802.3)に 加 え ,
IEEE802.11,ZigBee,Bluetooth 等の無線プロトコルをサポー
トする.無線通信のシミュレートでは,デバイス間の電波干渉に
加え,スマートスペース上の障害物(壁,家具,家電,人など)
や,空間の物理量(温度や湿度など)による影響を考慮する必
要がある.スマートスペース上の障害物の位置情報,および物
理量は,それぞれ UbiREAL のスマートスペース設計モジュー
ル,および物理シミュレータから取得する.スマートスペース
設計モジュールは,3D 仮想空間上への家具,機器,センサの設
置,および仮想空間上の移動オブジェクト(人など)の軌跡を
設定する機能を有する(これらの機能については,2.2 節で説明
する).また物理シミュレータは,機器の作動による,仮想空間
上の物理量の時間的な変化をシミューレートする機能を有する.
ネットワークシミュレータは,これらのモジュールから定期的
に情報を取得することで,障害物や物理量の影響を考慮し,現
実環境にできるだけ即した通信のシミュレートを行なう.
その他のプロトコルとして,ネットワーク層では IP に加え,
アドホックネットワーク用のルーティングプロトコルである DSR,
AODV をサポートする.また,トランスポート層に関しては,
UDP,TCP をサポートする.さらに,ユビキタスアプリケー
ションの開発では,スマートスペース上の家電間の通信プロト
コルとして UPnP が用いられることが多い.本ネットワークシ
ミュレータでは,UPnP ライブラリとして著名な,libupnp[9]
および CyberLink for Java[10] を用いて実装されたアプリケー
ションをサポートする.
2.2
仮想空間上へのデバイスの設置とシミュ
レーション結果の可視化
仮想空間上へのデバイスの設置は,専用の GUI をとおして
行う.図 1 に示すように,仮想空間を俯瞰した平面に対し,静
止オブジェクト(家具,情報家電,センサなど),および移動オ
ブジェクト(人が保持する RFID タグなど)を設置する.静止
各オブジェクトは,市販の 3D モデリングソフトなどで作成
された VRML データを基に,OpenGL によって描画される.ま
た,オブジェクトの各状態(電源のオン・オフなど)に対し,そ
れぞれ異なった 3D モデルを登録することができる.シミュレー
ション結果を可視化する際には,デバイス間の通信等によるオ
ブジェクトの状態の時間的変化に対し,それぞれ異なった 3D モ
デルを描画することで,各デバイスの状態の変化を視覚的に表
現する.シミュレーション結果は,移動オブジェクトの軌跡に
伴い,3D 空間上を移動しながら確認することができる.
シミュレーション結果の可視化に関し,ns-2 等のシミュレー
タでは,シミュレーションの実行結果をログとして保存してお
き,シミュレータの実行終了後,専用の可視化ツールによって
結果を表示するという手法がとられている.しかしこの方法で
は,結果の可視化を行なうためにシミュレータの実行終了を待
つ必要がある.また,実環境のデバイスとシミュレータ上のデバ
イスが混在した環境でテストを行なう際に,ユーザが仮想デバ
イスの状態変化をリアルタイムに確認することができないとい
う問題もある.UbiREAL ネットワークシミュレータでは,シ
ミュレーションの実行とともに結果をリアルタイムで可視化す
る機能を実現する.従って,ある程度の規模(100 ノード程度)
のシミュレーションの実行に対しても,リアルタイム性を確保
した通信のシミュレートを行なう必要がある.そのための負荷
分散機構については,2.5 節で後述する.
2.3
ソースコードの互換性
UbiREAL ネットワークシミュレータのモジュール構成を図
2 に示す.図 2 では,ネットワークシミュレータ内の仮想トポ
ロジ上で,3 つのデバイス間の通信がシミュレートされている
状況を表している.
2.1 節で述べたように,ネットワークシミュレータは TCP コ
ネクションを介してスマートスペース設計モジュール,および
物理シミュレータと接続し,スマートスペース上の各デバイス
の現在位置,および各物理量を定期的に取得する.スマートス
ペース設計モジュールは,2.2 節で述べた GUI により設置した
各デバイスの現在位置を保持するとともに,仮想空間の状況を
リアルタイムで可視化する.また物理シミュレータは,スマー
host A
Smart Space
Designer and
Visualizer
host B
UbiREAL
Network Simulator
Application
Event Queue
libupnp
socket stub
Virtual
Topology
Application
CyberLink
for Java
Simulator for
Physical
Quantities
socket stub
Application
BSD Socket API
socket stub
TCP
connection
図 2: UbiREAL ネットワークシミュレータのモジュール
構成
トスペース上の温度,湿度,光,音などの物理量の時間的変化
をシミュレートする(詳細は文献 [3] 参照).
各デバイスの制御用ソフトウェアは,任意のホスト上で一つ
のプロセスとして実行される.実デバイス用の制御ソフトウェ
アと,それに対応したシミュレータ用のコードとの互換性を確
保するため,本シミュレータでは,ネットワークプログラミング
用のライブラリを,それと同様の API を持つ独自のライブラリ
と置き換えるという手法をとる.ネットワークプログラミング
用の API として,C 言語に関しては BSD ソケット API,Java
に関しては Java ソケット API(java.net パッケージ)の使用を
想定する.これらの API を使用して実装されたアプリケーショ
ンのコードは,コンパイル時,もしくは実行時に UbiREAL シ
ミュレータ用のライブラリ(以下,ソケットスタブとよぶ)とリ
ンクされる.ソケットスタブは,図 2 に示すように,アプリケー
ションとネットワークシミュレータの間に位置し,TCP コネク
ションを介して,アプリケーションの BSD(もしくは Java)ソ
ケットライブラリのメソッド(bind,connect,accept,send,
recv など)呼び出しをネットワークシミュレータへ伝える役割
を持つ.ソケットスタブとネットワークシミュレータ間の TCP
コネクションは,アプリケーションのプロセス起動時に暗黙的
にセットアップされる.また,仮想トポロジ上の各ノードには
一意のネットワークアドレスが割り当てられる.
ネットワークシミュレータは,ソケットスタブからメソッド名
と引数を受け取ると,それに対応したイベントをイベントキュー
に追加する.イベントキュー内のイベントは,それぞれ所定の
時刻においてキューから取り出され,処理される.処理された
結果,メソッドの実行結果や受信パケットなど,メソッドの呼
び出し元への返却値が生じた場合は,ソケットスタブを介して
そのデータがアプリケーションに渡される.
2.4
仮想空間上のデバイスと実環境上のデバ
イスとの連携
UbiREAL ネットワークシミュレータでは,実環境で動作し
ているデバイスと,シミュレータ上で動作しているデバイスと
が混在した環境でテストを行うことができる.例えば,テスト
の対象となる空間をリビングと寝室とした場合,リビングに存
在するデバイスはシミュレータ内の仮想空間上で実行し,寝室
に存在するデバイスは実環境に配置した実機を使用する,といっ
たことが可能である.これにより,一部の機器の動作を,実際
に人の感覚をとおしてテストすることができる.また,シミュ
レートするのが困難,もしくは必要な精度を得るために膨大な
計算を必要とするような物理量を扱う機器に関しては,それら
を実環境上で動作させることで,実環境での物理量の変化をと
おしてテストを行うことができる.
実環境上のデバイスと仮想空間上のデバイス間の通信は,ネッ
トワークアドレス変換(NAT)[11] により実現する.すなわち,
仮想空間上のデバイスから送信されたパケットがネットワーク
シミュレータの外部へ出る際には,パケットの送信元アドレス
をシミュレータの実行されているホスト(ホスト A とする)の
アドレスに書き換える.同様に,送信元ポートに関しても,ホス
ト A の未使用ポートと置き換える.また,シミュレータの外部
から内部へのパケットは,シミュレータが持つ変換テーブルに
従って,送信先アドレスとポートを仮想トポロジ上のアドレス
とポートに書き換えて配送する.なお UPnP では,SSDP メッ
セージや SOAP メッセージにネットワークアドレスやポート番
号が埋め込まれるため,これらに関してもシミュレータ上で書
き換えを行う.
2.5
負荷分散機構
シミュレーションの負荷を軽減するため,UbiREAL ネット
ワークシミュレータでは,複数計算機上でシミュレータの並列
実行を行なう.仮想空間上の各デバイスは,各々一つのシミュ
レータとソケットスタブを介して接続する.また,各シミュレー
タは,他の全てのシミュレータと TCP コネクションを介して接
続する.各シミュレータはそれぞれ一つのイベントキューを管
理し,自分の担当するデバイス間で通信が発生した際には,単
一計算機上でシミュレータを実行する場合と同様にイベントを
処理する.
一方,異なるシミュレータに接続しているデバイス間で通信
が発生した場合には,シミュレータ間のコネクションを介して
イベントの転送を行なう.ただし,シミュレータ間の伝送遅延
が存在するため,本来の順序とは異なった順序でイベントが処
理されてしまう可能性がある.この問題の解決方法として,シ
ミュレータ間の伝送遅延として考えられる最大値を D としたと
き,各イベントを必ず D 時間経過後に処理することが考えられ
る.しかしこの場合,イベントの処理順序に誤りが生じなかっ
た場合でも常に D 時間待つことになるため,シミュレーション
の速度が犠牲になる.
そこで本シミュレータでは,各イベントを,まず伝送遅延を
考慮せずに処理しておき,処理の後に遅れて到着したイベント
が発生した場合には,そのイベントの処理時刻までロールバッ
クする手法をとる.この手法の問題点としては,ロールバック
が頻繁に発生するような状況において,シミュレーションの効
率が低下することが考えられる.この問題に関しては,ロール
バックを頻繁に引き起こすデバイスどうしを同一のシミュレー
タ上で実行するように,デバイスとシミュレータ間の接続を実
行時に動的に変更することで対応する.
3
性能評価
本章では,UbiREAL ネットワークシミュレータの性能評価
に関する実験結果を述べる.実験では,UbiREAL の主要な機能
である系統的テスト機能に関し,テストの実行にかかる時間を
提案シミュレータを用いて測定した.以下では,まず UbiREAL
の系統的テスト機能(詳細は文献 [3] 参照)について概要を述
べ,次に実験結果を述べる.
UbiREAL の系統的テスト機能では,ユビキタスアプリケー
ションの仕様と実装が与えられたとき,実装が仕様を満たして
いるかどうかを機械的にテストすることができる.具体的には,
「あるデバイスの属性値(温度センサの値など)がある条件(特
定の値以上になるなど)を満足するとき,あるデバイス上でア
クション(デバイスの電源をオンにするなど)が実行される」と
いう形式の仕様が与えられる.実装がその仕様を満足するかど
うかは,実装をシミュレータ上で実行することにより機械的に
テストされる.例えば,
「温度センサの値が 28 度以上のとき,エ
アコンの電源をオンにする」という仕様をテストする場合,ま
ず,温度センサとエアコンの制御コードがそれぞれ異なったプ
ロセスとして起動される.次にテスターによって温度センサの
値が 28 に設定されると,ネットワークシミュレータを介して
センサからエアコンにメッセージが送信され,メッセージを受
信したエアコンの制御コード上でエアコンの電源をオンにする
コードが実行される.
テストする仕様の条件としては,
「気温が 28 度以上」という
ように値の範囲を指定することができるが,物理量は連続値を
とるため,全ての値に対し仕様を満たすかどうかテストするこ
とは不可能である.そこで系統的テスト機能では,条件を満た
す値の範囲を,定数 C 個のサンプル値でカバーし,それら全て
の値に対してアクションが実行されることを確認できれば,実
装が正しいものと判定する.信頼性を高めるためには,より多
くのサンプル値に対してテストを行なうことになる.従ってテ
ストにかかる時間を短縮するためには,ネットワークシミュレー
タによる通信のシミュレートが高速に行なえる必要がある.以
下では,一つのサンプル値に対するテストが十分高速に行なえ
ることを確認するため,提案シミュレータを用いてテストにか
かる時間を測定した結果を示す.
テストの設定は次のとおりである.仮想空間上に温度センサ
とエアコンを設置する.テスターに与えられる仕様として,
「気
温が 26 度以上の時,エアコンの電源をオンにする」を考える.
温度センサに対し,条件が満足される温度を設定した時刻 t1 と,
エアコンの電源をオンにするというコードが実行された時刻 t2
を測定し,t = t2 − t1 を求める.
実験では,デバイス間は有線で一つのバスに接続されている
ものとした.また,各デバイスは UPnP プロトコルを介して他の
デバイスと通信を行う.ネットワークシミュレータでは,UPnP
プロトコルを含むセッション層以上のプロトコルのシミュレー
ションを行った.また,温度センサに設定された条件に対し,条
件が満足されたとき,対象となるエアコンにアクションの実行要
求を送信するための機構として,CADEL フレームワーク [12]
を用いた.CADEL フレームワークは正しく実装されているこ
とを確認している.実験に使用したマシンは次のとおりである.
CPU: AMD Athron 64×2 Dual Core Processor 4200+, メモ
リ: 2GB, グラフィックカード: ATI Radeon X1300Pro.
上記 t を 10 回測定し,1 回当たりの平均時間を算出したとこ
ろ,158.2ms であることが分かった.これにより,例えば,人間
の数が 5,デバイス数が 100,各デバイスに対し,条件が一つ存
在するようなアプリケーションを考えると,人とデバイスの各
組合わせに対し,テストを 100 回行ったとしても,全てのテス
トを約 2.8 時間(5×100×100×0.2s)で完了できるため,十分
実用的であると考えられる.なお実際には,複数のデバイスに
対し複数の条件が同時に満たされる場合が考えられるため,上
記の見積もりよりも遅くなることが考えられる.しかし,デバ
イスと条件数の増加に対し,シミュレーション速度は大きく低
下しないことを確認している.
4
おわりに
本稿では,スマートスペースシミュレータ UbiREAL の通信
シミュレート機能に関し,そのアーキテクチャおよび簡単な性
能評価について述べた.
現在,MAC 層のプロトコルに関するシミュレート機能や,
負荷分散機構等は未実装であるため,今後,これらの機能を実
装し,より詳細な性能評価を行なう予定である.
参考文献
[1] E. O’Neill, M. Klepal, D. Lewis, T. O’Donnell, D. O’Sullivan,
and D. Pesch, A Testbed for Evaluating Human Interaction
with Ubiquitous Computing Environments, Proc. of 1st Int’l
Conf. on Testbeds and Research Infrastructures for the Development of Networks and Communities (Tridentcom 2005),
pp. 60–69, 2005.
[2] J.J. Barton, and V. Vijayaraghavan, UBIWISE, A Simulator
for Ubiquitous Computing Systems Design, Technical Report
HPL-2003-93, HP Laboratories, 2003.
[3] 西川博志, 山本眞也, 玉井森彦, 西垣弘二, 木谷友哉, 柴田直樹, 安本
慶一, 伊藤実, 系統的なテストを可能にするユビキタスアプリケー
ションシミュレータの提案, 第 10 回ユビキタスコンピューティン
グシステム(UBI)研究会, 2006.
[4] The
Network
Simulator
http://www.isi.edu/nsnam/ns/.
-
ns-2,
[5] X. Zeng, R. Bagrodia, and M. Gerla, GloMoSim: a Library
for Parallel Simulation of Large-scale Wireless Networks,
Proc. of the 12th Workshop on Parallel and Distributed Simulations (PADS’98), pp. 154–161, 1998.
[6] G. F. Riley, The Georgia Tech Network Simulator, Proc.
of the ACM SIGCOMM workshop on Models, methods and
tools for reproducible network research (MoMeTools), pp. 5–
12, 2003.
[7] X.W. Huang, R. Sharma, and S. Keshav, The ENTRAPID
Protocol Development Environment, Proc. of IEEE Infocom
1999, pp. 1107–1115, 1999.
[8] S.Y. Wang, C.L. Chou, C.H. Huang, C.C. Hwang, Z.M. Yang,
C.C. Chiou, and C.C. Lin, The Design and Implementation
of the NCTUns 1.0 Network Simulator, Computer Networks,
Vol. 42, Issue 2, pp. 175–197, 2003.
[9] Open Source Linux SDK for UPnP Devices (libupnp),
http://upnp.sourceforge.net/.
[10] CyberLink
for
Java,
http://www.cybergarage.org/net/upnp/java/index.html.
[11] P. Srisuresh and K. Egevang, Traditional IP Network Address
Translator (Traditional NAT), Internet Eng. Task Force RFC
3022, 2001.
[12] K. Nishigaki, K. Yasmoto, N. Shibata, M. Ito, and T. Higashino, Framework and Rule-based Language for Facilitating Context-aware Computing using Information Appliances, Proc. of Workshop on Services and Infrastructure for
the Ubiquitous and Mobile Internet (SIUMI’05) (ICDCS’05
Workshop), pp. 345–351, 2005.