gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

Gazebo上のPR2をMoveIt! + Teleopで動かす

Gazebo上のPR2のEnd-Effectorを動かしたいと思い。その方法について検討しました。その結果、MoveIt!を利用することにしました。MoveIt!はIKを解く必要があるので、End-Effectorの目標座標を与える必要があります。手入力で与えるのは面倒なので、ゲームコントローラでTeleoperationすることにし、実際にできました。その結果を纏めたいと思います。

# 実行した環境

  • Host OS: Ubuntu 20.04
  • Docker Image: nvidia/opengl:1.1-glvnd-runtime-ubuntu18.04
  • ROS: melodic

# 実行手順
最初は既存のプログラムを実行すれば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などに変更