Transform Quaternion
Hi!
Is there a package witch transforms the quaternion coordinates automatically in an other system? (Axis-Angle, Kardan, Euler)
Thanks.
ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
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);
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.
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);
If you have a transform object, yes. The original question asks how to do this with get rotation from a quaternion object.
Asked: 2012-12-10 10:21:47 -0600
Seen: 43,779 times
Last updated: Oct 16 '14