README
easynav_costmap_maps_manager
Description
Maps Manager that maintains 2D costmaps (static and dynamic), supports filter plugins (such as inflation and obstacle filters), and exposes maps through ROS topics and NavState integration.
At the core of this stack lies the Costmap2D data structure. Costmap2D extends the binary occupancy grid into a graded cost representation with values in the range [0–255]:
0: Free space, no cost to traverse.
1–252: Gradual cost values, representing increasing difficulty or proximity to obstacles.
253: “Near obstacle” (inscribed obstacle) cost, traversal strongly discouraged.
254: Lethal obstacle, occupied cell.
255: Unknown space.
Authors and Maintainers
Authors: Intelligent Robotics Lab
Maintainers: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
Distribution |
Status |
|---|---|
humble |
|
jazzy |
|
kilted |
|
rolling |
Plugin (pluginlib)
Plugin Name:
easynav_costmap_maps_manager/CostmapMapsManagerType:
easynav::CostmapMapsManagerBase Class:
easynav::MapsManagerBaseLibrary:
easynav_costmap_maps_managerDescription: Maintains a Costmap2D instance and manages map loading, updates, and filtering operations.
Parameters
Plugin Parameters (namespace: /<node_fqn>/easynav_costmap_maps_manager/CostmapMapsManager/...)
Name |
Type |
Default |
Description |
|---|---|---|---|
|
|
|
Package name used to resolve relative map paths via |
|
|
|
Relative path (inside the package) to a ROS 1–style YAML map (with |
|
|
|
List of filter identifiers to be instantiated (see section below). |
|
|
|
Type of filter plugin (e.g., |
Filter Plugins
Each entry in <plugin>.filters defines a sub-namespace <plugin>.<filter> with at least the key plugin, plus any filter-specific parameters.
ObstacleFilter
Plugin Name:
easynav_costmap_maps_manager/ObstacleFilterType:
easynav::ObstacleFilterDescription:
Detects occupied cells from input point clouds (pointskey inNavState) and marks them asLETHAL_OBSTACLEin the dynamic costmap.
The filter fuses incoming 3D points into the map frame, downsamples them to the costmap resolution, filters out ground-level points (z < 0.1 m), and sets corresponding cells to lethal cost. Additionally, it computes and stores bounding box (ObstacleBounds) of updated obstacles to enable efficient incremental inflation.
Parameters:
Parameter |
Type |
Default |
Description |
|---|---|---|---|
(None) |
— |
— |
This filter does not declare additional ROS parameters beyond |
NavState Keys:
Key |
Type |
Access |
Description |
|---|---|---|---|
|
|
Read |
Input point clouds to detect obstacles. |
|
|
Write |
Marks cells as |
|
|
Write |
Bounding box of updated obstacles for incremental inflation. |
InflationFilter
Plugin Name:
easynav_costmap_maps_manager/InflationFilterType:
easynav::InflationFilterDescription:
Expands obstacle information in the costmap by assigning graded costs aroundLETHAL_OBSTACLEcells based on distance. Uses a breadth-first wavefront propagation algorithm (distance bins) to efficiently inflate obstacles up toinflation_radius.
The filter reads both the static map and the dynamic filtered map, applies inflation to each, and merges results. IfObstacleBoundsis available inNavState, inflation is restricted to the updated region for performance.
Parameters:
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
|
|
Maximum inflation distance (m) from obstacles. Cells farther than this receive no inflation cost. |
|
|
|
Radius of the inscribed zone (m). Cells within this distance of an obstacle are marked with high constant cost ( |
|
|
|
Exponential decay rate controlling how quickly cost decreases with distance beyond the inscribed radius. Higher values produce steeper cost gradients. |
NavState Keys:
Key |
Type |
Access |
Description |
|---|---|---|---|
|
|
Read |
Static costmap to inflate. |
|
|
Read/Write |
Dynamic costmap input and output after inflation. |
|
|
Read (optional) |
Restricts inflation to updated region for performance. |
Cost Model:
Uses exponential decay: cost = exp(-cost_scaling_factor * (distance - inscribed_radius)) * 253 for distances beyond inscribed radius.
Example Configuration
maps_manager_node:
ros__parameters:
map_types: [costmap]
costmap:
plugin: easynav_costmap_maps_manager/CostmapMapsManager
package: my_maps_pkg
map_path_file: maps/warehouse.yaml
filters: [inflation, obstacles]
inflation:
plugin: easynav_costmap_maps_manager/InflationFilter
inflation_radius: 0.3 # default in code
cost_scaling_factor: 3.0 # default in code
obstacles:
plugin: easynav_costmap_maps_manager/ObstacleFilter
Interfaces (Topics and Services)
Subscriptions and Publications
Direction |
Topic |
Type |
Purpose |
QoS |
|---|---|---|---|---|
Subscription |
|
|
Input occupancy map used to update the dynamic map. |
|
Publisher |
|
|
Publishes the static costmap. |
|
Publisher |
|
|
Publishes the dynamic (live) costmap. |
|
Services
Direction |
Service |
Type |
Purpose |
|---|---|---|---|
Service Server |
|
|
Saves the current costmap(s) to disk. |
NavState Keys
Key |
Type |
Access |
Notes |
|---|---|---|---|
|
|
Write |
Static map loaded from YAML. |
|
|
Write |
Dynamic map after applying filters. |
|
|
Read |
Previously filtered map used as input if available. |
|
|
Read |
Bounding box of updated obstacles (used to limit inflation region). |
TF Frames
Role |
Transform |
Notes |
|---|---|---|
Publishes |
— |
This manager does not broadcast TF; costmaps use their internal |
License
Apache-2.0