My comments:
> 1. First calculate time series of cardan angles with an
> arbitray rotation order. [...]. One
> disadvantage of this method can be gimbal lock.
Young-Hoo Kwon already cited his page
http://kwon3d.com/theory/euler/avel.html which gives the equations to
obtain the angular velocity vector from cardan angle derivatives. Near
gimbal lock, these derivatives will be very noisy. I suspect (without
proof) that this noise will disappear again after going through the
angular velocity equations, but still... You have to set a threshold to
define when you are so close to gimbal lock to treat this as missing
data etc.
This method is actually what I generally use in a linked multibody
model, you differentiate the generalized coordinates and use forward
kinematics equations to get the angular velocities of the body segments.
When using this method, it is best to define kinematic variables
(generalized coordinates) in a way that gimbal lock is avoided in your
particular application.
For any differentiation, I would not recommend polynomial fitting but
use a proper low pass filter such as Butterworth digital filter, or
splines as Paolo de Leva suggested.
> 2. Use the formula [~omega]=[M'(t)][M(t)]^-1 to calculate the
> Tensor which includes the components of the angular velocity
In my experience, this works well (Bellchamber & van den Bogert, J
Biomech 2000). Still it seems less elegant to differentiate 9 signals
when there are only 3 rotational degrees of freedom.
> 3. You can simply estimate the velocity by calculating dot
> products of the columns between two sequent matrices. The
If that is indeed mathematically correct, it must be done after
appropriate smoothing as in method 2. Then the results become
independent of the frame rate and resolution.
> 4. Because my rotations matrices are typically based on cross
> products of vectors between markers I can analytical
> calculate formulars of the angular velocity as function from
> the derivations of the marker positions.
Yes, intuitively it should be optimal to estimate angular velocity from
marker velocities directly. In the past, I have suggested the following
(van den Bogert, Exerc Sports Sci Rev 1994):
(1) Obtain marker velocities from raw data via smoothing and
differentiation
(2) Rigid body model for marker velocity v_i as a function of segment
velocity v and angular velocity omega:
v_i = v + omega x (p_i - p)
where p us the position of the segment origin and p_i is measured marker
position.
(3) With N markers, these are 3N linear equations with 6 unknowns: v and
omega.
(4) Write the equations as A*x = b, where A is a 3N x 6 matrix and solve
x = (v, omega) using linear least-squares (Matlab: x = A\b)
I believe (without proof) that this method would give the least error in
angular velocity. And there are no singularities.
If you used your analytical expressions, you would be essentially using
only 6 of the 9 equations (when you have three markers). It is better
to use all information in the marker data to minimize the effect of
non-rigidity of the marker set. Also the least-squares numerical method
extends nicely to using more than 3 markers on a segment. These are the
same reasons as for using least squares to estimate segment position p
and rotation matrix R (e.g. http://isbweb.org/software/movanal/soder.m).
I suspect that, in practice, there is little difference between the
methods you listed, but it would be nice to have that confirmed.
Especially in certain "pathological" situations (e.g. near gimbal lock,
near-colinear marker placement, high noise, ...
--
Ton van den Bogert
Department of Biomedical Engineering
Cleveland Clinic Foundation
http://www.lerner.ccf.org/bme/bogert/
P Please consider the environment before printing this e-mail
Cleveland Clinic is ranked one of the top hospitals
in America by U.S. News & World Report (2007).
Visit us online at http://www.clevelandclinic.org for
a complete listing of our services, staff and
locations.
Confidentiality Note: This message is intended for use
only by the individual or entity to which it is addressed
and may contain information that is privileged,
confidential, and exempt from disclosure under applicable
law. If the reader of this message is not the intended
recipient or the employee or agent responsible for
delivering the message to the intended recipient, you are
hereby notified that any dissemination, distribution or
copying of this communication is strictly prohibited. If
you have received this communication in error, please
contact the sender immediately and destroy the material in
its entirety, whether electronic or hard copy. Thank you.
> 1. First calculate time series of cardan angles with an
> arbitray rotation order. [...]. One
> disadvantage of this method can be gimbal lock.
Young-Hoo Kwon already cited his page
http://kwon3d.com/theory/euler/avel.html which gives the equations to
obtain the angular velocity vector from cardan angle derivatives. Near
gimbal lock, these derivatives will be very noisy. I suspect (without
proof) that this noise will disappear again after going through the
angular velocity equations, but still... You have to set a threshold to
define when you are so close to gimbal lock to treat this as missing
data etc.
This method is actually what I generally use in a linked multibody
model, you differentiate the generalized coordinates and use forward
kinematics equations to get the angular velocities of the body segments.
When using this method, it is best to define kinematic variables
(generalized coordinates) in a way that gimbal lock is avoided in your
particular application.
For any differentiation, I would not recommend polynomial fitting but
use a proper low pass filter such as Butterworth digital filter, or
splines as Paolo de Leva suggested.
> 2. Use the formula [~omega]=[M'(t)][M(t)]^-1 to calculate the
> Tensor which includes the components of the angular velocity
In my experience, this works well (Bellchamber & van den Bogert, J
Biomech 2000). Still it seems less elegant to differentiate 9 signals
when there are only 3 rotational degrees of freedom.
> 3. You can simply estimate the velocity by calculating dot
> products of the columns between two sequent matrices. The
If that is indeed mathematically correct, it must be done after
appropriate smoothing as in method 2. Then the results become
independent of the frame rate and resolution.
> 4. Because my rotations matrices are typically based on cross
> products of vectors between markers I can analytical
> calculate formulars of the angular velocity as function from
> the derivations of the marker positions.
Yes, intuitively it should be optimal to estimate angular velocity from
marker velocities directly. In the past, I have suggested the following
(van den Bogert, Exerc Sports Sci Rev 1994):
(1) Obtain marker velocities from raw data via smoothing and
differentiation
(2) Rigid body model for marker velocity v_i as a function of segment
velocity v and angular velocity omega:
v_i = v + omega x (p_i - p)
where p us the position of the segment origin and p_i is measured marker
position.
(3) With N markers, these are 3N linear equations with 6 unknowns: v and
omega.
(4) Write the equations as A*x = b, where A is a 3N x 6 matrix and solve
x = (v, omega) using linear least-squares (Matlab: x = A\b)
I believe (without proof) that this method would give the least error in
angular velocity. And there are no singularities.
If you used your analytical expressions, you would be essentially using
only 6 of the 9 equations (when you have three markers). It is better
to use all information in the marker data to minimize the effect of
non-rigidity of the marker set. Also the least-squares numerical method
extends nicely to using more than 3 markers on a segment. These are the
same reasons as for using least squares to estimate segment position p
and rotation matrix R (e.g. http://isbweb.org/software/movanal/soder.m).
I suspect that, in practice, there is little difference between the
methods you listed, but it would be nice to have that confirmed.
Especially in certain "pathological" situations (e.g. near gimbal lock,
near-colinear marker placement, high noise, ...
--
Ton van den Bogert
Department of Biomedical Engineering
Cleveland Clinic Foundation
http://www.lerner.ccf.org/bme/bogert/
P Please consider the environment before printing this e-mail
Cleveland Clinic is ranked one of the top hospitals
in America by U.S. News & World Report (2007).
Visit us online at http://www.clevelandclinic.org for
a complete listing of our services, staff and
locations.
Confidentiality Note: This message is intended for use
only by the individual or entity to which it is addressed
and may contain information that is privileged,
confidential, and exempt from disclosure under applicable
law. If the reader of this message is not the intended
recipient or the employee or agent responsible for
delivering the message to the intended recipient, you are
hereby notified that any dissemination, distribution or
copying of this communication is strictly prohibited. If
you have received this communication in error, please
contact the sender immediately and destroy the material in
its entirety, whether electronic or hard copy. Thank you.