15
RINIONS v3.1Dev Real Time Input from NI/NUI and Output to the Network and Shared Memory System

RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

RINIONS v3.1Dev

Real Time Input from NI/NUI and Output to the Network and Shared Memory System

Page 2: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

【概要とシステム構成】

本システムは,Kinect からのデータの処理を行うクライアントプログラム(以下 Rinions)と,ネット

ワーク上でアニメーション(モーション)データの中継を行うサーバプログラム(以下 anm_server)で構

成される.

Rinions は Kinect から入力された各ジョイントの座標データから回転用のクオータニオンを計算し,座

標データとクオータニオンデータを共有メモリに書き込む.さらに それらのデータを UDP で anm_server

に転送する.また,anm_server から送られてきた座標データとクオータニオンデータも共有メモリに書き

込む.

anm_server は登録されている Rinions から送られてきたアニメーションデータ(座標データとクオータ

ニオンデータ)をネットワーク上の登録されている全ての Rinions へ中継転送する.

Rinions と anm_server の動作の概略を以下に示す.

Rinions の動作

・Kinect からの各ジョイントの座標データからクオータニオンを計算し,共有メモリに書き込む.

・各ジョイントの座標データとクオータニオンを anm_server に転送する.

・anm_server から座標データとクオータニオンを受信し,共有メモリに書き込む.

anm_server の動作

・登録されている各 Rinions から各ジョイントの座標データとクオータニオンデータを受信し,それらのデ

ータを登録されている全ての Rinions に中継転送する.

共有メモリからデータを読み出すアプリケーションを用意すれば,ネットワーク上でモーションデータ

をリアルタイムに共有することが可能となる.現時点では MikuMikuDance(以下MMD)とSecond Life/OpenSim

のビューアでこの共有メモリのデータを読み出すことが可能となっている.

システム構成図

Page 3: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

【利用方法】

本システムを使用することにより,ネットワーク越しにリアルタイムにアニメーション(モーション)

データ共有することが可能となる.

具体的には,例えば共有メモリを読み込むアプリケーションに Second Life/OpenSim のビューアを使用

した場合,以下のような事が可能となる.

・ アバターのアニメーションによるユーザ間のコミュニケーション.

・ 3 次元動画(マシニマ)の作成.

・ お互いのモーションを見ながらのダンスゲーム.

一方,共有メモリを読み込むアプリケーションに MMD を使用した場合,残念ながら MMD では複数のモデ

ルのモーションデータを Kinect から一度に読み込むことができないため,Second Life/OpenSim のビュー

アのように,ローカルユーザとリモートユーザで同時にそれぞれのモデルを操作するようなことはできない.

しかしながら,リモートユーザのモーション(ダンスなど)をリアルタイムにローカルなモデルに反映させ

て表示させることが可能である.

動作例 (Rinions + Second Life)

Page 4: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

【主な機能と特徴】

Rinions

・ オープンソース.

・ ネットワークに接続しないローカルな環境でも使用可能.

・ ジョイントデータを独自形式ファイル(テキスト)で保存可能.(BVH への出力は開発中)

・ Xtion+OpenNI, データファイルからのデータ読み込みも可能.(BVH, VMD からの読み込みは開発中)

・ Kinect が接続されていない状態でも,anm_server からのデータ受信が可能.

・ チルトモータ制御.

・ データのログ表示.

・ データのミラーリング.

・ 上半身(座位)モードをサポート.

・ 移動平均によるデータの平滑化.

・ 姿勢(前後の傾き)の補正が可能.

・ 共有メモリおよびネットワークへの出力データのフレームレート調整.

・ BB ルータ越しに使用する場合,Keep Alive パケットによる UDP ホールパンチングで NAT 越えをサポー

ト.(BBルータでポートを開放する必要はない)

・ anm_server との間で転送速度調整(フロー制御)が可能.

anm_server

・ オープンソース.

・ UDP による高速転送.

・ Cygwin を使用することにより Windows 下でも動作可能(推奨は Linux/Unix 下での稼動).

・ データの中継範囲のグループ化(グルーピング)機能.

・ Rinions との間で転送速度調整(フロー制御)が可能.

Page 5: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

【簡易的な操作例】

共有メモリを読み込むアプリケーションに MMD を使用する場合.

YouTube http://youtu.be/ALGVOGBQg7w

1. MMD のインストール(Dx9 対応の 7.24 以上)

