[ODE] dJointGetHinge2Angle2

LR logreg at free.fr
Thu May 10 07:15:01 MST 2007


Hi,

I've made some tests using the universal method to compute hinge2 axis 2
angle ... It seems to work.
If you know some hard cases to test you can download the lastest update of
my simulator www.marilou-roboticsstudio.com/downloads and stress the hinge 2
joint ...

If all is ok, i will send you a zip of the modified files.


LR

 

-----Message d'origine-----
De : Remi Ricard [mailto:remi.ricard at simlog.com] 
Envoyé : vendredi 4 mai 2007 16:27
À : LR; ODE Mailing List (E-mail)
Objet : Re: [ODE] dJointGetHinge2Angle2

Hi,

I will take a look and make some test.

Remi
> Great idea, i've made the folowing modifications:
>
>
> 1] In joint.cpp,
>
> ** ADDED:
> dReal dJointGetHinge2Angle2 (dJointID j) {
>   dxJointHinge2* joint = (dxJointHinge2*)j;
>   dAASSERT(joint);
>   dUASSERT(joint->vtable == &__dhinge2_vtable,"joint is not a hinge2");
>   if (joint->node[0].body) {
>     dReal ang = getHingeAngle
> (joint->node[0].body,joint->node[1].body,joint->axis1,
> 			  joint->qrel);
> 	if (joint->flags & dJOINT_REVERSE)
> 	   return -ang;
> 	else
> 	   return ang;
>   }
>   else return 0;
> }
>
> ** ADDED
> static void hinge2ComputeInitialRelativeRotation (dxJointHinge2 
> *joint) {
>   if (joint->node[0].body) {
>     if (joint->node[1].body) {
>       dQMultiply1
> (joint->qrel,joint->node[0].body->q,joint->node[1].body->q);
>     }
>     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() 
> code
>
>
> 2] In ojects.h
>
> ** ADDED
> 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 :))
>
> LR
>
> -----Message d'origine-----
> De : ode-bounces at ode.org [mailto:ode-bounces at ode.org] De la part de 
> Remi Ricard Envoyé : jeudi 3 mai 2007 16:47 À : ODE Mailing List 
> (E-mail) Objet : Re: [ODE] dJointGetHinge2Angle2
>
> Hi,
>
>  > 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 angle.
>
> If you replace those 2 vectors by a qrel you should be able to find 
> both angles.
>
> You can look at the Universal joint to implement the code.
>
> Remi
> _______________________________________________
> ODE mailing list
> ODE at ode.org
> http://ode.org/mailman/listinfo/ode
>
>
>
>
>   







More information about the ODE mailing list