ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Finding map to odom tf

asked 2018-05-02 22:04:11 -0500

villie gravatar image

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 flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
0

answered 2018-05-04 06:46:43 -0500

villie gravatar image

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"));
    
edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2018-05-02 22:04:11 -0500

Seen: 1,118 times

Last updated: May 04 '18