# 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 = m*g = 1*9.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.