シミュレータの中のオリジナルロボットを動かしたいのですが、
そのために参考になるチュートリアルがあるので紹介します。
振り子シミュレーション
シミュレータ内に振り子を作って、それを制御します。
主に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 件のコメント:
コメントを投稿