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体のヒューマノイドロボット型のエージェントが見えると思います。

subcam_1.jpg

SIGViewerで接続してみるとリビングルームにロボットが立っているのが見えます。

ロボットをクリックするとロボットにつけられたカメラから映し出された画像が左側のサブカメラに表示されます。

"start"ボタンを押してシミュレーションを開始して、SIGViewerからエージェントに"rotation"や"move"などのメッセージを送信してエージェントが向きを変えたり、移動したりすることを確認してみてください。ロボットを動かすと左の画像でサブカメラの視線がつられて動いているのがわかると思います。

サブカメラの切り替え

"camera"タブから左の4つのビューポートに映すカメラを切り替えることが出来ます。 まず、カメラを表示したいエージェントをクリックします。すると"Target Object:"のところにクリックしたエージェントの名前が表示されます。

subcam_2kai.jpg

"SubCam ID:"は上からビューポート1、ビューポート2、ビューポート3、ビューポート4に対応しており、それぞれ好きなカメラ番号で映し出される画面を表示することができます。
カメラ番号を変更するとビューポートが更新されます。
また"NoCam"に切り替えた場合はビューポートが見えなくなります。

subcam_3kai.jpg

メインビューの切り替え

Viewerにメインで表示されている画面をエージェントに取り付けられたカメラからの画面に切り替えることができます。 メインビューで表示したいエージェントをクリックし、cameraタブの"MainCam ID:"をカメラ番号(ヒューマノイド以外の場合はAgentView)を指定するとメインビューがエージェントのカメラ視点に切り替わります。

subcam_4.jpg
 
 
subcam_5.jpg

メインビューを"Robot_1"のカメラ1の画像に切り替えました。 WorldViewに戻すと元の画面に戻ります。

ここではロボットに複数のカメラを設置しましたが人間型エージェントでも同じことが行えます。

Up:Tutorial?     Previous:視覚に関する操作     Next:エージェント視点の画像取得?


Attach file: filesubcam_5.jpg 1246 download [Information] filesubcam_4.jpg 1335 download [Information] filesubcam_3kai.jpg 1259 download [Information] filesubcam_2kai.jpg 1309 download [Information] filesubcam_3.jpg 857 download [Information] filesubcam_2.jpg 867 download [Information] filesubcam_1.jpg 1320 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:24 (4561d)