The Problem
I need to create precise 2D maps of an orchard that are perfectly aligned with UTM coordinates. While I have centimeter-accurate RTK GPS, existing SLAM packages prefer their own pose estimation, leading to drift and misalignment over large distances.
Platform
- ROS Noetic (20.04)
- RTK GPS: 2x ZED-F9P in RTK/differential configuration (we get reliable cm-level accuracy with GBAS)
- RTK heading data
- 2D LIDAR: RPLidar S2
- Wheel odometry
- Multiple IMUs
- Platform: 4-wheel ground robot with ackermann steering
Use Case Requirements
- Map permanent orchard features (tree trunks, posts) during low-canopy season
- Maps must align perfectly with UTM coordinates for integration with photogrammetry pipeline
- Maps will be used for localization when canopy becomes dense and GPS degrades
- Different mapping sessions must produce perfectly aligned maps based on GPS coordinates
Attempted Solutions
slam_toolbox
- Produces good quality maps
- Can be transformed to UTM frame with a bit of manual coaxing
- No GPS anchoring will show unacceptable distortion over hundreds of meters
Cartographer with GPS input
- Somehow worse results than slam_toolbox
- Poor loop closure and map cohesion
Various 3D SLAM packages (GTSAM etc.)
- Can't get it to work with 2D pointclouds without weird results
Custom ICP-based scan matching
- I tried my own python ICP implementation and this seems way above my skill level..
costmap_2d approach
- Issues with dynamic obstacle clearing
- Yaw estimation errors caused scan smearing
Core Questions
How can I modify existing SLAM packages to:
- Use absolute GPS coordinates for positioning
- Only estimate yaw/heading (though RTK heading is available)
- Prevent drift in XY coordinates
Alternatively, what approaches would work for:
- Building 2D occupancy grids directly from RTK GPS + LIDAR data
- Ensuring perfect UTM alignment
- Handling dynamic obstacles appropriately
Any suggestions on approaches or existing packages that might help achieve this would be MUCH appreciated!