
There is no 1 to 1 mapping between turtlesim pose.theta
and any of the values in geometry_msgs/Pose
. The turtlesim pose is a 2D pose so it expresses orientation as a single angle in radians, but geometry_msgs/Pose
is a 3D pose so it expresses rotation as a Quaternion (4D unit vector).
If you need to create a geometry_msgs/Pose
from a turtlesim/Pose
message then you can use the tf2::Quaternion.setRPY( Roll, Pitch, Yaw )
method and set Roll and Pitch to zero. This will create the quaternion and do all the complicated maths for you.
Here is some background on rotation quaternions if you want to learn about the theory.
Hope this helps.
Update:
If it is safe to assume that your robot will always be upright on a level surface then it will be safe to use the euler_from_quaternion method to calculate the roll, pitch and yaw of the pose and then to take the yaw value and use that. It should be noted that the behaviour of this approach will be strange and incorrect if the pose messages are not level!
Originally posted by PeteBlackerThe3rd with karma: 9529 on 2019-06-28
This answer was ACCEPTED on the original site
Post score: 0
Original comments
Comment by Shanika on 2019-06-28:
I am trying to write a Go to Goal code for my robot based on turtlesim Go to Goal tutorial. Howerver, how I suscribe to my robot's pose is different than for the turtlesim one. I suscribed to my odom topic and use the pose of my odom message.
Comment by PeteBlackerThe3rd on 2019-06-28:
To clarify you need to convert a geometry_msgs/Pose
into a turtlesim/Pose
message?
Comment by Shanika on 2019-07-01:
Yes. In the tutorial, they use the turtlesim/Pose.theta
but I don't know to what it corresponds in the geometry_msgs/Pose
.
Comment by PeteBlackerThe3rd on 2019-07-02:
I've updated me answer for you now.