http://www.geocities.jp/higuchuu4/ から MMD(Dx9 対応の v7.24 以上)をダウンロードし,解凍する.

2. Rinions のダウンロードとインストール

http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Rinions からプログラムのバイナリをダウンロード

し,解凍する.

3. DxOpenNI.dll のコピーとプログラムの起動

Rinions の MMD_SHMIF フォルダにある DxOpenNI.dll を MMD の Data フォルダにコピーする.Rinions.exe

を起動し,続いて MikuMikuDance.exe を起動しモデルを適当に選択する.

4. MMD の操作

MMD の「モーションキャプチャ」メニューから「Kinect」を選択する.アニメーション UUID を入力する

ダイアログが表示されるが,通常はそのまま「OK」をクリックする.なお,アニメーション UUID は,リモ

ートユーザの Kinect のデータを入力データとする場合に,識別子として使用する.

5. Rinions の操作

Rinions の「設定」メニューから「データ出力」を選択し,データ出力の「座標データ」にチェックを入れ

る(これを入れ忘れると,キャプチャ時に MMD のモデルが画面外に吹っ飛んでしまう).

次に,「ウィンドウ」メニューから「センサー」を選び,サブメニューでウィンドウサイズを選択する(1/2

推奨).センサーウィンドウが表示されたら,ツールバーの黄色い三角のプレイボタンをクリックし,認識

を開始する.

6. Let ダンス!!

Kinect の前でダンスする.認識を停止する場合は,黄色いボタンの横の赤い停止ボタンをクリックする.

共有メモリを読み込むアプリケーションに Second Life/OpenSim のビューアを使用する場合(接続先は OpenSim).

YouTube http://youtu.be/A6M3SlGZEWU

1. OpenSim 環境の構築 (アカウントの取得)

