170 likes | 344 Views
ソフト USB デバイスの提案とその有益性の検証. 2004 年 12 月 24 日 九州大学電気情報工学科 4 年 岡村研究室 中川和久. 発表内容. 背景 VRPN 対応 VR 機器 手法提案 - ソフト USB デバイス - 目的 進捗報告 課題と今後の予定. 1. 背景. VR (Virtual Reality) コンピュータグラフィックスや音響効果を組み合わせて、人工的に現実感を作り出すことを指す。 VRPN (Virtual Reality Peripheral Network)
E N D
ソフトUSBデバイスの提案とその有益性の検証 2004年12月24日 九州大学電気情報工学科 4年 岡村研究室 中川和久
発表内容 • 背景 • VRPN対応VR機器 • 手法提案 -ソフトUSBデバイス- • 目的 • 進捗報告 • 課題と今後の予定
1. 背景 • VR (Virtual Reality) • コンピュータグラフィックスや音響効果を組み合わせて、人工的に現実感を作り出すことを指す。 • VRPN (Virtual Reality Peripheral Network) • 仮想実現システムで使用されるデバイスのアプリケーションプログラムとネットワークを透過的に(距離を全く意識することなく)実行できるように設計されたライブラリである。
1. 背景 • VRPNの本質 • 様々なVR機器に対して一律のソフトウェアインターフェイスを提供する。 • 素早い応答でVR機器にネットワーク的に透過なアクセスを実現を可能にする。 • VRPNでの問題点 • 入力情報が限定される。 • ライブラリに沿ってデバイスの開発が行われている。
2. VRPN対応VR機器 • 一律のソフトウエアインターフェイス • VRPNのドライバは多数の機能を備えたVR機器を、Device typeという形で細分化させて捉える。 Poses(位置)、 Pose velocities(速度)、 Pose accelerations(加速度)を報告する。 vrpn_Tracker_Remote Internet 1つ以上のボタンに対してpressとreleaseのイベントを報告する。 vrpn_Button_Remote vrpn_Connection Server側から送られる情報で、Client側が表面を特定し、反力を起こす。 vrpn_ForceDevice_Remote
2. VRPN対応VR機器 • Device typeの存在 • VRPN対応VR機器のインターフェイスはClient側のライブラリに準じたものになってしまう。 • ライブラリに属さないVR機器をVRPNに対応させるときはどうするのか? • VRPNである以上、ライブラリに属さないような新しいデバイスの可能性が生まれない。 • 多種多様なUSBデバイスもVRPNに組み込むことは出来ないだろうか?
3.方法提案 -ソフトUSBデバイス- • ソフトUSBデバイス • デバイスドライバとして実装しており、OSやアプリケーションからはローカルで一般的な物理的USBハブと認識されるため、透過的に(全く意識することなく)USBを使用することが出来る。 Internet PC1 PC2 USB接続 PC1のユーザーアプリケーションは、 遠隔にあるPC2に接続されている外付けHDDが、あたかもローカルのPC1に接続されているかのように認識し使用できる。 外付けHDD
3.方法提案 -ソフトUSBデバイス- • ソフトUSBデバイスの提案と考察 • /dev/usb_remoteの作成 • ユーザーアプリケーションからは遠隔の計算機に接続されているデバイスのスペシャルデバイスファイルが、ローカルの計算機にマウントされているように見えるようにする。 • ユーザーアプリケーションからはデバイスの位置を考慮することなく、そのデバイスに対してシステムコールを発行し、データの読み出しや、パラメータの変更をすることが可能になる。
4.目的 • ソフトUSBデバイスを導入することにより、VRPN対応の新たなデバイス実現への有益性を検証 • デバイスを操作するプログラムシンタックスの比較を行う。 • システムコールを直接/dev/usb_remoteに送る方法 • VRPNでのライブラリに沿った方法 • VRPNに沿ったioctlシステムコールの提案を行う。
4.目的 • Linuxのファイルシステムに則ったデバイス操作 • VRPNではserver-client間のアプリケーションレベルでのデバイスの操作を行っている。 • どのような機器でも入力デバイスとしてVRPNに組み込むことが出来るようになるのが目標である。 • ライブラリを新たに記述する手間を、システムコールの定義・再利用という形で省く。
5.進捗報告 • VRPNライブラリの制約 • それぞれのDevice typeに分類された入力データは、 Device typeが指定した関数により送られ、 Device typeが指定したメモリ先に格納される。 • vrpn_Button_Remote • ボタンの識別ナンバーはbuttonに格納される。 • そのボタンの状態はstateに格納される。 • vrpn_BUTTONCBでボタンの情報をコールバックする。 /* buttonのメッセージを出力させる関数(コールバックハンドラー) */ void handle_button(void *userdata, const vrpn_BUTTONCB b) { printf("Button %d is in state: %d \n", b.button, b.state); }
5. 進捗報告 • VRPNライブラリを用いたプログラミング例(1/2) • VRPNデバイスの更新を10回分表示するプログラム。 • 遠隔のclient側(myhost)に機器がある場合を考える。 int main() { int count; vrpn_Tracker_Remote *tkr; vrpn_Button_Remote *btn; tkr = new vrpn_Tracker_Remote("Tracker0@myhost");/* Trackerを開く */ tkr->register_change_handler(NULL, handle_tracker); /* Trackerのcallback handlerをセット */ btn = new vrpn_Button_Remote("Button0@myhost"); /* Buttonを初期化 */ btn->register_change_handler(NULL, handle_button); /* Button のcallback handlerをセット */ /* 10回分表示させるwhile loop */ count = 0; while(count < 10){ tkr->mainloop(); btn->mainloop(); count++; } }
5. 進捗報告 • VRPNライブラリを用いたプログラミング例(2/2) int main() { int count; vrpn_Tracker_Remote *tkr; vrpn_Button_Remote1 *btn1; vrpn_Button_Remote2 *btn2; vrpn_Analog_Remote *ana; tkr = new vrpn_Tracker_Remote("Tracker0@myhost1"); /* myhost1のTrackerを開く */ tkr->register_change_handler(NULL, handle_tracker);/* Trackerのcallback handlerをセット */ btn1 = new vrpn_Button_Remote1("Button0@myhost1");/* myhost1のButtonを初期化 */ btn1->register_change_handler(NULL, handle_button); /* Buttonのcallback handlerをセット */ btn2 = new vrpn_Button_Remote2("Button0@myhost2");/* myhost2のButtonを初期化 */ btn2->register_change_handler(NULL, handle_button); /* Buttonのcallback handlerをセット */ btn = new vrpn_Analog_Remote("Analog0@myhost2"); /* myhost2のAnalogを初期化 */ btn->register_change_handler(NULL, handle_analog); /* Buttonのcallback handlerをセット */ /* 10回分表示させるwhile loop */ count = 0; while(count < 10){ tkr->mainloop(); btn1->mainloop(); btn2->mainloop(); ana->mainloop(); count++; } }
5. 進捗報告 • システムコール • vrpn_○○○_remote関数の機能ををioctlシステムコールで処理できるよう実装する。 • ネットワークに透過的なVR機器を実現させるのはソフトUSBデバイスである。 • ボタン入力に関するデータの取り扱い方を定義する。 • ボタンの識別ナンバーとそのボタンの入力データを格納するためのメモリ領域を確保する必要がある。
5. 進捗報告 • システムコールを用いたプログラミング例 int main() { int count; Int fd1; Int fd2; fd1=open=(“/dev/usb_remote0”); fd1=ioctl(fd1, GET_INPUT_DATA, parameter); /* 遠隔myhost1のデバイスについて必要な情報をメモリから選択 */ fd2=open=(“/dev/usb_remote1”); fd2=ioctl(fd2, GET_INPUT_DATA, parameter);/* 遠隔myhost2のデバイスについて必要な情報をメモリから選択 */ /* 10回分表示させるfor loop */ for(count=0; count<10; count++){ read(fd1,”r”); read(fd2,”r”); printf(); /* 適宜表示する */ } close(fd1) close(fd2) }
6. 課題と今後の予定 • VRPN対応機器の研究 • 既存の機器についての報告を行う。 • それらがいかにシステムコールでデータの入出力が出来るのかを考察する。 • 既存のVRPNでは対応しきれない機器、もしくは既存のUSB機器について、ソフトUSBデバイスを用いるときどのように実装するのかを研究する。 • ソフトUSBデバイスの実現方法についての具体的な考察
6. 課題と今後の予定 • 12月下旬 • VR meetingに参加(大分大学) • 1月 • VR機器についてのプログラミング的考察 • ソフトUSBデバイス実現のためのアプローチ • 卒業論文の執筆 • 2月 • 2月14日に卒業論文締切 • 口頭試問の準備 • 2月18日に口頭試問