Up:Tutorial?    Previous:エージェントの衝突   Next:BVHファイルの読み込み   


物体を持つ動作

ここではロボット型エージェントが物体を持つ動作をするサンプルを紹介します。

コントローラ作成

物体を持って移動するコントローラを作成します。

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

grasp.cpp

これはエージェントがエンティティに触れる(衝突)するとその触れたエンティティをつかむというサンプルです。

エージェントの操作方法

エージェントに"move"のメッセージを送信すると前に進み、"rotation"を送信すると体の向きを変えます。 また、"「関節名」 「角度」"というメッセージを送信するとエージェントは関節を指定した角度に曲げます。

例) 腰の関節をx軸(エージェント座標)を中心に45°曲げる場合は"WAIST_JOINT1 45"と送信します。JOINT名の定義はこちらを参照ください。

掴む

このサンプルではGraspという関数を新しく作成しました。この関数の1番目の引数に物体をつかむパーツの名前(右手の場合はRARM_LINK7、左手の場合はLARM_LINK7)、2番目の引数に掴む対象となるエンティティの名前を指定します。一度掴むとgraspフラグがtrueとなり、エージェントが移動しても手から離れません。

離す

エージェントに"release"というメッセージを送信するとエージェントは掴んでいる物体を離します。  

コンパイル

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

世界ファイル作成

次に世界ファイルを作成します。視覚に関する操作で使った世界ファイルとほぼ同じものを使います。

$ cd ..
$ emacs xml/grasp.xml

grasp.xml

実行

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

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

SIGViewerでシミュレーションサーバに接続してシミュレーションを開始します。 "move" "rotation" "関節名 角度"等のメッセージを送信するとエージェントは移動したり関節を曲げたりすることができます。これらを組み合わせて右手で何かエンティティに触れてみてください。 エージェントは物体を掴みます。

※衝突判定は物理演算用の単純形状で行っているため、見た目は衝突しているのになかなかgraspできない場合があります。

grasp_1.PNG

(※注意)SIGViewerで使われているGUIが日本語キーボードに対応していないため、アンダースコアを入力できないことがあります。その場合はwindowsのキーボードの設定を英語に設定しておくと入力できるようになります。

key_1.PNG

そして一度掴んだら移動したり関節を曲げたりしても手を離さないことを確認してください。

grasp_2.PNG

最後に離したい場所でメッセージ"release"を送信して手を離します。

grasp_3.PNG

エージェントが移動したり、手を動かしたりしても掴んだオブジェクトは付いてこなくなります。

Old Version

物体を持つ動作(v120330, v1.4.8)


Up:Tutorial?    Previous:エージェントの衝突    Next:BVHファイルの読み込み


Attach file: filekey_1.PNG 1145 download [Information] filegrasp_3.PNG 1148 download [Information] filegrasp_2.PNG 1100 download [Information] filegrasp_1.PNG 1318 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-11-01 (Thu) 17:04:18 (4193d)