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

---------------------------------------------------------------