[ODE] iterative solver: testing needed

david@csworkbench.com david at csworkbench.com
Fri Mar 28 07:34:01 2003


Well guys, I need some help finding out why my car is spinning when it
stops in the iterative solver, so I'm releasing it for y'all to play with.
 If you can help me define exactly what causes it, maybe I can track down
my bug.  I think it has something to do with the contact constraint, but
I've tried all kinds of friction and slip parameters with both the LCP and
my simpler solver (there's a define at the top of stepfast.cpp --
FAST_FACTOR or SLOW_LCP).  And I just can't seem to find anything that
makes it not spin (intuitively, the last thing I changed is what would
have caused it....)  So y'all give it a whirl and throw some ideas at me.

http://www.csworkbench.com/stepfast.zip

Place that in the ode directory and extract it.  It will replace your
Makefile, Makefile.deps, and ode/include/objects.h files, as well as
placing the stepfast.h/cpp in the ode/src directory.  Then running make
should compile it in.  I've also put the test file I've been using
(test_crash.cpp) in the ode/test directory.  You'll notice lots of defines
at the top.  You can change ROWS and COLS to a higher number to make the
army of cars, and uncomment #define WALL to add the box wall to the
simulation.  ITERS is the number of iterations per step.  You can press
'f' during the simulation to switch back and forth between the iterative
solver and the old solver.  The green/red ball in the sky tells you which
one you're using currently (green=iterative, red=old).

So, play around with it, see if you can help me find my bug.  (Or just
play around with it :)  I'll continue testing and work on some
documentation.  If you want to use the iterative solver in a current
program of yours, just change:
dWorldStep(world, timestep);
to
dWorldStepFast(world, timestep, iterations);
5 seems to be a generally good start for the number of iterations in the
tests I've run.  But more complex systems may need a higher number.

Thanks for the help,
David Whittaker