# How does Gazebo compute the friction between two surfaces?

The friction is defined for a pair of surfaces. For example the rubber on asphalt. In Gazebo, however, we define a parameter 'friction' is set for each link. So suppose there is an object with surface friction mu set to 0.5 put on a ground with a friction coefficient mu set to 0.9. What friction coefficient will be used to compute the force?

EDIT 1

I have made some experiments. I took several surfaces, put an unit box of mass 1 kg on them and applied force to the box.

The boxes mu was 1.0, the surfaces mu was

1.0, 0.8 and 0.6.


The force that moved the box was much smaller than what would the F_f = mu*F_N imply.

The box applies the normal force F_N = mg = 19.8 = 9.8 N to the ground. Therefor the minimum force required to move the box on corresponding surface (if we take the mu of the surface as the final mu), should be

9.8, 7.8 and 5.8 N


respectively. But the minimum force which is sufficient to move the box at least tiny bit was

7.0, 6.2 and 3.8 N.


I was using the physics setting

• step size 0.001
• solver type world
• 100 iters

So it seems like neither of the set friction coefficients are used. So how does this work?

EDIT 2

I tried again with a box of 10 kg. Now the force needed to slide the box was higher than what computation would suggest.

EDIT 3

After I increased the solver iters and cfm the friciton on the 10 kg unit box started to act real. I have also noticed that gazebo simply takes the lower of the two surfaces mu to compute friction.

edit retag close merge delete

Sort by » oldest newest most voted

If the physics parameters are well set and contacts are reliable (cfm, iters, object mass), then the friction Gazebo uses is the static coulomb friction of force

F_f = F_N *mu

where F_N is the normal force the object pushes on the ground and mu is the lower of the mu of the both interacting surfaces. F_f is the force needed to overcome the friction and make object slide over the surface.

more