2010年1月31日日曜日

オリジナルロボットをシミュレータで動かすための作戦

オリジナルロボットをシミュレータに作り、ROSプログラムで操作するにはどうしたらいいのでしょうか?


http://www.ros.org/wiki/pr2_simulator/Overview
を見るて、よくよくドキュメントを追っていくと、少しわかりました。
まずはこれまでにやったURDFファイルにシミュレーション用の情報を付加して、
gazeboで表示、計算できるようにします。
そして次に、そのロボットを自在に動かすためのコントローラーを作り、ROSノードと接続します。



1)シミュレーションモデルの作成

シミュレータ上にロボットを表示するためには、前回作ったURDFに、
衝突用の形状、表示用の形状、重さ、などの物理パラメータを追加する必要があります。

ロボットモデル定義とプラグイン(OpenHRPでいうところのコントローラー)の指定。
形状はSTL形式で与えるようです。

URDFのフォーマットはここに少し書いてありますが、これでは何もわかりません。

urdfで定義したオブジェクトをシミュレータ世界に出現させるチュートリアルがありますので、次回はこれをやります。

その次に、pr2_descriptionを見ながら1関節くらいの簡単なロボットを作ってみようと思います。




2)コントローラーの作成

ここで言うコントローラーとは、シミュレータの中のロボットを直接操作するプログラムのことです。

PR2の場合、
の、
gazebo_ros_controller_managerというpluginでシミュレータ上のPR2の操作、状態取得を行っているように見えます。

PR2とgazeboの接続はどうやら以下のようになっているようです。

gazebo <==> gazebo_ros_controller_manager <==> pr2_controller_manager

pr2_controller_managerから先は実機と完全互換のようです。
gazebo_ros_controller_managerがシミュレータと実機をつないでいます。
非常にきれいにつながっていますね。

しかし、これはPR2の場合です。
オリジナルロボットの場合はどうするのがよいでしょうか?

以前作ったi-SOBOTの場合、
iSOBOT_nodeと同じインタフェースを持つgazebo_ros_iSOBOTプラグインを
作るのが良さそうです。

gazebo <==> gazebo_ros_iSOBOT <==> teleop_iSOBOT_joy

こうすればPS3のジョイスティックで動かしたデモがシミュレータ上でも、
teleop_iSOBOT_joyをいっさい変更せずに実行することができるはずです。

でも、iSOBOT_nodeでは、以下のフレームワークを使ったほうがよかったかもしれません。

http://www.ros.org/wiki/robot_mechanism_controllers

手っ取り早く動かしたかったため、たんなるトピックにしましたが。
まあ、ここまで複雑なものは必要ないので、あれはあれで正しいかもしれませんね。


0 件のコメント:

コメントを投稿