Finding map to odom tf

Hi,

So I know my robots position in map frame and I know its position in odom frame. How can I get tf which translates map-odom? I know package like amcl will give you pose in map and also give map-odom tf. I am making my own localization algorithm and can calculate my position in map, and I have got odom-baselink tf, but haven't figured out how to calculate map-odom tf. I know I can run mathematical equations to calculate it, but is there any function in rospy transformations of even roscpp that might automatically handle it?

Thank you

edit retag close merge delete

Sort by ยป oldest newest most voted

I found the answer to that in amcl code.

1. First you convert map to base position into a transform.
2. Then you get tf::Stamped<tf::pose> object of it
3. Then you reverse it
4. After that you transform the reverse to "odom" frame
5. Then you make a temporary transform object from above result
6. Reverse of transform is result and you broadcast it. Below is the code.

tf::Stamped<tf::pose> map_to_base (map_position_transform.inverse(), msg->header.stamp, "base_footprint"); listener.transformPose("odom", map_to_base, odom_to_map);

latest_tf_ = tf::Transform(tf::Quaternion(odom_to_map.getRotation()),
tf::Point(odom_to_map.getOrigin()));

tf::StampedTransform map_to_odom(latest_tf_.inverse(),
ros::Time::now(),
"map", "odom");
br.sendTransform(tf::StampedTransform(map_to_odom, ros::Time::now(), "map", "odom"));

more