Prismatic Joint does not stay in position, unable to control it.

asked 2020-05-24 02:47:55 -0600

Shrutheesh R Iyer gravatar image

Hello. I am trying to simulate a robotic arm with a gripper attached to it. The gripper is a parallel jaw with two prismatic joints for each finger. I am referring to this repository, however I have made a few changes. For the gripper, I do not want to use moveit! and hence I have written an JointEffortController for the gripper. (If anyone is interested, the gripper description is inside motoman_robot/motoman_description/urdf/tool/ folder in the repository.)


Here is the setup . As you can see, the gripper fingers are close together. However, when I move the arm (Not the gripper fingers to a different location, the prismatic joint seems to move as well). The palm of the gripper is attached to a link on the arm, that can make it rotate about its axis. Hence, the palm rotation is controlled by the arm, and not by the gripper.


As is visible, the prismatic joints have been largely displaced from what should be their initial position. What can I do to correct this, and make them stay in place.

Here are all the things that I have tried.

  1. The effort limit here by default is 2. When I queried the joint_states when the robot is in the second image state, the effort values for the gripper fingers are at max limit. (2.0 and -2.0). When I increase the effort limit to 20, I can see that the joint state values become something like (13 and -14). Yet, when I give a command to the controller to put an effort of 20 or -20, the joints do not move at all.
  2. Increased the friction of the gripper finger joint from 1.0 to 5.0. When I do this, the fingers seem to stay in position, however, any amount of effort does not make the fingers move at all, hence the gripper fingers become useless. Along with increasing the friction, if I increase the effort limit from 2 to a larger value, in order to control the prismatic joint with larger effort, the fingers again seem to slip back to the 2nd image shown here.
  3. The default PID values given by the repository were {p: 2000.0, d: 1.0}. I have tried playing around with this as well, giving different p, i, and d values, however, the joints again seem to go to the position in the second image.

Is there any way to solve this issue?


edit retag flag offensive close merge delete


Try to play around with the inertials of the gripper links. It looks like some default values are used that do not correspond to the actual gripper.

nlamprian gravatar imagenlamprian ( 2020-05-25 02:51:19 -0600 )edit

Do you have some pointers on what values I can begin with, and what range I must conform to? I tried computing the inertial matrix using meshlab by uploading the dae file, however, meshlab gives all elements as 0, since the fingers are very small. My default inertia values are 0.01, 0.01, 0.01 across the diagonal.

Shrutheesh R Iyer gravatar imageShrutheesh R Iyer ( 2020-05-25 03:18:37 -0600 )edit

Usually, when I have trouble with inertias, I get the bounding box of a link from meshlab, and then I compute a box inertia for a given mass. This gives you a simplified inertia that could correspond to the actual link.

nlamprian gravatar imagenlamprian ( 2020-05-25 03:58:42 -0600 )edit

I have a similar issue with prismatic joints moving when moving other links. Were you able to solve it?

HJaiswal gravatar imageHJaiswal ( 2020-07-29 07:45:06 -0600 )edit