[ODE] iterative solver: testing needed

david@csworkbench.com david at csworkbench.com
Mon Mar 31 02:39:01 2003


>> I think I left the world ERP at 1 and CFM at 0 in the version I
>> released.  Anyone who is having the stuff disappearing problem, try
>> changing these to 0.8 and 1e-5.
>
> Unfortunately that doesn't fix things.  :(  Tried 1e-3 too in case the
> tiny CFM was getting lost in the single-precision maths.

Hmmmm, can you swap in dWorldStepFast (and add iterations) to test_buggy
and see if it works?

>> As far as the micro-jitter/driving around problem goes, I imagine all
>> code that employs the iterative solver will have it's own way of
>> resolving that through the use of body disabling (which should work
>> now, I'm about to start testing it).
>
> Regarding the disabling working again, great!
>
>  > I'll put an example into test_crash for people to use
>> as a reference point (and see how big a wall I can build then :).  I
>> figure I'll go through after each step and disable all bodies who's
>> velocity components (angular and linear) are all less than .01
>> (probably be tweaked).  Then any time I add power to a joint, if I set
>> the velocity != 0, I'll enable the bodies that are connected to it.
>> Is that pretty much what those who have disabling bodies in their code
>> are doing?
>
> Pretty much. :)
>
> ..
>> blocks or so in that one, even with the iterative solver you'll slow
>> down when the whole thing becomes active at one time.  I'm trying to
>> think of a good way to only activate the part of the wall that would
>> be affected by the collision. My first thoughts are switch from a
>> breadth-first to a depth-first search for the bodies in an island, and
>> limit the number of consecutive disabled bodies you can go through
>> with a new function added to the API.  Say you set the AutoEnableDepth
>> (sound like a decent name?) to 2 (this number should probably be based
>> on the size of a brick relative to what may hit it).  When the car
>> first ran into the wall, a circle of radius 2 blocks would become
>> enabled.  Assuming the car pushed the blocks fast enough, they
>> wouldn't get disabled, and next step the circle would widen to radius
>> 4, and so on until the motion of enabled blocks fell below your
>> disabling threshold.
>
> I think that this could be a nice addition to ODE (to benefit the
> regular worldstep, not just worldstepfast).  Would have to see how
> effective and predictable it would be in practice though.

The only thing that comes up with this is, what to do with joints that
connect an enabled body to a disabled one (previously impossible).  I'm
thinking just treat the disabled body as 0 and connect it to the static
environment.  But I'll have to see how that works out.

> Cheers,
> --Adam
> --
> Adam D. Moss   . ,,^^   adam@gimp.org   http://www.foxbox.org/   co:3
> ... but his bosses didn't like him so they shot him into space.
>
> _______________________________________________
> ODE mailing list
> ODE@q12.org
> http://q12.org/mailman/listinfo/ode