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
Asked by villie on 2018-05-02 22:04:11 UTC
Answers
I found the answer to that in amcl code.
- First you convert map to base position into a transform.
- Then you get tf::Stampedtf::Pose object of it
- Then you reverse it
- After that you transform the reverse to "odom" frame
- Then you make a temporary transform object from above result
- Reverse of transform is result and you broadcast it. Below is the code.
tf::Stampedtf::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"));
Asked by villie on 2018-05-04 06:46:43 UTC
Comments