## Rotational Measurements

### Rotation Sensing Overview

You can measure frame rotation in different formats. These include axis-angle,
quaternion, transform, and rotation sequence. The different formats are
available through the Transform Sensor block
and, to a limited extent, in joint blocks ^{1}
. The choice of measurement format depends on the model. Select
the format that is most convenient for the application.

### Measuring Rotation

Rotation is a relative quantity. The rotation of one frame is meaningful only with respect to another frame. As such, blocks with rotation sensing capability require two frames to make a measurement: measured and reference frames. In these blocks, the follower frame port identifies the measured frame; the base frame port identifies the reference frame of the measurement.

Simscape™ Multibody™ defines the rotation formats according to standard conventions. In some cases, more than one convention exists. This is the case, for example, of the quaternion. To properly interpret rotation measurements, review the definitions of the rotation formats.

### Axis-Angle Measurements

Axis-angle is one of the simpler rotation measurement formats. This format uses two parameters to completely describe a rotation: axis vector and angle. The usefulness of the axis-angle format follows directly from Euler’s rotation theorem. According to the theorem, any 3–D rotation or rotation sequence can be described as a pure rotation about a single fixed axis.

To measure frame rotation in axis-angle format, use the Transform
Sensor block. The block property inspector contains
separate **Axis** and **Angle** parameters
that you can select to expose the corresponding physical signal (PS) ports
(labeled axs and q, respectively). Because the axis-angle parameters are
listed separately, you can choose to measure the axis, the angle, or
both.

The axis output is a 3D unit vector in the form [*a _{x}*,

*a*,

_{y}*a*]. This unit vector encodes the rotation direction according to the right-hand rule. For example, a frame spinning in a counterclockwise direction about the +X axis has rotation axis [1 0 0]. A frame spinning in a clockwise direction about the same axis has rotation axis [-1 0 0].

_{z}The angle output is a scalar number in the range 0–π. This number encodes the extent of
rotation about the measured axis. By default, the angle is measured in
radians. You can change the angle units in the PS-Simulink Converter block
used to interface with Simulink^{®} blocks.

### Quaternion Measurements

The quaternion is a rotation representation based on hypercomplex numbers.
The quaternion is made up of a scalar part, *S*, and a
vector, *V*, part. The scalar part encodes the angle of
rotation, and the vector part encodes the rotational axis.

A key advantage of quaternions is the singularity-free parameter space. Mathematical singularities, which are present in Euler angle sequences, result in the loss of rotational degrees of freedom. This phenomenon is known as gimbal lock. In Simscape Multibody, gimbal lock causes numerical errors that lead to simulation failure. The absence of singularities means that quaternions are more robust for simulation purposes.

To measure frame rotation in quaternion format, use:

A Transform Sensor block when measuring rotation between two general frames. The

**Rotation**menu of the property inspector contains a**Quaternion**parameter that you can select to expose the corresponding physical signal port (labeled**Q**).A joint block that has a spherical primitive when measuring the 3-D rotation between the two joint frames. The

**Sensing**menu of the property inspector contains a**Position**parameter that you can select to expose the corresponding physical signal port (which is also labeled**Q**). For more information, see the Spherical Joint block reference page.

The quaternion output is a four-element row vector, $$Q=\left(\begin{array}{cc}S& V\end{array}\right)$$, where:

$$S=\mathrm{cos}\left(\frac{\theta}{2}\right)$$

and

$$V=[{U}_{x}\text{\hspace{0.17em}}{U}_{y}\text{\hspace{0.17em}}{U}_{z}]\mathrm{sin}\left(\frac{\theta}{2}\right)$$

*θ* is the angle of rotation and [*U _{x}*,

*U*,

_{y}*U*] is the unit vector of the rotational axis. Note that for any given rotation, there are two quaternions. They are negatives of each other, but represent the same rotation. For example, the quaternions [

_{z}`1`

`0`

`0`

`0`

] and [`-1`

`0`

`0`

`0`

] both represent the identity rotation.### Transform Measurements

The rotation transform is a 3×3 matrix that encodes frame rotation. In terms of base frame
axes [*x*, *y*,
*z*]_{B}, the follower frame axes [*x*, *y*,
*z*]_{F} are:

$${\left[\begin{array}{c}x\\ y\\ z\end{array}\right]}_{B}=\left[\begin{array}{ccc}{r}_{xx}& {r}_{xy}& {r}_{xz}\\ {r}_{yx}& {r}_{yy}& {r}_{yz}\\ {r}_{zx}& {r}_{zy}& {r}_{zz}\end{array}\right]{\left[\begin{array}{c}x\\ y\\ z\end{array}\right]}_{F}$$

Each matrix column contains the coordinates of a follower frame axis resolved in the base frame. For example, the first column contains the coordinates of the follower frame X-axis, as resolved in the base frame. Similarly, the second and third columns contain the coordinates of the Y and Z-axes, respectively. Operating on a vector with the rotation matrix transforms the vector coordinates from the follower frame to the base frame.

You can sense frame rotation in terms of a rotation matrix using the
Transform Sensor block. The property
inspector for this block contains a **Transform** option
that when selected exposes a physical signal port labeled
**R**. Use this port to output the rotation matrix
signal, for example, for processing and analysis in a Simulink
subsystem—after converting the output physical signal to a Simulink
signal through the PS-Simulink Converter
block.

### Rotation Sequence Measurements

You can use the Transform Sensor block to sense the rotation of the follower frame with respect to the base frame and represent the rotation as three successive elementary rotations.

The three elementary rotations are about the axes of an intermediate frame that rotates with each elementary rotation. In other words, the Transform Sensor block measures only intrinsic rotations. The block outputs a 3-by-1 vector that contains three angles in the range [-π, π]. You can output angles based on 12 different rotation sequences including X-Y-X, X-Y-Z, X-Z-X, X-Z-Y, Y-X-Y, Y-X-Z, Y-Z-X, Y-Z-Y, Z-X-Y, Z-X-Z, Z-Y-X, and Z-Y-Z. The image shows an example that represents the rotation of the follower frame with respect to the base frame by using rotations based on the Z-Y-Z sequence.

To compute extrinsic rotations, which are elementary rotations with respect to the base
frame, you can manually convert the intrinsic rotations. Extrinsic rotations
are equivalent to intrinsic rotations with the same angles, but with an
inverted sequence order. For example, the extrinsic rotations Z-Y-X by
angles *φ*, *θ*, and *Ψ*
are equivalent to the intrinsic rotations X-Y-Z by the angles
*Ψ*, *θ*, and
*φ*.

In general, there are two sets of solutions for a rotation sequence whose
rotation angles are in the range (-π, π). If a rotation sequence has
different letters, such as X-Y-Z and Z-X-Y, the Transform
Sensor block outputs the solution whose
*θ* is in the range (-π/2, π/2). If the first and last
letters of a rotation sequence are the same, such as X-Y-X and Z-Y-Z, the
Transform Sensor block outputs the
solution whose *θ* is in the range (0, π).

For these cases, there are infinite number of solutions for the *φ* and
*Ψ* angles:

A rotation sequence has different letters and the second rotation angle

*θ*equals -π/2 or π/2.The first and last letters of a rotation sequence are the same and the second rotation angle

*θ*equals 0 or π.

In these cases, the Transform
Sensor block outputs only one set of solutions where the
magnitudes of the *φ* and *Ψ* angles are
the same.

## Related Examples

## More About

^{1} Weld Joint is an exception