# Rotations in ROS

## Notation

### Fixed Axis vs Euler Angles

In these APIs there are two notations.

• Fixed Axis: For more information on the fixed axis can be found at the following Wikipedia article Rotation around a fixed axis. Fixed axis rotation also includes Euler extrinsic rotation around fixed axis, like RPY around fixed X-Y-Z used below, which is explained in the following Wikipedia article Euler angles

• Euler Angles: Euler angles specified here are intrinsic rotations around rotating axis, like YPR around rotating Z-Y-X, explained in the following Wikipedia article Euler angles.

## C++

There are a number of math libraries including bullet and eigen and kdl. Bullet is the primary linear math library used in the system at the moment.

### Bullet

There are two classes within bullet which deal with rotations, btMatrix3x3 and btQuaternion.

#### btMatrix3x3

##### Accessors
• getRPY(double roll, double pitch, double yaw)

• This will get the roll pitch and yaw from the matrix about fixed axes X, Y, Z respectively.

getEulerYPR(double yaw, double pitch, double roll)

• This will get the yaw, pitch and roll from the matrix about the euler angles Z, Y, X respectively.

##### Mutators
• setRPY(double roll, double pitch, double yaw)

• Set the rotation using fixed axis notation about X, Y, Z axes respectively.

setEulerYPR(double yaw, double pitch, double roll)

• Set the rotation using euler angles about Z, Y, X respectively.

#### btQuaternion

##### Accessors

To get angles out construct a btMatrix3x3 and use it's accessors. For example:  btQuaternion q; btMatrix3x3(q).getRPY(roll, pitch, yaw);

##### Mutators
• setRPY(double roll, double pitch, double yaw)

• Set the rotation using fixed axis notation about X, Y, Z axes respectively.

setEulerZYX

• Set the rotation using euler angles about Z, Y, X respectively.

### Eigen

See Eigen's geometry tutorial.

### KDL::Rotation

#### Constructors

• Rotation::RPY(double roll, double pitch, double yaw)

• This will return a Rotation with roll pitch and yaw about fixed axes X, Y, Z respectively.

Rotation::EulerZYX(double Alfa,double Beta,double Gamma)

• Gives back a Rotation created by the EulerZYZ convention. First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

Rotation::EulerZYZ(double Alfa,double Beta,double Gamma)

• Gives back a Rotation created by the EulerZYZ convention. First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.

Rotation::Quaternion(double x,double y,double z, double w)

• Gives back a Rotation constructed by the 4 quaternion parameters. xyz first, and then rotation w. the norm of (x,y,z,w)) should be equal to 1.

#### Accessors

• GetRPY(double roll, double pitch, double yaw)

• This will get the roll pitch and yaw angles about fixed axes X, Y, Z respectively.

GetEulerZYX(double alpha, double beta, double gamma)

• Gives back the EulerZYX convention description of the rotation matrix. First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

GetEulerZYZ(double alpha, double beta, double gamma)

• Gives back the EulerZYZ convention description of the rotation matrix. First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.

GetQuaternion(double x,double y,double z, double w)

• Gives back the 4 quaternion parameters. xyz first, and then rotation w. the norm of (x,y,z,w)) is equal to 1.

## Python

Python euler angle support comes from transformations.py

### transformations.py

The tf package also includes the popular transformations.py module. TransformerROS uses transformations.py to perform conversions between quaternions and matrices. transformations.py does has useful conversion on numpy matrices; it can convert between transformations as Euler angles, quaternions, and matrices.

To use these methods, include something similar to the following line:

```   1 from tf.transformations import euler_from_quaternion
```

Wiki: geometry2/RotationMethods (last edited 2020-09-04 05:50:05 by Jong)