# How does Nav2 calculate and provide the map -\> odom transform? (REP 105)

**URL:** <https://discourse.openrobotics.org/t/how-does-nav2-calculate-and-provide-the-map-odom-transform-rep-105/59425>\
**Category:** Navigation\
**Tags:** rep\
**Created:** [November 2, 2026, 12:48am UTC](https://discourse.openrobotics.org/t/how-does-nav2-calculate-and-provide-the-map-odom-transform-rep-105/59425 "2026-11-02T00:48:41Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Wh0ing](https://avatars.discourse-cdn.com/v4/letter/w/3e96dc/32.png) [@Wh0ing](https://discourse.openrobotics.org/u/Wh0ing)\
**Post date:** [November 2, 2026, 12:48am UTC](https://discourse.openrobotics.org/t/how-does-nav2-calculate-and-provide-the-map-odom-transform-rep-105/59425/1 "2026-11-02T00:48:41Z")

</div>

Hi everyone,

I am designing the state estimation and navigation pipeline for a mobile robot in ROS 2 / Nav2, and I have a question about how the coordinate frame transformations work under REP 105.

[REP 105](https://www.ros.org/reps/rep-0105.html#motivation) specifies the roles of the `base_link`, `odom`, and `map` frames. The odometry subsystem publishes `odom -> base_link`, and the localization system provides the global `map -> odom` transform to correct drift of the odometry system as I see it.

The first question is: How localization system is usually implemented? It is external sensor (e.g. Lidar) paired with software algorithm (e.g. SLAM?).

The second question is: How `map->odom` transform is provided?

My hypothesis is that localization nodes calculate `map -> odom` internally by:

1. Acquiring the robot’s global pose from localizaton system `map -> base_link`.

2. Querying odometry system for `odom -> base_link`

3. Back-calculating the `map -> odom`

4. Broadcasting `map -> odom` to the `/tf` topic.

5. Then updated offset is used to account for the odometry system drift and update the route.

I am currently investigating the architecture and would appreciate any insight into whether I am thinking about this correctly before I write the implementation.

Thanks in advance.

---

<div class="post-metadata">

**Author:** ![smac](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.openrobotics.org/smac/32/6763_2.png) [@smac](https://discourse.openrobotics.org/u/smac)\
**Post date:** [November 2, 2026, 7:07pm UTC](https://discourse.openrobotics.org/t/how-does-nav2-calculate-and-provide-the-map-odom-transform-rep-105/59425/2 "2026-11-02T19:07:04Z")

</div>

That is correct for how many systems generate the map to odom transform - though some systems themselves might actually take in the odometry for its own use and/or produce it as part of its internal system (not always; but sometimes).
