2019年11月23日土曜日

pythonでMoveitを通してPandaのグリッパを開閉する方法


背景

MoveitとはROSのロボットアームの軌道制御プログラムです。
Moveitにはpythonのapiがあるため、pythonで動作を制御できます。
チュートリアルを見るとアームの移動方法は分かるのですが、グリッパの開閉方法が分からず時間をとられました。

備忘録を兼ねて方法を共有します。

使ったもの

  • ROS melodicをインストールしたPC
  • 上記のPCでMoveitのチュートリアルに沿ってPandaをrvizに表示させられるようにした環境
    下記のコマンドを実行して、pandaが表示された状態のrvizが動くようにしてください。
    roslaunch panda_moveit_config demo.launch

rvizでグリッパを開閉する方法

rvizでグリッパを開閉するには、MotionPlanningのPlanningタブのグループでhandを選び、GoalStateをopenやcloseにしてPlanとExecuteを行うと、開いたり閉じたりします。


プログラムの方針

githubで公開されていたチュートリアルにhandの制御があったので、下記の処理を行なえばグリッパの開け閉めが出来ると分かりました。
  1. handでグループを呼び出す
    group_name = "hand"
    group_hand = moveit_commander.MoveGroupCommander(group_name)
  2. グループに対してset_named_target関数を利用してGoalStateで選べる状態名を指定する
    group_hand.set_named_target('open')
  3. GoalStateを指定したらgoで実行する
    group_hand.go()

プロジェクトとプログラムを作成

先ほど紹介した方針を試すために、ROSのワークスペースにrospy用のROSのプロジェクトを作り、その中にプログラムを書きます。今回はros-panda-practiceというプロジェクトを作り、hand_open_close.pyにアーム操作プログラムを記述しました。
cd [ros_ws]
catkin_create_packate ros-panda-practice
[ros_ws]/src/ros-panda-practice/src/hand_open_close.py
#!/usr/bin/env python
import moveit_commander

group_name = "hand"
group_hand = moveit_commander.MoveGroupCommander(group_name)

group_hand.set_named_target('open')
group_hand.go()
group_hand.set_named_target('close')
group_hand.go()

rosrunで実行できるように、実行可能な権限をプログラムに付与しておきます。
cd [ros_ws]
chmod a+x src/ros-panda-practice/src/hand_open_close.py

プロジェクトができたら、ROSに認識させるためにcatkin makeかcatkin buildを実行し、setup.bashを読み込んでください。
(プログラムの変更はbuildやmakeしなくても反映されますが、プロジェクトやファイルの存在を認識させるには一度buildかmakeする必要があるようです。)

動作確認

pandaが表示されたrvizを動かした状態で、下記のコマンドを実行します。
rosrun ros-panda-practice hand_open_close.py

rviz上のpandaのグリッパが開いて閉じたら制御成功です。


まとめ

handのGoalStateをpythonで指定して、グリッパを開いたり閉じたりできました。

参考

MoveIt Quickstart in RViz
Move Group Python Interface
Tutorial 2 : Using the planning environment

1 件のコメント :

えいぺっく さんのコメント...

私の環境ではrviz上のhandのGoal Stateにopen,closeがありません。何か別のファイルに書き加えたりしましたか?