# why exist map->odom trasform

HI Tom/all: Since map frame and odom frame are just tags, they are equal to some degree. What transform map to odom when fusing GPS data for? I do appreciate it if someone can englighten it to me.

edit retag close merge delete

Sort by » oldest newest most voted

Your robot's position in the world is the transform between its base_link frame and a world-referenced frame, such as odom or map. According to REP105, the robot's position in the odom frame should always be continuous. GPS data is discontinuous, so therefore it should not be fused into a robot_localization instance for odom. If you want to integrate GPS data, the most common way is to run a second instance of robot_localization and set it's world frame to map. So you now have two estimates of your robot's position in the world: one in the odom frame and one in map. The transforms for these estimates would be published with the parent frame as the world frame, and the child frame as base_link. However, and this is the important part: a frame can only ever have one parent! Publishing the two transforms odom -> base_link and map -> base_link would violate this rule. So, to get around this, robot_localization will publish map -> odom and odom -> base_link in a way such that the map -> base_link transform is still correct.

Since map is world fixed, and map -> odom has a non-zero transform, it may seem like this implies that the odom frame is moving in the world, but it isn't! The map -> odom transform is simply the difference in your robot's position estimate between the two state estimation nodes. The map estimate is more accurate in the long term, but the odom estimate is continuous and is best used for navigation. The magnitude of the transform can be thought of as a measure of the accumulated drift error in the odom estimate, due to it not having any absolute referencing data inputs such as GPS.

TLDR: You can't have two parent frames for one child frame, so odom is the tf parent of base_link and map is the tf parent of odom.

more

I am having a little trouble following this. In the event that map -> odom is constant in time, then odom -> base_link being continuous must imply that odom -> base_link is also continuous. In the event that map -> odom is not continuous with time, then map and odom cannot both be truly world-fixed.

( 2017-06-25 19:59:40 -0500 )edit

Both are world fixed frames. The transforms from map -> base_link and odom -> base_link are two different estimates of your robot's position in the world. The map -> odom transform is the difference in the estimates.

( 2017-07-02 18:02:22 -0500 )edit

If I understand correctly, the map->odom frame transform is not constant in time. It varies as function of the drift, as explained by ufr3c_tjc.

( 2017-07-19 20:37:51 -0500 )edit