Up:Tutorial? Previous:HMD+KINECT
※このサンプルはv2.1.1以降で動作します。
ロボットがゴミをゴミ箱に捨てるサンプルを紹介します。
以下をサーバ側でダウンロードします。
次に展開してコンパイルします。
$ tar xzvf CleanUp_v1.tar.gz $ cd CleanUp_v1 $ make
コンパイルするには環境変数SIGVERSE_PATHにバージョンSIGVerseのバージョン2.1.1以降を設定する必要があります。
$ export SIGVERSE_PATH=/home/<username>/sigverse-<バージョン2.1.1以降> $ export PATH=$PATH:$SIGVERSE_PATH/bin $ bash
※注意)動作環境によっては以下のコードをコントローラの最初に追加する必要があります。
#include <unistd.h>
それでは実行してみましょう。
$ sigserver.sh -w ./CleanUp.xml
ビューワーで接続するとロボットが机の前に立っていて、机の上に缶とペットボトルが置いてあります。
シミュレーションをスタートさせるとロボットが空き缶もしくはペットボトルに手を伸ばし、それをもってゴミ箱へと運びます。
このサンプルでは缶、もしくはペットボトルをゴミと認識してゴミ箱に運びます。
ロボットのコントローラを見てみます。
$ emacs CleanUpRobot.cpp
300行目あたりにrecognizeTrashという関数がありここでゴミを認識します。 このサンプルではゴミの名前が既に分かっていて、乱数でゴミを決定し、直接ゴミの位置を取得しています。 画像処理や距離センサなどでゴミを認識する場合はここにコードを追加していきます。
サンプル1ではゴミの名前からゴミの位置を直接取得しました。次のサンプルではゴミの名前をロボットがあらかじめ知ることができず、画像処理や距離センサの情報のみからゴミの位置を推定するためのサンプルプログラムを紹介します。
ロボットはゴミの名前を知ることはできないので、このサンプルではロボットの手と衝突したオブジェクトをgraspします。
さらにこのサンプルではサービスプロバイダを作成しクライアント側でゴミの位置を認識します。
以下をサーバ側でダウンロードします。
次に展開してコンパイルします。
$ tar xzvf CleanUp_v2.tar.gz $ cd CleanUp_v2 $ make
ゴミを認識するサンプルをクライアント側で以下からダウンロードします。
ダウンロードしたファイルを展開したらvc++2008(または2010)でRecogTrashService_****.slnファイルを開きます。
サーバ名を自分の環境に合わせて修正します。 RecogTrashService.cppの105行目あたりでSIGVerseサーバに接続します。
srv.connect("hostname", 9001);
"hostname"とポート番号9001を自分の環境に合わせて修正してからビルドします。
それでは実行してみましょう。 サーバ側でまずSIGVerseサーバを実行します。
$ sigserver.sh -w ./CleanUp.xml -p 9001
次にビューワーでサーバに接続してシミュレーションを開始します。この時点ではロボットは認識を開始せず、ゴミ認識サービスが起動するのを待っています。
次にクライアント側でゴミ認識サービスを起動します。するとゴミ認識サービスによりゴミの位置が認識されてロボットがペットボトルをゴミ箱に運び始めます。
終了するときはサービスの終了→ビューワーでシミュレーション終了(もしくはQuit)→ビューワーでdisconnect→サーバの終了の順に行います。