View Full Version : Summary: Requesting Help to Convert Rotation Sequences

Martin Masson (howmedica)
08-21-1997, 06:48 AM
Dear friends,

Thanks to all of you who replied to last week's inquiry.

Here is a summary:

__________________________________________________ ____________________

> Date: Sat, 16 Aug 1997 04:18:40 -0400
> From: "Martin Masson (Howmedica)"
> Subject: Requesting Help to Convert Rotation Sequences

> Dear Colleagues:

> I am using ADAMS (Mechanical Dynamics Inc.) to study the effects of
> prostheses design on human gait.

> In ADAMS V9.0, motions can be specified to act directly between a
> pair of markers. To control the orientation of the I marker with
> respect to the J marker, ADAMS requires a Body-three 1-2-3 Euler
> rotation sequence. If the rotations between two markers have been
> measured in the global sequence z, y, x (which corresponds to a
> Space-three 3-2-1 rotation sequence), the user has to convert this
> to a Body 1-2-3 rotation sequence before specifying it in a motion.

> I wonder if any of you have ever programmed such conversion. I have
> looked in the Biomch-l archives and found PRP.FOR by Woltring
> (1988-02-22), but I am not sure that this corresponds to my needs.
> Ideally, I would like to be able to convert any Body-three,
> Body-two, Space-three, or Space-two rotation sequence into a
> specific Body or Space rotation sequence:

> ex: - converting from Space-three 3-2-1 to Body-three 1-2-3
> - converting from Body-two 3-1-3 to Body-three 2-3-1
> - converting from Body-three 1-3-2 to Space-two 1-3-1
> - etc...

> Thanks for any help,

> Martin Masson
> massom1@pfizer.com

__________________________________________________ ____________________




The clearest reference I have seen on the subject is "An Introduction
to Robotics: Mechanics and Control" by John J. Craig. The chapter on
kinematics is where you want to look. I am not familiar with your
"Body-two, Body-three, etc." notation, but I think I know what you are
trying to do.

The 1-2-3 (or original x, new y, newest z) Euler angle rotation matrix
is exactly the same as the 3-2-1 (original z, original y, original x)
Euler angle rotation matrix, and so on. See Craig pp. 47 -- 51 for
more explanation.

Good luck and feel free to contact me directly,

Mike Coleman

__________________________________________________ ____________________


Dear M.M.

I recommend proceeding in 2 steps (1) convert the "original" Euler
angles into the corresponding 3X3 direction cosine (re:rotation)
matrix R and then (2) compute your "new" Euler angles from R. (The
math for both operations is fairly simple, and I'll send you the
details in the unlikely event you need help.) I dealt with this
problem many times in the aerospace industry, and this is the only way
of handling it I ever used.

Have a nice day

__________________________________________________ ____________________


You already know your 3x3 rotation matrix, lets called it R321 (or
RZYX) that can be calculated using the measured angles you know:


RX is a 3x3 planar rotation matrix around axis X (you know this angle)
RY is a 3x3 planar rotation matrix around axis Y (you know this angle)
RZ is a 3x3 planar rotation matrix around axis Z (you know this angle)

To know the rotation angles for a XYZ sequence, you should use the
following equation:

RZYX (that you have already calculated) =RZ x RY x RX

