Up:Tutorial?     Previous:メッセージ送受信


画像データ取得

※このチュートリアルはSIGVerse v2.1.0以降対応です。

エンティティに設置されているカメラの画像データ、距離センサデータをサービスプロバイダで取得するサンプルを紹介します。

これによりクライアント側で画像処理ができるようになります。

コントローラ作成

サーバ側でコントローラを作成します。

$ emacs captureService.cpp

captureService.cpp

このコントローラは1秒ごとにサービスプロバイダに"capture"というメッセージを送信します。

コンパイルします。

$ ./sigmake.sh captureService.cpp

世界ファイル作成

世界ファイル作成します。

$ emacs captureService.xml

ロボットだけが登場するシンプルな世界ファイルです。

サービスサンプル

クライアント側でサービスプロバイダの作成と同様、VC++2008を使って新しくプロジェクトを立ち上げます。

以下のソースコードを追加します。

MyService.cpp

"hostname"は自分の環境に書き換えます。

このサービスプロバイダは"capture"というメッセージを受け取るとViewerにcaptureViewリクエストを送りカメラ画像データを取得します。そしてcaptureViewに成功すると"succeeded" というメッセージをコントローラに返します。

captureService_1.png

captureViewの最初の引数にはカメラを持ったエンティティ名、2番目以降の引数はコントローラで使用するcaptureViewの1番目以降の引数と同じです。エージェント視点の画像取得参照。

実行

それでは実行してみます。

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

サーバを立ち上げた状態でビューワーで接続します。 シミュレーションをスタートした後、MyServiceを起動します。

サーバ側で以下のようなメッセージが表示されたら成功です。

[MSG]  robot_000(0.0.0.0) [MyService] succeeded
[MSG]  robot_000(0.0.0.0) [MyService] succeeded
[MSG]  robot_000(0.0.0.0) [MyService] succeeded

サービスプロバイダ実行フォルダの中にtest.bmpが保存されていることを確認してみてください。

距離センサ

距離センサデータを取得する場合はMyServiceを以下のように修正します。

   ↓

実行すると取得した距離データがクライアント側で表示されます。

distance 155
distance 155
distancd 155

distanceSensor1D, distanceSensor2Dも同様にサービスプロバイダで利用できます。 第一引数にエンティティ名を指定するということ以外はコントローラAPIのdistanceSensor, distanceSensor1D, distanceSensor2Dと使い方は同じです(距離センサ 参照)。


Up:Tutorial?     Previous:メッセージ送受信

Counter: 7663, today: 1, yesterday: 0

Attach file: filecaptureService_1.png 1307 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: 2015-12-25 (Fri) 15:06:12 (3042d)