Hi Ton and all,
Ton's argument regarding the problems near the gimbal lock position is
absolutely correct. That is why I initially assign missing values to the
frames in which the arm is at or near the gimbal lock position and then
generate the angles through the interpolation later based on the continuity
of the motion. Assigning the missing values near the gimbal lock position
will increase the chance of discontinuity if the arm motion occurs near the
gimbal lock position. But this problem needs to be addressed regardless of
the range of theta one chooses to use. Limiting theta within +/-90 degrees
does not make the orientation angle data free from these problems. Moreover,
checking the discontinuity by ~180 and/or by ~360 at the same time is not a
difficult task to do.
First of all, the discontinuity by ~360 degrees can be easily treated. Let's
see the following equations:
c(A[i]-A[i-1]) = c(A[i])c(A[i-1]) + s(A[i])s(A[i-1]) [1]
s(A[i]-A[i-1]) = s(A[i])c(A[i-1]) - c(A[i])s(A[i-1]) [2]
where A[i] = the computed orientation angle in frame i (computed already).
If angles A[i] and A[i-1] are available, the cos and sin values of delta A
(= A[i] - A[i-1]) can be obtained. Delta A (-180 to +180 degrees) then can
be determined by using the atan2 function or alternative procedures we have
discussed so far. If (1) the frame rate is reasonable, (2) you don't have
too many consecutive frames missing between frames i and i-1, and (3) there
is no discontinuity by ~180 degrees between frames i and i-1, delta A must
be fairly small, close to 0. Anyway, the corrected A[i] will be
A[1]' = A[1]
A[i]' = A[i-1]' + delta A [3]
The corrected angles are now free from discontinuity by ~360 degrees.
The discontinuity by ~180 degrees forces delta A to be close to either +180
or -180 degrees after the correction described above. I compute delta A's
for all three orientation angles and their sum of squares (SS). Between the
two candidate angle sets, the one that provides the smaller SS will be
selected as the actual true angle set. I am sure there can be a better way
to do this, but I simply compare the two sets and select the better one with
less SS since the main focus is which angle set is better than the other.
I absolutely agree with Richard Baker on the fact that a single rotation
sequence can not make everyone happy in every possible situation in the
shoulder. In fact, the example presented in my earlier posting (pure
shoulder abduction) is an extreme case and the rotation sequence of XYZ may
not be a good one. However, by expanding the range of theta to +/-180
degrees, we can certainly accomodate the extreme cases as well. All in all,
my method will be worth trying if the continuous angle-time curves are of
importance.
Cheers,
Young-Hoo Kwon
------------------------------------------------------
- Young-Hoo Kwon, Ph.D.
- Biomechanics Lab, Texas Woman's University
- ykwon@twu.edu
- http://kwon3d.com
------------------------------------------------------
---------------------------------------------------------------
To unsubscribe send SIGNOFF BIOMCH-L to LISTSERV@nic.surfnet.nl
For information and archives: http://isb.ri.ccf.org/biomch-l
---------------------------------------------------------------
Ton's argument regarding the problems near the gimbal lock position is
absolutely correct. That is why I initially assign missing values to the
frames in which the arm is at or near the gimbal lock position and then
generate the angles through the interpolation later based on the continuity
of the motion. Assigning the missing values near the gimbal lock position
will increase the chance of discontinuity if the arm motion occurs near the
gimbal lock position. But this problem needs to be addressed regardless of
the range of theta one chooses to use. Limiting theta within +/-90 degrees
does not make the orientation angle data free from these problems. Moreover,
checking the discontinuity by ~180 and/or by ~360 at the same time is not a
difficult task to do.
First of all, the discontinuity by ~360 degrees can be easily treated. Let's
see the following equations:
c(A[i]-A[i-1]) = c(A[i])c(A[i-1]) + s(A[i])s(A[i-1]) [1]
s(A[i]-A[i-1]) = s(A[i])c(A[i-1]) - c(A[i])s(A[i-1]) [2]
where A[i] = the computed orientation angle in frame i (computed already).
If angles A[i] and A[i-1] are available, the cos and sin values of delta A
(= A[i] - A[i-1]) can be obtained. Delta A (-180 to +180 degrees) then can
be determined by using the atan2 function or alternative procedures we have
discussed so far. If (1) the frame rate is reasonable, (2) you don't have
too many consecutive frames missing between frames i and i-1, and (3) there
is no discontinuity by ~180 degrees between frames i and i-1, delta A must
be fairly small, close to 0. Anyway, the corrected A[i] will be
A[1]' = A[1]
A[i]' = A[i-1]' + delta A [3]
The corrected angles are now free from discontinuity by ~360 degrees.
The discontinuity by ~180 degrees forces delta A to be close to either +180
or -180 degrees after the correction described above. I compute delta A's
for all three orientation angles and their sum of squares (SS). Between the
two candidate angle sets, the one that provides the smaller SS will be
selected as the actual true angle set. I am sure there can be a better way
to do this, but I simply compare the two sets and select the better one with
less SS since the main focus is which angle set is better than the other.
I absolutely agree with Richard Baker on the fact that a single rotation
sequence can not make everyone happy in every possible situation in the
shoulder. In fact, the example presented in my earlier posting (pure
shoulder abduction) is an extreme case and the rotation sequence of XYZ may
not be a good one. However, by expanding the range of theta to +/-180
degrees, we can certainly accomodate the extreme cases as well. All in all,
my method will be worth trying if the continuous angle-time curves are of
importance.
Cheers,
Young-Hoo Kwon
------------------------------------------------------
- Young-Hoo Kwon, Ph.D.
- Biomechanics Lab, Texas Woman's University
- ykwon@twu.edu
- http://kwon3d.com
------------------------------------------------------
---------------------------------------------------------------
To unsubscribe send SIGNOFF BIOMCH-L to LISTSERV@nic.surfnet.nl
For information and archives: http://isb.ri.ccf.org/biomch-l
---------------------------------------------------------------