If you're building an outdoor mobile robot in ROS 2 and need to fuse GPS, IMU and wheel encoders into a single position estimate, you have three real options right now. I've used all three and benchmarked two of them on a public dataset. Here's the honest picture.
robot_localization
The default answer for years. Mature, well documented, large community. It ships an EKF and a UKF node and handles GPS through a separate navsat_transform node that converts GPS coordinates into odometry the filter can consume.
The problems in practice:
navsat_transform uses UTM projection internally. UTM zones are 6 degrees of longitude wide. If your robot crosses a zone boundary mid-mission, the coordinate origin shifts and your position estimate jumps. For most indoor or small outdoor missions this never matters. For large area agricultural or survey robots it's a real issue.
There's no IMU bias estimation.…