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" というメッセージをコントローラに返します。 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: 7893,
today: 1,
yesterday: 0
|