moveit_tutorials icon indicating copy to clipboard operation
moveit_tutorials copied to clipboard

Setup Assistant Tutorial Questions

Open mcevoyandy opened this issue 7 years ago • 8 comments

Could you add more detail to Section 4: Add Planning Groups and Section 6: Label End Effectors?

Section 6 says end-effectors are special groups that allows special operations to happen on them internally. It would be helpful to elaborate on these special operations or point the reader to more detailed info.

My questions in section 4 stem from this lack of understanding. Following the Move Group tutorial the goal pose is for the wrist_roll_joint so in an actual situation you'd always want to plan to some offset pose. What's the advantage of this versus putting a dummy link in there so you always plan to the gripper "center"?

Is it possible to add a tutorial on gripping so that maybe some of these issues become clear?

mcevoyandy avatar Apr 26 '17 23:04 mcevoyandy

I think there was more intended to be "special" for those groups than was ever implemented. For inverse kinematics, in most locations in the code if no end effector is specified, it will still default to using the last link in a chain to act as a fake end effector. For example, these EE groups are used for choosing where to put the interactive marker in the Rviz plugin.

Using a dummy link within a URDF is sometimes done, but is semantically incorrect - the URDF is intended only to describe the actual geometry and physics of the robot. The SRDF is suppose to contain more "semantic" data such as tooling information.

A tutorial on gripping is sorely needed, somewhat related: https://github.com/ros-planning/moveit/issues/493

davetcoleman avatar Apr 27 '17 05:04 davetcoleman

Yes, the current documentation of the grasping pipeline is not good. Also the pipeline itself has a number of flaws you will see if you look into the implementation, so there is quite a bit of work left to do there.

The EndEffector definition is used in at least three situations:

  • To figure out where to add InteractiveMarkers in the RViz display
  • To connect the planning group of a gripper and the one of the arm holding it, so that you don't always have to specify both
  • To define one unique link for the gripper where grasped objects are attached to and which "mostly" defines the pose of your gripper for grasping. For historical reasons this is the parent_link and in my opinion the name does not justify its usage. But then I'm not sure whether some other code might still use its with the literal meaning in mind.

The last two points might be somewhat entangled in the code to make the move_group behave "in a smart way" when the user requests something without fully specifying the details. The situation could definitely be improved..

My questions in section 4 stem from this lack of understanding. Following the Move Group tutorial the goal pose is for the wrist_roll_joint so in an actual situation you'd always want to plan to some offset pose. What's the advantage of this versus putting a dummy link in there so you always plan to the gripper "center"?

This offset is quite annoying and makes things harder to understand, I agree. Feel free to declare your kinematic chain from base to a virtual link at the center of the end-effector instead. This works and we use this over here in our lab in multiple places.

Also, this is somewhat unrelated to the EndEffector definition: you can define your arm group as chain base_link->arm_tool0->gripper_base->gripper_tool0 and have the planning group of your gripper include gripper_base->gripper_tool0 and still make the end-effector definition of your gripper point to arm as parent_group. The question is what the parent_link should be in this case.

In one of our setups we use gripper_tool0 for that and we do successful grasping with the Pick pipeline with this one. I know there is an offset bug in the place code though, that makes the setup fail to perform placing via the pipeline.

v4hn avatar Apr 27 '17 07:04 v4hn

I attempted Setup Assistant Tutorial followed by the RViz Plugin Tutorial No interactive marker was displayed in RViz and the following error was logged to terminal:

[ INFO] [1508344563.774111009]: Loading robot model 'pr2'...
[ERROR] [1508344563.785211118]: Group 'right_arm' is not a chain
[ERROR] [1508344563.785262245]: Kinematics solver of type 'kdl_kinematics_plugin/KDLKinematicsPlugin' could not be initialized for group 'right_arm'
[ERROR] [1508344563.785979936]: Kinematics solver could not be instantiated for joint group right_arm.
[ INFO] [1508344563.799430428]: Loading robot model 'pr2'...
[ERROR] [1508344563.810831186]: Group 'left_arm' is not a chain
[ERROR] [1508344563.810856901]: Kinematics solver of type 'kdl_kinematics_plugin/KDLKinematicsPlugin' could not be initialized for group 'left_arm'
[ERROR] [1508344563.811354335]: Kinematics solver could not be instantiated for joint group left_arm.

I solved this by modifying MoveIt Setup Assistant Planning Groups for right_arm (and left_arm) to be a chain instead of joints.

right_arm > Chain > r_shoulder_pan_link -> r_wrist_roll_link right_gripper > Links > r_gripper_palm_link -> r_gripper_tool_frame left_arm > Chain > l_shoulder_pan_link -> l_wrist_roll_link left_gripper > Links > l_gripper_palm_link -> l_gripper_tool_frame

Should we update the MoveIt Setup Assistant tutorial docs?

canktech avatar Oct 18 '17 16:10 canktech

Which pr2_moveit_config package did you use? I believe many of the tutorials currently use this version:

https://github.com/davetcoleman/pr2_moveit_config/blob/master/config/pr2.srdf#L16

davetcoleman avatar Oct 18 '17 21:10 davetcoleman

@davetcoleman the one generated by following this tutorial is a bit different from davetcoleman/pr2_moveit_config. One difference, as @canktech mentioned, is arms specified as chain vs. set of joints.

Other minor thing I mistook is no explicit mention of Not selecting a solver for left/right gripper.

Would you suggest modifying the setup_assitant_tutorial that it generates the same config (or atleast similar) that will suppress the errors?

naveedhd avatar Dec 04 '17 13:12 naveedhd

@canktech I experienced the same while creating a MoveIt! config for KUKA IIWA from the kuka_lbr_iiwa_support package. I was following the official MoveIt! Setup Assistant tutorial.

Inspired by your comment, I modified the instructions in Step 4 of the tutorial. While adding my planning groups, I added them using the Add Kin. Chain button instead of the Add Joints or Add Links buttons. This solved the error and interactive markers were displayed correctly.

samarth-robo avatar Dec 29 '18 20:12 samarth-robo

@samarth-robo could you update the tutorial to be clearer around this please? a quick PR would be awesome

davetcoleman avatar Jan 02 '19 04:01 davetcoleman

Hi all, I have a self-made dual arm robot. I did a test on pr2, when I choosing arms, it will show two interactive marker for both arms. But in my case, I don't have any, but if I choose right_arm or left_arm, there will be one interactive marker. This is my srdf, quite similar to the pr2's.

    <group name="left_arm">
        <chain base_link="body_link" tip_link="left_arm_link4" />
    </group>
    <group name="right_arm">
        <chain base_link="body_link" tip_link="right_arm_link4" />
    </group>
    <group name="both_arms">
        <group name="left_arm" />
        <group name="right_arm" />
    </group>

I don't know how pr2 setup arms plan group, it would be very appreciated that someone can help me, thanks!

BR, Peng

thomascp avatar Aug 20 '21 21:08 thomascp