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