Sign in to follow this  
Numsgil

Coulomb friction in a closed form

Recommended Posts

Numsgil    501
I'm working through all the different forces a physics simulation might have, and trying to arrive at a closed form that describes a body's motion (position (r) and velocity (v) at time t) for each one. However, I'm stuck at (coulomb) friction. That familiar Ff = u * Fn Specifically I'm having two problems: 1. I'm working through all these equations as vector functions. Fn and Ff are orthogonal, so I'm pretty certain there's a cross product involved. I think it's something like Fn = F cross n where F is the current force acting on the body and n is the surface normal. But I'm not entirely certain. Plus this would seem to create a loop in the implicit equation (ie: r"(t) := f(r"(t))) 2. Ff is really a maximum force. If the body is at rest, there is no friction force acting on it. But I have no idea how to arrive at the implicit differential equation to represent this. That is, for drag I had this implicit form: r"(t) := -b * r'(t), which I could then solve for y(t), but I don't know how to build the equivalent for friction. So any insights anyone can provide would be appreciated.

Share this post


Link to post
Share on other sites
erissian    727
Do not forget that friction is resistance to motion; this means that the ultimate direction of the frictional force will be in the opposite direction of any motion.

In other words, sneak in an inverted r' normal somewhere.

Share this post


Link to post
Share on other sites
Numsgil    501
Yeah, and it's also limited in some way by the length of r' (it can't cause the object to change direction).

So any idea where to stick that r' term? :)

Share this post


Link to post
Share on other sites
SnotBob    202
Let's see...

N is unit normal vector
F is force on body sans the friction

fn1 = F dot N
fn = max(fn1,0) - magnitude of the normal force toward the surface

ff1 = µ fn
ff = max(ff1, r'/|r'| dot F) - magnitude of the frictional force

Ff = - r'/|r'| ff

Share this post


Link to post
Share on other sites
Numsgil    501
Quote:
Original post by SnotBob
Let's see...

N is unit normal vector
F is force on body sans the friction

fn1 = F dot N
fn = max(fn1,0) - magnitude of the normal force toward the surface

ff1 = µ fn
ff = max(ff1, r'/|r'| dot F) - magnitude of the frictional force

Ff = - r'/|r'| ff


Hmm... closer I think. But the ff term doesn't take in to account the case where the body is already in motion, and the friction force can possibly overcome not only F but the initial velocity as well. Also, you're pointing the friction force along the velocity vector, but it's really pointing along the tangent (perp to normal) vector. So maybe something like...

T is the unit tangent vector (perp to N)
Rn = (r' dot T) * T
...
ff = -min(-ff1, (Rn/|Rn| dot F) + |Rn|)
Ff = Perp(ff * N) <-- tangent vector

I think that's closer, but not quite there yet.

Share this post


Link to post
Share on other sites
arithma    226
Static friction is more complex than to be modeled as the usual differential equation. Linear Programming is involved..

This subject is tackled by David Barraf a long while ago. For the time being, I don't give a damn about static friction, going with kinetic friction only - you may want more though cuz everything creeps slowly..

Chris Hecker has a little trick with turning kinetic friction into static friction without going outside the impulse based realm.

Share this post


Link to post
Share on other sites
sgb27    122
Ff = u * Fn * V / |V|

Where V is the relative velocity between the two points in contact. Assumption here is that velocity has no component normal to the contact point.

What I usually do in my code is to work out what force (in the V direction) would bring the relative velocity to zero, then limit it to u*Fn. This prevents the body reversing direction during a time step, keeps it at rest if it is at rest, and limits the maximum force to the correct value based on the coefficient of friction.

I don't think you can solve these sorts of things very easily with differential equations, unless you split up the time into periods where the friction force is constant or linear.

Share this post


Link to post
Share on other sites
Numsgil    501
Quote:
Original post by sgb27
Ff = u * Fn * V / |V|

Where V is the relative velocity between the two points in contact. Assumption here is that velocity has no component normal to the contact point.


That's a large assumption! Also your equation scales friction by velocity, which isn't technically kosher. I think you meant something more like:

Ff = min(u * Fn, (V dot T) / |V|) * T (where T is the Tangent vector)

(Arg, except that that equation only works if V dot T is positive... I'll think more on it later.)

But that still does not include the case where a body is initially at rest and a force is applied to accelerate it, but the static friction force prevents motion (since just relating it to velocity means the body has to actually be set in to motion before resistive forces are felt).

Perhaps the static and sliding friction cases need to be handles differently beyond just different coefficients? Two entirely separate equations.

Quote:
Original post by arithma
Static friction is more complex than to be modeled as the usual differential equation. Linear Programming is involved..


I've recently read something like that in Mirtich's thesis. Do you have to use techniques like that, though? Why can't I express it in terms of a ODE? Can I at least closely approximate it with an ODE?

Quote:

This subject is tackled by David Barraf a long while ago. For the time being, I don't give a damn about static friction, going with kinetic friction only


Um, that's nice?

Quote:
you may want more though cuz everything creeps slowly..


Um...?

Quote:

Chris Hecker has a little trick with turning kinetic friction into static friction without going outside the impulse based realm.


Such as...?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this