Tutorial?
Up:Tutorial? Previous:サービスプロバイダの使用方法 Next:エージェントの衝突?
ここではエージェント視線や視点を変化させその時の画像を取得するサンプルを紹介します。
※SSH接続によりSIGVerseを利用している場合はサービスプロバイダ用のポートフォワーディングの設定が必要です。詳しくは[[]]を参照ください。
まずコントローラを作成します。
$ cd ~/sigverse-<version>/bin/NewWorld $ emacs captureView.cpp
captureView.cpp
このサンプルは定期的に呼び出される関数onActionで視線を常に変化させています。変化する視線の範囲は視線ベクトルのx成分が-1.0~1.0です。視線ベクトルのz成分が1, y成分が0の時エージェントの視線はまっすぐ前を向いた方向から左方向に45°、右方向に45°視線を行ったり来たりします。
エージェントが"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"などのメッセージを送信してエージェントが向きを変えたり、移動したりすることを確認してみてください。
#ref(): File not found: "capture_1.jpg" at page "エージェント視点の画像取得(v2.0系)"
キャプチャしたいタイミングで"capture"を送信するとエージェント視線の画像が得られます。
#ref(): File not found: "view000.bmp" at page "エージェント視点の画像取得(v2.0系)"
上のサンプルではエージェント設置されたカメラは一つでしたが、エージェントに複数個カメラが設置されている場合はcaptureViewするときにカメラ番号を指定することができます。
$ emacs xml/captureView.xml
ヒューマノイドロボットにカメラ2を追加します。 ヒューマノイドロボットのカメラ設定の箇所を以下のように変更します。
captureView.xml
↓
カメラ1とカメラ2で微妙に位置と方向をずらしました。つまりカメラ1が左目、カメラ2が右目に対応します。
次にカメラが2つある場合に対応したコントローラに修正します。
$ cd NewWorld $ emacs captureView.cpp
captureViewの最後の引数にカメラ番号を指定します。指定がなければ自動的にカメラ1の画像を取得します。このコントローラは受信したメッセージが"capture1"であればカメラ1、"capture2"であればカメラ2の画像を取得します。
それではコンパイルして実行してみましょう。
$ make $ cd .. $ ./sigserver.sh -p 9001 -w captureView.xml
SIGVerseを実行してSIGViewerで確認してみます。ロボットをクリックすると、SIGViewerの左上にカメラが2つついているのが確認できます。
#ref(): File not found: "capture_2kai.jpg" at page "エージェント視点の画像取得(v2.0系)"
ロボットに"capture1"または"capture2"を送ってそれぞれ別のカメラの画像が習得できることを確認してみてください。
Up:Tutorial? Previous:サービスプロバイダの使用方法 Next:エージェントの衝突?