VRPN環境でのネットワーク透過的な周辺機器に関する研

ソフト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