v0.1.0 - Initial Release 🚀
First public release of costmap - a pure Rust library for 2D costmaps, occupancy grids, and raycasting aimed at robotics navigation.
This is an early release providing a standalone alternative to Nav2's costmap_2d without requiring ROS dependencies.
What Works ✅
Core Grid Operations
- 2D occupancy grids and costmaps with configurable resolution and origin
- World ↔ map coordinate transforms
- Rolling window support with update_origin() for robot-centered local costmaps
- Efficient cell iteration (immutable and mutable)
Raycasting
- DDA and grid-step algorithms in world coordinates
- clear_ray() for updating costmaps from sensor data (inverse sensor model)
- Line iterators with read/write access
Costmap Features
- Obstacle inflation with pluggable cost functions (linear, exponential)
- Nav2-compatible cost semantics (free, inscribed, lethal, unknown)
- Polygon iterators for footprint operations
I/O & Visualization
- Load ROS2 map files (YAML + image format)
- Optional Rerun visualization with RViz color palette
- Grayscale image export
Installation
[dependencies]
costmap = "0.1.0"Quick Example
use costmap::RosMapLoader;
use glam::Vec2;
let grid = RosMapLoader::load_from_yaml("map.yaml")?;
let hit = grid.raycast_dda(&origin, &direction, max_range);See the examples/ for complete workflows including local costmap generation and sensor integration.
Known Limitations 🚧
- Nav2 compatibility layer is partially stubbed
- 3D voxel support planned but not yet implemented
- Some advanced costmap features still in development
This is a work-in-progress personal project. Contributions, feedback, and bug reports welcome!
Links