[ODE] Inverse Dynamics in ODE -- does it take more computation thanjust pure forward dynamics?

Joe Ante joe at otee.dk
Fri Sep 24 01:29:34 MST 2004


> The problem is probably that, when you specify a joint limit, the code that
> accepts the joint limits will not allow you to set a constraint that is
> internally inconsistent. It sounds crazy, but if you just run the low
> constraint-setting code twice per step, it'll work.
> 
> For example:
> 
> Current Low = 3
> Current High = 4
> 
> Desired Low = 5
> Desired High = 6
> 
> Set Low Limit to 5 -> current high is 4; set call is silently rejected
> Set High Limit to 6 -> current low is 3; set call is accepted
> Set Low Limit to 5 -> current high is 6; set call is accepted
> 
> 
> Personally, I'd be happy if we just removed the self-violating constraint
> checks in the setting, and instead asserted on the consistency of the joints
> when time came to step the world (in debug mode). This is one of those gotchas
> that seem to hit people all the time and gives out an unnecessary image of ODE
> as hard to use (or, worse, not very stable).
I totally agree that this is a pain.
We could also simply make sure that the low limit is always smaller than the
high limit.

Like this (Joint.cpp line 404):
  case dParamLoStop:
    lostop = value; if (histop < lostop) histop = lostop;
    break;
  case dParamHiStop:
      histop = value; if (histop < lostop) lostop = histop;
    break;

Joachim Ante




More information about the ODE mailing list