Comments
Description
Transcript
プロジェクト実習A8 本実習の概要 担当教員,TA 実習内容
本実習の概要 2 実習の目的: 実施日程: プロジェクト実習A8 II期~III期 使用する主な装置,ソフトウェアなど: ~コンテキストアウェアシステムの構築実験 ~ 第1回目ガイダンス ユーザの位置,嗜好や周りの状況(コンテキストと呼ぶ)に応じ て,デバイスを自動制御するシステム(コンテキストアウェアシ ステム)を構築する実験を行う.コンテキストアウェアシステム, UPnP,情報家電ネットワークに関する理解を深めることが目的 Java言語処理系,UbiREALシミュレータ,OpenGLが動作するPC センサ(Arduino, Kinect 他) 成績評価方法: 各課題をやりとげたかどうか ユビキタスコンピューティングシステム研究室 安本慶一 担当教員,TA 3 実習内容 4 担当教員 安本慶一 yasumoto@is,玉井 森彦 morihi-t@is TA 水本 旭洋(teruhiro-m@is),坂本 一樹(kazuki-s@is) 藤本 恭平(kyohei-fu@is),今津 真也(shinya-i@is) 課題1. UbiREALシミュレータによる,仮想空間上のコ ンテキストアウェアシステムの動作確認,デバイス 制御シナリオの作成,UPnPデバイスの作成(7~8 月) 課題2. 各種センサハードウェアを使ったコンテキス トアウェアシステムの構築と動作確認(グループ ワーク:3人/グループ)(9~10月) 実習の実施方法 5 本日のガイダンスの内容 6 ガイダンス 教員による背景技術の解説,課題内容の説明 7/22(本日), 9月(後日調整)の2回を予定 課題の実施 コンテキストアウェアシステムに関する基礎知識 スマートスペースシミュレータUbiREALの概要 第1回課題の説明 各自/グループ(課題2)で独自に進める 質問等は教員およびTAにメールするか直接問い合わせ 課題実施状況のチェック 作成したプログラムの動作確認を教員,TAに行ってもらう コンテキストアウェアシステム ≒ユビキタスコンピューティングシステム 7 スマートスペース (smart space) 8 提唱者Mark Weiser(故人)によるUbiquitous Computingの定義 人間の生活環境の中にコンピュータチップとネットワークが組み込ま れ,ユーザはその場所や存在を意識することなく利用できる環境 人の存在,周辺の状況の把握が必須! ¾ ユビキタスコンピューティングの例 • 位置情報サービス (location-based services) • 利用者や自動車などの位置・移動に応じて適切なサービスを提供 コンテキストアウェアサービス (context-aware services) コンテキスト=ユーザの位置情報+周辺の状況+α 位置だけでなく気温等様々な環境情報も利用して,ユーザに最適なサービス を提供 ¾ ¾ コンテキストアウェアサービスが提供される空間 多数のデバイスやセンサーが埋め込まれた空間において, ユーザの位置,好み,周辺の状況に応じて情報家電などの デバイス群を適切に制御する環境 スマートスペースの動作 各種センサなどから情報を取得 シナリオ(ユーザがどのようなサービスを望むか)に従ってデバ イス群を制御 CNN アリスが部屋にいるときは, TVでニュースを流す(CNN), 室温を快適に(25C) シナリオ例 ON アリス 25C ON スマートスペース実現のための技術 9 スマートスペースの開発・性能評価 10 情報家電(デバイス)を繋ぐネットワーク 無線:ZigBee,Bluetooth,IEEE802.11 有線:PLC(電灯線), Ethernet アプリケーション (ミドルウェア) 中間層 UPnP, Jiniなど 下位層 ZigBee,Bluetooth, PLCなど デバイス連携のための枠組・プロトコル テストベッド スマートスペースのためのテストベッド ユビキタスホーム(NiCTけいはんな)など UPnP(Universal Plug & Play) 家庭内のPCやAV機器,電話,家電製品など をネットワークで接続し,相互に機能を提供し合うための技術仕様 Jini (Java Intelligent Network Infrastructure) 応⽤層 シミュレータ ネットワークシミュレータ(NS-2/3, QuialNet, Scenergy) スマートスペースシミュレータÆUbiREAL UPnPと同様の枠組みで,JavaRMIを使用 http://ubireal.org/ アプリケーションソフトウェア(ミドルウェア) センサから得たデータおよびユーザの好み情報などをもとに,デバイスを 適切に制御するためのソフトウェアが必要 スマートスペース設計支援・可視化機能 UbiREALシミュレータの概要 11 12 各種情報家電,エアコンの動作の様子を再現 UPnPデバイス間の通信をシミュレート UbiREALシミュレータ 物理量 シミュレータ ネットワーク シミュレータ 可視化機能 GUI UPnP(ユニバーサルプラグアンドプレイ) 実デバイス用 とソースコード が互換 .. UPnPデバイス ソフトウェア 一般的なモデリングソフトのデータを使用可 静止物 家電,家具,etc 移動物 人,ロボット,etc ルールベース シナリオ UPnPデバイス ソフトウェア 3Dデータ(仮想空間,オブジェクト) CADEL (ルール処理系) アプリケーションプログラム オブジェクトの配置 静止オブジェクトは,任意の位置に配置 移動オブジェクトは,軌跡を指定 ネットワークシミュレータ スマートスペースの可視化 14 13 デバイスや物理量の変化を可視化 デバイスの形状,色や空間の見え方を変化 視点 デバイス間の通信をシミュレート セッション層/プレゼンテーション層: UPnP (SOAP,SSDPなど) トランスポート層:TCP,UDPなど 3D view ネットワーク層:IP,経路制御プロトコル(AODVなど) 2D view (鳥瞰) データリンク層・物理層: Ethernet,IEEE 802.11/15 屋内の無線通信をシミュレート(障害物などを考慮) line-of-sight(直線上の障害物), ray-tracing(壁・床の反射)など 実デバイスコードを使用可能(ソースレベル互換) コンパイル時に,シミュレータ用通信ライブラリをリンク Socket Stub Application Program 物理量シミュレータ 16 様々な家電・センサ(TV,照 明機器,エアコンなど)を設 置し,ネットワーク接続 一般的な物理量を部屋ごとにシミュレート 初期値は部屋ごとに与えられる 各物理量は物理学の公式に基づいて変化 外気温,デバイスの動作を考慮 例:温度シミュレータは外気温やエアコンにより熱量が 与えられ変化 式 熱量: -Q(t) ∆T(t) =Q(t)/C 32C エアコンON (25C) 数分後 Network Simulator UbiREALによるスマートホームの構築例 15 Bind() Connect() Send() Recv() 25C ∆T: 温度変化, Q: 与えられる 熱量, C: 熱容量 未実装 コンテキストアウェア制御システムCADEL スマートホームの住人 18 17 仮想空間内での移動軌跡を指定可能 なぜCADELが必要か? UbiREALはコンテキスト(空間,人,情報家電等の状 況)を生成する仮想環境とデバイス間のネットワーク のみ提供 コンテキストの変化に合わせてデバイスを制御するア プリケーションは別に必要 CADELの目的 キャロル (母) ボブ (長男) アリス (長女) 情報家電のコンテキストアウェア制御 簡便・直観的なシナリオの記述 家電制御シナリオにおける矛盾の回避 デイブ (父) CADELにおける制御シナリオの記述 CADEL のシステムアーキテクチャ 19 20 User Interface 現在利用不可 API call, RPC CADEL System Rule description support part (GUI) Rule database Consistency checking part Rule execution part 現在はこの部分 のみ提供 UPnP protocols (SOAP, SDDI, etc) Device object Device object … Device object ルールベースで記述し,各種デバイスをコンテキストアウェア制御する ルール=(条件,アクション)を複数設定可能 条件:センサの値の範囲 アクション:デバイスへの命令 if(aliceBedroom1.Existence && sensorBedroom1.Temperature>=28){ fanBedroom1.SetPower(true); } Communication interface part (UPnP library) 制御シナリオ ←条件 ←アクション アクションにacBedroom1.SetTemperature(25)等も設定できる デバイスやセンサ名は,UPnPでの名前をそのまま用いる UbiREALで新たにデバイスを設置した際は独自の名前をつけることができる 住人毎の家電制御シナリオ例 これらのシナリオに沿って,住人が指 定した場所にいるときだけ家電が指定 されたとおりに動作 21 住人 場所 時間 照明 TV 室温 アリス リビング いつでも 薄暗く ミュージックチャ ンネル 28℃ デイブ リビング いつでも 明るく スポーツチャン ネル 24℃ キャ ロル どこでも 月曜日の 明るく 午後9~10時 ドラマチャンネ ル 26℃ 22 第1回課題(~9月中旬) 課題1A: UbiREALの動作確認,デバイス制御シナリオの変更・作成 課題1B: UPnPデバイスの設計・実装とUbiREALへの組込み 目次 z z z z z z z z UbiREAL の操作方法 UbiREAL,CADELのインストールと実行 23 24 インストール手順 ・JDK6 (32bit版)をインストールしパスを設定 ・ubireal2-pp2011.tar.gz を任意のフォルダに展開 実行手順 Windows: ns.bat, cadel.bat, ubireal2.batをこの順で実行 Mac/Linux: ns.sh, cadel.sh, ubireal2.shをこの順で実行 フォルダ構成 ルート(.) : 実行用バッチファイル/シェルスクリプト bin: 各種実行ファイル(*.jarファイル) lib: 機種依存共有ライブラリ(*.dll, *.jnlib, *.so) data: UbiREAL設定ファイル(*.ur2),CADELのルール(*.rule) 他 UbiREAL,CADELのインストール … p.23 UbiREALの基本操作 … p.24 仮想住人の軌跡の設定 … p.26 家具・デバイスのインポート … p.27 課題1Aの詳細 … p.28 UPnPデバイスの作成 … p.29 課題1Bの詳細 … pp. 38-40 第2回ガイダンス予告 … pp.41 Plugin Config Panel: Pluginモジュールの管理(次ページに詳述) Camera Control Panel: 未実装 Simulator Config: シミュレーションの設定変更(シミュレーション速 度,再描画時間間隔,可視化オフ) Start Simulation: シミュレーションの開始 Pause/Resume Simulation: シミュレーションの一時停止/再開 Reset Simulation: シミュレーション状態の初期化 Open Project: 設定ファイルの読込み (デフォルトはdefault.ur2) Save Project: 設定ファイルの保存(家 具の配置,住人の軌跡など) Save Project As: 名前を付けて設定 ファイルを保存 Exit: シミュレータの終了 ■視点切替 ・左右:カーソルキー, ・上下:CTRL+カーソルキー ■カメラの画角切替 ・マウスホイールで,広角⇔望遠を切替 ・デフォルトは広角(広い範囲が見渡せるが端が少しひずむ) Plugin Config Panel 25 仮想住人の軌跡の設定 26 各種機能をPluginとして追加,削除が可能 デフォルトでは以下がPluginとして組込済 (1) ToolsÆPlugin Config Panelを選択 (2) SimpleHumanModelをダブルクリック 時刻,気温,UPnP通信 地面,空,家の間取り 各種家電(ランプ,エアコン,ヒータ,扇風機,テレビ) 登録済Entity (デフォルトはAliceのみ)のリストが表示 (3) 登録済Entityの軌跡を変更したい時は,Entityを選択して, ConfigÆ Edit Traceを選択 組込み済家電は,ConfigÆAdd new entityを選択することで新 たなEntityを登録し仮想空間に設置できる 登録済Entityは,ConfigÆMoveにより位置,向き等が変更できる 各種人感センサ(リビング,廊下,寝室,...) 人の移動モデル SimpleHumanModel: 仮想住人の移動軌跡,グラフィクスを指定 ProgramableHumanModel: 移動パターンをプログラムで指定可 (今回は使用しない) 他にも様々な設定が可能 家具・デバイスのインポート 27 Entityの追加: SimpleHumanModelÆAdd グラフィクスの変更: Entity選択ÆConfigÆEdit Parameters 課題1A:UbiREALの動作確認 28 Plugin Config Panel のプラグインであるimporterを使用して,任意の家 具(obj形式),デバイスをインポート可能 (a) obj 形式の家具オブジェクトのインポート (1) importerを選択Æ ConfigをクリックÆ Add New Entityをクリック (2) Input entity nameダイアログボックスに適当な名前(sofa等)を入力 Æ importer Entity – sofaが生成される (3) 作成されたentityを選択 Æ ConfigをクリックÆ Edit parameters (4) 「filename=」の後ろにインポートしたいオブジェクトのファイル名 (obj/sofa2.obj等※1)を入力Æ Applyをクリック (b) デバイスのインポート 上記の(4)において,「classname=」の後ろにインポートしたいクラス名 (MyDevice等※2)を入力し,Applyをクリック ※1: ファイル名は,./dataからの相対パスで入力(拡張子要) ※2: ファイル名は,./data/classからの相対パスで入力(拡張子不要) y y y 1A-1: 仮想住人Aliceが,リビングルームに入ってきた時にど のようにデバイスが動作するかを確認せよ.また, data/default.ruleを変更し,Alice在室時にTVがドラマを表示 するよう設定せよ. ※1 1A-2: ctrlp.bat (ctrlp.sh)を用いて既設デバイスのコントロール ポイントを表示し,手動操作を試みよ.※2 1A-3: 仮想住人として自分自身を設定し,空間に好みのデバ イス,家具を設置しCADELのルールを設定することで,自分 好みの専用スマートホームを実現せよ. ※1: Plugin Config Panelで,テレビのチャネルの設定を行うこと. PlasmaDisplay Entity Æ Config Æ Edit parameters Æ x.file=のところに, mpg/qqdrama.mjpg等を指定(ファイルの場所は./data/mpg) ※2: ctrlp.bat (ctrlp.sh)を起動すると,全デバイスのコントロールポイ ントが表示され,それぞれの値を変更できる. UPnPデバイスの新規作成・登録 29 新規UPnPデバイスの実装・組込み例 30 (1) UPnPデバイスの作成 Step1: UPnP対応部分(デバイスドライバ)の作成 UPnPデバイスドライバ:UPnPライブラリClinkXを用いて作成 グラフィックス:グラフィックスライブラリtoward3Dを用いて 作成 Æ UPnPライブラリClinkXを使用 Step2: デバイスの外観(グラフィックス)の作成 Æ 独自ライブラリtoward3D ver2を使用 Step3: シミュレータ連動部分の作成 Step4: UbiREALへの組込み (2) 仮想空間への組込み・動作確認 UbiREAL のimporterでインポート(p.27参照) CADELでルールを記述し様々なコンテキストで動作確認 例)秒針だけのシンプルな時計 コード:class/Example.java サービス:状態(電源のオン/オフ)の切替 外観:円形の時計+秒針 シミュレータ連動:電源がオンの時,秒針が回る Step1: UPnP対応部分の作成 31 新規UPnPデバイス作成に必要な作業 UPnPデバイス用テンプレート 32 UPnP対応デバイスは幾つかのサービスを提供 サービス 一つ以上のアクションと状態変数で構成 例:スイッチをオン/オフする,チャネルを2にする publish/subscribe機能 アクション発生(publish)Æ subscriberに通知 アクション群 サービス 状態変数群 UPnPデバイス 最もシンプルなコード(サービス無)の例 import org.itolab.morihit.clinkx.*; UbiREALに組込む import org.itolab.nsibata.ubireal2.plugin.Importable; デバイス用の public class Example extends Importable implements UPnPActionListener { おまじない private final UPnPDevice device; public Example() { 新しいUPnPデバイスのインスタンスを作成 device = new UPnPDevice("Example"); 作成したデバイスをスタート(SSDPにより, device.start(); 本デバイスがUPnPデバイスとして認識される) } public static void main(String[] args) { UbiREALに組込む目的では不必要 Example simple = new Example(); 単独で実行・テストするためには必要 } } ※ファイル名は,Example.javaとする. ※上記で”Example”の部分は,実際には独自の名前にする. アクション作成時の注意 サービス(スイッチオン/オフ)の追加 33 34 import org.itolab.morihit.clinkx.*; import org.itolab.nsibata.ubireal2.plugin.Importable; public class Example extends Importable implements UPnPActionListener{ private final UPnPBooleanStateVariable power; 真偽値をとる状態変数 private final UPnPDevice device; powerを作成 public Example() { power = new UPnPBooleanStateVariable(“Power"); UPnPサービス作成 UPnPService service = new UPnPService(); サービスにpowerをセット service.addStateVariable(power); power.publish(); 他のデバイスがpowerにsubscribeできるよう UPnPAction action = new UPnPSetBooleanAction(power.getName()); アクションの作成 action.setActionListener(this); (※次ページ参照) service.addAction(action); サービスにactionをセット device = new UPnPDevice("Example"); デバイスにseviceをセット device.addService(service); setPower(false); powerの初期値はオフ(偽)にセット device.start(); } public static void main(String[] args) { Example simple = new Example(); } public void setPower(boolean p){ 上記で登録するアクションの実装 power.setValue(p); 複数のメソッドを書いたら,複数のアクションが登録される } ※引数の型に注意(次ページ参照) } Step2: デバイスの外観の作成 35 状態変数,アクション,メソッドの引数は,以下の 表に従って型を合わせなければならない. 状態変数の型 状態変数を表すクラス アクションを表すクラ ス ブール型 UPnPBooleanStateVariable UPnPSetBooleanAction boolean 整数型 UPnPIntegerStateVariable UPnPSetIntegerAction int 実数型 UPnPFloatStateVariable UPnPSetFloatAction float 文字列型 UPnPStringStateVariable UPnPSetStringAction String アクションを実装する メソッドの引数の型 Step3: シミュレータ連動部分の作成 36 本実習では,3Dライブラリtoward3Dを使用 特徴 基本図形box, cylinder, sphere, cornの間の論理演算(and, or, sub)により複雑な図形を定義可能 図形の平行移動,回転,拡大/縮小が可能 シーングラフの利用 アニメーションの設定 カメラ・光源の指定 詳しくは,配布資料“toward3D v2.pdf”を参照 ※文章中のサンプルコードをコンパイル・実行する際 は,./data/class/{jc.bat, j.bat}を使用すること public class Importable extends HLSceneGraphNode { public void initialize(UR2PluginIF m, UR2SimEntity e) {} public void registered(HLSceneGraphNode n, Vector3D pos) {} public void unregistered() {} public void simulationReset() {} public long simulationStarted() { return 0; } public long progressTime(long t) { return 0; } public long messageDelivered(long t, Message mes) { return 0; } public void updateAppearance() {} } クラス“Importable”の構造 Initialize: entityの初期化時に一度だけ呼ばれる registered/unregistered: entityが登録/削除された時に呼ばれる sumulationReset/simulationStarted: シミュレーション終了時/開始時に呼ばれる progreeTime:シミュレーション時間が指定した時間になった時に呼ばれる messageDelivered:メッセージが到着した時に呼ばれる updateAppearance:フレーム描画の前に呼ばれる.形状の変化を記述する シミュレータと連動させるには,上記メソッドをオーバライドする 詳しくは,配布資料“UbiREAL v2 Importable.pdf”を参照 ./data/class/{Example.java, TemperatureMeter.java}も参照すること 課題1B-1: 練習問題 Step4: UbiREALへの組込み 37 38 (1) UbiREALを実行 (ns.bat, cadel.bat, ubireal2.bat) (2) メニューを操作 ToolsÆPlugin Config PanelÆImporterÆConfigÆAdd new entity (3) Entity名を入力 (4) メニューを操作 追加されたEntityを選択ÆConfigÆEdit parameters ※クラス名は./data/classからの相対パスで入力 以上により,作成したクラスのEntityが仮想空間に登録される (6) 登録されたEntityの位置・向き・サイズ変更 ./data/classフォルダに移動 コンパイル: jc.bat ファイル名.java (windows以外は,jc.sh) 実行: j.bat ファイル名 (windows以外は,j.sh) 動作確認方法 ctrlp.bat (ctrlp.sh)を実行Æ UPnPデバイスとして認識されているか確認 認識されていたら,状態変数を変更し動作を確認する (注意)デバイス初期化のため,UbiREALでstart simulationを実行しておく Entity選択ÆConfigÆMove 課題1B-2: オリジナルデバイスの作成, 動作確認 39 コンパイル・実行方法 (5) 2行目のclassname=のところに,作成したクラス名を入力 ./data/class/Example.javaを拡張し,秒針だけでなく,時針, 分針も表示されるように拡張せよ.また,拡張した時計を, UbiREALに組込み,動作確認せよ. 課題1B-3: UbiREALへの組込みとコン テキストアウェア制御 40 toward3Dのチュートリアルおよび本スライドの説明を参照 しオリジナルUPnPデバイスを作成し,動作確認せよ.以下 のことに留意せよ. ファイルは./data/class/フォルダに配置すること コンテキストアウェア制御することに意義がある独創的なデバ イスとすること 3Dグラフィックスを活用し,デザインにこだわること(テキスチャ などは,フリーのものを使用すること) 3Dモデルの設計図を作ることが望ましい toward3Dでは、円柱・球・立方体で立体を構成することができる どの部分が動いて,どのくらいの寸法なのかを書いてみること 実物の設計図,計測値を使って忠実に再現するのも一つの方法 toward3Dでは,単位はメートル 課題1B-2で作成したデバイスをUbiREALに組込み, CADELを用いてコンテキストアウェア制御せよ.他 のデバイスと連動させても良い. 第2回ガイダンス予告 41 第2回課題予定(9~10月) 3名程度のグループでセンサデバイス,家電の実機を用 いてコンテキストアウェアシステムを構築する 使用するセンサデバイス(下記以外を提案しても良い) Arduino(8bitマイコン)+各種センサを自作 Kinect スマートフォン 操作対象家電デバイス(下記以外も提案可) ライト,TV,ストーブ,扇風機,ステレオ(赤外線制御) 赤外線リモコンデバイスとして,SunSpotもしくはArduino+赤外線 センサを利用予定 上記デバイスをUPnPデバイスとして作成し,CADELでコン テキストアウェア制御を行う