[ODE] Bug in dxQuickStepper ?

Marco Grubert mgrubert at conitec.net
Wed Mar 16 20:25:15 MST 2005


Okay, it looks like the problem has to do with a joint not always reporting 
the right number of rows to allocate in the Jacobian.
The dxJointLimitMotor::limit flag is only updated when 
testRotationalLimits() gets called. For hinge, hinge2 & universal joints 
this only happens when the limits are within +/- PI, lo<=hi, etc. Setting 
lostop/histop to say -90deg/+90deg will cause testRotationalLimit to be 
called and limit might get set to 1 or 2.
Now in the next frame when setting the stops to 0/+270 or -inf/+inf 
dxJointLimitMotor::limit will not be reset causing an additional row to be 
inserted by addLimot that was not anticipated by hingeGetInfo1() resulting 
in a stack overwrite.

So... what's the best way to fix this ?
What is the preferred way of disabling limits ?
Why is there a +/- PI restriction on the angles ? Aren't they supposed to be 
relative to starting angle ? What if I want a joint to only go in one 
direction but more than 180 degrees?

- Marco Grubert 



More information about the ODE mailing list