Gazebo | Ignition | Community
Ask Your Question
3

Friction in the gripper not working, objects slipping

asked 2019-04-02 06:08:50 -0600

nzlz gravatar image

Hi everyone,

I am sorry I have to post a new "gripper slipping objects" kind of issue, but I can't manage to solve this problem. The issue I have is that objects are slipping from the gripper, meaning the friction is not applied correctly.

image description

The code of the plugin is available in here.

The urdf I'm using is not the one available in that package, but the one of the full MARA robot with the gripper, this one.

I can push the code I'm using to test this somewhere is someone is willing to test it using my same approach.

The plugin uses a custom interpolation and updates grippers position in gazebo via SetPositionTarget(..) from a JointController. We also use pid values and update them using the SetPositionPID(..) whenever a service call is received (with the goal pose of the gripper). I tried to update on every gazebo connection update event without any improvement.

The goal is that the 2 (left and right) inner fingers grab things, so the following changes are mostly related to those 2 links. Things I tried without any improvement.

  1. Add dynamics tag to the urdf in grippers joints. Adding friction and damping, also trying to tune values.
  2. Add mu1 and mu2 contact coefficients via gazebo tag in the urdf, and directly under the link element (surface not recognized if done this way.)
  3. Increase the force applied by the 2 joints, which is calculated automatically using the position pid controller. Objects still slipping.
  4. Improved inertias in both fingers so that using the gzclient's inertia visualization tool I see a pink box slightly covering the finger (link).
  5. Added friction or increased it to the element I want to grab, setting mus to even super high values like 100000.
  6. ODE and Bullet, none working.
  7. Tried tuning physics parameters, won't go into much details here, basically I tried everything I could think of.

My last bet is that there is a problem with the contacts, which are not enough. Could this be the big issue? Maybe we need to replace our contact mesh for the fingers with a simple box? In the image above you can see how only the upper part of the box is being highlighted as a contact. contacts gif


If nothing works I could try to attach the finger link to the contacting object via plugin, and break the parent-child relation when the object is released. Obviously this is a complete mess and should not be done this way..

Any kind of advice is much appreciated.

Nestor

edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted
1

answered 2019-04-09 14:31:27 -0600

updated 2019-04-09 14:35:47 -0600

A couple suggestions:

  1. This problem may be caused by the PositionJointInterface (See this Gazebo Answer).
    What happens if you use an EffortJointInterface for the grippers?
  2. Try giving your gripper contact links a small <minDepth> value of say 0.002-0.003 and a <maxVel> value of 0. This may provide more consistent contact between the gripper links and the object being grasped.

<gazebo reference="GRIPPER_LINK_NAME">  
   <minDepth>0.003</minDepth>  
   <maxVel>0</maxVel>  
 </gazebo>
edit flag offensive delete link more
0

answered 2021-02-03 13:12:30 -0600

I was experiencing the same issue and after trying many things (changing joint controller types, increasing mu values, decreasing slip, decreasing minDepth, modifying the physics properties of the block that my robot was grasping etc.), What ended up solving this problem for me was to specify the kp and kd values for the gripper fingers and to increase the kd value until the block stopped slipping out of the robot's grasp. Below is the example section from my robot's urdf file (using the LoCoBot Gazebo package):

<gazebo reference="finger_r">
    <mu1>1000</mu1>
    <mu2>1000</mu2>
    <kp>1000000.0</kp>
    <kd>100000.0</kd>
    <slip1>0</slip1>
    <slip2>0</slip2>
    <minDepth>0.001</minDepth>
    <maxVel>0</maxVel>
    <torsional>
        <ode>
            <coefficient>1000</coefficient>
            <slip>0</slip>
        </ode>
    </torsional>

</gazebo>

<gazebo reference="finger_l">
    <mu1>1000</mu1>
    <mu2>1000</mu2>
    <kp>1000000.0</kp>
    <kd>100000.0</kd>
    <slip1>0</slip1>
    <slip2>0</slip2>
    <minDepth>0.001</minDepth>
    <maxVel>0</maxVel>
    <torsional>
        <ode>
            <coefficient>1000</coefficient>
            <slip>0</slip>
        </ode>
    </torsional>
</gazebo>

You might have to experiment with these values a bit, but I hope this is helpful to anyone who is having this same issue!

edit flag offensive delete link more
0

answered 2021-01-15 13:52:28 -0600

H. Ayoobi gravatar image

updated 2021-01-18 05:32:31 -0600

I had the same problem and tried different physics engine parameters and none of the approaches worked properly for me. I have changed the interia, PID gains, frictions, maxVel, minDepth and none of them worked properly for me. I also didn't want to use EffortJointInterface. Therefore, I decided to not waste more time on having a realistic grasp in gazebo simulator (of course you can have a realistic grasp in a real robot using this approach). Instead, I have used the following approach.

  • When the gripper fingers are closed enough to hold the object, you can attach the object's link, and the finger tips link with a fixed joint dynamically. As an example, you can use this package for your purpose. This way there is no need for changing the JointInterface or controller type. In order to have a more realistic grasp, you can also use the contact_points published by the gazebo.
edit flag offensive delete link more

Question Tools

5 followers

Stats

Asked: 2019-04-02 06:08:50 -0600

Seen: 5,751 times

Last updated: Feb 03 '21