[ODE] Failed assertions in LCP solver

Roger Luethi rl at hellgate.ch
Sun Jan 13 08:16:02 2002


I have been working with angular motors for a while now. My simulations
tend to run stable anywhere from seconds to minutes, but they always
explode at some point.

I have an app here which triggers the problem within less than 10
seconds. I am somewhat afraid though that by trying to make it happen
quick and reproducibly I might have introduced a new bug.

I found that increasing the number of dContacts supplied to dCollide()
can improve stability under some circumstances (I still wonder why the
parameter which contains that number is called "flags" in the function,
though).

Increasing the global CFM as suggested in the documentation had an
additional positive affect on overall stability.

I also try to avoid singularities by not allowing joined objects to
collide.

Angles as reported by dJointGetAMotorAngle are all < PI/2 prior to the
event.

And yet, there is still at least one problem left where the LCP lambda
jumps from unsuspicous values close to 0 to something beyond 10^50 in
one step.

ODE tells me that in the very same step the assertion "p[k] >= 0 && p[k]
< i" failed in checkPermutations() [ode/src/lcp.cpp].

Is there something else crucial to stability that I overlooked? Does the
failed assertion give a hint on where the instability is coming from?

roger