# Terminology

Like any field with a big body of knowledge, robotics has its own jargon that is ever evolving and takes practice to get used to. Also, some concepts are close to each other, yet different, and they tend to be more easily confused. The goal of this page is to act like a cheat sheet, stressing the differences between concepts and giving you the pointers to dig deeper.

## Lexicon

Let us first look at the most important concepts.

Configuration:
A vector $$\bfq$$ of the configuration space, that is, a vector of generalized coordinates (a.k.a. joint coordinates) that characterizes the positions of all points in the multi-body model of our robot.
Orientation:
The angular coordinates of a rigid body in space. Not exactly the same thing as a rotation, although there is an isomorphism between rotations and orientations (similarly to the isomorphism between positions and translations). Rotation matrices are one way to represent orientation, others are listed below.
Pose:
Both position and orientation of a rigid body. Not exactly the same thing as a transformation, although there is an isomorphism between poses and their transformation group.
Position:
The linear coordinates $$\bfp \in \mathbb{R}^3$$ of a body in space. Not exactly the same thing as a translation, although there is an isomorphism between the Euclidean space $$\mathbb{R}^3$$ and its translation group.
Rotation:
A transformation $$R \in SO(3)$$ that acts vectors $$\bfe \in \mathbb{R}^3$$ and preserves their lengths and the angles between them. The rotation matrix $$\bfR_{AB}$$ represents equivalently the orientation of frame $$B$$ in frame $$A$$ or the rotation $$R : {}_B \bfe \mapsto {}_A \bfe$$.
Translation:
A transformation $$t : \mathbb{R}^3 \to \mathbb{R}^3$$ that maps the position $$\bfp$$ of a rigid body to a new position $$t(\bfp)$$.
Transform:
Shorthand for a Direct isometry $$T \in SE(3)$$. Due to the bijection between Poses and $$SE(3)$$, it is common to read "the transform of a rigid body", although more precise expressions are "the pose of a rigid body" and "the transform from frame A to frame B".

### Full package

Here comes a wider list of expressions you will find in the literature. Follow the links or scroll down for extra info on each:

Affine transformation:
A geometric transformation $$A : \mathbb{R}^3 \to \mathbb{R}^3$$ that preserves lines and parallelism. Direct isometries $$SE(3)$$ used to represent the Pose of a rigid body are, in particular, affine transformations. Affine transformations are conveniently represented by $$4 \times 4$$ matrices of Homogenous coordinates.
Attitude:
Synonym for orientation, this word is more common in aeronautics such as in attitude and heading reference system.
Body:
Shorthand for Rigid body.
Direct isometry:
A geometric transformation $$T \in SE(3)$$ that preserves distances and handedness. Direct isometries form a mathematical group $$SE(3)$$ called the special Euclidean group. They are the most commonly used representation for the Pose of rigid bodies.
Displacement:
Synonym for Direct isometry.
A vector that hints at the direction of motion, especially for systems such as cars or humands that have a preferred direction of motion (forward). For these two, a heading vector can be any vector in the intersection between the sagittal plane and median plane.
Homogeneous coordinates:
Convenient way to represent an Affine transformation as a $$4 \times 4$$ matrix.
Joint:
Connection between two rigid bodies that constrains their relative degree of freedom. The most common in robotics is the revolute joint actuated by a servomotor.
Joint coordinates:
Synonym for Configuration. Sometimes used to distinguish actuated coordinates (e.g. a robot's joints) from unactuated degrees of freedom (e.g. the floating base of a legged robot).
Rigid body of a robot, connected to at least one Joint.
Transformation:
In general, this expression may refer to any geometric transformation, for example an Affine transformation. In robotics, this expression is generally used as a shorthand for a Direct isometry $$T \in SE(3)$$.

## Representing orientation

Because all points on a rigid body hold, by definition, the same relative positions between each other, we can describe them all with just six numbers: the position of any one of them, and the three degrees of freedom of the body's orientation. There are several ways to represent orientations. Three common ones are:

• Euler angles: only three angles, but tricky to work with because of the gimbal lock and the many different conventions (intrinsic or extrinsic rotations? upward or downward z-axis?)
• Unit quaternions: four numbers, better behaved than Euler angles with only one convention to figure out (are the coordinates ordered as $$[w\ x\ y\ z]$$ or $$[x\ y\ z\ w]$$?).
• Rotation matrices: nine numbers, no confusion regarding conventions, applies to position coordinates by direct matrix product.

It is best practice to avoid using Euler angles in software (colorful experimental and bug-hunting stories abound). In legged robotics, the most common convention is roll-pitch-yaw convention with upward z-axis. It corresponds to intrinsic Z-Y-X angles, or equivalently extrinsic x-y-z angles: first roll around the fixed x-axis of the parent frame, then pitch around the fixed y-axis of the parent frame, finally yaw around the fixed z-axis of the parent frame.

To go further, check out e.g. Representing Attitude: Euler Angles, Unit Quaternions, and Rotation Vectors by James Diebel.

## Representing transformations

The minimum number of coordinates necessary to describe the displacement of a rigid body is six, yet 6D displacement vectors include a flavor of Euler angles to represent orientations and the slew of problems they carry along.

• Pose vectors: 7D vectors that combine a quaternion with a position vector. This is for instance the representation used in OpenRAVE.
• Transformation matrices: $$4 \times 4$$ matrices that combine a rotation matrix with a position vector.
• Plücker matrices: $$6 \times 6$$ that act on the screws that describe the motions and forces of rigid bodies. This is for instance the representation used in mc_rtc.

To go further, check out e.g. Rigid Body Dynamics Algorithms by Roy Featherstone.

© Stéphane Caron — Pages of this website are under the Creative Commons CC BY 4.0 license.