RX is a 3x3 planar rotation matrix around axis X (you don't know this
angle) RY is a 3x3 planar rotation matrix around axis Y (you don't
know this angle) RZ is a 3x3 planar rotation matrix around axis Z (you
don't know this angle)

You could use Math Cad and the function minerr to solve this equation
and know the answer in a matter of seconds.

I hope this helps you,

Dr. Cinzia Simonis de Cloke
Computational Engineering and Design Centre Department of Mechanical
Engineering University of Southampton
Phone: + 44 1703 592713 Southampton
Fax: + 44 1703 593230 S017 1BJ
Email: csc@soton.ac.uk
England, UK.

__________________________________________________ ____________________


Dear Martin,

Craig's book cited below describes what you need to convert rotation
sequences in section 2.8 pp.43-56.

Craig, J.J., Introduction to Robotics, second edition, Addison-Wesley,

He includes all twelve global-fixed axis rotation sequences and all
twelve body-fixed axis rotation sequences in Appendix B pp. 442-444.
Please note the typographical corrections shown below.

He loosely calls all body-fixed axis rotation sequences Euler angle
sequences. More specifically, Euler sequences are about body-fixed
axes where the first and third rotations are about the same axis e.g.
Z-X-Z, X-Y-X. Cardan-Bryant sequences are about body-fixed axes where
no axis repeats e.g. X-Y-Z, Z-X-Y.

Note that rotation matrices for body-fixed Euler sequences match
rotation matrices for corresponding global-fixed sequences e.g. R[
Euler Z-X-Z ] = R[ global Z-X-Z ] while rotation matrices for
body-fixed Cardan-Bryant sequences correspond to rotation matrices for
anti-cyclic global fixed sequences e.g. R[ Cardan-Bryant X-Y-Z ] = R[
global Z-Y-X ] .

Element (2,2) of Euler angle R[ Y' X' Z' ] on p. 442 should read
Element (2,2) of fixed angle R[ Z X Y ] on p. 444 should read

Best wishes,
Joe Sommer

* H.J. Sommer III, Professor of Mechanical Engineering, 327 Reber
Building The Pennsylvania State University, University Park, PA 16802
(814)863-8997 FAX (814)863-4848 hjs1@psu.edu www.me.psu.edu/sommer/

__________________________________________________ ____________________


Hi Martin,

I have exactly what you describe, but it will require some digging
to locate it. It is relatively straightforward linear algebra but
requires a fair amount of equation wrestling that can get ugly fast.
If no else has these availble for you, let me know I will start
digging for you. It would proably take me a week or so.


J.J. Trey Crisco, Ph.D.
Director Bioengineering Laboratory, Department of Orthopaedics, RIH
Assistant Professor, Department of Orthopaedics, RIH
Adjunct Assistant Professor, Division of Engineering, Brown University

Mailing address:
Orthopaedic Research, SWP-3
Rhode Island Hospital
593 Eddy Street
Providence, RI 02903
Voice: 401-444-4231
Fax: 401-444-4559
Email: joseph_crisco_iii@brown.edu

__________________________________________________ ____________________



I've had to deal with this problem before and it has a pretty simple
(but non-intuitive) solution. It turns out that if you write the
rotation matrices for the two transformations you're talking about in
terms of the rotation angles, they are the same matrix. What this
means is that if you have Space-three 3-2-1 angles c (about 3-axis), b
(about 2-axis), and a (about 1-axis), this is equivalent to having
Body 1-2-3 angles of a, b, and c.

I thought this result was surprising until I found the following in
Craig's Introduction to Robotics:

"This somewhat nonintuitive result holds in general: three rotations
taken about fixed axes yield the same final orientation as the same
three rotations taken in opposite order about the axes of the moving
frame." (p. 49)

Hope this helps you out. If you get a chance, I'd be interested to
hear about what your working on - it sounds similar to my work, which
involves kinematic and dynamic simulations of total knee replacement


Stephen Piazza
Graduate Student
Department of Mechanical Engineering Northwestern University

__________________________________________________ ____________________



I do not know of any "canned" program that already does what you want,
i.e., for any given rotation matrix (e.g., as generated by an given
initial body-or space-fixed rotation sequence), return the three
rotation angles corresponding to a different body- or spaced-fixed
rotation sequence.

This said, working out such a program yourself should not be too
difficult to a task. If you look in Appendix I of "Spacecraft
Dynamics" by Kane, Likins, and Levinson, you will find a listing of
all possible body- and space-fixed rotation sequences. So given three
rotation angles from a known rotation sequence (e.g., Space-three:
3-2-1), it's just plug-and-chug to get the corresponding rotation
matrix. The tricky part is then extracting from this rotation matrix
the set of three rotation angles corresponding to the new desired
rotation sequence (e.g., Body-three: 1-2-3). Section 1.7 of
"Spacecraft Dynamics" provides a nice example of how to do this.

So this is easily do-able, but would take some programming time on
your part. Sorry not to have a simpler solution.

B.J. Fregly

Benjamin J. Fregly, Ph.D.
Research and Development Engineer
Pro/MECHANICA MOTION Analysis Technology Parametric Technology
2590 North First Street, Suite 200
San Jose, CA 95131
Tel: 408/953-8650
E-mail: bj@sj.ptc.com

__________________________________________________ ____________________



I'm not sure I understand your terminology fully. I don't understand
the Space versus Body reference. Finding the rotation of 3-D bodies in
motion is relatively easy to program, especially in matlab. I could
give you references, pretty much any robotics text, if I knew exactly
what you needed. Woltring is the expert on 3D rigid body motion but I
don't have his references here. I could give you a copy of programs
that I've written but they are in matlab which works with matrices so
the code is only a few lines. So feel free to contact me for more

Marilyn Powers
Human Performance Lab
University of Calgary
Calgary, Alberta, Canada T2N 1N4
email: mjpowers@kin.ucalgary.ca
phone: 403-220-3853
fax: 403-284-3553

__________________________________________________ ____________________



I worked with one of your former colleagues at Howmedica for a time
while I was going to grad school at Purdue - Todd Render. It's
possible that you and I have even met before, though I can't say I
remember for sure. I was running some wear tests on the Purdue Knee
Simulator for Todd to look at the Duracon unicompartmental implants.
Anyway, I saw your posting on Biomch-L and it wasn't clear to me
whether you are looking for clarification on HOW to perform the
conversions you described or you are just looking for some developed
code in order to save time. If the former is the case, then I would
be happy to discuss it with you. If the latter, then I probably can't
help much as I have not had occasion to perform the conversions in

Let me know if you don't get the responses you were hoping for and
I'll be happy to go over the conversion process. Conceptually, it
shouldn't be difficult. However, in practice, it might take a few
days of programming to produce code that performs all of the
permutations of conversion to which you alluded.

Kind Regards,

Anthony J. Petrella
University of Pittsburgh - petrella@sprite.me.pitt.edu Biomechanics
Laboratory - Department of Mechanical Engineering Musculoskeletal
Research Center - Dept. of Orthopaedic Surgery

__________________________________________________ ____________________


Hey Martin,

Here's a couple of references that I used to program coordinate

Meirovitch, L. Motion Relative to Rotating Reference Frames and Rigid
Body Dynamics in Methods of Analytical Dynamics (McGraw Hill Book
Company, Toronto, Canada. 1970) pp. 101-112, and 122-143.

Craig, J.J., Spatial Descriptions and Transformations in Introduction
to Robotics Mechanics and Control Second Edition (Addison-Wesley
Publishing Company, Don Mills, Ontario, 1989) pp.19-59.

I guess I don't have any Woltring papers on this particular subject,
only helical axes etc.

By the way the weather here in Calgary is great! No humidity like
Montreal, hot in the day, cool at night. I'm heading back home to
Ontario next week where its probably hot and humid. How is N.J.
compared to Montreal? I don't know if I could ever live in the states.
Anyway, hope this helps.

Marilyn Powers
Human Performance Lab
University of Calgary
Calgary, Alberta, Canada T2N 1N4
email: mjpowers@kin.ucalgary.ca
phone: 403-220-3853
fax: 403-284-3553

__________________________________________________ ____________________


Well, here's a couple of C-functions that might be of help. I hacked
these out from a larger coordinate transformation library of mine that
I wrote about 10 years ago. LEGAL DISCLAIMMER: "This code does
nothing useful in and of itself"

Unfortunately, I only programmed the inverse solution to the 1-2-3
Euler case. :( Anyway, the description and intended use
follows. Enjoy!

First construct the direction COLUMN cosine matrix (that is, the
top/left 3x3 column submatrix in the homogeneous transformation). Note
that, you can construct any dir-cosine matrix by seqentially calling
this function. eg, here's what you would do if you wanted to construct
x-z-x (1-3-1):


Now the second step is to solve for the Euler rotations WITH RESPECT

(a) first a rotation about X
(b) then a rotation about Y
(c) then a rotation about Z


Ted Morris
Center For Advanced Manufacturing Design And Control
612-625-9881 Institute of Technology, U of Minnesota
FAX: 612-625-8884

"McBride fell 12 stories, hitting the pavement like a Hefty Bag filled
with vegetable soup." (Paul Sabourin, Silver Spring)