OSGrid(http://www.osgrid.org/)または TUIS Open Grid(http://www.opensim.tuis.ac.jp)などでアカウ

ントを取得するか,自分で OpenSim サーバを稼動させる(http://opensimulator.org).

2. Second Life/OpenSim ビューアのインストール

Second Life/OpenSim のビューアをインストールする.現時点でサポートしているビューアは Imprudence

Viewer-1.3.2, FireStorm Viewer-3.2.1/3.2.2/3.3.0/4.1.1, Singularity Viewer-1.6.0/1.7.0, Zen

Viewer-3.3.5 である.

3. Rinions のダウンロードとインストール

http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Rinions からプログラムのバイナリをダウンロード

し,解凍する.

4. Rinions 対応のビューアのインストール

Rinions の Rinions-Viewer フォルダにある Rinions 対応用に再コンパイルされたビューアを,予めインスト

ールしたビューアのフォルダにコピーする(ビューアの種類とバージョンを一致させる事).

5. OpenSim でのセットアップ

Rinions 対応のビューアを起動して,OpenSim にログインし,Rinions の Samples フォルダにある

PSI_Pose.bvh をアニメーションデータとしてアップロードする.アップロードする場合,ループのチェッ

クボックスにチェックを入れ,優先度も適当に設定する.次に,アップロードしたアニメーションを実行す

る.またこのアニメーションデータの UUID をコピーしておく.

Page 6: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

6. Rinions の起動

Rinions を起動し,「設定」->「アニメーション UUID」の設定ダイアログにアップロードしたアニメーショ

ンの UUID をペーストする.

7. ネットワークサーバへのログイン

リモートユーザとデータを交換する場合は,「ファイル」メニューから「ログイン」を選ぶ.デフォルトで

用意されているサーバ(silver-star.nsl.tuis.ac.jp)に接続することができる.

8. 認識の開始

「ウィンドウ」メニューから「センサー」を選び,サブメニューからウィンドウサイズを選択する(1/2 推

奨).センサーウィンドウが表示されたら,ツールバーの黄色い三角のプレイボタンをクリックし,認識を

開始する.

9. Let ダンス!!

Kinect の前でダンスする.認識を停止する場合は,黄色いボタンの横の赤い停止ボタンをクリックする.

Page 7: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

【メニュー詳細】

1. Rinions メインウィンドウ

Kinect FPS FPSKinect FPS FPS

2. 「ファイル」 メニュー

2-1. ログイン

アニメーション中継サーバにログインする.アニメーション中継サーバの設定は,「設定」メニューの「ネッ

Page 8: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

トワーク」で行う.

2-2. ログアウト

アニメーション中継サーバからログアウトする.

2-3. データ受信

アニメーション中継サーバからデータを受信するかどうかのトグルスイッチ.アニメーション中継サーバへの

ログイン直後は自動的に ON になる.

2-4. データ読込

ファイルからジョイントデータを読み込む.現在Kinect SDKでサポートしている形式は独自形式(Joints Text)

のみである.BVH ファイルの読み込みについては開発中.

Joints Text のファイルフォーマット.

http://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?Rinions%2FJoints%20Text%20File

2-5. データ保存

センサーウィンドウの「データの記録開始」ボタンにより生成された一時データファイルを,ジョイントデー

タとして保存する.現在 Kinect SDK でサポートしているものは,独自形式(Joints Text)での保存のみである.

BVH ファイルでの保存については開発中.

2-6. 初期化

Rinions を起動時の状態に初期化する.Rinions は再起動した場合と同じ状態になる.

2-7. 終了

Rinions を終了する.

3. 「ウィンドウ」 メニュー

3-1. センサー

センサーウィドウを表示する.サブメニューでウィンドウの大きさを指定できる(1/2 推奨).小さい方が(若

干)処理は早くなる.

3-2. 読込データ

センサーウィンドウで表示可能なデータファイルを読み込んでいる場合に,センサーウィンドウを表示する.

Kinect SDK では未サポート.

3-3. ログ

ログウィンドウを表示する.

Page 9: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

4. 「設定」 メニュー

各種設定ダイアログを表示する.

4-1. 「NI デバイス」 ダイアログ

4-1-1. 起動時に優先するライブラリ

再起動または初期化時に優先してロードするライブラリを指定する.指定されたライブラリがインストールさ

れていない場合は,もう一方のライブラリのロードを試みる.

4-1-2. ハードウェア

(可能なら)Kinect の LED とチルトモータを制御可能にする.

4-2. 「アニメーション UUID」 ダイアログ

ローカルな Rinions で制御するアニメーションの UUID を指定する.具体的に何を指定するかは,共有メモリ

Page 10: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

からデータを読み出すアプリケーションに依存する.通常は操作するアバターやモデルの識別に使用する.

4-3. 「モーション設定」 ダイアログ

4-3-1. 関節の制約

関節(ジョイント)の動きに制約を与えて修正し,手足の小刻みな振動などを防止する.ただし,ジョイント

の曲がり方の制約に関してはまだ十分な実装がなされておらず,バグが存在する.

4-3-2. スムージング

「Kinect SDK スムージング」では Kinect SDK の機能を使用してジョイントの動きを滑らかにする.詳細につ

いては Kinect SDK のマニュアルを参照すること.

「移動平均」では移動平均法を用いてジョイントの動きを滑らかにする.重みの加算の仕方は,「単純」,「加

重」,「指数」から選択できる.

4-3-3. 補正

アバターの前後の傾きを補正する.これはクォータニオンの補正なので,MMD では効果がない(MMD では座標

データのみを使用し,クォータニオンは使用しないため).

4-3-4. 検出部位

全身を検出するか,上半身のみを検出(座位モード)するかを選択する.

Page 11: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

4-4. 「ネットワーク」 ダイアログ

4-4-1. データ出力先

ネットワークを使用する場合,データをローカルにも出力するかどうかを指定する.データをローカルにも出

力した場合,アニメーション中継サーバからのデータと比べて早く実行されるので,リモートユーザとの同期に

問題が発生する可能性がある.

4-4-2. データの送受信

「高速転送モード」では UDP のパケットサイズを最適化して送信する.通常はチェックを入れておく.

「受信ポート番号」では,アニメーション中継サーバからデータを受信するためのポート番号を指定する.通

常はデフォルトのままで良い.また,一般家庭で BB ルータによる NAT(NAPT)を使用している場合でも,相手先を

指定した UDP ホールパンチングにより NAT(NAPT)越えを行うので,BB ルータのポートを開放する必要はない.

「最大受信速度」では,Rinions がアニメーション中継サーバから受信できる最大の通信速度を指定する.ア

ニメーションデータを交換する相手が増えるとそれに比例して通信量も増加するが,UDP ではフロー制御がない

ため通信量が急激に増加するとネットワークそのものが停止する可能性がある.その防止のために,ここで最大

の受信速度を指定する.

この設定後,Rinions はアニメーション中継サーバに対して送信制限のリクエストを送信する.アニメーショ

ン中継サーバはそれに従って通信量を制限するが,通信量は平均値で測られるため,一時的には指定された最大

受信速度を超えてデータが送信される場合もある.

4-4-3. アニメーション中継サーバ

「アニメーション中継サーバ」では,使用するアニメーション中継サーバの名前(FQDN または IP アドレス)

とそのポート番号を指定する.デフォルトは silver-star.nsl.tuis.ac.jp:8200 であり,これは我々が実験的

に稼動しているサーバで,だれでも自由に使用できる.

また Rinions に付属している anm_server.exe を Windows で起動する場合は,その Windows マシンの IP アド

レスを指定する(ポート番号は 8200 のまま).例えば,ローカルマシンで anm_server.exe を起動した場合は,

localhost または 127.0.0.1 を指定する.

Page 12: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

4-4-4. グループ キー

「グループキー」では,データを交換したいグループを特定する任意の文字列を指定する(日本語不可).ア

ニメーション中継サーバはこのキーによりグループ化を行う.例えば,友達とのみデータを交換したい場合は,

その友達との間で決めた文字を指定する.

4-5. 「センサーウィンドウ」 ダイアログ

「ミラーリングを行う」では,鏡に映ったように Kinect からのデータを処理する.ミラーリングを行った方

が違和感は少ない(と思う).

「カメライメージを表示する」では,デモなどを行う場合に,ユーザや周りの背景をセンサーウィンドウに映

し出したく無い時にチェックを外す.チェックを外した場合,センサーウィンドウの背景は灰色になる.

4-6. 「ログウィンドウ出力」 ダイアログ

4-6-1. デバイス

ログウィンドウに表示するローカルデータを選択する.

4-6-2. ネットワーク

ログウィンドウに表示するネットワークからのデータを選択する.「ネットワークチェック」では,受信デー

タそのものは表示せず,通信速度のみを表示する.

Page 13: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

4-7. 「データ保存」 ダイアログ

ファイルメニューの「データ保存」を行った場合に保存されるファイルの種別を指定する.Kinect SDK では現

在,独自形式(Joints Text)のみをサポートしている.

4-8. 「データ出力」 ダイアログ

4-8-1. データ出力

共有メモリやネットワークに出力するローカルデータの種別を選択する.共有メモリからデータを読み出

すアプリケーションに適したデータ種別を選択する.

4-8-2. 出力(FPS)制御

共有メモリやネットワークに出力するローカルデータの FPS を指定する.通常は使用しないが,アニメー

ション中継サーバの負荷が大きい場合などに指定する.この場合,FPS を 10 以下に指定するとアニメーシ

ョン(モーション)としてはかなり見辛いものになる.

5. 「ヘルプ」 メニュー

Rinions のバージョン情報を表示する.

Page 14: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

【技術資料】

1. 共有メモリの構造

2. 通信パケットの構造

Page 15: RINIONS v3 - Network System Laboratory - NSL...6. Rinionsの起動 Rinions を起動し,「設定」->「アニメーションUUID」の設定ダイアログにアップロードしたアニメーショ

3. 通信プロトコル

サーバはサーバは IPIPとと PortPort番号でクライアントを識別番号でクライアントを識別

中継プロセスは中継プロセスは 主にデータ転送に専念主にデータ転送に専念

セキュリティレベルは低いセキュリティレベルは低い

LOGIN

OK

Group Key

Access Key, Port Num.fork

REGISTRelay Process

anm_serverRinions

TRANSFER

TRANSFER

Joints Data

Joints Data

TRANSFERJoints Data

DELETE

Rinions

Access Key, Port Num.Animation UUID

LOGOUTAccess Key, Port Num.

Access Key, Port Num.Animation UUID

Relay Process

サーバはサーバは IPIPとと PortPort番号でクライアントを識別番号でクライアントを識別

中継プロセスは中継プロセスは 主にデータ転送に専念主にデータ転送に専念

セキュリティレベルは低いセキュリティレベルは低い

LOGIN

OK

Group Key

Access Key, Port Num.fork

REGISTRelay Process

anm_serverRinions

TRANSFER

TRANSFER

Joints Data

Joints Data

TRANSFERJoints Data

DELETE

Rinions

Access Key, Port Num.Animation UUID

LOGOUTAccess Key, Port Num.

Access Key, Port Num.Animation UUID

Relay Process