Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python moveit_commander with Xarm6 #381

Open
Aki92-Xavier opened this issue Oct 5, 2021 · 5 comments
Open

Python moveit_commander with Xarm6 #381

Aki92-Xavier opened this issue Oct 5, 2021 · 5 comments

Comments

@Aki92-Xavier
Copy link

Aki92-Xavier commented Oct 5, 2021

こんにちわ、現在moveitを用いてXarm6の動作計画をしようとしているのですが
チュートリアルを参考にXarm用に書き換えてみました。
まず、xarm_rosのパッケージより
roslaunch xarm6_moveit_config demo.launch を起動後
書き換えたスクリプトを起動させましたが下記のようなエラーが出てしまいました。
Screenshot from 2021-10-05 17-31-06

何か解決策はあるでしょうか、またマニピュレータをlaunchする場合には何か指定などあるでしょうか。

参考チュートリアル:
https://rtmros-nextage.readthedocs.io/en/latest/manual_ja_tutorial_moveit-python.html#rtm-ros-bridge

書き換えたスクリプトは以下になります。
test.txt

@y-yosuke
Copy link
Member

y-yosuke commented Oct 5, 2021

コンソールの warning や error,スクリプトを見る限り姿勢のクオータニオンがすべて 0 が代入されていることが原因のように思います.クオータニオンは長さ1の4次元の数ですので,すべて 0 ですと姿勢が定義できずにエラーになります.

この原因の場合の解決策としては次の2つの方法が考えられます.

  1. クオータニオンに正しい値を代入して姿勢を指定する
  2. 姿勢の指定に ロール・ピッチ・ヨー の各角度を指定する

@Aki92-Xavier
Copy link
Author

ご返信ありがとうございます。 @y-yosuke さんがおっしゃる通りにクオータニオン、ロール・ピッチ・ヨーを適当な数値を指定することにより解を見つけることができたがrviz上では一瞬だけ残像のそうにアームが動作したことが確認できました。
その後下記のようなエラーを吐き、ターゲットポーズには行くことができませんでした。
Screenshot from 2021-10-05 18-56-18

@y-yosuke
Copy link
Member

y-yosuke commented Oct 5, 2021

見えている範囲のエラーはマニピュレータの「コントローラがない」と言っていて xarm は私は使ったことがないのでどれほどのことが分かるか分かりませんが,下記の点を確認願います.

  • MoveIt の GUI でインタラクティブマーカーをマウス等で動かした場合の目標姿勢に動くことができるか?
  • 制御対象は Gazebo シミュレータか実機か?
    • Gazebo シミュレータでは動作するが実機では動作しないということか?
  • 画面に出ているエラーだけではなく,起動直後からの全てのコンソール出力を Issue に貼付
  • Ubuntu と ROS のバージョン

@Aki92-Xavier
Copy link
Author

少し時間が空いてしまい申し訳ありません。 @y-yosuke さんが指摘くださった点を一つづ確認していき、いろいろと試したところGazebo、実機ともにうまく動作できるようになりました。ありがとうございました。原因としてコントローラーに接続できていなかった状態で実行したことによりエラーが発生したと推定しています。

また現在、少しわからない部分としてマニピュレータに送る関数としてset_pose_targetを用いているのですが
https://github.com/ros-planning/moveit/blob/b9a1e8e648b674e71e23c5f230467e98d70f24fa/moveit_commander/src/moveit_commander/move_group.py#L263

""" Set the pose of the end-effector, if one is available. The expected input is a Pose message, a PoseStamped message or a list of 6 floats:"""
""" [x, y, z, rot_x, rot_y, rot_z] or a list of 7 floats [x, y, z, qx, qy, qz, qw] """

上記のリンクのコメントにて
-位置座標と Roll/Pitch/Yaw 姿勢角の6つの数値のリスト [x, y, z, rot_x, rot_y, rot_z]
-位置座標とクォータニオンの7つの数値のリスト [x, y, z, qx, qy, qz, qw]
のどちらかを使えるらしいのですが変える条件がわからずクォータニオンの方を使っています。

もしおわかりでしたら教えていただけると幸いです。

※おそらく、これを使うと私は考えているのですがこの関数を入れた際にエラーが出るので使い方がよく理解できていません。
https://github.com/ros-planning/moveit/blob/b9a1e8e648b674e71e23c5f230467e98d70f24fa/moveit_commander/src/moveit_commander/move_group.py#L290

@y-yosuke
Copy link
Member

y-yosuke commented Oct 7, 2021

うまく動作するようになって何よりです.

set_pose_target() は多態定義されているので引数に応じたメソッド定義が利用されるので,X・Y・Z 位置とロール・ピッチ・ヨー角(単位=ラジアン)を格納した配列 [x, y, z, rot_x, rot_y, rot_z] を Pose 型で引数を渡す代わりに引数として渡せば呼び出された set_pose_target() 側で勝手に条件判断されて引数に対応した適切な set_pose_target() が実行されると思います.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants