Physics Model

Here is a description of the model of traction force and skidding, etc.,  that is implemented in move_car() (CARZ.CPP). Note that "P" is used here for a vector, not for power. Also note that we use "F" for a vector here and "f" for its magnitude. In the computer program F was used for the magnitude. (There are no vectors directly represented in the program.)

We begin by erecting an x-y coordinate system with the positive x axis along the car's velocity vector, and the y axis to the driver's approximate left.

Let:

 
V = car's velocity vector, given
P = car's pointing vector, unit vector in direction car is pointing
  (these two are separated by the angle alpha, given)
W = velocity vector of tire bottom surface wrt car
  = -P * vc   ( where "vc" is "velocity commanded", given )
L = slip vector, velocity of tire bottom wrt track surface.
F = force vector pushing the car; this is in direction opposite to L.
Ft = x-component of F (t for tangential to path)
Fn = y-component of F (n for normal to path)
Lt = x-component of L
Ln = y-component of L

vectors.gif

A fundamental vector relation is:
L = V + W
Which just says that the tire velocity wrt track is the tire velocity
wrt car plus the car velocity wrt track. By simple substitution,
this becomes:
L = V - vc * P
Since the components of P and V are known, we can write:
Lt = v - vc * cosine(alpha);
Ln = - vc * sine(alpha)
We will use lowercase letters for magnitudes of the vectors,
so the sliding speed of the tire is "l", and the force is "f". The
force is determined by the friction model. We assume that this
force depends only on l, the slip speed.

f = u(l) where u(l) is the friction function, given. hence:

F = - u(l) * L / l
Because the F and L vectors are parallel, the components of F are
in the same proportion as the components of L. Hence:
Ft = -f * Lt/l
Fn = -f * Ln/l
The power consumed "pwr" is equal to the component of F parallel
to P, times vc. We compute this by treating the normal and
tangential components of F as two separate forces. The tangential
component of force has the angle alpha wrt the P vector, hence its
contribution to the power is Ft * cosine(alpha). The normal
component, being at right angles to the tangential component, has
contribution Fn * sine(alpha). This gives us:
pwr = vc * (Ft * cosine(alpha) + Fn * sine(alpha))
That is the procedure currently used to calculate the force vector
and the power consumption. It would be convenient if there was a
practical way to start with power or force as a given, and compute vc
and the force and slip vectors; unfortunately the only known
solution, due to Matt Timmermans, required solution of a fourth order
polynomial equation. I actually implemented a search procedure to
find vc when power is given, because the solution sent by Matt was
extremely complicated. (So is the search procedure, but it was
already available as a C function, needing relatively minor changes.)

The friction function currently used is of the form:

u(l) = FMAX * l / (K + l)
where FMAX and K are given constants.


testfric.gif (2138 octets)



Any function that rises steeply from the origin and then levels out
and approaches a maximum might be used. It might be piecewise linear
with only two or three pieces, for example.

In order to have a model that more accurately simulates the real
world, especially paved surfaces, it will be necessary for the
traction force function to depend on more than just the slip speed,
I believe.

m