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.