[ODE] dJointGetHinge2Angle2

LR logreg at free.fr
Fri May 4 07:17:12 MST 2007

Great idea, i've made the folowing modifications:

1] In joint.cpp,

dReal dJointGetHinge2Angle2 (dJointID j)
  dxJointHinge2* joint = (dxJointHinge2*)j;
  dUASSERT(joint->vtable == &__dhinge2_vtable,"joint is not a hinge2");
  if (joint->node[0].body) {
    dReal ang = getHingeAngle
	if (joint->flags & dJOINT_REVERSE)
	   return -ang;
	   return ang;
  else return 0;

static void hinge2ComputeInitialRelativeRotation (dxJointHinge2 *joint)
  if (joint->node[0].body) {
    if (joint->node[1].body) {
    else {
      // set joint->qrel to the transpose of the first body q
      joint->qrel[0] = joint->node[0].body->q[0];
      for (int i=1; i<4; i++) joint->qrel[i] = -joint->node[0].body->q[i];

** IN static void makeHinge2V1andV2 (dxJointHinge2 *joint),
Added hinge2ComputeInitialRelativeRotation(joint); at the end of the IF()

2] In ojects.h

ODE_API dReal dJointGetHinge2Angle2 (dJointID);

3] In Joint.h
** ADDED dQuaternion qrel;	at the end of struct dxJointHinge2 : public
dxJoint structure

It seems to work fine in my simulation but ... It may be checked by someone
who know how to add to vectors :))


-----Message d'origine-----
De : ode-bounces at ode.org [mailto:ode-bounces at ode.org] De la part de Remi
Envoyé : jeudi 3 mai 2007 16:47
À : ODE Mailing List (E-mail)
Objet : Re: [ODE] dJointGetHinge2Angle2


 > In the hinge2 code we can see:
 > static dReal measureHinge2Angle (dxJointHinge2 *joint)  > {
 >   dVector3 a1,a2;
 >   dMULTIPLY0_331 (a1,joint->node[1].body->posr.R,joint->axis2);
 >   dMULTIPLY1_331 (a2,joint->node[0].body->posr.R,a1);
 >   dReal x = dDOT(joint->v1,a2);
 >   dReal y = dDOT(joint->v2,a2);
 >   return -dAtan2 (y,x);
 > }
 > This code is called to know the vertical axis angle. Does someone know
how to get the angle of the horizontal axis ?
 > I saw in the archive mails that it is a recurent question ... then if
someone know how to do it will help a lot of ode users :)

I took a look in the code and there is no information of the relative
orientation of Body1 and Body2 along the horizontal axis.

Other joint have a Quaternion (qrel) to keep the initial difference in
orientation but the Hinge2 uses 2 vectors to help retrieve the vertical

If you replace those 2 vectors by a qrel you should be able to find both

You can look at the Universal joint to implement the code.

ODE mailing list
ODE at ode.org

More information about the ODE mailing list