Up:Tutorial?     Previous:複数個のカメラ設置     Next:エージェントの衝突

エージェント視点の画像取得 (captureView)

ここではエージェント視線や視点を変化させその時の画像を取得するサンプルを紹介します。

※ここで使用するcaptureViewはSIGViewerのサービスプロバイダ機能を使用するため、ポートフォワーディングによる接続の場合は双方向のポートフォワーディングが必要になります。双方ポートフォワーディングの方法はこちら?

コントローラ作成

まずコントローラを作成します。

$ cd ~/sigverse-<version>/bin/NewWorld
$ emacs captureView.cpp

captureView.cpp

  • 視線の変化

このサンプルは定期的に呼び出される関数onActionで視線を常に変化させています。変化する視線の範囲は視線ベクトルのx成分が-1.0~1.0です。視線ベクトルのz成分が1, y成分が0の時エージェントの視線はまっすぐ前を向いた方向から左方向に45°、右方向に45°視線を行ったり来たりします。

  • captureView

エージェントが"capture"というメッセージを受信するとcaptureViewを実行しエージェント視点の画像を取得します。この時、実行時のディレクトリにview000.bmp, view001.bmpといったようにcaptureするたびに画像ファイルが保存されます。

  • エージェントの移動

このエージェントはメッセージ"move"を受信すると現在向いている方向に進みます。"rotation"を受信するとエージェントは向きを変えます。

コンパイル

それではコンパイルします。

$ emacs Makefile

オブジェクトファイルの指定を修正します。

#オブジェクトファイルの指定                                                                                        
OBJS     = captureView.so
$ make

世界ファイル作成

$ cd ..
$ emacs xml/captureView.xml

世界ファイルは前節(視覚に関する操作)で使用したリビングルームの世界ファイルとほとんど同じものを使います。

captureView.xml

画像取得

それでは実行してみましょう

$ ./sigserver.sh -p 9001 -w captureView.xml

SIGViewerで接続してみるとリビングルームにロボットが立っているのが見えます。 "start"ボタンを押してシミュレーションを開始して、ロボットをクリックすると左上の画像でエージェントの視線が動いているのがわかると思います。

次にSIGViewerからエージェントに"rotation"や"move"などのメッセージを送信してエージェントが向きを変えたり、移動したりすることを確認してみてください。

capture_1.jpg

キャプチャしたいタイミングで"capture"を送信するとエージェント視線の画像が得られます。

複数カメラの場合

上のサンプルではエージェント設置されたカメラは一つでしたが、エージェントに複数個カメラが設置されている場合はcaptureViewするときにカメラ番号を指定することができます。

世界ファイルの編集

$ emacs xml/captureView.xml

ヒューマノイドロボットにカメラ2を追加します。 ヒューマノイドロボットのカメラ設定の箇所を以下のように変更します。

captureView.xml

           ↓

カメラ1とカメラ2で微妙に位置と方向をずらしました。つまりカメラ1が左目、カメラ2が右目に対応します。

コントローラ修正

次にカメラが2つある場合に対応したコントローラに修正します。

$ cd NewWorld
$ emacs captureView.cpp

captureViewの最後の引数にカメラ番号を指定します。指定がなければ自動的にカメラ1の画像を取得します。このコントローラは受信したメッセージが"capture1"であればカメラ1、"capture2"であればカメラ2の画像を取得します。

SIGViewerで表示

それではコンパイルして実行してみましょう。

$ make
$ cd ..
$ ./sigserver.sh -p 9001 -w captureView.xml

SIGVerseを実行してSIGViewerで確認してみます。ロボットをクリックすると、SIGViewerの左上にカメラが2つついているのが確認できます。

capture_2kai.jpg

ロボットに"capture1"または"capture2"を送ってそれぞれ別のカメラの画像が習得できることを確認してみてください。

Up:Tutorial?     Previous:複数個のカメラ設置     Next:エージェントの衝突


Attach file: filecapture_2kai.jpg 1180 download [Information] filecapture_2.jpg 832 download [Information] fileview000.bmp 1429 download [Information] filecapture_1.jpg 1239 download [Information] filecaptureView.txt 641 download [Information]

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2011-10-28 (Fri) 13:10:59 (4557d)