I think my equations are still OK. These three equations produce
values for ph,th, and ps that, when plugged into the big equation
for T, give the attitude matrix that was measured. Hence, these
angles are a correct description of the motion that was measured.
The problem that Young-Hoo mentions is related to uniqueness.
By using the sqrt() function when computing theta, I restrict
theta to a range between -90 and +90 degrees (since the second argument
of ATAN2 is positive). This 180 degree range for the second rotation
is a common convention for cardanic angles, this is needed to obtain unique
angles. If theta is not restricted like this, there would be two
sets of angles that produce the same attitude matrix, which is essentially
the problem described by Young-Hoo.
Once it is understood that theta is always between -90 and +90 degrees,
there is no longer a problem.
Ton van den Bogert
"Young-Hoo Kwon, Ph.D." wrote:
>
> Dear Ton and all,
>
> I'd like to point out a mistake in your summary.
>
> > As in Kwon3D, we label these matrix elements as t11, t12, t13, etc.
> > Using such an attitude matrix, obtained from measurements, the joint
> > angles can be easily extracted as follows:
> >
> > ph = atan2(-t32,t33)
> > th = atan2(t31,sqrt(t32*t32+t33*t33))
> > ps = atan2(-t21,t11)
> > (..sqrt is the square root function)
> >
>
> ph = atan2(-t32,t33)
>
> is not right because
>
> atan2(-t32,t33) = atan2(sin(ph)cos(th),cos(ph)cos(th))
>
> is not equivalent to
>
> atan2(sin(ph),cos(ph)).
>
> It depends on the sign of cos(th). If this is negative, you will have
>
> atan2(-sin(ph),-cos(ph))
>
> instead. Likewise,
>
> atan2(t31,sqrt(t32*t32+t33*t33)) = atan2(sin(th),sqrt(cos(th)^2))
>
> is not equivalent to
>
> atan2(sin(th),cos(th))
>
> because sqrt(a2) can be either +a or -a, etc.
>
> I agree that the use of ATAN2 is relatively more convenient. I have used FORTRAN, QuickBASIC, C, C++, and now Visual C++. The function has evolved accordingly and atan
> 2 was forgotten in the process somehow. I will update my function using atan2. (^_^)
>
> Young-Hoo Kwon
---------------------------------------------------------------
To unsubscribe send SIGNOFF BIOMCH-L to LISTSERV@nic.surfnet.nl
For information and archives: http://isb.ri.ccf.org/biomch-l
---------------------------------------------------------------
values for ph,th, and ps that, when plugged into the big equation
for T, give the attitude matrix that was measured. Hence, these
angles are a correct description of the motion that was measured.
The problem that Young-Hoo mentions is related to uniqueness.
By using the sqrt() function when computing theta, I restrict
theta to a range between -90 and +90 degrees (since the second argument
of ATAN2 is positive). This 180 degree range for the second rotation
is a common convention for cardanic angles, this is needed to obtain unique
angles. If theta is not restricted like this, there would be two
sets of angles that produce the same attitude matrix, which is essentially
the problem described by Young-Hoo.
Once it is understood that theta is always between -90 and +90 degrees,
there is no longer a problem.
Ton van den Bogert
"Young-Hoo Kwon, Ph.D." wrote:
>
> Dear Ton and all,
>
> I'd like to point out a mistake in your summary.
>
> > As in Kwon3D, we label these matrix elements as t11, t12, t13, etc.
> > Using such an attitude matrix, obtained from measurements, the joint
> > angles can be easily extracted as follows:
> >
> > ph = atan2(-t32,t33)
> > th = atan2(t31,sqrt(t32*t32+t33*t33))
> > ps = atan2(-t21,t11)
> > (..sqrt is the square root function)
> >
>
> ph = atan2(-t32,t33)
>
> is not right because
>
> atan2(-t32,t33) = atan2(sin(ph)cos(th),cos(ph)cos(th))
>
> is not equivalent to
>
> atan2(sin(ph),cos(ph)).
>
> It depends on the sign of cos(th). If this is negative, you will have
>
> atan2(-sin(ph),-cos(ph))
>
> instead. Likewise,
>
> atan2(t31,sqrt(t32*t32+t33*t33)) = atan2(sin(th),sqrt(cos(th)^2))
>
> is not equivalent to
>
> atan2(sin(th),cos(th))
>
> because sqrt(a2) can be either +a or -a, etc.
>
> I agree that the use of ATAN2 is relatively more convenient. I have used FORTRAN, QuickBASIC, C, C++, and now Visual C++. The function has evolved accordingly and atan
> 2 was forgotten in the process somehow. I will update my function using atan2. (^_^)
>
> Young-Hoo Kwon
---------------------------------------------------------------
To unsubscribe send SIGNOFF BIOMCH-L to LISTSERV@nic.surfnet.nl
For information and archives: http://isb.ri.ccf.org/biomch-l
---------------------------------------------------------------