Robot Coordinate Frames
An important first step for autonomy is to set up the frames getting used to localize the robot. There are 2 important transforms that are required according to ROS standards (https://www.ros.org/reps/rep-0105.html ).
First, we want an odom → base_link transform. This transform goes from odom, which is meant to be where your robot is in the environment from it’s starting point, is a coordinate system measured using odometry sources and base_link is the coordinate system on the rover. Odometry sources are generally continuous (ie. have a fast update rate), but have the downside that they will ‘drift’ over time. In our case, the odom → base_link transform is being given by fusing the wheel odometry with the IMU using an Extended Kalman Filter (EKF). The role of the EKF is to combine a motion model with sensors on the robot (measurments) to determine the local state of the robot and provide the odom → base_link transform.
To account for the drift problem previously mentioned, we require a map → odom transform that provides good global positioning. In this case, we create another EKF, which fuses together GPS, wheel odometry, and IMU. This time, the GPS provides good absolute positioning for the measurement updates, but is more of a discrete measurement (running at a much lower frequency than wheel odometry or IMU). The GPS however helps to correct the drift since it is accurate in a global sense, and provides the map → odom transform.
Together, both EKFs provide the map → odom → base_link transform as required by the ROS standard linked above.
For more information, see https://docs.nav2.org/tutorials/docs/navigation2_with_gps.html and http://docs.ros.org/en/noetic/api/robot_localization/html/integrating_gps.html#configuring-robot-localization .