1. Introduction to 3D Rigid Transformations#
1.1. Basics#
Following Waldron and Schmiedeler [1], we define the basic terms that we use throughout this user guide.
1.2. Frames#
A (coordinate reference) frame in 3D Euclidean space is defined by an origin (position) and 3 orthogonal basis vectors (orientation) and it is attached to a rigid body. The pose (position and orientation) of a rigid body (i.e., of its frame) is always expressed with respect to another frame.
1.3. Frame Notation#
Notation is important for describing and understanding of physical quantities in 3D. Furgale [2] [3] presents one of the most consistent and clear approaches and we use it here.
For physical quantities we use the notation \(_{A}\boldsymbol{x}_{BC}\), where \(\boldsymbol{x}\) is a physical quantity of frame C with respect to frame B expressed in frame A. For example, \(_{A}\boldsymbol{t}_{BC}\) is the translation of C with respect to B measured in A or \(_{A}\boldsymbol{\omega}_{BC}\) is the orientation vector of C with respect to B measured in A.
Since \(_A\boldsymbol{t}_{BC}\) represents a vector or translation from frame B to frame C expressed in frame A, the position of a point \(P\) with respect to a frame A in three-dimensional space can be defined by \(_A\boldsymbol{p} := _A\boldsymbol{t}_{AP}\).
When we define a mapping from some frame A to another frame B that can be expressed as a matrix multiplication, we use the notation \(\boldsymbol{M}_{BA}\) for the corresponding matrix. We can read this from right to left as a matrix that maps from frame A to frame B through multiplication, for example, when we want to transform a point by
1.4. Duality of Transformations and Poses#
We can use a transformation matrix \(\boldsymbol{T}_{BA}\) that represents a transformation from frame A to frame B to represent the pose (position and orientation) of frame A in frame B (if we use the active transformation convention; see Transformation Ambiguities and Conventions for details). This is just a different interpretation of the same matrix and similar to our interpretation of a vector from A to P \(_A\boldsymbol{t}_{AP}\) as a point \(_A\boldsymbol{p}\).
1.5. Representations#
At least six numbers are required to express the pose of a rigid body or a transformation between two frames, but there are also redundant representations. We can use many different representations of rotation and / or translation. Here is an overview of the representations that are available in pytransform3d. All representations are stored in NumPy arrays, of which the corresponding shape is shown in this table. You will find more details on these representations on the following pages.
Representation and Mathematical Symbol |
NumPy Array Shape |
Rigid Transformation - SE(3) |
|
---|---|---|---|
Rotation - SO(3) |
Translation |
||
Rotation matrix \(\pmb{R}\) |
(3, 3) |
X |
|
Axis-angle \((\hat{\pmb{\omega}}, \theta)\) |
(4,) |
X |
|
Rotation vector \(\pmb{\omega}\) |
(3,) |
X |
|
Logarithm of rotation \(\left[\pmb{\omega}\right]\) |
(3, 3) |
X |
|
Quaternion \(\pmb{q}\) |
(4,) |
X |
|
Rotor \(R\) |
(4,) |
X |
|
Euler angles \((\alpha, \beta, \gamma)\) |
(3,) |
X |
|
Modified Rodrigues parameters \(\pmb{\psi}\) |
(3,) |
X |
|
Transformation matrix \(\pmb{T}\) |
(4, 4) |
X |
X |
Exponential coordinates \(\mathcal{S}\theta\) |
(6,) |
X |
X |
Logarithm of transformation \(\left[\mathcal{S}\right]\theta\) |
(4, 4) |
X |
X |
Position and quaternion \((\pmb{p}, \pmb{q})\) |
(7,) |
X |
X |
Dual quaternion \(\boldsymbol{\sigma}\) |
(8,) |
X |
X |