Orientation, Rotation, Velocity, and Acceleration and the SRM

Orientation, Rotation, Velocity, and Acceleration and the SRM
Technical Concepts
Orientation, Rotation, Velocity and Acceleration,
and the SRM
Version 2.0
20 June 2008
Author:
Paul Berner, PhD
Contributors:
Ralph Toms, PhD, Kevin Trott, Farid Mamaghani, David Shen,
Craig Rollins, Edward Powell, PhD
Copyright © 2008 SEDRIS
Table of contents
1 Introduction .................................................................................................................... 1
1.1 Prerequisites............................................................................................................ 1
1.2 Notation ................................................................................................................... 2
2 Vectors, directions, axes and their uses ........................................................................ 3
2.1 Vector space directions ........................................................................................... 3
2.2 Vector directions in the SRM ................................................................................... 4
3 Orientation...................................................................................................................... 6
3.1 Orientation and rotation ........................................................................................... 7
3.2 Representing rotations ............................................................................................ 9
3.2.1
Axis-angle vector rotation ......................................................................... 10
3.2.1.1
Rodrigues’ rotation formula ....................................................................... 10
3.2.2
Principal rotations ..................................................................................... 11
3.2.3
Euler angles .............................................................................................. 11
3.2.3.1
Euler angles in the z -x -z convention ....................................................... 12
3.2.3.2
Euler angles in the x -y -z convention (Tait-Bryan angles)........................ 14
3.2.3.3
Gimbal lock ............................................................................................... 16
3.2.4
Rotation and orientation matrices ............................................................. 17
3.2.4.1
Euler angle z -x -z convention matrix factorization ................................... 18
3.2.4.2
Tait-Bryan angles matrix factorization....................................................... 21
3.2.5
Quaternions .............................................................................................. 25
3.2.5.1
Quaternion notations and conventions ..................................................... 25
3.2.5.2
Quaternion algebra ................................................................................... 26
3.2.5.3
Quaternion operators on 3D Euclidean space .......................................... 28
3.2.5.4
Quaternions in matrix forms ...................................................................... 29
3.2.6
Representation summary.......................................................................... 30
3.3 Performing a rotation on an arbitrary point (formulae)........................................... 31
3.3.1
Rotation about the origin ........................................................................... 31
3.3.2
Rotation about another point..................................................................... 31
3.4 Inter-converting between representations (formulae)............................................ 32
3.4.1
Euler angle convention to matrix............................................................... 32
3.4.2
Matrix to axis-angle ................................................................................... 32
3.4.3
Axis-angle to rotation matrix ..................................................................... 33
3.4.4
Axis-angle to quaternion ........................................................................... 34
ii
3.4.5
Matrix to quaternion .................................................................................. 34
3.4.6
Quaternion to matrix ................................................................................. 35
3.4.7
Quaternion to axis-angle ........................................................................... 36
3.4.8
Matrix to Euler angle convention............................................................... 37
3.4.9
Euler angle convention to quaternion ....................................................... 37
3.4.10
Quaternion to Euler angle convention....................................................... 39
3.5 Considerations for computational and storage efficiency ...................................... 40
3.6 Interpolation issues................................................................................................ 41
3.7 Error analysis......................................................................................................... 42
4 Rotational kinematics ................................................................................................... 43
4.1 Rotational velocity and acceleration ...................................................................... 43
4.2 Orientation (Ω), angular velocity (ω), and angular acceleration (α) ....................... 45
5 Rigid body dynamics .................................................................................................... 47
6 Use cases .................................................................................................................... 52
6.1 DIS Euler angles.................................................................................................... 52
6.2 Rigid body integration of state ............................................................................... 53
7 References................................................................................................................... 55
Appendices ..................................................................................................................... 56
Appendix A – Properties of the vector cross product ...................................................... 56
Appendix B – Derivation of Rodrigues’ rotation formula ................................................. 57
Appendix C – Quaternion operators on 3D Euclidean space derivation ......................... 59
Appendix D – Moment of inertia...................................................................................... 60
Appendix E – Matrix to axis-angle derivation .................................................................. 61
INDEX ............................................................................................................................. 64
iii
Acknowledgements
This document was developed by the SEDRIS Organization as part of the effort to
include a more comprehensive treatment of orientation in the SRM
implementation, and in support of the requirements of the Test & Training
Enabling Architecture (TENA) project.
The helpful suggestions and feedback from TENA developers, under the auspices
of Dr. Ed Powell, were invaluable in developing the scope and in refining the use
cases described in this document. Furthermore, the software implementations of
the concepts in this document and the refinement of the corresponding
application program interface (API) were greatly benefited by the feedback from
the TENA development team. In particular, the many contributions of Mr. Terry
Burks (Trideum Corp) during the development of the interface and the testing of
the implementations of the API were critical in the completion of this effort.
The participation of Mr. Craig Rollins (National Geospatial-Intelligence Agency) in
this effort has been essential and invaluable. In addition to his insightful feedback
and critical reviews of this document, he expended significant effort in the
development of independent test data used to verify the correctness of the
implementations.
The software design and implementations of the algorithms, along with the
development of a complete suite of testing and verification of the
implementations, were developed and produced by Mr. David Shen (SAIC). In the
course of this effort, he identified various errors in the formulations and made
numerous critical suggestions and contributions.
The practical use of the API is further described in a separate and comprehensive
document, produced by Mr. Kevin Trott (Northrop Grumann), entitled "User's
Manual for SRM Orientation, Velocity, & Acceleration Transformations".
Paul Berner
Ralph Toms
Kevin Trott
Farid Mamaghani
iv
1 Introduction
One of the characteristics of the SRM1 (ISO/IEC 18026:2006(E)) that distinguishes it
from many other treatments of spatial referencing is the definition of the concept of
direction in linear and curvilinear 3D spatial reference frames and the explicit
methodology to convert direction representations from one spatial reference frame to
another spatial reference frame. Intrinsic to that methodology is the use of orientation
operations. Orientation and rotation operators are also important in operating on the
vector representation of physical phenomena. These types of operations are important
for a significant sector of the intended user domain of the SRM. With the intent to
leverage the SRM treatment of the direction concept, this document explores the
orientation/rotation operator subject matter domain. In presenting these concepts in a
consistent and well defined manner, a framework is laid out to allow the future expansion
of the SRM API to explicitly deal with the orientation concept. To this end, this document
reviews the rotation/orientation concept in relation to the SRM. In particular, various
representations of orientation and rotation and the methods of converting between them
are presented.
Many concepts discussed here have been in wide use from the time of Euler's work on
the subject. As a result, there are many similar but different treatments in the literature.
In particular, there are similar terms with different meanings and, in some cases, the
differences are subtle. There are also many differences in notational conventions. For
this reason an attempt has been made to provide self contained derivations (assuming
the prerequisites) of most of the formulations and algorithms presented here. By
following the derivations there should be no mistake as to the intended meanings of the
results. To improve the flow of the text, parts of lengthier derivations have been
relegated to appendices. The formulation of these concepts as presented here may be
incorporated in a future version of the SRM.
1.1 Prerequisites
This document assumes that reader is familiar with the following prerequisite subject
matter:
•
Linear algebra
o
o
ƒ
linear operators,
ƒ
vector dot and cross products
Matrix algebra
•
Calculus, and
•
Elementary Physics
o
1
Vector spaces concepts including:
Rigid body kinematics and dynamics.
See references [1].
1
See also reference [1] Annex A – Mathematical foundations.
1.2 Notation
The coordinate representation of a three dimensional (3D) vector u with respect to a
⎛ u1 ⎞
⎜ ⎟
basis is a column vector u = ⎜ u2 ⎟ . To compactly denote a coordinate in a line of text,
⎜u ⎟
⎝ 3⎠
the transpose is used u = ( u1, u2 , u3 ) .
T
In this section, let u = ( u1, u2 , u3 ) and v = ( v1, v2 , v3 ) be two 3D vectors.
T
T
The Inner product or dot product or scalar product of 3D vectors u and v is denoted and
defined as:
u • v = uT v = u1v1 + u2v2 + u3v3
(0.1)
The norm or length of a vector u is defined as:
u = u•u
(0.2)
If θ is the angle between two vectors u and v then:
u • u = cos (θ ) u v
(0.3)
The outer product of 3D vectors u and v is denoted u ⊗ v and defined as:
⎛ u1v1 u1v2 u1v3 ⎞
⎜
⎟
u ⊗ v = uv = ⎜ u2v1 u2v2 u2v3 ⎟
⎜u v u v u v ⎟
⎝ 3 1 3 2 3 3⎠
T
(0.4)
Note that:
Trace ( u ⊗ v ) = u1v1 + u2v2 + u3v3 = u • v
(0.5)
The vector product or cross product of 3D vectors u and v is defined as:
u × v = ( u2v3 − u3v2 , u3v1 − u1v3 , u1v2 − u2v1 ) = Suv
T
(0.6)
where:
⎛ 0
⎜
Su = ⎜ +u3
⎜ −u
⎝ 2
−u3
0
+u1
+ u2 ⎞
⎟
−u1 ⎟
0 ⎟⎠
is the skew-symmetric matrix associated with a vector u .
2
See Appendix A for some useful properties of the cross product.
The 3D identity matrix is denoted as:
I 3×3
⎛ 1 0 0⎞
⎜
⎟
= ⎜0 1 0⎟
⎜ 0 0 1⎟
⎝
⎠
(0.7)
The 3D zero vector is noted as:
0 = (0,0,0)T
(0.8)
The two argument form of arctangent, arctan 2 ( y, x ) , returns a value adjusted for the
quadrant of the point ( x, y ) . Given real numbers x and y,
arctan 2 ( y, x ) = θ
where: θ is the unique value satisying − π < θ ≤ π, and
if r = 0,
θ = 0, else
if r > 0,
x = r cos θ and y = r sinθ .
where:
r=
x2 + y 2 .
2 Vectors, directions, axes and their uses
2.1 Vector space directions
A direction in a Euclidean vector space may be represented as a unit vector. That is, a
vector n of length 1. Any non-zero u vector may be normalized to a unit vector n by
dividing by the norm of the vector:
n=
1
T
u, if u ≠ ( 0,0,0 ) .
u
Any positive multiple of a unit vector points in the same direction. By requiring unit
vectors, each direction has a unique vector representation.
Directions have many application specific uses. For example, a velocity is a direction
multiplied by a speed. Force and momentum acting on the center of mass of a body
may be similarly represented.
A direction can be used to specify the axis of a rotating body. The axis of a rotating
body lies on a line. By specifying the line as a direction, the right hand rule can be used
3
to unambiguously identify which of the two axial rotational directions is acting on the
body. Torque and angular momentum acting on a body may be similarly represented.
2.2 Vector directions in the SRM
In the Spatial Reference Model (SRM), the underlying vector space that is associated
with a 3D Spatial Reference Frame (SRF) is determined by the Object Reference Model
(ORM) of the SRF. For example, the underlying 3D vector space of any 3D SRF based
on ORM WGS84 corresponds to the WGS84 geocentric SRF. This associated 3D
Euclidean space is called the object-space of the ORM.
An SRF associates unique coordinates in a domain of the coordinate-space (of
coordinate-component-tuples) to corresponding points in object-space. In the special
case of a geocentric SRF, the object-space and coordinate-space are indistinguishable2.
In general, an SRF is either linear or curvilinear. In the linear cases, the vector-space
structure of coordinate-space carries over to object-space. In particular, lines through
points in a given direction n are all parallel in both coordinate- and object-space. This
shows that a direction is translation invariant in a linear SRF. A linear SRF will not
preserve angular relationships between directions unless the associated abstract
coordinate system (CS) is also orthonormal. In the orthonormal case, angles and
distances are preserved.
In the case of a curvilinear SRF, the vector-space structure of the coordinate-space does
not carry over3. The coordinate-space of an augmented map projection SRF (a map
projection augmented with ellipsoidal height as a third dimension) appears to inherit the
vector-space structure of R3, however, the vector properties of the (easting, northing,
height)-coordinates do not carry over to object-space. This is illustrated in part by the
“up pointing” vector n = (0, 0, 1) that points in different spatial directions (in object-space)
depending on the map coordinate location from which n is viewed.
In Figure 1, distinct position points p and q on the ellipsoid surface are projected to
augmented map coordinates (s, t, 0) and (u, v, 0). Starting at these map coordinates, the
coordinates one unit away in direction n are (s, t, 1) and (u, v, 1) respectively. In an
augmented map projection, these coordinates correspond to the position-space points p'
and q'. The direction from p to p' is not the same as the direction from q to q'. This
shows that the "up direction" is relative to an observation or reference point.
For each reference point, the SRM defines a uniform method for associating a unique
orthonormal linear SRF to each reference point coordinate. This associated linear SRF
will be used to specify a direction as "seen" from the reference point. This SRF is called
the local tangent frame at the reference point. This SRF is defined by as having its
origin at the reference point and axis directions given by the normalized tangent vectors
to the coordinate curves passing through the reference point as illustrated in Figure 2.
2
This assumes a common unit of length. The SRM requires the metre as the common unit of
length.
3
In the curvilinear case, even the coordinate domain is not the entire space of n-tuples.
4
All curvilinear SRFs in the SRM are orthogonal so that the local tangent frame will be an
orthonormal linear SRF.
(s, t, 1)
(u, v, 1)
(s, t, 0)
(u, v, 0)
coordinate-space
p'
q'
p
q
object-space
Figure 1 – Directions in an augmented map projection SRF
z
y
Local tangent frame axes
x
Reference
point
Coordinate curves
Figure 2 – Local tangent frame axes
Continuing the augmented map projection example, Figure 3 shows the local tangent
frames axes (x and z-axes) at points p and q. The local "up" directions may be specified
in either local tangent frame. Since directions are translation invariant in linear SRFs,
5
we may conceptually translate the two local tangent frames to a common origin as in
Figure 4.
z
~
z
p'
q'
x
p
q
object-space
~
x
Figure 3 – Local tangent frame axes at p and q
z
p' - p
z~
q' - q
x
x~
Figure 4 – Direction vectors two local tangent frames
In the SRM, a Direction data type consists of the coordinate of a reference point in a
given SRF and a 3-tuple unit vector in the local tangent frame at the reference point.
Since there is neither an intrinsic SRF nor an intrinsic reference point in object-space, it
is necessary to specify the reference point in order to be able to inter-convert between
SRF representations of a given direction. The SRM approach of associating reference
points and local tangent frames thus reduces the general problem of inter-converting the
representation of a direction between two SRFs to that of inter-converting between two
orthonormal linear spaces. This methodology generalizes to the problem of interconverting any vector quantity4 between a pair of linear spaces. The treatment given
here of this general problem begins with the notion of orientation.
3 Orientation
Consider two orthonormal bases for 3 dimensional Euclidean space x, y, z and x% , y% , z% .
An orientation is an expression of the axis directions of one basis with respect to the
other. To illustrate this notion, consider an aircraft at time t0 aligned with one basis: the
center of mass of the airplane is at the vector space origin, the fuselage points in
direction x, the starboard wing points in direction y, and (to complete a right handed
system) z points down with respect to the aircraft (see Figure 7 below). At some later
time t1 the airplane is subjected to a roll, pitch, and/or yaw. We subtract the vector that
4
Not necessarily a direction or a unit vector, but any vector of interest.
6
represents the displacement of the center of mass from time t0 to time t1 and the new
directions for the fuselage, starboard wing, and relative down define the x% , y% , z%
directions. The two vector spaces spanned by bases x, y, z and x% , y% , z% share the same
origin and are thus two bases for the same vector space. The only difference is that
x% , y% , z% has a different orientation with respect to x, y, z . Orientation is also called
attitude in some contexts.
3.1 Orientation and rotation
Let r be a point in 3 dimensional Euclidean space. Let E denote that vector space with
orthonormal basis x, y, z , and let E% denote that vector space with orthonormal basis
x% , y% , z% . The coordinate representation of r with respect to each basis5 is:
r = ( r1, r2, r3 ) , where r = r1 x + r2 y + r3 z , and
T
r = ( r%1, r%2, r%3 ) , where r = r%1 x% + r%2 y% + r%3 z% .
T
This coordinate transformation from E to E% is denoted ΩE → E% : ( r1, r2 , r3 ) a ( r%1, r%2 , r%3 ) .
This is a linear transformation and can thus be realized as a matrix multiplication:
⎛ r%1 ⎞
⎛ r1 ⎞ ⎛ a11 a12
⎜% ⎟
⎜ ⎟ ⎜
⎜ r2 ⎟ = ΩE → E% ⎜ r2 ⎟ = ⎜ a21 a22
⎜ r% ⎟
⎜r ⎟ ⎜a
⎝ 3⎠
⎝ 3 ⎠ ⎝ 31 a32
a13 ⎞ ⎛ r1 ⎞
⎟⎜ ⎟
a23 ⎟ ⎜ r2 ⎟
a33 ⎟⎠ ⎜⎝ r3 ⎟⎠
where:
a11 = x • x% , a12 = y • x% , a13 = z • x%
a21 = x • y% , a22 = y • y% , a23 = z • y%
a31 = x • z%,
a32 = y • z%,
a33 = z • z%
(1.1)
Since the basis vectors are unit vectors, each dot product in equation (1.1) is the cosine
of the angle between the two vectors (see Equation (0.3)). For this reason this matrix
⎡⎣ aij ⎤⎦ is the called direction cosine matrix. Note that the columns of the matrix are
the x, y, z basis vectors in x% , y% , z% coordinate representation while the rows (or columns
of the transpose matrix) are the x% , y% , z% basis vectors in x, y, z coordinate
representation.
x, y, z , the basis coefficients may be computed as:
r1 = r • x, r2 = r • y, r3 = r • z .
5
For any orthonormal basis,
7
Euler’s rotation theorem states that this linear transformation is a rotation operation. In
particular, the matrix has a unit eigenvector n and three eigenvalues: 1, e + iθ , e −iθ . The
line spanned by the vector n is fixed under the transformation and represents the axis of
rotation. The angle of rotation is given by θ . Let Rn (θ ) denote the rotation about
vector n through angle θ .
Euler’s rotation theorem thus shows that orientation and rotation are just two ways of
viewing the same transformation. These two ways are closely related, but are not
equivalent. Consider Figure 5. On the left side, the point r is rotated by angle θ about
the z-axis (which points directly toward the reader) to a new position r'.
The coordinates of these two points, r = ( r1, r2 , r3 ) , and r ′ = ( r1′, r2′, r3′ ) are related by
T
T
the following matrix.
⎛ r1′ ⎞
⎛ r1 ⎞ ⎛ cos θ
⎜ ′⎟
⎜ ⎟ ⎜
⎜ r2 ⎟ = Rz (θ ) ⎜ r2 ⎟ = ⎜ sinθ
⎜ r′ ⎟
⎜r ⎟ ⎜ 0
⎝ 3⎠
⎝ 3⎠ ⎝
− sinθ
cos θ
0
0 ⎞ ⎛ r1 ⎞
⎟⎜ ⎟
0 ⎟ ⎜ r2 ⎟ .
1 ⎟⎠ ⎜⎝ r3 ⎟⎠
y-axis
r2'
y-axis
~
~
r'
x-axis
y-axis
~
r1
θ
r
r2
r
r2
θ
x-axis
r1'
x-axis
r1
r1
~
Rotation
r2
Orientation
Figure 5 – Rotation and orientation
The right side of the figure shows a second basis whose orientation with respect to the
first basis is a rotation by angle θ about the z-axis. In this case (Figure 5), let
Ωz (θ ) denote the orientation ΩE → E% . The coordinates of the single point r are related
by the direction cosine matrix for this case.
⎛ r%1 ⎞
⎛ r1 ⎞ ⎛ cos θ
⎜% ⎟
⎜ ⎟ ⎜
⎜ r2 ⎟ = Ωz (θ ) ⎜ r2 ⎟ = ⎜ − sinθ
⎜ r% ⎟
⎜r ⎟ ⎜ 0
⎝ 3⎠
⎝ 3⎠ ⎝
sinθ
cos θ
0
0 ⎞ ⎛ r1 ⎞
⎟⎜ ⎟
0 ⎟ ⎜ r2 ⎟ .
1 ⎟⎠ ⎜⎝ r3 ⎟⎠
8
Notice that matrices corresponding to the left and right figures are not the same:
Rz (θ ) = ΩzT (θ ) , and Ωz (θ ) Rz (θ ) = I 3×3 . So while both cases, the rotation of a point,
and the orientation of one coordinate system with respect to another, involve the same
axis of rotation and the same angle of rotation, the corresponding linear operations are,
in fact, the inverses of each other. We shall call an operator that performs a rotation,
such as the operator on the left side of Figure 5, a rotation operator and an operator that
changes coordinate system directions, such as on the right side of the Figure, an
orientation operator.
Note that to transform a coordinate from the E% coordinate system back to the E
coordinate system, the rotation matrix may be used as the inverse operator:
⎛ r1 ⎞
⎛ r%1 ⎞
⎛ r%1 ⎞
⎜ ⎟
⎜% ⎟
⎜ ⎟
−1
⎜ r2 ⎟ = Ωz (θ ) ⎜ r2 ⎟ = Rz (θ ) ⎜ r%2 ⎟
⎜r ⎟
⎜ r% ⎟
⎜ r% ⎟
⎝ 3⎠
⎝ 3⎠
⎝ 3⎠
Note as well that the inverse of a rotation is a reverse rotation so that Ωz (θ ) = Rz ( −θ ) .
Alternatively, both operations may be treated as rotations from different coordinate frame
view points. With respect to the original coordinate system, a rotation R is, in some
contexts, called a coordinate frame rotation. With respect to the rotated coordinate
system, an orientation operation Ω is, in some contexts, called a position vector
rotation.
It follows that a representation of a rotation will depend on its intended use or
interpretation. This document will address three primary use cases:
Primary use case 1. This primary use case concerns rigid body dynamics. Rigid body
dynamics characterize the motion of a rigid body by translation and rotation. Of
particular concern in this document are the characterizations of instantaneous rotational
kinematics – rotational velocity and rotational acceleration, and rotational dynamics –
torque and inertia.
Primary use case 2. This primary use case concerns the descriptions of point positions
in one coordinate system with respect to another coordinate system with a different
orientation. A sub-case concerns position descriptions between a “space-fixed” or
inertial coordinate system and “body-fixed” coordinate system attached to a rigid body
that is either static or moving in time.
Primary use case 3. This primary use case combines the first two. Of particular concern
is representing rigid body dynamics characterizations computed in one coordinate
system in terms of the second coordinate system. The coordinate systems may both be
space-fixed, or one may be moving with respect to the other.
3.2 Representing rotations
Rigid body motion exhibits six degrees of freedom - three degrees of freedom for
translation and three degrees of freedom for rotation. This means that, in principle, a
rotation operation on 3D Euclidean space can be specified by three scalar numbers.
9
That is indeed the case with Euler angle conventions (see below). However, other less
compact specifications are commonly used because they are more amenable to some
computations such as performing a rotation operation on a vector, composing rotations,
interpolating rotations, and other operations, and/or because they can be measured or
modeled directly. Of the various representation methods in prevalent use, each
presents various tradeoffs with respect to storage size, and computational complexity,
speed, and error control (see 3.5, 3.6, and 3.7). Thus the best representation is
dependent on the requirements and computational environment of a user application.
For this reason, different representations are in use and interoperability becomes an
issue. This issue is compounded by the non-standard meaning of terms in prevalent
use. To support interoperability, this document defines these terms and presents
various methods and algorithms for key operations and inter-conversions between the
representation methods.
3.2.1 Axis-angle vector rotation
The axis-angle representation of a rotation, ( n, θ ) , consists of a unit vector n
(n
= 1)
and a rotation angle θ . This represents the rotation Rn (θ ) through angle θ about the
axis spanned by n . The rotation direction is determined by the right hand rule:
conceptually, if the right hand holds the vector n with thumb pointing in the direction of
the vector, the fingers point in the direction of increasing θ . Large rotations (greater
than one full revolution) are important in some applications, however, in this document
angles shall be considered equivalent modulo 2π . As a consequence of Euler's
theorem, every rotation operation may be represented as an axis-angle rotation.
This representation uses four scalar parameters n = ( n1, n2 , n3 ) and θ . The constraint
n = 1 reduces the degrees of freedom down to three degrees of freedom. The axisangle representation is not unique. In particular, the axis-angle pairs ( n, θ ) and
( −n, − θ )
represent the same rotation, and when θ = 0 , n may be any unit vector.
3.2.1.1
Rodrigues’ rotation formula
The rotation of a vector r to a rotated vector r ′ in terms of ( n, θ ) is given by
Rodrigues’ rotation formula (see Appendix B for its derivation):
r ′ = cos (θ ) r + (1 − cos (θ ) ) ( r • n ) n + sin (θ ) n × r
(1.2)
The terms may be rearranged to the alternate form:
r ′ = r + (1 − cos (θ ) ) n × ( n × r ) + sin (θ ) n × r
(1.3)
The matrix form of this formula is:
r′ = R r
where:
10
R = ⎡⎣ I 3×3 + sin (θ ) Sn + (1 − cos (θ ) ) Sn2 ⎤⎦
(1.4)
or, alternatively (see Appendix B ):
R = ⎡⎣cos (θ ) I 3×3 + (1 − cos (θ ) ) n ⊗ n + sin (θ ) Sn ⎤⎦
(1.5)
and
⎛ 0
⎜
Sn = ⎜ n3
⎜ −n
⎝ 2
−n3
0
n1
n2 ⎞
⎟
−n1 ⎟
0 ⎟⎠
is the skew-symmetric matrix associated with n (see 1.2). Note that here R is the matrix
form of the rotation operator Rn (θ ) .
3.2.2 Principal rotations
For a given 3 dimensional Euclidean space, an orthonormal basis may be represented
by the coordinate 3-tuples: x = (1,0,0 ) , y = ( 0,1,0 ) , and z = ( 0,0,1) with respect to
T
T
T
that basis. As an axis of rotation, each of these unit vectors is called a principal axis6 of
rotation. A rotation about a principal axis is called a principal rotation. Some authors
refer to these rotations as elementary rotations. The vector space operators:
Rx (α ) , R y ( β ) , and Rz (γ ) will denote the three principal rotations through the
respective angles α , β , and γ modulo 2π . In axis-angle representation, these are the
rotations: ( x,α ) , ( y, β ) , and ( z, γ ) .
When the x, y, z basis is rotated by a principal rotation Rx (α ) , the resulting basis will
have orientation Ωx (α ) with respect to the x, y, z basis, similarly for rotation R y ( β )
and orientation Ω y ( β ) , and rotation Rz (γ ) and orientation Ωz (γ ) (see 3.1).
3.2.3 Euler angles
Euler angles are a specification of a rotation (or an orientation) obtained by applying
three consecutive principal rotations. There are twelve distinct ways to select a
sequence of three principal axes and apply the principal rotations (24 if left-handed axes
are considered)7. Each such ordered selection is an Euler angle convention. There is
little agreement among authors in names or notations for these conventions.
6
This term should not be confused with the moment of inertia principal axes (see 5).
7
There cannot be two consecutive rotations on the same axis as they would combine to a single
rotation. Thus, among right-handed axis systems, there are 3 choices for the first rotation axis, 2
choices each for the second and third rotation axes to avoid repeating a preceding axis choice
(3x2x2=12).
11
There are numerous conventions for Euler angles in use and many are named
inconsistently. (Note that some authors use a left-handed coordinate system. All
coordinate systems in this document are right-handed). The convention defined in the
next section (3.2.3.1) uses axes z–x–z (also known as the 3-1-3 convention) and is often
called the x-convention. Replacing x with y gives the so-called y-convention (z–y–z or 32-3). Quantum physics treatments prefer the y-convention, but x–y–x (or 1-2-1) is also
called the y-convention by some authors. The convention using x–y–z (or 1-2-3) is
defined in section 3.2.3.2 below.
The Euler angle representation of a rotation or orientation is important, in part, because
most inertial systems produce Euler angles as output. In addition, Euler angles are often
used to determine orientation in control mechanisms such as robotic arms and motion
platforms.
The three principal rotations may either be rotations about the original axes, or about the
successively rotated axes. Given a rotation, let x% , y% , z% be the principal axes after the
successive rotations are applied to the original x, y, z axes. To distinguish between
these two coordinate bases, coordinates with respect to the original basis x, y, z will be
called space-fixed or static coordinates and those with respect to the sequentially
moving x% , y% , z% axes will be called body-fixed or rotating coordinates. It is useful to think
of the x% , y% , z% as attached to a rigid body that will be rotated.
3.2.3.1
Euler angles in the z -x -z convention
% % -plane intersect in a line. This line is called
We shall assume that the xy-plane and xy
the line of nodes for this convention. The Euler angles in the z -x -z convention are the
three angles defined as follows:
α is the angle between the x-axis and the line of nodes,
β is the angle between z-axis and the z% -axis, and
γ is the angle between the line of nodes and the x% -axis.
In some contexts α is called the spin angle, β is called the nutation angle, and γ is
called the precession angle. Many authors use the symbols φ, θ, and ψ for these
angles, but disagree on the order and angle identification. All angles are considered
equivalent modulo 2π.
These three angles specify a rotation as consecutive principal rotations using the z–axis,
the x–axis and z–axis again. There are two equivalent specifications, space-fixed and
body-fixed.
In the space-fixed specification, all the principal rotations are about the space-fixed
principal axes z and x. The first principal rotation is about the z-axis through angle α ,
followed by the x-axis through angle β , followed by the z-axis again through angle γ .
The combined rotation is:
Rz (γ ) Rx ( β ) Rz (α ) .
This principal rotation sequence is the Euler angle z–y–z rotation convention.
12
In the body-fixed specification, all the principal rotations are about the body-fixed
principal axes. Before any rotation is applied, the space-fixed and body-fixed bases
coincide. The first principal rotation is about the z -axis through angle γ . This rotates
axes x% and y% to the intermediate orientations x′ and y ′ (in this intermediate orientation,
the x'-axis lies on the line of nodes). The second rotation is about the intermediate x'axis through angle β . This second rotation moves the y ′ and z axes to intermediate
orientations z′′ and y′′ . The third rotation is about the z′′ -axis through α which moves
axes x' and y′′ to their final orientations x′′′ and y ′′′ The combined rotation is
Rz ′′ (α ) Rx′ ( β ) Rz (γ ) . The final body-fixed axis orientations are
x% = x′′′, y% = y′′′, z% = z′′ . The sequence of body-fixed rotations is illustrated in Figure 6.
z
γ
line of nodes
y
x'
γ
γ
y'
x
z–axis rotate γ
z
z"
line of nodes
β
y
x'
β
x
β
y'
y"
x–axis rotate β
z
z"
line of nodes
α
x'''
y
α
x'
x
y'''
α
y'
y"
z–axis rotate α
Figure 6 — Euler z-x-z rotation sequence
13
Observe that order of the three rotation angles is reversed between the space-fixed and
body-fixed cases:
Rz (γ ) Rx ( β ) Rz (α ) space-fixed
Rz ′′ (α ) Rx ′ ( β ) Rz (γ ) body-fixed
(1.6)
To show that both expressions produce the same rotation, note that when x' is at its
intermediate position on the line of nodes, the second rotation Rx ′ ( β ) is equivalent to
first rotating the line of nodes to the x-axis using principal rotation Rz ( −γ ) , rotating
about the x-axis ( which is the line of nodes at this point) with Rx ( β ) and finally rotating
the line of nodes back to its original position with Rz (γ ) . In effect,
Rx′ ( β ) = Rz (γ ) Rx ( β ) Rz ( −γ ) . Similarly, Rz′′ (α ) = Rx′ ( β ) Rz (α ) Rx′ ( − β ) . Noting
that two rotations about the same axis commute and substituting these expressions in
the body-fixed formulation gives:
Rz ′′ (α ) Rx′ ( β ) Rz (γ ) = ⎡⎣ Rx′ ( β ) Rz (α ) Rx′ ( − β ) ⎤⎦ Rx ′ ( β ) Rz (γ )
= ⎡⎣ Rx ′ ( β ) Rz (α ) ⎤⎦ Rz (γ )
= ⎡⎣{ Rz (γ ) Rx ( β ) Rz ( −γ )} Rz (α ) ⎤⎦ Rz (γ )
= Rz (γ ) Rx ( β ) Rz (α ) Rz ( −γ ) Rz (γ )
= Rz (γ ) Rx ( β ) Rz (α )
This result:
Rz′′ (α ) Rx′ ( β ) Rz (γ ) = Rz (γ ) Rx ( β ) Rz (α )
(1.7)
shows that the space-fixed and body-fixed formulations produce the same rotation. Both
formulations are important. The matrix formulations of the principal rotations (Equation
(1.15)) are expressed with respect to the static space-fixed frame. However, an inertial
system attached to the body would read out the angles with respect to the rotating bodyfixed frame.
The orientation of the x% , y% , z% axes with respect to the x, y, z axes is the inverse (or
transpose) of the rotation so that the angle sequence reverses:
Ωz (α ) Ωx ( β ) Ωz (γ )
(1.8)
This is Euler angle z–y–z orientation convention.
3.2.3.2
Euler angles in the x -y -z convention (Tait-Bryan angles)
% % -plane. The
In this convention the line of nodes is the intersection of the xy-plane and yz
Euler angles in this convention are defined as follows:
14
φ is the angle between the line of nodes and the y% -axis,
% % -plane, and
θ is the angle between z-axis and the yz
ψ is the angle between the y-axis and the line of nodes.
These three angles specify a rotation as principal rotations about the space-fixed
principal axes. The first rotation is by angle φ about the x-axis. The second is by angle
θ about the y-axis. The third is by angle ψ about the z-axis. The combined rotation
Rz (ψ ) R y (θ ) Rx (φ ) space-fixed.
(1.9)
is the Euler angle z–y–x rotation convention. The equivalent body-fixed specification is:
Rx% (φ ) R y% (θ ) Rz% (ψ ) body-fixed.
(1.10)
The corresponding Euler angle x–y–z orientation convention is the inverse operation:
Ω x (φ ) Ω y (θ ) Ωz (ψ )
space-fixed
Ωz% (ψ ) Ω y% (θ ) Ω x% (φ )
body-fixed
(1.11)
The Euler angles in this convention are variously called Tait-Bryan angles, Cardano
angles, or nautical angles. The various names given to these angle symbols include:
φ roll or bank or tilt,
θ pitch or elevation, and
ψ yaw or heading or azimuth.
x-axis
φ roll
ψ Yaw
y-axis
θ pitch
z-axis
Figure 7 - Tait-Bryan angles
15
When the fixed body is an aircraft, the common practice is to choose the center of mass
as the coordinate system origin with the x-axis pointing forward, the y-axis pointing
starboard, and the z-axis pointing down (to complete a right handed system8). The
"entity coordinate system" defined in the IEEE 1278.1-1995 standard uses the same axis
directions, but the coordinate system origin is at the center of the entity bounding
volume. In both of these cases the Euler angles in the x–y–z convention are called the
Tait-Bryan angles and the angle names roll, pitch, and yaw are specifically used.
The Euler angle x–y–z orientation convention is used to specify orientation in DIS
packets as specified in the IEEE 1278.1-1995 standard [2]. In that standard Euler
angles are defined as the successive rotations needed to transform from the world
coordinate system to the entity coordinate system. In that standard, the world
coordinate system is the WGS84 Geocentric SRF and the entity coordinate system is as
shown in Figure 7. The specified rotation sequence is the Tait-Bryan angles rotation with
respect to the body-fixed (rotating) entity frame, shown in Equation (1.10), or the spacefixed equivalent shown in Equation (1.9). To express a world frame coordinate in the
entity coordinate frame, the inverse of that rotation is the required orientation operator
(Equation (1.11)). The corresponding matrix operator (see 3.2.4.2) is denoted in the
IEEE 1278.1-1995 standard as [ R ]w→b .
3.2.3.3
Gimbal lock
The term gimbal lock refers to a gyroscope mounted in three nested gimbals to provide
three degrees of rotational freedom. Each mounting scheme corresponds to an Euler
angle convention. In any such mounting scheme, there exist critical angles for the
middle gimbal that reduce the rotational degrees of freedom from three to two. In those
critical configurations, the gimbals lie in a single plane and rotation within that plane is
"locked out" by the gimbal mechanism. This loss of a degree of freedom is termed
"gimbal lock".
The case of the Euler angle z -x -z rotation convention, it is assumed that the xy-plane
% % -plane intersect in a line (the line on nodes). That assumption is met when
and xy
(modulo 2π) β ≠ 0 and β ≠ π . If not, β = 0 or β = π and the consecutive rotations
collapse down to a single principal rotation:
β = 0 : Rz (γ ) Rx ( 0 ) Rz (α ) = Rz (γ ) Rz ( α ) = Rz (γ + α )
.
β = π : Rz (γ ) Rx ( π ) Rz (α ) = Rz (γ ) Rz ( −α ) = Rz (γ − α )
(1.12)
This situation is illustrated by a spinning table top. The top spins on its spin-axis and
precesses about the precession-axis. The angle between the spin- and precession-axes
is the nutation angle. When the spin-axis is perfectly vertical (either upright or upside
down), the nutation angle is 0 or π and the spin- and precession-axes become
indistinguishable from each other as indicated in Equation (1.12).
8
In this axis assignment, positive pitch tilts the aircraft up (angle of attack), and if the x-axis aligns
with local North, yaw corresponds to heading and azimuth.
16
The case of the Euler angle z-y-x convention (Tait-Bryan angles) it is assumed that the
% % -plane intersect in a line (the line of nodes). That assumption is met
xy-plane and yz
when θ ≠ ± π 2 modulo 2π. If not, θ = ± π 2 and the x% -axis becomes parallel to the zaxis and the consecutive rotations collapse down to a single principal rotation:
⎛π ⎞
Rz (ψ ) R y ⎜ ⎟ Rx (φ ) = Rz (ψ + φ )
⎝2⎠
.
⎛ −π ⎞
θ = − π 2 : Rz (ψ ) R y ⎜
⎟ Rx (φ ) = Rz (ψ − φ )
⎝ 2 ⎠
θ = +π 2:
(1.13)
This situation is illustrated by an aircraft as in Figure 7. When the aircraft either climbs
vertically, or dives vertically, roll-rotation cannot be distinguished from (plus or minus)
yaw-rotation. This occurs at critical pitch angles of θ = ± π 2 as indicated in Equation
(1.13).
3.2.4 Rotation and orientation matrices
A rotation (or orientation) operation on vector space is a linear operation, thus for a given
basis, it has a matrix representation (see the direction cosine matrix definition in 3.1). If
R is a rotation (or orientation) matrix, it satisfies these properties:
det ( R ) = 1
R T = R -1
(1.14)
Matrices satisfying these properties form an algebraic group with respect to matrix
multiplication. This group is known as the special orthogonal group of degree 3, SO(3).
In particular, the product of any two rotation matrices is itself a rotation matrix and
similarly for orientation matrices. (Note: Matrix multiplication is generally not
commutative).
A rotation operation may be realized by simple matrix multiplication: r ′ = Rr . The
inverse operation is r = R T r ′ . While this is computationally convenient, the matrix
representation does not lend itself well to intuitive visualization of the corresponding
rotation. According to Euler's rotation theorem, there exists an axis-angle pair ( n, θ ) for
which R is the matrix representation of the rotation operator Rn (θ ) . Finding this pair
( n, θ )
involves the computational problem of finding the eigenvalues of R (see
Appendix E).
For this and other reasons, it is useful to able to factor a given rotation matrix into a
product of rotation matrices corresponding to a sequence of principal rotations. In
general, a rotation matrix can be factored into three or less principal rotations called
principal factors of the rotation. In particular, a rotation matrix has a factorization for
each of the Euler angle convention of sequences of principal rotations.
17
The matrix forms of the principal rotations (and orientations) are:
0
0 ⎞
⎛1
⎜
⎟
Rx (α ) = Ω x (α ) = ⎜ 0 cos α − sin α ⎟ ,
⎜ 0 sin α cos α ⎟
⎝
⎠
⎛ cos β 0 sin β ⎞
⎜
⎟
T
1
0 ⎟ , and
Ry ( β ) = Ω y ( β ) = ⎜ 0
⎜ − sin β 0 cos β ⎟
⎝
⎠
T
Rz (γ ) = Ωz (γ ) =
T
⎛ cos γ
⎜
⎜ sin γ
⎜ 0
⎝
− sin γ
cos γ
0
0⎞
⎟
0⎟.
1 ⎟⎠
(1.15)
NOTE: We are using R to denote the rotation operation that moves a point by rotation,
and Ω to denote the orientation operation that transforms a coordinate in a coordinate
system into a coordinate in a coordinate system that is rotated with respect to the first
coordinate system.
The next two sections will deal with matrix factorizations corresponding to Euler angle in
z–x–z convention and the Euler angle z–y–x convention (Tait-Bryan angles).
3.2.4.1
Euler angle z -x -z convention matrix factorization
⎛ a11 a12
⎜
To factor a matrix M = ⎜ a21 a22
⎜a
⎝ 31 a32
a13 ⎞
⎟
a23 ⎟ that belongs to SO(3) into a sequence of
a33 ⎟⎠
principal factors in the Euler angle z -x -z rotation convention9 Rz (γ ) Rx ( β ) Rz (α ) ,
expand the sequence by multiplying the corresponding matrix forms (Equation (1.15)).
The resulting matrix is:
Rz (γ ) Rx ( β ) Rz (α ) =
⎛ cos α cos γ − cos β sin α sin γ
⎜
⎜ cos β sin α cos γ + cos α sin γ
⎜
sin β sin α
⎝
− sin α cos γ − cos β cos α sin γ
cos β cos α cos γ − sin α sin γ
sin β cos α
sin β sin γ ⎞
⎟
− sin β cos γ ⎟
⎟
cos β
⎠
(1.16)
9
Note that the order of applying each of principal rotations is right-to-left so that the
Rz (α ) rotation is conceptually performed first, but matrix multiplication is associative.
18
Matching the elements of this matrix to those of M, we find that a33 = cos β ,
a31 a32 = tan α , and a13 ( −a23 ) = tan γ . These equations lead to the solutions in Table
1 based on the value of a33 .
Table 1 – Principal factors for z-x-z rotation
Principal factors for rotation Rz (γ ) Rx ( β ) Rz (α )
Case
(all angles modulo 2π)
β = arccos ( a33 )
[
principal value
]
0<β <π
a33 ≠ ±1
β = arccos ( a33 )
[ 2π − principal value ]
π < β < 2π
α=
γ =
arctan2 ( a31, a32 )
arctan2 ( a13 , − a23 )
α=
γ =
arctan2 ( − a31, − a32 )
arctan2 ( − a13 , a23 )
a33 = −1
β =π
any value of α
a33 = +1
β =0
any value of α
γ =
arctan2 ( a21, a11 ) + α
γ =
arctan2 ( a21, a11 ) − α
In the case a33 ≠ ±1 , arccos() is multi-valued so that there are two valid solution sets
depending on the quadrants selected for arccosine values10. The principal value solution
is the commonly used one. The two argument arctangent function arctan2() is defined in
section 1.2.
In the case a33 = −1 , using the trigonometric identities for the difference of angles and
substituting for β = π , sin β = 0 and cosθ = −1, the matrix expression reduces to :
⎛ cos (γ − α )
sin (γ − α ) 0 ⎞
⎜
⎟
Rz (γ ) R y (π ) Rz (α ) = ⎜ sin (γ − α ) − cos (γ − α ) 0 ⎟ .
⎜
0
0
−1⎟⎠
⎝
10
Note that computer library functions such as acos() return the principal value only. The second
solution for β may obtained by subtracting the principal value from 2π .
19
This shows that only the difference of the other two angles is determined as
γ − α = arctan2 ( a21, a11 ) . Therefore, all values are valid for α if we set
γ = arctan2 ( a21, a11 ) + α . The case a31 = +1 is similar to the previous case with the
sum of the angles determined by γ + α = arctan2 ( a21, a11 ) . These two cases
correspond to Equation (1.12) , and are the gimbal lock cases.
To factor the matrix M into a sequence of principal factors in the Euler angle z -x -z
orientation convention Ωz (α ) Ωx ( β ) Ωz (γ ) , the corresponding orientation matrices in
Equation (1.15) are multiplied out to the form:
Ωz (α ) Ω x ( β ) Ωz (γ ) =
⎛ cos α cos γ − cos β sin α sin γ
⎜
⎜ − sin α cos γ − cos β cos α sin γ
⎜
sin β sin γ
⎝
cos β sin α cos γ + cos α sin γ
cos β cos α cos γ − sin α sin γ
− sin β cos γ
sin β sin α ⎞
⎟
sin β cos α ⎟
cos β ⎟⎠
(1.17)
This matrix is the transpose of the rotation case (Equation (1.16)). The solutions for the
principal factor angles are shown in Table 2.
Table 2 – Principal factors for z-x-z orientation
Principal factors for orientation Ωz (α ) Ωx ( β ) Ωz (γ )
Case
(all angles modulo 2π)
β = arccos ( a33 )
[
principal value
]
0<β <π
a33 ≠ ±1
β = arccos ( a33 )
[ 2π − principal value ]
π < β < 2π
α=
γ =
arctan2 ( a13 , a23 )
arctan2 ( a31, − a32 )
α=
γ =
arctan2 ( − a13 , − a23 )
arctan2 ( − a31, a32 )
a33 = −1
β =π
any value of α
a33 = +1
β =0
any value of α
γ =
arctan2 ( a12 , a11 ) + α
γ =
arctan2 ( a12 , a11 ) − α
20
As in the rotation factorization, for case a31 ≠ ±1, arccos() is multi-valued so that there
are two valid solution sets depending on the quadrant selected for arccosine values. The
principal value solution is the commonly used one. Here as well, the extreme values
a31 = ±1 are the gimbal lock cases (see above).
As can be seen in the preceding tables, the three angle sequence corresponding to a
given rotation or orientation operator is not unique modulo 2π. Two sequences,
(α1, β1,γ 1 ) and (α 2, β 2,γ 2 ) of z-x-z principal factors specify the same operator if they
satisfy one the criteria of the next Table.
Table 3 – Equivalence of z-x-z principal factor sequences
Criteria for the equivalence of
angle sequences (α1, β1, γ 1 ) and (α 2 , β 2 , γ 2 ) for
Case
equality
modulo 2π
principal factor z-x-z sequences
[ β1, β 2 ≠ 0 or π]
β1 = β 2
α1 = α 2 , γ 1 = γ 2
β 1 + β 2 = 2π
α 2 − α1 = π, γ 2 − γ 1 = π
β1 = β 2 = π
α1 − γ 1 = α 2 − γ 2
equality modulo 2π
β1 = β 2 = 0
α1 + γ 1 = α 2 + γ 2
equality modulo 2π
3.2.4.2
(in)equalities modulo 2π
[ β1, β 2 ≠ 0 or π]
(in)equalities modulo 2π
Tait-Bryan angles matrix factorization
⎛ a11 a12
⎜
To factor a matrix M = ⎜ a21 a22
⎜a
⎝ 31 a32
a13 ⎞
⎟
a23 ⎟ that belongs to SO(3) into a sequence of
a33 ⎟⎠
principal factors in the Euler angle z-y-x rotation convention (Tait-Bryan angles)
Rz (ψ ) R y (θ ) Rx (φ ) , we multiply the corresponding principal rotation matrices
(Equation (1.16)) to obtain:
21
Rz (ψ ) R y (θ ) Rx (φ ) =
⎛ cosψ cos θ
⎜
⎜ sinψ cos θ
⎜ − sinθ
⎝
cosψ sin θ sin φ − sinψ cos φ
sinψ sinθ sin φ + cosψ cos φ
cos θ sin φ
cosψ sinθ cos φ + sinψ sin φ ⎞
⎟
sinψ sinθ cos φ − cosψ sin φ ⎟
⎟
cosθ cos φ
⎠
(1.18)
Matching the elements of this matrix to those of M we find that a31 = − sinθ ,
a32 a33 = tan φ , and a21 a11 = tanψ . These equations lead to the solutions in Table 4
for the principal factor angles based on the value of a31 .
Table 4 – Principal factors for z-y-x rotation
Principal factors for rotation Rz (ψ ) R y (θ ) Rx (φ )
Case
(all angles modulo 2π)
θ = arcsin ( −a31 )
φ = arctan2 ( a32, a33 )
[ principal value ]
−π 2 <θ < π 2
ψ =
arctan2 ( a21, a11 )
a31 ≠ ±1
θ = arcsin ( −a31 )
[
π − principal value
]
φ = arctan2 ( −a32 , − a33 )
π 2 < θ < 3π 2
a31 = −1
θ =π 2
a31 = +1
θ = −π 2
φ=
arctan2 ( a12 , a13 ) + ψ
φ=
arctan2 ( −a12 , − a13 ) − ψ
ψ =
arctan2 ( − a21, − a11 )
any value of ψ
any value of ψ
22
In the case a31 ≠ ±1, arcsin() is multi-valued so that there are two valid solution sets
depending on the quadrant selected for arcsine values11. The principal value solution is
the commonly used one.
In the case a31 = −1, using the trigonometric identities for the difference of angles and
substituting sinθ = 1 and cosθ = 0 , the matrix reduces to :
⎛ 0 sin (φ − ψ ) cos (φ − ψ ) ⎞
⎜
⎟
⎛ π⎞
Rz (ψ ) R y ⎜ ⎟ Rx (φ ) = ⎜ 0 cos (φ − ψ ) − sin (φ − ψ ) ⎟ .
⎝ 2⎠
⎜ −1
⎟
0
0
⎝
⎠
This shows that only the difference of the other two angles is determined as
φ − ψ = arctan2 ( a12 , a13 ) . Therefore, all values are valid for ψ if we set
φ = arctan2 ( a12 , a13 ) + ψ . The case a31 = +1 is similar to the previous case with the
sum of the angles determined by φ + ψ = arctan2 ( −a12 , − a13 ) . These two cases
correspond to Equation (1.13) and are the gimbal lock cases.
To factor matrix M into a sequence of principal orientation factors of the form
Ω x (φ ) Ω y (θ ) Ωz (ψ ) , multiply the corresponding principal factor matrices to obtain:
Ω x (φ ) Ω y (θ ) Ωz (ψ ) =
cosψ cos θ
⎛
⎜
⎜ cosψ sin θ sin φ − sinψ cos φ
⎜ cosψ sinθ cos φ + sinψ sin φ
⎝
sinψ cos θ
sinψ sinθ sin φ + cosψ cos φ
sinψ sinθ cos φ − cosψ sin φ
− sinθ ⎞
⎟
cos θ sin φ ⎟
cosθ cos φ ⎟⎠
(1.19)
Note that this matrix is just the transpose of Rz (ψ ) R y (θ ) Rx (φ ) so that solutions use
transposed elements as shown in Table 5.
In the Table 5 case a31 ≠ ±1, arcsin() is multi-valued so that there are two valid solution
sets depending on the quadrant selected for arcsine values. The principal value solution
is the commonly used one. The cases a31 = ±1 are the gimbal lock cases (see above).
11
Note that computer library functions such as asin() return the principal value only. The second
solution for θ may obtained by subtracting the principal value from π .
23
Table 5 – Principal factors for x-y-z orientation
Principal factors for orientation Ω x (φ ) Ω y (θ ) Ωz (ψ )
Case
(all angles modulo 2π)
θ = arcsin ( −a13 )
φ=
[ principal value ]
−π 2 <θ < π 2
a13 ≠ ±1
θ = arcsin ( −a13 )
[
π + principal value
π 2 < θ < 3π 2
a13 = −1
θ =π 2
a13 = +1
θ = −π 2
]
ψ =
arctan2 ( a23 , a33 )
arctan2 ( a12 , a11 )
φ=
ψ =
arctan2 ( −a23 , − a33 )
φ=
arctan2 ( a21, a31 ) + ψ
φ=
arctan2 ( −a21, − a31 ) − ψ
arctan2 ( − a12 , − a11 )
any value of γ
any value of γ
As can be seen in Table 4 and Table 5, the three angle sequence corresponding to a
given rotation or orientation operator is not unique modulo 2π. Two such sequences,
(α1, β1,γ 1 ) and (α 2, β 2,γ 2 ) specify the same operator if they satisfy one the criteria of
Table 6.
24
Table 6 – Equivalence of z-y-x rotation or x-y-z orientation principal factor sequences
Case
equality
modulo 2π
θ1 = θ 2
(
π
2
θ1 = θ 2 = −
π
2
)
(
)
z-y-x rotation or x-y-z orientation sequences
π
⎡
⎤
⎢θ1 ≠ ± 2 ≠ θ 2 ⎥
⎣
⎦
φ1 = φ2 , ψ 1 = ψ 2
θ1 + θ 2 = π
θ1 = θ 2 =
Criteria for the equivalence of
angle sequences φ 1,θ1,ψ 1 and φ 2 ,θ 2 ,ψ 2 for principal factor
φ2 − φ1 = π, ψ 2 − ψ 1 = π
(in)equalities modulo 2π
π
⎡
⎤
⎢θ1 ≠ ± 2 ≠ θ 2 ⎥ (in)equalities modulo 2π
⎣
⎦
φ1 − ψ 1 = φ2 − ψ 2
equality modulo 2π
φ1 + ψ 1 = φ2 + ψ 2
equality modulo 2π
Factorizations for other Euler angle conventions may be obtained in a similar fashion.
3.2.5 Quaternions
In this section the definition of quaternions is presented. It is then shown that each
quaternion induces a rotation operator. The importance of the algebraic structure of the
quaternions is that rotations behave well under these operations.
3.2.5.1
Quaternion notations and conventions
The quaternions are a 4-dimensional vector space together with a vector multiplication
operation that forms a non-commutative associative algebra. In analogy to complex
numbers that are written as a + ib, i 2 = −1 , quaternion axes i, j, k, are defined with the
following relationships: i 2 = j 2 = k 2 = ijk = −1 . A quaternion q is denoted as
q = e0 + e1i + e2 j + e3 k . The first term e0 is called the “real” (or “scalar”) part of q and
e1i + e2 j + e3 k is called the “imaginary” (or “vector”) part of q .
There are several other conventions used to denote a quaternion. To distinguish
conventions in this document, the e0 + e1i + e2 j + e3 k convention will be called the
Hamilton form. The scalar vector form uses an ordered pair of a scalar and 3-tuple
vector q = ( e0 , e ) . The scalar is the real part of q and the vector corresponds to the
imaginary part of q , e = ( e1, e2 , e3 ) . As can be seen below, the scalar vector form
T
25
allows for some compact notation. (NOTE: In the literature, the order is sometimes
reversed: q = ( e,e0 ) .)
Another convention is the 4-tuple form which is just the 4-tuple of scalar numbers
q = ( e0 , e1, e2, e3 ) . Formulations below will be given in each of these three notational
conventions. (NOTE: In the literature, the real part is sometimes placed last:
q = ( e1, e2, e3 , e4 ) where e4 = e0 . )
3.2.5.2
Quaternion algebra
Let p = d0 + d1i + d 2 j + d3 k and q be two quaternions and let t be a scalar.
Quaternion addition and scalar multiplication (in each notational convention) is defined
as usual for 4D vector space:
p + tq = ( d 0 + te0 ) + ( d1 + te1 ) i + ( d 2 + te2 ) j + ( d 3 + te3 ) k
[Hamiltion form]
= ( d 0 + te0 , d + te )
[scalar vector form]
= ( d 0 + te0 , d1 + te1, d 2 + te2 , d 3 + te3 )
[4-tuple form]
Assuming associative multiplication, the quaternion axes relationships gives the
quaternion multiplication rule (in each notational convention):
pq = ( d 0 e0 − d1e1 − d 2 e2 − d 3 e3 )
+ ( d1e0 + d 0 e1 + d 2e3 − d 3 e2 ) i
+ ( d 2e0 + d 0 e2 + d 3 e1 − d1e3 ) j
[Hamiltion form]
+ ( d 3 e0 + d 0 e3 + d1e2 − d 2 e1 ) k
= ( ( d 0 e0 − d • e ) , ( e0 d + d 0 e + d × e ) )
[Scalar vector form]
⎛ ( d 0 e0 − d1e1 − d 2 e2 − d 3 e3 ) ,
⎞
⎜
⎟
( d1e0 + d0e1 + d 2e3 − d3e2 ) ,
⎜
⎟
=⎜
[4-tuple form]
⎟
( d 2e0 + d0e2 + d3e1 − d1e3 ) ,
⎜
⎟
⎜
( d3e0 + d0e3 + d1e2 − d 2e1 ) ⎟⎠
⎝
(1.20)
Quaternion multiplication is not commutative (note the cross product term in the scalar
vector form is anti-symmetric). However, the quaternion addition and multiplication
operations together form an associative algebra.
26
The conjugate of a quaternion q is defined analogously with complex numbers:
q∗ = e0 − e1i − e2 j − e3 k [Hamiltion form]
[scalar vector form]
= ( e0 , −e )
= ( e0 , −e1, −e2 , −e3 )
[4-tuple form]
(1.21)
The product of a quaternion with its conjugate is "pure-real" and is called the norm of q :
qq∗ = q∗q = e02 + e12 + e22 + e32
= (e + e + e + e , 0)
2
0
2
1
2
2
2
3
[Hamiltion form]
[scalar vector form]
= ( e02 + e12 + e22 + e32 , 0, 0, 0 ) [4-tuple form]
The modulus of a quaternion is defined as the square root of the norm:
q = qq∗ = e02 + e12 + e22 + e32 .
A quaternion q is a unit quaternion if q = 1. In that case qq∗ = q∗q = 1 which implies
that, for a unit quaternion, its conjugate is its multiplicative inverse q −1 = q ∗ . More
generally, the inverse of a (non-unit) quaternion p is p −1 =
p∗
p∗
=
.
2
pp∗
p
If q = ( e0 , e ) is a unit quaternion, then q may be expressed in the form:
q = ( cos (α ) , sin (α ) n )
where:
n=
1
e is a unit vector in 3D space,
e
α = arctan2 ( e , e0 ) , and
e = e12 + e22 + e32
(1.22)
Note: The two argument arctangent function arctan2() is defined section 1.2.
27
3.2.5.3
Quaternion operators on 3D Euclidean space
Each quaternion q corresponds to a linear operator on 3D Euclidean space as follows:
Let r = ( r1, r2 , r3 ) be a point in 3D Euclidean space, then the corresponding quaternion is
formed by using 0 for the real part and r for the complex part ( 0, r ) . A unit quaternion
q operates on ( 0, r ) by left multiplying with q and right multiplying with its conjugate
q∗ . It is shown in Appendix C that the real part of the product q ( 0, r ) q∗ = ( r0′, r ′ ) , is 0.
∗
Thus, q ( 0, r ) q = ( 0, r ′ ) and the quaternion q associates r ′ with r . Symbolically the
operation on r is:.
{
}
r a r ′ = imaginary part q ( 0, r ) q ∗ .
(1.23)
In terms of q = ( e0 , e ) it is also shown in Appendix C that
(
)
r ′ = e02 − e • e r + 2 ( e • r ) e + 2e0 e × r .
(1.24)
Note that −q = ( −e0 , −e ) produces the same r ′ so that q and −q produce equivalent
rotations.
Since q is a unit quaternion, there exists (Equation (1.22)) an angle α satisfying
q = ( cos (α ) , sin (α ) n ) . By substitution in Equation (1.24):
r ′ = ( cos2 (α ) − sin2 (α ) n • n ) r + 2 sin2 (α )( n • r ) n + 2 cos (α ) sin (α ) n × r
if θ = 2α , then
cos (θ ) = cos2 (α ) − sin2 (α ) = 1 − 2 sin2 (α ) , and
sin (θ ) = 2 cos (α ) sin (α ) , so that
r ′ = cos (θ ) r + (1 − cos (θ ) ) ( n • r ) n + sin (θ ) n × r
This last expression is Rodrigues’ rotation formula (Equation (1.3)) for a counterclockwise rotation about axis n through angle θ , thus quaternion operation on r is a
rotation operation. Unit quaternions in scalar vector form are often written as
⎛
⎛θ ⎞
⎛θ ⎞ ⎞
q = ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ n ⎟ to indicate the corresponding rotation angle θ (see Equation
⎝2⎠
⎝ 2⎠ ⎠
⎝
(1.22)).
28
Let p be any non-zero quaternion and let q =
then p ( 0, r ) p −1 = p ( 0, r )
p∗
p
2
p
p
2
be its corresponding unit quaternion,
p
p∗
0,
r
( ) = q ( 0, r ) q∗ .
p
p
=
−1
This shows that any non-zero quaternion performs a rotation with the p ( 0, r ) p
operation and that this rotation is identical to the rotation performed by the
−1
∗
corresponding unit quaternion q ( 0, r ) q = q ( 0, r ) q . For this reason, some authors
−1
use p ( 0, r ) p operations for any non-zero quaternion while other restrict the set to unit
∗
quaternions only and use the q ( 0, r ) q operator. Note, however, that Equations (1.22)
and (1.24) assume a unit quaternion. A unit quaternion in 4-tuple form is also called the
Euler parameters (or the Euler-Rodrigues parameters) of a rotation.
The quaternion representation of rotation facilitates the computation of the composition
of two rotations. If q1 and q2 are two unit quaternions, the composite rotation on r is
obtained by first rotating with the rotation operation induced by q1 and then rotating the
result with the rotation operation induced by q2 . This composite rotation is the same as
the single rotation induced by the quaternion product q2q1 since
q2 {q1 ( 0, r ) q1∗} q2∗ = q2q1 ( 0, r ) q1∗q2∗ = {q2q1}( 0, r ){q2q1} .
∗
3.2.5.4
Quaternions in matrix forms
A quaternion q = ( e0 , e1, e2 , e3 ) can also be represented as a 2x2 complex matrix or a 4x4
real matrix.
⎛ e0 + ie1
⎝ −e2 + ie3
The 2×2 complex matrix form is ⎜
⎛ e0
⎜
e1
The 4x4 real matrix form is ⎜
⎜ −e3
⎜⎜
⎝ e2
−e1
e3
e0
−e2
e2
e0
e3
e1
e2 + ie3 ⎞
⎟.
e0 − ie1 ⎠
−e2 ⎞
⎟
−e3 ⎟
.
−e1 ⎟
⎟
e0 ⎟⎠
The advantage of these forms are that quaternion addition and quaternion multiplication
operations are just the usual matrix addition and matrix multiplication operations. The
conjugate q∗ is just the matrix conjugate transpose in the complex 2x2 case and the
matrix transpose in the real 4x4 case.
29
3.2.6 Representation summary
Some important attributes of the representations in this section are summarized in the
following Table.
Table 7 – Summary of representation attributes
Representation type
Data
components
Data
constraints
Ambiguities
(modulo 2π )
( n, θ )
Axis-angle
( n, θ )
Matrix
R
n =1
4
is equivalent to
( −n, − θ ) .
If θ = 0 , n is
indeterminate
9
det ( R ) = 1
R =R
T
-1
None
2 or more
Euler angle
conventions
3
None
z-x-z convention:
see Table 3
Tait-Bryan angles:
see Table 6
Unit
quaternion
q
4
unit
constraint:
qq ∗ = 1
Composition
Inverse
Convert to/from
another
representation
for the
operation.
( n, − θ )
Matrix
multiplication
RT
Convert to/from
another
representation
for the
operation
(see Note 2).
See
Note 1
Quaternion
multiplication.
q∗ or
−q ∗
q
is equivalent to
−q
(see Note 3).
or
( −n, θ )
Note 1: In the Euler angle z-x-z rotation convention
⎡⎣ Rz (γ ) R x ( β ) Rz (α ) ⎤⎦
-1
= Rz ( −α ) R x ( − β ) Rz ( −γ ) = Ωz (α ) Ω x ( β ) Ωz (γ )
In the Euler angle z-y-x rotation convention (Tait-Bryan angles)
⎡ Rz (ψ ) R y (θ ) Rx (φ ) ⎤
⎣
⎦
-1
= Rx ( −φ ) R y ( −θ ) Rz ( −ψ ) = Ω x (φ ) Ω y (θ ) Ωz (ψ )
Note 2: The composition of Euler angle operations may also be performed in a "direct"
method that involves expressions that use combinations of forward and inverse
trigonometric functions.
Note 3: Formulae such as Equation (1.24) require the unit quaternion constraint. Other
useful relationships such as Equation (1.23) do not have that requirement. For that
reason, some applications do not enforce the unit constraint. In the unconstrained case,
every non-zero scalar multiple of a given quaternion is rotationally equivalent to it.
30
3.3 Performing a rotation on an arbitrary point (formulae)
3.3.1 Rotation about the origin
A point represented by vector r is rotated to a new position represented by vector r'.
Using the rotation matrix representation
The rotated point is obtained by matrix multiplication.
r′ = R r
Using Euler angle sequences
Euler angles are first converted to a matrix (section 3.4.1 below). For the Euler angle
z -x -z rotation convention, use the matrix in Equation (1.16). For the Euler angle z–y–x
rotation convention (Tait-Bryan angles), use the matrix in Equation (1.18).
In either convention, conversion to quaternion may also be used (see section 3.4.9
below).
Using the axis-angle representation
A counter-clockwise rotation about axis n (a unit vector ) through angle θ is given by
Rodrigues’ rotation formula (Equation (1.2)):
r ′ = cos (θ ) r + (1 − cos (θ ) ) ( r • n ) n + sin (θ ) n × r .
Using the quaternion representation
From Equation (1.24), the rotation specified by unit quaternion q = ( e0 , e ) is:
r ′ = ( e02 − e • e ) r + 2 ( e • r ) e + 2e0 e × r
See also Equation (1.23) for the direct quaternion multiplication method.
3.3.2 Rotation about another point
To perform a rotation of point q about the point p to obtain a rotated point q', let
r = q – p.
Rotate r to r', and then let
q' = r' + p.
31
3.4 Inter-converting between representations (formulae)
3.4.1 Euler angle convention to matrix
The Euler angle z-x-z rotation convention is converted to a matrix R by forming the matrix
product of the corresponding three principal rotation matrices defined in 3.2.2, Equation
(1.15).
R = Rz (γ ) Rx ( β ) Rz (α ) .
The resulting matrix is given in Equation (1.16).
The Euler angle z-x-z orientation convention is converted to a matrix Ω by forming the
matrix product of the corresponding three principal orientation matrices defined in 3.2.2,
Equation (1.15).
Ω = Ωz (α ) Ωx ( β ) Ωz (γ ) .
The resulting matrix is given in Equation (1.17).
The Euler angle z-y-x rotation convention (Tait-Bryan angles) is converted to a matrix R
by forming the matrix product of the corresponding three principal rotation matrices:
R = Rz (ψ ) R y (θ ) Rx (φ ) .
The resulting matrix is given in Equation (1.18).
The Euler angle x-y-z orientation convention (Tait-Bryan angles, IEEE 1278.1-1995
Convention) is converted to a matrix Ω by forming the matrix product of the
corresponding three principal orientation matrices:
Ω = Ω x (φ ) Ω y (θ ) Ωz (ψ ) .
The resulting matrix is given in Equation (1.19).
3.4.2 Matrix to axis-angle
⎛ a11 a12
⎜
Given a rotation matrix R = ⎜ a21 a22
⎜a
⎝ 31 a32
a13 ⎞
⎟
a23 ⎟ , find a corresponding axis-angle
a33 ⎟⎠
representation ( n, θ ) . The following method to find ( n, θ ) is based on Appendix E
where it is shown that:
⎛ ⎛ Trace ( R ) − 1 ⎞ ⎞
⎛ ⎛ ( a + a + a33 ) − 1 ⎞ ⎞
= arccos ⎜ ⎜ 11 22
⎟
⎟
⎟ ⎟⎟ , 0 ≤ θ ≤ π .
⎜
⎟
⎜
2
2
⎠⎠
⎠⎠
⎝⎝
⎝⎝
θ = arccos ⎜ ⎜
There are three cases for the computation of n that depend on the value of θ .
Case θ = 0 : There is no rotation so n is indeterminant.
32
Case 0 < θ < π : Let n =
1
v , where:
v
⎛ a32 − a23 ⎞
⎜
⎟
v = ⎜ a13 − a31 ⎟ .
⎜a −a ⎟
⎝ 21 12 ⎠
In this case, v = 2 sin (θ ) .
Case: θ = π : First find the maximum diagonal element a11, a22 , or a33 of R . Then:
Sub-case: a11 is the maximum. Let v = ( a11 + 1, a12 , a13 ) .
T
Sub-case: a22 is the maximum. Let v = ( a21, a22 + 1, a23 ) .
T
Sub-case: a33 is the maximum. Let v = ( a31, a32 , a33 + 1)
Finally let n =
T
1
v.
v
In all cases, ( −n, − θ ) is a rotationally equivalent solution.
Given an orientation matrix Ω , let R = Ω T and compute ( n, θ ) as above.
3.4.3 Axis-angle to rotation matrix
To convert an axis-angle rotation ( n,θ ) to the corresponding rotation matrix R, use
Rodrigues’ rotation formula (Equation (1.4) or (1.5)):
R = ⎡⎣ I 3×3 + sin (θ ) Sn + (1 − cos (θ ) ) Sn2 ⎤⎦
= ⎡⎣cos (θ ) I 3×3 + (1 − cos (θ ) ) n ⊗ n + sin (θ ) Sn ⎤⎦
(1.25)
where:
⎛ 0
⎜
Sn = ⎜ n3
⎜ −n
⎝ 2
− n3
0
n1
n2 ⎞
⎟
−n1 ⎟
0 ⎟⎠
is the skew-symmetric matrix associated with n (see 1.2).
33
Substituting n = ( n1, n2 , n3 ) in the expansion of R to matrix elements yields:
T
⎛ (1 − cos θ ) n12 + cos θ
⎜
⎜ (1 − cos θ ) n2 n1 + n3 sinθ
⎜ (1 − cos θ ) n3 n1 − n2 sinθ
⎝
(1 − cosθ ) n1n2 − n3 sinθ (1 − cosθ ) n1n3 + n2 sinθ ⎞
⎟
(1 − cosθ ) n22 + cosθ
(1 − cosθ ) n2n3 − n1 sinθ ⎟
(1 − cosθ ) n3 n2 + n1 sinθ (1 − cosθ ) n32 + cosθ ⎟⎠
(1.26)
The orientation matrix corresponding to ( n,θ ) is the transpose matrix: Ω = R T .
3.4.4 Axis-angle to quaternion
Starting with an axis-angle representation ( n,θ ) , where n is a unit vector and angle θ is
a counter-clockwise rotation about n. Let:
⎛θ ⎞
e0 = cos ⎜ ⎟
⎝ 2⎠
⎛ e1 ⎞
⎛ n1 ⎞
⎛θ ⎞
⎛θ ⎞⎜ ⎟
⎜ ⎟
e = ⎜ e2 ⎟ = sin ⎜ ⎟ n = sin ⎜ ⎟ ⎜ n2 ⎟
⎝2⎠
⎝ 2 ⎠⎜ ⎟
⎜e ⎟
⎝ 3⎠
⎝ n3 ⎠
(1.27)
Then the corresponding quaternion is:
q = e0 + e1i + e2 j + e3 k [Hamiltion form]
= ( e0 , e )
[scalar vector form]
= ( e0 , e1, e2 , e3 )
[4-tuple form]
(1.28)
A rotationally equivalent quaternion is –q.
3.4.5 Matrix to quaternion
⎛ a11 a12
⎜
Given a rotation matrix R = ⎜ a21 a22
⎜a
⎝ 31 a32
a13 ⎞
⎟
a23 ⎟ , the corresponding quaternion
a33 ⎟⎠
q = e0 + e1i + e2 j + e3 k [Hamiltion form]
= ( e0 , e )
[scalar vector form]
= ( e0 , e1, e2 , e3 )
[4-tuple form]
is computed as follows:
34
1
1
1 + Trace ( R ) ) = (1 + a11 + a22 + a33 )
(
4
4
2
if e0 > 0,
e02 =
⎛ e1 ⎞
⎛ a32 − a23 ⎞
1 ⎜
⎜ ⎟
⎟
e = ⎜ e2 ⎟ =
a13 − a31 ⎟ ,
⎜
⎜ e ⎟ 4e0 ⎜ a − a ⎟
⎝ 3⎠
⎝ 21 12 ⎠
else e0 = 0,
1
( a22 + a33 ) ,
2
a
a
if e12 > 0,
e2 = 12 , e3 = 13 ,
2e1
2e1
e12 = −
else e1 = 0,
e22 =
1
(1 − a33 ) ,
2
a23
2e2
if e22 > 0,
e3 =
else e2 = 0,
e3 = 1.
A rotationally equivalent quaternion is –q.
3.4.6 Quaternion to matrix
Given a unit quaternion:
q = e0 + e1i + e2 j + e3 k [Hamiltion form]
= ( e0 , e )
[scalar vector form]
= ( e0 , e1, e2 , e3 )
[4-tuple form]
the corresponding rotation matrix is then:
⎛ 1 − 2 ( e22 + e32 ) 2 ( e1e2 − e0e3 ) 2 ( e1e3 + e0 e2 ) ⎞
⎜
⎟
2
2
⎜
R = 2 ( e1e2 + e0 e3 ) 1 − 2 ( e1 + e3 ) 2 ( e2e3 − e0 e1 ) ⎟
⎜
⎟
⎜ 2 ( e e − e e ) 2 ( e e + e e ) 1 − 2 ( e2 + e2 ) ⎟
1 3
0 2
2 3
0 1
1
2 ⎠
⎝
(1.29)
35
Since e02 + e12 + e22 + e32 = 1, the diagonal terms in the matrix can be re-written in the
following equivalent form:
⎛ e02 + e12 − e22 − e32
⎜
R = ⎜ 2 ( e1e2 + e0e3 )
⎜ 2 ( e1e3 − e0e2 )
⎝
2 ( e1e2 − e0e3 )
e −e +e −e
2
0
2
1
2
2
2
3
2 ( e2e3 + e0e1 )
2 ( e1e3 + e0 e2 ) ⎞
⎟
2 ( e2e3 − e0 e1 ) ⎟
e02 − e12 − e22 + e32 ⎟⎠
(1.30)
This equation is derived as follows. Equation (1.24) is:
r ′ = e02 − e • e r + 2 ( e • r ) e + 2e0 e × r .
(
)
This equation in matrix form (see Appendix A) is:
r ′ = ⎡⎣( e02 − e12 − e22 − e32 ) I 3×3 + 2e ⊗ e + 2e0 Se ⎤⎦ r
⎛ 0
⎜
where Se = ⎜ e3
⎜ −e
⎝ 2
−e3
0
e1
e2 ⎞
⎟
−e1 ⎟ .
0 ⎟⎠
is the skew-symmetric matrix associated with e (see 1.2). The expansion of this
expression gives Equation (1.30).
3.4.7 Quaternion to axis-angle
Given a unit quaternion
q = e0 + e1i + e2 j + e3 k [Hamiltion form]
= ( e0 , e )
[scalar vector form]
= ( e0 , e1, e2 , e3 )
[4-tuple form]
the corresponding axis-angle representation ( n, θ ) can be found as follows. Section
3.4.4 shows that the quaternion corresponding to axis-angle ( n, θ ) is
⎛
⎛θ ⎞
⎛θ ⎞ ⎞
q = ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ n ⎟ .
⎝2⎠
⎝ 2⎠ ⎠
⎝
If e0 ≠ 1 , this formulation may be reversed to yield:
( n, θ ) = ( e
e , 2 * arctan2 ( e , e0 )
⎛ e
=⎜
, 2 * arctan2
⎜ 1 − e2
0
⎝
(
)
⎞
1 − e02 , e0 ⎟ .
⎟
⎠
)
If e0 = 1 , θ = 0 and n is indeterminate. In either case, ( −n, − θ ) is a rotationally
equivalent solution.
36
3.4.8 Matrix to Euler angle convention
⎛ a11 a12
⎜
Given a matrix M = ⎜ a21 a22
⎜a
⎝ 31 a32
a13 ⎞
⎟
a23 ⎟ in SO(3), determine the corresponding Euler
a33 ⎟⎠
angles for a given convention.
To factor M in the Euler angle z–x–z rotation convention M = Rz (γ ) Rx ( β ) Rz (α ) use
Table 1.
To factor M in the Euler angle z–x–z orientation convention M = Ωz (α ) Ω x ( β ) Ωz (γ )
use Table 2.
To factor M in the Euler angles z-y-x rotation convention (Tait-Bryan angles)
M = Rz (ψ ) R y (θ ) Rx (φ ) , use Table 4.
To factor M in the Euler angles x-y-z orientation convention (Tait-Bryan angles)
M = Ω x (φ ) Ω y (θ ) Ωz (ψ ) , use Table 5.
3.4.9 Euler angle convention to quaternion
The principal rotations (section 3.2.2) correspond to the following quaternions:
⎛
⎛γ ⎞
⎛γ ⎞ ⎞
Rz (γ ) ↔ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ z ⎟
⎝ 2⎠
⎝2⎠ ⎠
⎝
⎛
⎛β⎞
⎛β⎞ ⎞
R y ( β ) ↔ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ y ⎟
⎝2⎠
⎝2⎠ ⎠
⎝
⎛
⎛α ⎞
⎛α ⎞ ⎞
Rx (α ) ↔ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ x ⎟
⎝2⎠
⎝2⎠ ⎠
⎝
For each Euler convention, multiply the corresponding quaternions. Terms in the
resulting product may be simplified using the orthonormal property of the vector set x, y
and z. and various trigonometric identities.
For the Euler angle z -x -z rotation convention Rz (γ ) Rx ( β ) Rz (α ) , the equivalent
quaternion is the product of three corresponding quaternion factors:
⎛
⎛γ ⎞
⎛γ ⎞ ⎞⎛
⎛β⎞
⎛ β ⎞ ⎞⎛
⎛α ⎞
⎛α ⎞ ⎞
q = ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ z ⎟ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ x ⎟ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ z ⎟
⎝2⎠
⎝ 2⎠ ⎠⎝
⎝2⎠
⎝ 2 ⎠ ⎠⎝
⎝2⎠
⎝ 2⎠ ⎠
⎝
37
When multiplied out with the quaternion multiplication rule (Equation (1.20)), the
expression reduces to:
q = ( e0 , e ) = ( e0 , e1, e2, e3 )
where:
⎛
⎛γ ⎞
⎛α ⎞
⎛γ ⎞
⎛ α ⎞⎞
⎛β⎞
⎛ γ +α ⎞
⎛β⎞
cos ⎜ ⎟
e0 = ⎜ cos ⎜ ⎟ cos ⎜ ⎟ − sin ⎜ ⎟ sin ⎜ ⎟ ⎟ cos ⎜ ⎟ = cos ⎜
⎟
⎝ 2⎠
⎝ 2⎠
⎝ 2⎠
⎝ 2 ⎠⎠
⎝2⎠
⎝ 2 ⎠
⎝ 2⎠
⎝
⎛
⎛γ ⎞
⎛α ⎞
⎛γ ⎞
⎛ α ⎞⎞
⎛β⎞
⎛ γ −α ⎞
⎛β⎞
sin ⎜ ⎟
e1 = ⎜ cos ⎜ ⎟ cos ⎜ ⎟ + sin ⎜ ⎟ sin ⎜ ⎟ ⎟ sin ⎜ ⎟ = cos ⎜
⎟
⎝ 2⎠
⎝ 2⎠
⎝ 2⎠
⎝ 2 ⎠⎠
⎝2⎠
⎝ 2 ⎠
⎝2⎠
⎝
⎛ ⎛γ ⎞
⎛γ ⎞
⎛ α ⎞⎞
⎛β⎞
⎛γ
⎛α ⎞
e2 = ⎜ sin ⎜ ⎟ cos ⎜ ⎟ − cos ⎜ ⎟ sin ⎜ ⎟ ⎟ sin ⎜ ⎟ = sin ⎜
⎝2⎠
⎝ 2⎠
⎝ 2 ⎠⎠
⎝2⎠
⎝
⎝ ⎝ 2⎠
⎛ ⎛γ ⎞
⎛α ⎞
⎛γ ⎞
⎛ α ⎞⎞
⎛β⎞
⎛γ
e3 = ⎜ sin ⎜ ⎟ cos ⎜ ⎟ + cos ⎜ ⎟ sin ⎜ ⎟ ⎟ cos ⎜ ⎟ = sin ⎜
⎝2⎠
⎝ 2⎠
⎝ 2 ⎠⎠
⎝2⎠
⎝
⎝ ⎝ 2⎠
−α ⎞
⎛β⎞
sin ⎜ ⎟
⎟
2 ⎠
⎝2⎠
+α ⎞
⎛β⎞
cos ⎜ ⎟
⎟
2 ⎠
⎝2⎠
∗
Note that −q is also a solution. The conjugate q = ( e0 , −e ) = ( e0 , −e1, −e2 , −e3 ) is the
quaternion representation of the orientation operator Ωz (α ) Ωx ( β ) Ωz (γ ) .
For the Euler angle z-y-x rotation convention (Tait-Bryan angles) Rz (ψ ) R y (θ ) Rx (φ ) ,
the equivalent quaternion is the product of three corresponding quaternion factors:
⎛
⎛ψ ⎞
⎛ψ ⎞ ⎞ ⎛
⎛θ ⎞
⎛θ ⎞ ⎞⎛
⎛φ ⎞
⎛φ ⎞ ⎞
q = ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ z ⎟ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ y ⎟ ⎜ cos ⎜ ⎟ , sin ⎜ ⎟ x ⎟
⎝2⎠
⎝ 2 ⎠ ⎠⎝
⎝ 2⎠
⎝ 2 ⎠ ⎠⎝
⎝ 2⎠
⎝ 2⎠ ⎠
⎝
When multiplied out, the expression reduces to:
q = ( e0 , e ) = ( e0 , e1, e2, e3 )
where:
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
e0 = cos ⎜ ⎟ cos ⎜ ⎟ cos ⎜ ⎟ + sin ⎜ ⎟ sin ⎜ ⎟ sin ⎜ ⎟
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
e1 = cos ⎜ ⎟ cos ⎜ ⎟ sin ⎜ ⎟ − sin ⎜ ⎟ sin ⎜ ⎟ cos ⎜ ⎟
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
e2 = cos ⎜ ⎟ sin ⎜ ⎟ cos ⎜ ⎟ + sin ⎜ ⎟ cos ⎜ ⎟ sin ⎜ ⎟
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
⎛ψ ⎞
⎛θ ⎞
⎛φ ⎞
e3 = sin ⎜ ⎟ cos ⎜ ⎟ cos ⎜ ⎟ − cos ⎜ ⎟ sin ⎜ ⎟ sin ⎜ ⎟
⎝2⎠
⎝ 2⎠
⎝ 2⎠
⎝2⎠
⎝ 2⎠
⎝ 2⎠
∗
Note that −q is also a solution. The conjugate q = ( e0 , −e ) = ( e0 , −e1, −e2 , −e3 ) is the
quaternion representation of the orientation Ω x (φ ) Ω y (θ ) Ωz (ψ ) . This quaternion
corresponds to the IEEE 1278.1-1995 Convention [2] orientation matrix
Ω x (φ ) Ω y (θ ) Ωz (ψ ) .
38
3.4.10
Quaternion to Euler angle convention
To convert a unit quaternion
q = e0 + e1i + e2 j + e3 k [Hamiltion form]
= ( e0 , e )
[scalar vector form]
= ( e0 , e1, e2 , e3 )
[4-tuple form]
to the Euler angle z–x–z rotation convention Rz (γ ) Rx ( β ) Rz (α ) , compute:
α = arctan2 ( ( e1e3 + e0e2 ) , − ( e2e3 − e0e1 ) )
(
β = arccos 1 − 2 ( e12 + e22 )
)
principal value: 0 < β < π
γ = arctan2 ( ( e1e3 − e0e2 ) , ( e2e3 + e0e1 ) )
(Given this solution, see Table 3 for an equivalent alternate solution.)
(
)
This formulation assumes that 0 ≠ e12 + e22 ≠ 1. Otherwise the conversion is
indeterminate with:
(
)
case e12 + e22 = 0 :
(
)
(
)
β = 0 and α + γ = arctan2 ( e1e2 − e0e3 ) , 21 − ( e22 + e32 )
and
(
)
case e12 + e22 = 1:
β = π and α − γ = arctan2 ( e1e2 − e0e3 ) , 21 − ( e22 + e32 )
To convert to the Euler angle z-y-x rotation convention (Tait-Bryan angles)
Rz (ψ ) R y (θ ) Rx (φ ) , compute:
(
φ = arctan2 ( e2e3 + e0e1 ) , 21 − ( e12 + e22 )
)
θ = arcsin ( −2 ( e1e3 − e0e2 ) ) principal value: − π 2 < θ < π 2
⎛
ψ = arctan2 ⎜ ( e1e2 + e0e3 ) ,
⎝
1
⎞
− e22 + e32 ⎟
2
⎠
(
)
(Given this solution, see Table 6 for an equivalent alternate solution.)
39
This formulation assumes that 2 ( e1e3 − e0e2 ) ≠ ±1. Otherwise the conversion is
indeterminate with:
case 2 ( e1e3 − e0 e2 ) = +1:
θ = −π 2 and φ + ψ = arctan2 ( ( e1e2 − e0e3 ) , ( e1e3 + e0e2 ) )
and
case 2 ( e1e3 − e0e2 ) = −1:
θ = π 2 and φ − ψ = arctan2 ( ( e1e2 − e0e3 ) , ( e1e3 + e0e2 ) )
3.5 Considerations for computational and storage efficiency
The selection of a data representation to implement a rotation or orientation operation is
highly dependent on the memory, storage, and performance requirements of the
application, as well as the hardware and operating system environment. Generally,
there is a tradeoff between data storage size and computational efficiency. A data
transmission application may need to minimize transfer bit rate in contrast to a real time
computer generated animation that may need to constantly compute changing
orientations between scene graph nodes and to manipulate large quantities of vertices.
As the hardware costs of RAM decrease, the requirements for quantity of data items in
memory often tend to increase, and in some cases approach address space limits. The
introduction of 64-bit CPUs and operating systems will remove that address space limit.
Consider the axis-angle representation that uses four scalar parameters n = ( n1, n2 , n3 )
and θ . This representation could also be stored using just three scalars:
s = ( s1, s2, s3 ) = (θ n1, θ n2, θ n3 ) .
This is compact, but reconstruction is computationally expensive. It requires 2 adds, 6
multiplies, 1 divide and 1 square root:
θ = s = s12 + s22 + s32
n=
⎛s s s ⎞
s = ⎜ 1, 2 , 3 ⎟
θ
⎝θ θ θ ⎠
1
Note also that the recovered angle is non-negative so that if the starting θ is negative,
then recovered axis-angle pair is (in terms of the starting values) the reversed sign
equivalent pair: ( −n, − θ ) .
If many points are to be rotated, it should be noted that Rodrigues' rotation formula
requires both the sine and cosine of the angle. Thus, in a computationally intensive
application, it may be advantageous to compute the expensive trigonometric values
once and store them as part of a five scalar axis-angle rotation data storage type:
( s1, s2, s3, s4, s5 ) = ( n1, n2, n3 ,sinθ ,cosθ ) .
If the value of θ itself is required often, it can be stored as a sixth scalar. Otherwise, θ
40
can be reconstructed as θ = arctan2 ( s4 , s5 ) . The ( n1, n2 , n3 ,sinθ ,cos θ ) data type is
also advantageous in converting to and from quaternion representation (see 3.4.4 and
3.4.7), because half angle / double angle trigonometric identities are less
computationally expensive than trigonometric and inverse trigonometric functions.
The composition of two rotations in axis-angle representation is trivial if the two rotations
share the same axis. Otherwise, conversion to and from matrix or quaternion
representation may be required.
Storage of the Matrix representation requires nine scalars. This representation has the
computational advantage that vector rotation is just a matrix-vector multiply operation
requiring only scalar multiply and add instructions. The composition of two rotation
operators is also just a matrix multiplication. This simplicity makes the matrix
representation attractive in many applications in spite of the large storage size.
The quaternion representation is compact requiring only four scalars for storage.
Quaternion multiplication requires only scalar multiply and add instructions. A rotation
operation requires two quaternion multiplications and a composition operation requires
only one quaternion multiply. Compared to Matrix representation, both quaternion point
rotation and quaternion composition require fewer add and multiply instructions.
Quaternions also have an important computational advantage with respect to
interpolation (see below).
The Euler angle conventions are compact, requiring only three scalars for storage, but
are computationally inefficient – conversion to and from another type of representation is
generally required for rotation and composition operations. An additional disadvantage
is the presence of singular points (see 3.2.3.3 - Gimbal lock). The primary importance of
the Euler angle conventions are that many physical systems provide measured data or
are controlled by data in an Euler angle convention.
See [3] for a discussion of the computational costs of various conversions between
representations.
3.6 Interpolation issues
Interpolating between two orientations is important in some types of applications. In
distributed simulations, entity orientations are captured at a fixed rate. Some simulated
visual systems need orientations at a higher frame rate. These intermediate visual
frame rate orientations are interpolated with respect to time between pairs of captured
orientations. Projecting state forward in time (dead reckoning) is a related problem. In
computer 3D animations, key frames are generated. Intermediate frames at the higher
render frame rate are generated by time interpolation between key frames.
Linear interpolation on the parameters of a representation is straightforward, but the
resulting operator valued function of the interpolation parameter may have undesirable
properties. Interpolating Euler angles may produce very indirect and un-natural rotation
sequences and may involve gimbal lock. A linear interpolation of rotation matrices,
(1 − t ) M1 + tM 2, 0 < t < 1 will, in general, not be a rotation matrix.
41
Ken Shoemake defined an interpolation between a pair of quaternions that produces a
uniform rate of rotation change with respect to the interpolation variable. This
interpolation scheme is known as Spherical linear interpolation (SLERP), and is widely
used in computer animation. In [4], SLERP is extended to allow second order
smoothness in a sequence of three or more key frame orientations using splines.
Given two quaternions, q0 and q1 , the SLERP interpolated value Slerp ( q0 , q1, t ) is
given by:
(
Slerp ( q0 , q1, t ) = q0 q 0−1q1
=
)
t
sin ( (1 − t ) θ )
sin (θ )
q0 +
sin ( tθ )
sin (θ )
q1,
where: 0 ≤ t ≤ 1 and cos (θ ) = q0 • q1 and this dot product is the 4-dimensional dot
product.
3.7 Error analysis
One approach to error analysis is to note the behavior of the magnitude of first derivative
terms with respect to input parameters. That study is beyond the present scope. It will
be noted here that in the case of the various Euler angle conventions such magnitudes
tend to blow up near gimbal lock singularities. In contrast, in the case of unit
quaternions, the magnitudes are uniformly bounded. In [5], parameter rates, Jacobians
and linearization are treated for these representations.
42
4 Rotational kinematics
4.1 Rotational velocity and acceleration
Consider first the special case of rotation of a point about a fixed unit vector axis n as a
(
)
differentiable function of time, r ( t ) = Rn θ ( t ) r0 . Assume that the rotation begins at
t = 0 so that θ ( 0 ) = 0 and r ( 0 ) = r0 . By the alternate form of Rodrigues’ rotation
formula (Equation (1.3)):
r ( t ) = Rn (θ ( t ) ) r0 = r0 + (1 − cos (θ ) ) n × ( n × r0 ) + sin (θ ) n × r0 .
The rotational velocity at time t is then:
(
d
d
r (t ) =
r0 + (1 − cos (θ ) ) n × ( n × r0 ) + sin (θ ) n × r0
dt
dt
dθ
dθ
= sin (θ )
n × ( n × r0 ) + cos (θ )
n × r0
dt
dt
)
Thus the velocity is the sum of two vector components. One component n × ( n × r0 )
points toward the rotation axis and the other n × r0 is tangent to the arc or rotation (see
Figure 8).
ω x r0
ω
n x n x r0
r0
n
Figure 8
43
Evaluating at t = 0 gives the instantaneous rotational velocity:
•
•
d
dθ
r (0) =
n × r0 = θ n × r0 = ω × r0 , where ω = θ n .
dt
dt
The rotational acceleration is the second time derivative:
d2
d ⎛
dθ
dθ
⎞
r t = ⎜ sin (θ )
n × ( n × r0 ) + cos (θ )
n × r0 ⎟
2 ( )
dt ⎝
dt
dt
dt
⎠
⎛
⎛
dθ
d 2θ ⎞
dθ
d 2θ
= ⎜ cos (θ )
+ sin (θ ) 2 ⎟ n × ( n × r0 ) + ⎜ − sin (θ )
+ cos (θ ) 2
dt
dt
dt ⎠
dt
⎝
⎝
⎞
⎟ n × r0 .
⎠
Evaluating at t = 0 gives the instantaneous rotational acceleration α :
•
••
•
α = ω = θ n × ( n × r0 ) + θ n × r0 .
The first term in the right hand expression points towards the rotation axis as is called
the centripetal acceleration.
In the general case (in which the rotation axis may vary as function of time), we set
r ( t ) = R ( t ) r0 with the initial condition R ( 0 ) = I 3×3 (that is, r ( 0 ) = r0 ). To compute
•
R=
dR ( 0 )
dt
, we note that as a rotation matrix we have I 3×3 = R ( t ) RT ( t ) so that:
d
d
I 3×3 = ⎡⎣ R ( t ) R T ( t ) ⎤⎦
dt
dt
•
•
0 = R ( t ) RT ( t ) + R ( t ) RT ( t )
•
•
•
At t = 0 , this expression reduces to R ( 0 ) = − R T ( 0 ) , so R ( 0 ) is skew-symmetric and
⎛ 0
⎜
must be in the form R ( 0 ) = ⎜ ω3
⎜ −ω
⎝ 2
d
r ( 0 ) = Sωr = ω × r0 .
we have
dt
•
−ω3
0
ω1
ω2 ⎞
T
⎟
−ω1 ⎟ = Sω where ω = (ω1, ω2, ω3 ) . Thus
0 ⎟⎠
44
4.2 Orientation (Ω), angular velocity (ω), and angular acceleration
(α )
We consider three cases, of increasing complexity, of converting the position (and
motion) of a point described by a body-fixed coordinate system to its description in a
space-fixed coordinate system. The cases are static, rigid motion, and free motion.
Static case:
Consider a rigid body with a body-fixed coordinate system origin at some point C on the
body and let P be another point on the body with body-coordinate vector bP. We are
given sC the space-fixed coordinate vector of point C and the orientation Ω of the body
coordinate system with respect to the space coordinate system (see Figure 9).
v
u
C
sC
y
bP
w
P
sP
x
z
Figure 9
The space coordinate vector sP for the point P can then be computed as:
sP = sC + Ω bP .
In this expression, the term Ω bP is to understood as an orientation operator acting on
bP . The implementation of this operation may depend on the specification of the
orientation. For example Ω bP may be computed:
•
by Rodrigues' rotation formula if the orientation was specified as an axis-angle,
•
by a quaternion operation if the orientation was specified as a quaternion,
•
by matrix multiplication using the directional cosine matrix computed from the
body coordinate system basis vectors in space coordinates, or
•
with a matrix or a quaternion computed from an Euler angle convention
specification of the orientation.
45
While this comment is applicable to all such operations, we shall use matrix and vector
notation in all of the following cases.
Rigid motion case:
In this case the body is in motion so that sC and Ω are functions of time and we have:
sP ( t ) = sC ( t ) + Ω ( t ) bP
vP ( t ) = vC ( t ) + ω ( t ) × bP
aP ( t ) = aC ( t ) + α ( t ) × bP + ω ( t ) × ( ω ( t ) × bP )
where:
•
•
•
•
vP ( t ) = sP ( t ) , vC ( t ) = sC ( t ) ,
aP ( t ) = vP ( t ) , aC ( t ) = vC ( t ) ,
•
ω ( t ) = Ω ( t ) , and
•
α (t ) = ω (t ) .
Note that bP is time independent because it is in fixed position on the rigid body. The
orientation operator Ω converts directions from the body coordinate system to the space
coordinate system, so that its derivatives ω and α have space coordinate system
values. The corresponding values in body coordinates are obtained with the inverse
operator Ω T :
ωB ( t ) = Ω T ( t ) ω ( t )
αB = Ω T ( t ) α ( t )
Free motion case:
In this case, the point P is moving with respect to both coordinate systems. In particular,
•
vP,b ( t ) = bP ( t ) is not identically zero. We have:
sP ( t ) = sC ( t ) + Ω ( t ) bP ( t )
vP ( t ) = vC ( t ) + vP,b ( t ) + ω ( t ) × bP ( t )
aP ( t ) = aC ( t ) + aP,b ( t ) + α ( t ) × bP ( t ) + ω ( t ) × ( ω ( t ) × bP ( t ) ) + 2ω ( t ) × vP,b ( t )
where:
•
aP,b ( t ) = vP,b ( t ) .
(
)
In the expression for aP ( t ) the term ω ( t ) × ω ( t ) × bP ( t ) is identified as the centripetal
acceleration and the term 2ω ( t ) × vP,b ( t ) is identified as the Coriolis acceleration.
46
5 Rigid body dynamics
Consider a rigid body consisting of discrete particles Pi of mass mi and/or volume
elements V with mass density function12 ρ . si ( t ) will denote the coordinate vector at
time t of point Pi in a space coordinate system with respect to the orthonormal basis
x, y, z and bi will denote the same point in a body coordinate system with respect to the
orthonormal basis u, v, w attached to the body (body-fixed). Because the body is rigid,
coordinate vectors bi are independent of time.
The total mass of the body is: M =
∑ mi + ∫∫∫
V
i
The center of mass is located at sCM ( t ) =
ρ dV .
1⎛
⎞
mi si ( t ) + ∫∫∫ ρ ( s ( t ) ) s ( t ) ds ⎟ .
∑
⎜
s∈V
M⎝ i
⎠
We further require that the origin of the body coordinate system coincide with the center
of mass. As a consequence, in body coordinates, the center of mass is the body
coordinate system zero vector:
0=
1 ⎛
⎞
mi bi + ∫∫∫ ρ ( b ) b db ⎟
∑
⎜
b
∈
V
M⎝ i
⎠
If Ω ( t ) is the cosine matrix of u, v, w with respect to x, y, z , then
si ( t ) = sCM ( t ) + Ω ( t ) bi and bi = Ω T ( t ) ⎡⎣ si ( t ) − sCM ( t ) ⎤⎦ ,
and velocities are given by"
•
vi ( t ) = si ( t )
= v ( t ) + ω ( t ) × ( si ( t ) − sCM ( t ) )
= v ( t ) + Ω ( t ) (ωB ( t ) × bi )
•
where v ( t ) = sCM ( t ) and ω ( t ) is the rotational velocity in space coordinates.
12
( )
At a point P the mass density ρ P may expressed as either function of a space coordinate
ρSPACE ( s )
or a body coordinate
ρBODY ( b ) . This notational distinction will not employed as the
context makes it clear which function is intended.
47
•
The linear momentum of a particle is defined by pi = m si = mvi . The total linear
momentum of the body is:
•
P ( t ) = ∑ mi si ( t ) + ∫∫∫
s∈V
i
•
ρ ( s ( t ) ) s ( t ) ds
•
•
⎡ •
⎤
⎡ •
⎤
= ∑ mi ⎢ sCM ( t ) + Ω ( t ) bi ⎥ + ∫∫∫ ρ ( b ) ⎢ sCM ( t ) + Ω ( t ) b ⎥ db
b∈V
⎣
⎦
⎣
⎦
i
•
⎛
⎞ •
⎛
⎞
= ⎜ ∑ mi + ∫∫∫ ρ ( b ) db ⎟ sCM ( t ) + Ω ( t ) ⎜ ∑ mi bi + ∫∫∫ ρ ( b ) b db ⎟
b∈V
b∈V
⎝ i
⎠
⎝ i
⎠
•
•
= M sCM ( t ) + Ω ( t ) 0
= M v (t )
This result:
P = Mv ( t )
shows that total linear momentum is independent of orientation or rotational velocity.
If a point b with mass m is rotating about an axis with (scalar) rotational rate ω , in a circle
of radius r, then its speed is rω and its scalar linear momentum is p = m ( rω ) . The
scalar angular momentum L of b is its scalar linear momentum multiplied by the length r
of its moment arm: L = rp = r 2 mω . The term in this expression that depends only on
the geometric distribution of mass with respect to the rotation axis is the scalar moment
of inertia I = r 2 m . We then have L = I ω . If the rotational axis is determined by a unit
vector n and if the angle between n and b is ϕ , then we note that the length of the
moment arm is r = b sin ϕ = b × n . This motivates the following definitions.
The rotational momentum of particle Pi is defined as Li ( t ) = bi × pi ( t ) . Note that the
rotational momentum is a vector quantity that is perpendicular to both the moment arm
bi and the momentum vector pi . The rotational momentum Li may also be expressed
directly in terms of the rotational velocity:
Li ( t ) = bi × pi ( t ) = bi × mi v ( t ) = mi bi × ωB ( t ) × bi .
(
)
The total rotational momentum of the body is defined as:
LB ( t ) = ∑ mi bi × ( ωB ( t ) × bi ) + ∫∫∫ ρ ( b ) b × ( ωB ( t ) × b ) db
i
The subscript B indicates that the vector values of LB ( t ) are represented in body
coordinates. Since ωB ( t ) varies in time, all the summation and integration in the above
expression needs to be re-evaluated at each time t. However, the above expression is
48
linear in ωB ( t ) and, as shown in Appendix D, it may be factored out to the equivalent
form:
LB ( t ) = I ⊗BωB ( t )
where I ⊗B is the matrix defined as:
I ⊗B = ∑ mi ⎡⎣( bi • bi ) I 3×3 − bi ⊗ bi ⎤⎦ + ∫∫∫ ρ ( b ) ⎡⎣( b • b ) I 3×3 − b ⊗ b ⎤⎦ db
V
i
This matrix is the moment of inertia tensor13. The importance of this matrix is that it is
time independent and needs to be computed only once and reduces the computation of
LB ( t ) to nine multiplications and six additions. Appendix D expands I ⊗B in terms of
body coordinate components:
I ⊗B
where:
⎛ I11
⎜
= ⎜ I12
⎜I
⎝ 13
I12
I 22
I 23
I13 ⎞
⎟
I 23 ⎟
I 33 ⎟⎠
I11 = ∑ mi ( bi2,2 + bi2,3 ) + ∫∫∫ ρ ( b1, b2 , b3 ) ( b22 + b32 ) db
i
I 22 = ∑ mi ( bi2,1 + bi2,3 ) + ∫∫∫ ρ ( b1, b2 , b3 ) ( b12 + b32 ) db
i
I 33 = ∑ mi ( bi2,1 + bi2,2 ) + ∫∫∫ ρ ( b1, b2, b3 ) ( b12 + b22 ) db
i
I12 = −∑ mibi,1bi,2 − ∫∫∫ ρ ( b1, b2, b3 ) ( b1b2 ) db
i
I 23 = −∑ mibi,2bi,3 − ∫∫∫ ρ ( b1, b2 , b3 )( b2b3 ) db
i
I13 = −∑ mibi,1bi,3 − ∫∫∫ ρ ( b1, b2 , b3 )( b1b3 ) db
i
bi = ( bi,1, bi,2 , bi,3 )
b = ( b1, b2 , b3 )
T
T
The coordinate component values depend on the choice of the basis for the body
coordinate system. The only constraint14 imposed on the basis is that it is orthonormal
13
The expression for I ⊗B is bilinear in body coordinates and may therefore be regarded as a
tensor of order 2.
14
Some applications impose additional constraints. For example, in the IEEE 1278.1-1995
standard the first axis in the entity coordinates system must point forward.
49
with its origin at the center of mass. The matrix I ⊗B is symmetric, thus there exists some
basis satisfying the constraint which will diagonalize the matrix and put the diagonal
elements (the eigenvalues) in increasing order. That is, there exists a choice of basis for
which:
I ⊗B
⎛ I11 0
⎜
= ⎜ 0 I 22
⎜0 0
⎝
⎞
⎟
⎟ , and I11 ≤ I 22 ≤ I 33 .
I 33 ⎟⎠
0
0
The coordinate axes of this basis are called the principal axes15 and the diagonal
elements I11, I 22 , and I 33 are called the principal moments of inertia. The use of this
basis reduces the computation of LB ( t ) to three multiplications.
The total rotational momentum in space coordinates is given by:
L (t ) = I⊗ (t ) ω (t ) .
In space coordinates, the moment of inertia tensor is time dependent and is computed
as:
I ⊗ ( t ) = Ω ( t ) I ⊗,B Ω T ( t )
If, in the space coordinate system, the external force acting on particle Pi is Fi ( t )
and/or the external force acting on a volume element is f ( s, t ) , then the total force
acting on the body is:
F ( t ) = ∑ Fi ( t ) + ∫∫∫
s∈V
i
f ( s, t ) ds .
If these forces are expressed in the body coordinate system as FiB ( t ) and fB ( b, t ) ,
then the total force acting on the body is:
FB ( t ) = ∑ FiB ( t ) + ∫∫∫
i
b∈V
fB ( b, t ) db .
The analogue for external rotational force is torque and it is defined as:
τ ( t ) = ∑ ( sCM ( t ) − si ( t ) ) × Fi ( t ) + ∫∫∫ ( sCM ( t ) − s ( t ) ) × f ( s, t ) ds
V
i
τ B ( t ) = ∑ bi × FiB ( t ) + ∫∫∫ b × fB ( b, t ) db
i
15
V
Not to be confused with principal rotations.
50
In Newtonian physics the momentum of a particle is preserved unless an external force
acts on it in which case the relationship between force and momentum is:
Fi ( t ) =
d
Pi ( t )
dt
It follows that the relationship between total force and total momentum is:
d
d
P (t ) = M v (t ) .
dt
dt
F (t ) =
Similarly for torque we have:
τ B ( t ) = ∑ bi × FBi ( t ) + ∫∫∫ b × fB ( b, t ) db
= ∑ bi ×
d
d
pi ( t ) + ∫∫∫ b ×
fB ( b, t ) db
dt
dt
d ⎡
∑ bi × pi ( t ) + ∫∫∫ ρ ( b ) b × ( ωB ( t ) × b ) db ⎤⎦
dt ⎣
d
= LB ( t )
dt
=
In term of rotational inertia we have:
τ (t ) =
d
d
L (t ) = I⊗ ω (t ) .
dt
dt
51
6 Use cases
6.1 DIS Euler angles
This use case is illustrated with the problem of converting aircraft orientation, as
indicated by its onboard inertial system, to Tait-Bryan angles with respect to WGS 84
Geocentric (DIS Euler angles).
Consider an aircraft that at time t0 is stationary on an airfield. Its inertial system is
initialized so that the artificial horizon is level with the ground and the instrument panel
compass north points in the direction of local North. For convenience, its location at t0
shall be called ground zero. The resulting inertial system readouts of roll, pitch and yaw
now indicate the orientation of the aircraft with respect to a Local-centric Euclidian
Frame with origin at ground zero, and x-, y- and z-axes pointing local north, east and
down respectively. This linear-space frame is denoted by E0. At some subsequent time,
the aircraft taxies to the runway, takes off and maneuvers, and at time t1 the roll, pitch
and yaw are read out. These values are to be converted to DIS Euler angles.
The t1 roll, pitch and yaw values correspond to the orientation of one linear-space frame
with respect to another. One is the entity space (the Euclidean frame used for the
aircraft), see Figure 7. The other is the E0 frame. Thus the roll, pitch and yaw values
are the Tait-Bryan angles representation of the orientation of the aircraft coordinate
frame with respect to the E0 frame:
Ω ( t ) Aircraft →E0 .
Let L denote a range coordinate frame consisting of Local Tangent Frame Euclidean
SRF. If we assume that the origin of L is near, or the same as, ground zero (the origin of
E0), then E0 and L are related as shown in the Table below:
Axis
E0 coordinate frame
local tangent frame L
x
points to local North
points to local East
y
points to local East
points to local North
z
points to local down
points to local up
This relationship is expressed as the orientation ΩE0 →L of E0 with respect to L. Some
representations of ΩE0 →L are:
⎛⎛ 1
1
⎝⎝ 2
2
Axis-angle: ( n,θ ) = ⎜ ⎜
⎞ ⎞
0⎟, π⎟
⎠ ⎠
52
(
Tait-Bryan: (φ , θ , ψ ) = 0, π, −π
Matrix: ΩE0 →L
2
)
⎛0 1 0 ⎞
⎜
⎟
= Ω x ( 0 ) Ω y ( π ) Ωz − π = ⎜ 1 0 0 ⎟
2
⎜ 0 0 −1⎟
⎝
⎠
(
⎛
⎛ 1
⎝ 2
Quaternion: ΩE0 →L = ⎜ 0, ⎜
⎜
⎝
1
2
)
⎞
0⎟
⎠
T⎞
⎟
⎟
⎠
Let W denote the WGS 84 geocentric SRF. The orientation of L with respect W is
denoted as:
ΩL → W .
The SRM specifies the computation of the matrix representation of this orientation based
on the WGS 84 geodetic coordinate for the origin of L.
The orientation of the aircraft with respect to W is then given by:
Ω ( t ) Aircraft → W = ΩL → W o ΩE0 →L o Ω ( t )Aircraft →E0 at time t.
In this equation the Ω symbols are orientation operators. The operator compositions
indicated by o are matrix multiplications in the case of matrix representation, or
quaternion multiplication in the case of quaternion representation, etc.
The DIS Euler roll, pitch and yaw values at time t are then just the Tait-Bryan angles for
the orientation Ω ( t ) Aircraft → W in the Euler angle x–y–z orientation convention.
6.2 Rigid body integration of state
In the notation of section 5, define the state of a rigid body system at time t as the
ensemble of the location of the center of mass, the orientation, and the linear and
angular momentums:
Ò( t ) ≡ { sCM ( t ) , Ω ( t ) , P ( t ) , L ( t )}
The problem is to compute Ò( t + ∆t ) for some small time increment ∆t given the
previous state Ò( t ) and system specific functions for total force and torque. In the most
general case, force and torque are functions of time and the state variables. That is:
F ( t ) = F ( t, Ò( t ) )
τ ( t ) = τ ( t, Ò( t ) )
53
This problem has several applications. For example, in distributed simulations, entity
states are locally "dead reckoned" in time steps ∆t until authoritative data has been
distributed. In computer generated animations, object states are integrated in steps of
∆t equal to the frame rate of the animation and covering the time interval of a scene
from beginning to end.
One of many approaches to this problem, is to realize the integration step by setting
each state variable X ( t + ∆t ) to its approximate value X ( t ) + ∆t
dX ( t )
, where
dt
X = sCM, Ω, P, or L . The error of this approximation decreases as ∆t approaches zero.
In particular Ò( t + ∆t ) may be approximated by setting:
∆t
P (t )
M
Ω ( t + ∆t ) = Ω ( t ) + ∆t Sω(t ) Ω ( t )
sCM ( t + ∆t ) = sCM ( t ) +
P ( t + ∆t ) = P ( t ) + ∆t F ( t )
L ( t + ∆t ) = L ( t ) + ∆t τ ( t )
In the expression for Ω the value ω ( t ) is required to determine the corresponding
skew-symmetric matrix Sω( t ) . That requires two auxiliary computations.
I ⊗−1 ( t ) = Ω ( t ) I ⊗−1,B Ω T ( t )
ω ( t ) = I ⊗−1 ( t ) L ( t )
The computation for Ω ( t + ∆t ) , like the other computations, is approximate. The
approximate value may fail the criteria for an orientation matrix
T
( det Ω = 1, and Ω Ω = I 3×3 ), or for a unit quaternion. This will lead to undesirable
results in subsequent iterations, therefore the approximate Ω ( t + ∆t ) value needs to be
adjusted to satisfy the criteria. If the Ω operator is represented with a matrix, this
adjustment can be computationally expensive. This is one reason for the popular use of
unit quaternions. A quaternion is adjusted to a unit quaternion simply by dividing by its
scalar modulus.
54
7 References
[1]
ISO/IEC 18026:2006(E) - Information technology — Spatial Reference Model (SRM),
International Standard ISO/IEC 18026,
http://standards.iso.org/ittf/PubliclyAvailableStandards/
[2]
IEEE Standard for Distributed Interactive Simulation – Application Protocols, Std 1278.11995 standard.
[3]
David Eberly, Rotation Representations and Performance Issues, January 2002, Magic
Software, Inc.
[4]
Ken Shoemake, Animating rotation with quaternion curves, Proceedings of the 12th
annual conference on Computer graphics and interactive techniques table of contents,
pp245 – 254,1985 ACM
[5]
James Diebel, Representing Attitude: Euler Angles, Unit Quaternions, and Rotation
Vectors, Stanford University, California, [email protected], 20 October 2006
55
Appendices
Appendix A – Properties of the vector cross product
Definition:
u × v = ( u2v3 − u3v2 , u3v1 − u1v3 , u1v2 − u2v1 )
T
Note that v × u = −u × v so that the cross production is not a commutative operation.
u × v = u v sinθ
where θ is the angle between the two vectors.
The following identity is called Lagrange’s formula:
u × (v × w ) = (u • w ) v − (u • v ) w
The cross product can be computed as a matrix multiplication. For each vector u there
⎛ 0
⎜
corresponds a skew-symmetric matrix Su = ⎜ u3
⎜ −u
⎝ 2
−u3
0
u1
u2 ⎞
⎟
−u1 ⎟ such that u × v = Suv .
0 ⎟⎠
A special case of Lagrange's formula is:
u × ( u × w ) = ( u • w ) u − ( u • u) w .
If w = ( w1, w2 , w3 ) , u = ( u1, u2 , u3 ) , then:
T
T
⎛ u1 ⎞
( u • w ) u = ( u1w1 + u2 w2 + u3 w3 ) ⎜⎜ u2 ⎟⎟
⎜u ⎟
⎝ 3⎠
⎛ u1u1w1 + u1u2 w2 + u1u3 w3 ⎞
⎜
⎟
= ⎜ u2u1w1 + u2u2 w2 + u2u3 w3 ⎟
⎜u u w + u u w + u u w ⎟
3 3 3⎠
⎝ 3 1 1 3 2 2
⎛ u1u1 u1u2 u1u3 ⎞ ⎛ w1 ⎞
⎜
⎟⎜ ⎟
= ⎜ u2u1 u2u2 u2u3 ⎟ ⎜ w2 ⎟
⎜u u u u u u ⎟⎜ w ⎟
3 3 ⎠⎝ 3 ⎠
⎝ 3 1 3 2
= ( u ⊗ u) w
56
It follows that:
u × ( u × w ) = ( u ⊗ u) w − ( u • u) w
= ⎡⎣( u ⊗ u ) − ( u • u ) I 3×3 ⎤⎦ w
Since u × w = − w × u we also have:
u × ( w × u ) = ⎡⎣( u • u ) I 3×3 − u ⊗ u ⎤⎦ w
2
Also, substituting u × v = Suv , we have u × ( u × w ) = u × ( Suv ) = Su ( Suv ) = Su v .
Therefore:
S u2 = ⎡⎣( u ⊗ u ) − ( u • u ) I 3×3 ⎤⎦ .
Appendix B – Derivation of Rodrigues’ rotation formula
Let n be a unit vector and θ a rotation angle. The point r is rotated around the axis
determined by n through angle θ to the rotated point r ′ . To compute r ′ in terms of
n, θ , and r ′ , consider first the special case of a point s that is perpendicular to n . A
unit vector m that is perpendicular to both s and n is given by:
m=
( )
1
1
n s = s .
n× s =
n × s since n × s = sin π
2
n× s
s
s’
m
θ
sin(θ)||s||m
s
cos(θ)s
Figure B.1
57
The point s rotates to the point s′ in the plane spanned by m and s . The right triangle
in Figure B.1 has a hypotenuse of length s and sides of lengths sin (θ ) s and
cos (θ ) s . It follows that
s′ = cos (θ ) s + sin (θ ) s m = cos (θ ) s + sin (θ ) n × s .
s’
θ
r'
n
s
θ
(r . n)n
r
Figure B.2
In the general case, let s = r − ( r • n ) n . Then, as shown in Figure B.2, r is the vector
sum of s with its component in the vector n direction: r = ( r • n ) n + s . Since ( r • n ) n
is on the n axis, it does not change under the rotation and so r ′ = ( r • n ) n + s′ .
Substituting s′ = cos (θ ) s + sin (θ ) n × s gives: r ′ = ( r • n ) n + cos (θ ) s + sin (θ ) n × s .
(
)
Substitute n × s = n × r − ( r • n ) n = n × r − ( r • n ) n × n = n × r , and substitute
s = r − ( r • n ) n to get r ′ = ( r • n ) n + cos (θ ) ( r − ( r • n ) n ) + sin (θ ) n × r. Simplifying
the last result we have Rodrigues’ rotation formula:
r ′ = cos (θ ) r + (1 − cos (θ ) ) ( r • n ) n + sin (θ ) n × r
Matrix form:
As a consequence of Lagrange’s formula, n × ( n × r ) = ( n • r ) n − ( n • n ) r and since n
is a unit vector, ( n • n ) = 1 and we have ( r • n ) n = n × ( n × r ) + r . Substituting for this
term in Rodrigues’ rotation formula yields the following alternate form:
58
r ′ = cos (θ ) r + (1 − cos (θ ) ) ⎡⎣ n × ( n × r ) + r ⎤⎦ + sin (θ ) n × r
= r + (1 − cos (θ ) ) n × ( n × r ) + sin (θ ) n × r
Substituting with the matrix form of the cross product gives the matrix form of the
formula:
⎛ 0
⎜
r ′ = ⎡⎣ I 3×3 + (1 − cos (θ ) ) Sn2 + sin (θ ) Sn ⎤⎦ r , where Sn = ⎜ n3
⎜ −n
⎝ 2
matrix corresponding to n .
− n3
0
n1
n2 ⎞
⎟
−n1 ⎟ is the skew
0 ⎟⎠
Appendix C – Quaternion operators on 3D Euclidean space
derivation
Given a unit quaternion q = ( e0 , e ) this appendix provides the derivation of the equality:
( ((e
q ( 0, r ) q∗ = 0,
2
0
)
− e • e r + 2 ( e • r ) e + 2e0e × r
))
which shows that the quaternion operation p a qpq∗ transforms a "pure imaginary"
quaternion to another "pure imaginary" quaternion and that the imaginary part r is
transformed to e02 − e • e r + 2 ( e • r ) e + 2e0 e × r where q = ( e0 , e ) .
(
)
Substitute q = ( e0 , e ) :
q ( 0, r ) q ∗ = ( e0 , e )( 0, r )( e0 , −e )
left multiply:
= ( 0 − e • r, e0 r + e × r )( e0 , −e )
right multiply:
⎛ −e0e • r − ( e0 r + e × r ) • ( −e ) ,
⎞
⎟
=⎜
⎜
( e0 ( e0r + e × r ) + ( −e • r ) ( −e ) + ( e0r + e × r ) × ( −e ) ) ⎟⎠
⎝
⎛ −e0e • r + ( e0 r + e × r ) • e,
⎞
⎟
=⎜
⎜
( e0 ( e0r + e × r ) + ( e • r ) e − ( e0r + e × r ) × e ) ⎟⎠
⎝
59
distribute terms:
⎛ −e0e • r + e0 r • e + ( e × r ) • e,
⎞
⎟
=⎜
⎜
⎟
r
+
e
×
r
+
e
•
r
e
−
r
×
e
−
e
×
r
×
e
e
e
e
e
(
)
(
)
(
)
(
)
0
0
0
0
⎝
⎠
simplify:
=
(( e × r ) • e, ( e r + e e × r + ( e • r ) e − e r × e − ( e × r ) × e ))
2
0
0
0
since: ( e × r ) is perpendicular to e,
( e × r ) • e = 0,
and: − ( e × r ) × e = e × ( e × r ) = + ( e • r ) e − ( e • e ) r [Lagrange's formula ]
= ( 0, ( e02 r + e0e × r + ( e • r ) e − e0 r × e + ( e • r ) e − ( e • e ) r ) )
since: − e0 r × e = + e0 e × r
(
= 0, ( e02 r + ( e • r ) e + 2e0 e × r + ( e • r ) e − ( e • e ) r )
simplify:
( ((e
= 0,
2
0
− e • e ) r + 2 ( e • r ) e + 2e0 e × r
)
))
Appendix D – Moment of inertia
The definition of total angular momentum L is a summation and/or integration of terms in
form b × ( ω × b ) . As shown in Appendix A:
b × ( ω × b ) = ⎡⎣( b • b ) I 3×3 − ( b ⊗ b ) ⎤⎦ ω .
Substituting for this expression in the definition of total momentum yields:
⎧
⎫
L ( t ) = ⎨∑ mi ⎡⎣( bi • bi ) I 3×3 − bi ⊗ bi ⎤⎦ + ∫∫∫ ρ ( b ) ⎡⎣( b • b ) I 3×3 − b ⊗ b ⎤⎦ db ⎬ ω
V
⎩ i
⎭
= I ⊗ω
Expressed in coordinate components, the expression ⎡⎣( b • b ) I 3×3 − ( b ⊗ b ) ⎤⎦ is:
60
⎡⎛ b12 + b22 + b32
⎢⎜
⎡⎣( b • b ) I 3×3 − ( b ⊗ b ) ⎤⎦ = ⎢⎜
0
⎢⎜
0
⎣⎝
⎛ b22 + b32
⎜
= ⎜ −b2b1
⎜ −b3b1
⎝
0
b12 + b22 + b32
0
−b1b2
b12 + b32
−b3b2
⎞ ⎛ b12 b1b2
0
⎟ ⎜
2
0
⎟ − ⎜ b2b1 b2
b12 + b22 + b32 ⎟⎠ ⎜⎝ b3b1 b3b2
b1b3 ⎞ ⎤
⎟⎥
b2b3 ⎟ ⎥
b32 ⎟⎠ ⎥⎦
−b1b3 ⎞
⎟
−b2b3 ⎟
b12 + b22 ⎟⎠
Appendix E – Matrix to axis-angle derivation
⎛ a11 a12
⎜
If R = ⎜ a21 a22
⎜a
⎝ 31 a32
a13 ⎞
⎟
a23 ⎟ is a rotation matrix, then
a33 ⎟⎠
R = ⎡⎣cos (θ ) I 3×3 + (1 − cos (θ ) ) n ⊗ n + sin (θ ) Sn ⎤⎦
for some unit vector and angle ( n, θ ) (see 3.2.1.1, alternate matrix form of Rodrigues’
rotation formula).
The transpose operator is linear and since I 3×3 and n ⊗ n are symmetric and Sn is
skew-symmetric, it follows that:
R − R T = 2 sin (θ ) Sn .
The trace operator is also linear and since Trace ( Sn ) = 0 and Trace ( n ⊗ n ) = 1 ,
Trace ( R ) = cos (θ )( 3 ) + (1 − cos (θ ) ) (1) + sin (θ )( 0 ) = 1 + 2 cos (θ ) .
⎛ ⎛ Trace ( R ) − 1⎞ ⎞
⎟ ⎟⎟ , 0 ≤ θ ≤ π .
⎜
2
⎠⎠
⎝⎝
Therefore θ = arccos ⎜ ⎜
61
If 0 < θ < π , then sinθ > 0 and
⎛ 0
⎜
Sn = ⎜ n3
⎜ −n
⎝ 2
− n3
0
n1
n2 ⎞
1
⎟
⎡ R − RT ⎤
−n1 ⎟ =
⎦
2 sin (θ ) ⎣
0 ⎟⎠
⎛ 0
1
⎜
a21 − a12
=
2 sin (θ ) ⎜⎜
⎝ a31 − a13
a12 − a21
0
a32 − a23
a13 − a31 ⎞
⎟
a23 − a32 ⎟
⎟
0
⎠
Therefore:
⎛ n1 ⎞
⎛ a32 − a23 ⎞
1
⎜ ⎟
⎜
⎟
a13 − a31 ⎟ .
n = ⎜ n2 ⎟ =
⎜
⎜ n ⎟ 2 sin (θ ) ⎜ a − a ⎟
⎝ 3⎠
⎝ 21 12 ⎠
⎛ a32 − a23 ⎞
1
⎜
⎟
v.
Alternatively, let v = ⎜ a13 − a31 ⎟ , and let n =
v
⎜a −a ⎟
⎝ 21 12 ⎠
If θ = 0 , there is no rotation so n is indeterminate.
If θ = π , then the alternate matrix form of Rodrigues’ rotation formula reduces down to:
R = [ − I 3×3 + 2n ⊗ n]
⎛ 2n12 − 1 2n1n2
2n1n3 ⎞
⎜
⎟
2
= ⎜ 2n2 n1 2n2 − 1 2n2 n3 ⎟
2
⎜
⎟
⎝ 2n3 n1 2n3 n2 2n3 − 1⎠
2
2
2
Therefore: n1 = ( a11 + 1) 2, n2 = ( a22 + 1) 2, and n3 = ( a33 + 1) 2. Find the maximum
of a11, a22 , and a33 and use it to find one coordinate component of n and then derive the
components from it.
a
a12
, n3 = 13 .
2n1
2n1
a
a
is the maximum. Let n2 = ( a22 + 1) 2, n1 = 12 , n3 = 32 .
2n2
2n2
a
a
is the maximum. Let n3 = ( a33 + 1) 2, n1 = 13 , n2 = 23 .
2n3
2n3
Case: a11 is the maximum. Let n1 =
Case: a22
Case: a33
( a11 + 1)
2, n2 =
It is equivalent (multiply by the appropriate factor 2ni ), but computationally more
efficient, to compute n as follows:
62
Case: a11 is the maximum. Let v = ( a11 + 1, a12 , a13 ) .
T
Case: a22 is the maximum. Let v = ( a21, a22 + 1, a23 ) .
T
Case: a33 is the maximum. Let v = ( a31, a32 , a33 + 1) .
T
Then: n =
1
v.
v
63
INDEX
4-tuple form, 27
Euler’s rotation theorem, 8
arctan2 function, 3
Euler-Rodrigues parameters, 30
attitude, 7
Hamilton form, 26
axis-angle representation, 10
identity matrix, 3
body-fixed, 12
Inner product, 2
Cardano angles, 16
length of a vector, 2
center of mass, 48
line of nodes, 12
centripetal acceleration, 47
linear momentum, 49
coordinate frame rotation, 9
local tangent frame, 4
Coriolis acceleration, 47
modulus, 28
cross product, 2
moment of inertia tensor, 50
direction cosine matrix, 7
nautical angles, 16
dot product, 2
norm, 2
elementary Rotations, 11
norm (quaternion), 28
Euler angle convention, 12
normalized, 3
Euler angle x–y–z orientation
convention, 16
nutation angle, 12
orientation, 6
Euler angle z–y–x rotation convention,
16
Euler angle z–y–z orientation
convention, 15
orientation operator, 9
outer product, 2
pitch, 16
Euler angle z–y–z rotation convention,
13
position vector rotation, 9
Euler angles z-x-z convention, 12
position-space, 4
Euler angles z–y–x convention, 15
precession angle, 12
Euler parameters, 30
principal axes (momentum), 51
64
principal axis, 11
space-fixed, 12
principal factors, 18
special orthogonal group, 18
principal moments of inertia, 51
spin angle, 12
principal rotation, 11
Tait-Bryan angles, 16
right hand rule, 10
torque, 51
roll, 16
total linear momentum, 49
rotation operator, 9
total mass, 48
rotational momentum, 49
unit quaternion, 28
scalar product, 2
unit vector, 3
scalar vector form, 26
vector product, 2
skew-symmetric matrix associated with
a vector, 2
yaw, 16
zero vector, 3
65
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement