ソフトUSBデバイスの提 案とその有益性の検証 2004年12月24日 九州大学電気情報工学科 4年 岡村研究室 中川和久 1 発表内容 背景 VRPN対応VR機器 手法提案 -ソフトUSBデバイス目的 進捗報告 課題と今後の予定 2 1. 背景 VR (Virtual Reality) コンピュータグラフィックスや音響効果を組み合わせ て、人工的に現実感を作り出すことを指す。 VRPN (Virtual Reality Peripheral Network) 仮想実現システムで使用されるデバイスのアプリ ケーションプログラムとネットワークを透過的に(距離 を全く意識することなく)実行できるように設計された ライブラリである。 3 1. 背景 VRPNの本質 様々なVR機器に対して一律のソフトウェアインター フェイスを提供する。 素早い応答でVR機器にネットワーク的に透過なアク セスを実現を可能にする。 VRPNでの問題点 入力情報が限定される。 ライブラリに沿ってデバイスの開発が行われている。 4 2. VRPN対応VR機器 一律のソフトウエアインターフェイス VRPNのドライバは多数の機能を備えたVR機器を、 Device typeという形で細分化させて捉える。 Poses(位置)、 Pose velocities(速度)、 Pose accelerations(加速度)を報告する。 vrpn_Tracker_Remote 1つ以上のボタンに対してpressとreleaseの イベントを報告する。 vrpn_Button_Remote Internet vrpn_Connection Server側から送られる情報で、Client側が表 面を特定し、反力を起こす。 vrpn_ForceDevice_Remote 5 2. VRPN対応VR機器 Device typeの存在 VRPN対応VR機器のインターフェイスはClient側のラ イブラリに準じたものになってしまう。 ライブラリに属さないVR機器をVRPNに対応させると きはどうするのか? VRPNである以上、ライブラリに属さないような新しいデバ イスの可能性が生まれない。 多種多様なUSBデバイスもVRPNに組み込むことは出来 ないだろうか? 6 3. 方法提案 -ソフトUSBデバイス ソフトUSBデバイス デバイスドライバとして実装しており、OSやアプリ ケーションからはローカルで一般的な物理的USBハ ブと認識されるため、透過的に(全く意識することなく) USBを使用することが出来る。 Internet PC1 PC1のユーザーアプリケーションは、 遠隔にあ るPC2に接続されている外付けHDDが、あた かもローカルのPC1に接続されているかのよう に認識し使用できる。 PC2 USB接続 外付けHDD 7 3. 方法提案 -ソフトUSBデバイス ソフトUSBデバイスの提案と考察 /dev/usb_remoteの作成 ユーザーアプリケーションからは遠隔の計算機に接続さ れているデバイスのスペシャルデバイスファイルが、ロー カルの計算機にマウントされているように見えるようにす る。 ユーザーアプリケーションからはデバイスの位置を考慮す ることなく、そのデバイスに対してシステムコールを発行し、 データの読み出しや、パラメータの変更をすることが可能 になる。 8 4. 目的 ソフトUSBデバイスを導入することにより、 VRPN対応の新たなデバイス実現への有益性を 検証 デバイスを操作するプログラムシンタックスの比較を 行う。 システムコールを直接/dev/usb_remoteに送る方法 VRPNでのライブラリに沿った方法 VRPNに沿ったioctlシステムコールの提案を行う。 9 4. 目的 Linuxのファイルシステムに則ったデバイス操作 VRPNではserver-client間のアプリケーションレベル でのデバイスの操作を行っている。 どのような機器でも入力デバイスとしてVRPNに組み 込むことが出来るようになるのが目標である。 ライブラリを新たに記述する手間を、システムコール の定義・再利用という形で省く。 10 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); } 11 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++; } } 12 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++; } } 13 5. 進捗報告 システムコール vrpn_○○○_remote関数の機能ををioctlシステム コールで処理できるよう実装する。 ネットワークに透過的なVR機器を実現させるのはソフト USBデバイスである。 ボタン入力に関するデータの取り扱い方を定義する。 ボタンの識別ナンバーとそのボタンの入力データを格納するた めのメモリ領域を確保する必要がある。 14 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) } 15 6. 課題と今後の予定 VRPN対応機器の研究 既存の機器についての報告を行う。 それらがいかにシステムコールでデータの入出力が 出来るのかを考察する。 既存のVRPNでは対応しきれない機器、もしくは既存 のUSB機器について、ソフトUSBデバイスを用いると きどのように実装するのかを研究する。 ソフトUSBデバイスの実現方法についての具体 的な考察 16 6. 課題と今後の予定 12月下旬 1月 VR meetingに参加(大分大学) VR機器についてのプログラミング的考察 ソフトUSBデバイス実現のためのアプローチ 卒業論文の執筆 2月 2月14日に卒業論文締切 口頭試問の準備 2月18日に口頭試問 17
© Copyright 2024 ExpyDoc