Gazebo上のPR2をMoveIt! + Teleopで動かす
Gazebo上のPR2のEnd-Effectorを動かしたいと思い。その方法について検討しました。その結果、MoveIt!を利用することにしました。MoveIt!はIKを解く必要があるので、End-Effectorの目標座標を与える必要があります。手入力で与えるのは面倒なので、ゲームコントローラでTeleoperationすることにし、実際にできました。その結果を纏めたいと思います。
# 実行した環境
# 実行手順
最初は既存のプログラムを実行すればOKです。
- roslaunch pr2_gazebo pr2_empty_world.launch
- roslaunch pr2_moveit_config move_group.launch
- roslaunch pr2_moveit_config moveit_rviz.launch config:=true
これらを実行した後、RViz上でInteractive Markerを動かしてPlan & Executeすれば、markerと同じ姿勢にPR2が動作します。私は"Approx IK Solution"にチェックを入れ、かつCollision-aware IKをオフにして実行しました。MoveIt!のIKのための目標座標は、jsk_teleop_joyを使いました。ただ、デフォルト設定のままだと下記のような問題点・不都合があるので、それぞれ下記のように対応した。
- コントローラの設定が、既存のものだと対応していない可能性がある → 自分が使いたいコントローラに合わせてコントローラのstatusの追加が必要
- frame_idが/odom_combinedになっていて、End-Effectorをちょっと動かそうにも基準がodom_combinedになっていて、直感的に目標位置を合わせづらい → frame_idを、r_write_roll_linkなどに変更