# Transform Quaternion

Hi!

Is there a package witch transforms the quaternion coordinates automatically in an other system? (Axis-Angle, Kardan, Euler)

Thanks.

Transform Quaternion

Hi!

Is there a package witch transforms the quaternion coordinates automatically in an other system? (Axis-Angle, Kardan, Euler)

Thanks.

add a comment

22

The tf::Quaternion class is (currently) built on top of the Bullet quaternion class - here's an overview.

You have all the methods available in btQuaternion. You can also create a btMatrix3x3 from the btQuaternion and use any of the class methods.

After a quick scan, I'm seeing

`getAngle()`

`getAxis()`

`getEulerYPR(..)`

`getEulerZYX(..)`

**EDIT**: as per narcispr's comment:

Let's say `q`

is your quaternion. This is what I usually do (there might be a more elegant way, but I haven't found it)

```
tf::Matrix3x3 m(q);
double roll, pitch, yaw;
m.getRPY(roll, pitch, yaw);
```

13

Just to complete the previous response:

```
#include <tf/transform_datatypes.h>
// ...
tf::Quaternion q(quat.x, quat.y, quat.z, quat.w);
tf::Matrix3x3 m(q);
double roll, pitch, yaw;
m.getRPY(roll, pitch, yaw);
std::cout << "Roll: " << roll << ", Pitch: " << pitch << ", Yaw: " << yaw << std::endl;
```

Where *quat* contains the quaternion values to be transformed to roll, pitch, yaw.

4

It seems that creating a Matrix3X3 from the quaternion is not necessary since a transform already contains the rotation matrix. If you are working with TF, inside every Quaternion there is a Matrix3x3 called m_basis. When you call Transform::getRotation(), what you get is

From http://docs.ros.org/indigo/api/tf/htm... :

```
00120 Quaternion getRotation() const {
00121 Quaternion q;
00122 m_basis.getRotation(q);
00123 return q;
00124 }
```

So it could be that you may get away with:

```
transform.getBasis().getRPY(roll, pitch, yaw);
```

4

If you have a transform object, yes. The original question asks how to do this with get rotation from a quaternion object.

Please start posting anonymously - your entry will be published after you log in or create a new account.

Asked: ** 2012-12-10 10:21:47 -0600 **

Seen: **38,745 times**

Last updated: **Oct 16 '14**

ROS Answers is licensed under Creative Commons Attribution 3.0 Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.