Coordinate System and Topic Relationship


The odom coordinate frame is not fixed; its origin is the robot's initial position.
The base_link coordinate frame is the robot's body frame, fixed at the robot's center (e.g., the chassis). When the robot moves, the /odom topic publishes the robot's motion data, and the base_link coordinate frame moves relative to the odom coordinate frame.
The positions between coordinate frames such as laser_link and imu_link and base_link are static, so when base_link moves, the other child coordinate frames move along with it.
The odom coordinate system estimates the robot's position relative to its starting point based on feedback from the robot's motor encoders or odometry, and it typically drifts over time.
The map coordinate system is the robot's starting position estimated by algorithms using sensors such as LiDAR.
However, since a tree-structured TF is recommended, we typically set the map coordinate frame as the root coordinate frame. As a result, map remains stationary in rviz2, while odom serves as a child coordinate frame under map. (You can listen to Teacher Zhao's ROS1 course — this is explained very well there.)