# Rotations in ROS

Contents

## 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
```