[ODE] three-body joints

Graham Fyffe happy at happy-digital.com
Fri Sep 10 08:58:58 MST 2004


The differential is a joint between the drive shaft, and the two axels
that go to the wheels.  Actually, since some angular momentum is
transferred to the chassis as well, I guess it has to be a 4-body joint.
 I do actually model the drive shaft, and flywheel, which are joined
with a clutch.  The part that isn't modeled is the engine that applies
torques to the flywheel.  But everything else is quite important because
they have significant momentum.  If I simply apply the differential
myself to the ODE bodies between worldSteps, the result is pretty bad,
especially once tire forces, clutch frictions, engine braking, brakes,
and other forces start acting on it.  This approach of letting things
get out of synch by one step, then re-synching them, fails miserably in
the presence of inequality constraints like friction :(

For now, what I did, is I pulled out the whole inside of the car, and I
model it myself instead of in ODE.  This simplifies the equations and I
can solve them numerically, and then tie the solutions to the ODE
wheels.  This only lags behind one step at the wheel-terrain contact
(instead of multiple places in the system) so it seems to be working
acceptably.  But it was a lot of work, and it would be nice if I could
have just typed in the equations as some kind of ODE constraints.  That
would be cool.. a general n-body "constraint" joint :)

It might in theory be possible to use only 2-body joints by modeling the
gears in the differential as trimeshes, but that's going to be a whole
can of worms.  I can't see that being at all practical.  Anyway, no
rush, my current system is acceptable for now :)  ODE still rocks for
the suspension model :)

- Graham Fyffe
president, Happy Digital



> If it's only about the differential, you should probably implement it as a
> two body joint. As I understand it, the third body here (motor) is not
> really a body in a usual simulation. I mean, you don't actually model the
> engine, transmission, etc. directly with bodies and joints, do you? ;)
Or do
> you need differential joint for something other than powering a car?
> 
> Alen
> 
> ----- Original Message -----
> From: "Gary R. Van Sickle" <g.r.vansickle at worldnet.att.net>
> To: <ode at q12.org>
> Sent: Friday, September 10, 2004 01:49
> Subject: RE: [ODE] three-body joints
> 
> 
> > > Hi everybody.  I'm wondering, what are the design issues that
> > > caused Russ to implement only two-body joints?  It seems to
> > > me that, from the point of view of the "big matrix", it's
> > > just as easy to implement n-body joints.  For example, the
> > > differentials used in cars can only be implemented as 3-body
> > > joints.  No combination of 2-body joints will do.
> >
> > Really?  I'm having a hard time coming up with a reason why; can you
> explain
> > further (or point me to a links)?
> >
> > >  The equations for a differential are in the form e.g. c1 wA + c2 wB +
> > > c3 wC = 0, for bodies A, B, C.  What would it take to add
> > > n-body joint support?
> >
> > Somebody to code it up and maintain it.  I can't speak for Russ, but I'm
> > sure if it fit in well and was truly useful it would have a pretty fair
> > chance of at least getting into "contrib".
> >
> > --
> > Gary R. Van Sickle



More information about the ODE mailing list