Up:Tutorial?     Previous:サービスプロバイダの使用方法     Next:エージェントの衝突


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

ここではサービスプロバイダ機能を使用しエージェントに設置されたカメラ画像のデータをコントローラが取得するサンプルを紹介します。

※SSH接続によりSIGVerseを利用している場合は前ページ同様追加でポートフォワーディングの設定が必要です。詳しくは前ページサービスプロバイダの使用方法を参照ください。

コントローラ作成

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

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

captureView.cpp

captureView

50行目の関数captureViewで画像データをビューワーから取得します。

1番目の引数は取得したいカメラのID番号を指定します。ここではID番号2を指定しました。2番目と3番目に1ピクセルあたりのビット深度と画像サイズを指定します。(※v121029, v2.0.1ではビット深度24, 画像サイズ320×240のみ取得可)

取得したViewImageから画像データを取り出すには関数getBuffer()を用います。

このサンプルではエージェントに"capture"というメッセージを送信するとエージェントは画像を取得することができます。

captureViewが成功すると実行ディレクトリにview000.bmp, view001.bmp...というようにbmp形式の画像ファイルが保存されます。

エージェントの移動

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

コンパイル

Makefileの変数OBJSにcaptureView.soを追加してコンパイルします。

世界ファイル作成

$ cd ..
$ emacs xml/captureView.xml

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

captureView.xml

エージェントに2つのカメラを設置し、2つのカメラで微妙に位置と方向をずらしました。

カメラID番号1が右目、2が左目に相当します。

画像取得

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

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

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

シミュレーションを開始して"rotation"や"move"などのメッセージを送信するとエージェントが向きを変えたり、移動したりして自由に部屋の中を移動できるようになります。

キャプチャしたいタイミングで"capture"を送信するとエージェントに設置されたカメラ(ID番号2)で撮影した画像が得られます。

capture_1.PNG

サーバ側の実行ディレクトリにカメラ2でcaptureした画像ファイルが保存されていれば成功です。

Old Version


Up:Tutorial?     Previous:サービスプロバイダの使用方法     Next:エージェントの衝突


Attach file: filecapture_1.PNG 1519 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: 2012-10-31 (Wed) 18:40:38 (4188d)