[ODE] Generic Rotational Limits on B&S Joints

parisy at labri.fr parisy at labri.fr
Sun May 30 13:43:57 MST 2004


Hi all,

as you well know, ball and socket joints rotations are not
constrained by default in ODE. This can be done using an
AMotor, but limits must then be expressed using Euler angles
or along a set of user-defined axis.

I would be interested in a more generic approach which would
enable the use of complex rotation constraints such as those
based on Gauss maps or swing/twist parameterization.

Those can be expressed as a function returning the "closest"
valid orientation from the current one if it is invalid.

Generally speaking, those functions can't be expressed
analytically, so a derivation of proper J and \Omega matrices
as in the "new joints" tutorial doesn't seem possible. I could
perhaps directly compute a return force based on the current
invalid orientation and the closest valid orientation, but the
documentation (section "Stop and Motor Parameters") goes
strongly against this.

So, I see three valid approaches :

- Fiddling with the c and C parameters of a ball and socket
  joint to express additionnal rotational constraints ; but
  can this be done with non-analytical constraints ?

- Writing a new AMotor class taking into account an external
  rotational constraint function. I think this is the best way,
  but I have no clue on how AMotors are written, excepted the
  documentation stating they are expressed as constraints.
  Could someone give me more details about this ? And will I
  meet the same problems as with the first approach ?

- If both previous solutions prove impossible, using the
  functions described in section "Setting Joint Torques/Forces
  Directly" to inject a proper torque when needed. What should
  I then take into account to get as stable a simulation as
  possible ?

Of course, I would be more than happy to contribute this
code back to the community if it proves effective.

Best regards,
Olivier Parisy.

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.


More information about the ODE mailing list