2010年2月6日土曜日

シミュレータの中のオリジナルロボットを動かすための準備その1

シミュレータの中のオリジナルロボットを動かしたいのですが、
そのために参考になるチュートリアルがあるので紹介します。

振り子シミュレーション

シミュレータ内に振り子を作って、それを制御します。
主にgazeboを考慮したモデルの作り方について学びます。

さっそくですが、
$ roslaunch gazebo empty_world.launch
でgazeboを走らせて、

$ roslaunch pr2_examples_gazebo single_link.launch
しましょう。

こんなんがでます。

$ rosrun pr2_controller_manager pr2_controller_manager list
すると、
test_controller ( running )

とでます。
$ rostopic pub /test_controller/command std_msgs/Float64 .5
ぶるんぶるん、と少し回転します。

では中身を見ていきましょう。

まずはlaunchファイルから。

<launch>
  <!-- send single_link.urdf to param server -->
  <param name="robot_description" command="$(find xacro)/xacro.py '$(find pr2_examples_gazebo)/single_link_defs/single_link.urdf.xacro'" />

  <!-- push robot_description to factory and spawn robot in gazebo -->
  <node name="spawn_single_link" pkg="gazebo_tools" type="gazebo_model" args="-p robot_description spawn" respawn="false" output="screen" />

  <rosparam file="$(find pr2_examples_gazebo)/single_link_defs/single_link_position_controller.yaml" command="load"/>

  <node name="spawn_test_controller" pkg="pr2_controller_manager" type="spawner" args="test_controller" respawn="false" output="screen" />

</launch>

まずは最初の<param>から。
これはroscoreが持つパラメータサーバに、single_link.urdf.xacroをxacroを使って展開した結果を送信しています。パラメータの名前としてrobot_descriptionを使っています。
追々分かりますが、ROSでは基本的にロボットモデルはrobot_descriptionという名前のパラメータとしてサーバにアップロードするもののようです。
(PR2だけなのかROSのルール(慣習)なのか微妙なのですが)

次の<node>でgazebo(シミュレータ)にモデルを生成させています。
$ rosrun gazebo_tools gazebo_model -p robot_description spawn
と中身は一緒です。

$ rosrun  gazebo_tools gazebo_model --help
すると詳細が分かりますが、
robot_descriptionという名前のパラメータを使ってgazeboにモデルをspawnするという意味です。

次の<rosparam>はそのままで、rosparamコマンドでパラメータを読み込んでいます。
$ rosparam load `rospack find pr2_examples_gazebo`/single_link_defs/single_link_position_controller.yaml
と同じですね。

最後の<node>がシミュレータ上のロボットや、実機を動かすための制御装置(コントローラー)です。

$ rosrun pr2_controller_manager spawner test_controller :name=spawn_test_controller
と同じですね。
pr2_controller_managerを使って、test_controllerというリアルタイム制御装置を駆動します。

gazeboでは、

gazebo <-> gazebo_plugin <-> test_controller

という構成でシミュレータ上のモデルを動かすはずです。
今回はgazebo_pluginが出てきませんでした。

それがどこに隠されているか、次回に続きます。

0 件のコメント:

コメントを投稿