Up:Tutorial? Previous:視覚に関する操作 Next:エージェント視点の画像取得
ヒューマノイド型のエージェントはデフォルトでは顔に一つだけカメラが設置されていますが、複数個のカメラを体の好きな場所に取り付けることができます。ここではエージェントに複数個のカメラを設置する方法を説明します。なお、ヒューマノイド(関節を持ったエージェント)以外のエージェントはカメラを増やすことはできません。(SIGViewer1.3.5以降のバージョン対応)
エージェントにサブカメラを設置するサンプルコードを紹介します。
$ cd ~/sigverse-<version>/bin/NewWorld $ emacs SetCamera.cpp
SetCamera.cpp
このエージェントはメッセージ"move"を受信すると現在向いている方向に進みます。"rotation"を受信するとエージェントは向きを変えます。回転する角度をメッセージとして受信して、その角度だけ体を回転します。また、"「関節名」=「角度」"というメッセージを送信するとエージェントは関節を指定した角度に曲げます。
それではコンパイルします。
$ emacs Makefile
変更前
#オブジェクトファイルの指定 OBJS = WatchController.so
変更後
#オブジェクトファイルの指定 OBJS = SetCamera.so
$ make
世界ファイルは前節(視覚に関する操作)で使用したリビングルームの世界ファイルとほとんど同じものを使います。
$ cd ~/sigverse-<version>/bin $ emacs xml/MultiCamera.xml
MultiCamera.xml
サブカメラを設置するリンクの名前を(elnk1, elnk2, elnk3, ... , elnk9)で設定します。
今回は、(elnk1, elnk2, elnk3, elnk4)=("HEAD_LINK", "WAIST_LINK0", "LARM_LINK7", "RARM_LINK7")として、elnk5~elnk9は使っていません。
指定できるリンクの一覧は、Joint定義一覧を参照してください。
( (epx1, epy1, epz1), (epx2, epy2, epz2), (epx3, epy3, epz3), ... (epx9, epy9, epz9) )で各カメラのリンクからの相対位置、
( (evx1, evy1, evz1), (evx2, evy2, evz2), (evx3, evy3, evz3), ... (evx9, evy9, evz9) )で各カメラの初期の向きを設定しています。
また、ヒューマノイド以外のエージェント(seDoll_Bear.xml)にもカメラを設置していますが、この場合はカメラを設置するリンク名を指定する必要はありません。カメラの位置、方向は(vpx,vpy,vpz), (vvx,vvy,vvz)で設定します。
それでは起動してみましょう。
$ ./sigserver.sh -w MultiCamera.xml -p 9001
SIGViewerでサーバに接続して、シミュレーションを開始します。リビングルームに向かい合って立っている2体のヒューマノイドロボット型のエージェントが見えると思います。
SIGViewerで接続してみるとリビングルームにロボットが立っているのが見えます。
ロボットをクリックするとロボットにつけられたカメラから映し出された画像が左側のサブカメラに表示されます。
"start"ボタンを押してシミュレーションを開始して、SIGViewerからエージェントに"rotation"や"move"などのメッセージを送信してエージェントが向きを変えたり、移動したりすることを確認してみてください。ロボットを動かすと左の画像でサブカメラの視線がつられて動いているのがわかると思います。
"camera"タブから左の4つのビューポートに映すカメラを切り替えることが出来ます。 まず、カメラを表示したいエージェントをクリックします。すると"Target Object:"のところにクリックしたエージェントの名前が表示されます。
"SubCam ID:"は上からビューポート1、ビューポート2、ビューポート3、ビューポート4に対応しており、それぞれ好きなカメラ番号で映し出される画面を表示することができます。
カメラ番号を変更するとビューポートが更新されます。
また"NoCam"に切り替えた場合はビューポートが見えなくなります。
Viewerにメインで表示されている画面をエージェントに取り付けられたカメラからの画面に切り替えることができます。 メインビューで表示したいエージェントをクリックし、cameraタブの"MainCam ID:"をカメラ番号(ヒューマノイド以外の場合はAgentView)を指定するとメインビューがエージェントのカメラ視点に切り替わります。
メインビューを"Robot_1"のカメラ1の画像に切り替えました。 WorldViewに戻すと元の画面に戻ります。
ここではロボットに複数のカメラを設置しましたが人間型エージェントでも同じことが行えます。
Up:Tutorial? Previous:視覚に関する操作 Next:エージェント視点の画像取得