# Applying a quaternion rotation to a vector

Hello,

I want to apply a quaternion rotation on a vector e.g. on v_orig = [0,0,1] a q = [0.5,0.5,0.5,0.5] rotation that the rotated vector v_new = [1,0,0]. How is this possible with ROS? Are there any functions to archive this? In the tf2 library I can define quaternions and poses but that doesn't do the thing, as far as I have seen.

The background is, that I have an approach vector in a defined orientation and I want to calculate a point which is e.g. 0.5 m away from the origin in this direction.

edit retag close merge delete

Are you using C++ or Python?

( 2019-06-02 23:09:39 -0600 )edit

I'm using C++

( 2019-06-03 01:08:26 -0600 )edit

Sort by » oldest newest most voted

In tf2 you would need to use one of the supported datatypes. Suppose the vector you are talking about is a geometry_msgs/Vector3, then you could use this version of doTransform to transform your vector using a geometry_msgs/TransformStamped to represent the rotation. In your case the transform would have zeros for the translational components and you would use your desired quaterion for the orientation portion. Also note, you could use the fromMsg and toMsg functions to convert between tf2 datatypes and any of the other supported datatypes.

Also, I'll point out that the * operator has been overloaded in several ways for the tf2 Quaternions such that you could also directly perform quaternion multiplication to accomplish the rotation you are describing. Example 1 and Example 2.

more