Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | jazzy |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | kilted |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | lyrical |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged easynav_navmap_maps_manager at Robotics Stack Exchange
Package Summary
| Version | 0.5.0 |
| License | Apache-2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/EasyNavigation/easynav_plugins.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-10-09 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Francisco Martín Rico
Authors
easynav_navmap_maps_manager
Description
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds.
This package also includes map filters implemented as plugins (ObstacleFilter and InflationFilter) that operate on NavMap layers to detect obstacles and inflate their costs, enabling cost-aware path planning.
Authors and Maintainers
- Authors: Intelligent Robotics Lab
- Maintainer: Francisco Martín Rico fmrico@gmail.com
Supported ROS 2 Distributions
| Distribution | Status |
|---|---|
| humble | |
| jazzy | |
| kilted | |
| lyrical | |
| rolling |
Plugin (pluginlib)
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager -
Type:
easynav::navmap::NavMapMapsManager -
Base Class:
easynav::MapsManagerBase -
Library:
easynav_navmap_maps_manager -
Description:
Maps Manager that maintains a NavMap (triangulated 3D surface) and publishes full maps and layer updates; supports importing from YAML OccupancyGrid or point clouds, and applying dynamic filters to generate obstacle and inflated layers.
Parameters
All parameters are declared under the plugin namespace, i.e.
/<node_fqn>/easynav_navmap_maps_manager/NavMapMapsManager/...
| Name | Type | Default | Description |
|---|---|---|---|
<plugin>.package |
string |
"" |
Package name to resolve relative paths via ament_index. |
<plugin>.freq |
double |
10.0 |
Update frequency (Hz) for map publishing and filter execution. |
<plugin>.navmap_path_file |
string |
"" |
Relative path (inside the package) to a .navmap file to load at startup. |
<plugin>.occmap_path_file |
string |
"" |
Relative path (inside the package) to a ROS YAML OccupancyGrid to import as NavMap. |
<plugin>.pcd_path_file |
string |
"" |
Relative path (inside the package) to a point cloud (PCD/PLY) used to build a NavMap surface. |
<plugin>.filters |
list<string> |
[] |
Ordered list of filter plugin names to be applied after map loading (e.g. ["obstacles", "inflation"]). |
Filter Plugins
ObstacleFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/ObstacleFilter -
Type:
easynav::navmap::ObstacleFilter -
Description:
Detects occupied NavCels from the point perceptions inNavStateand marks them asLETHAL_OBSTACLEin the"obstacles"layer, on top of the static map’s"occupancy"layer (if any).
The points are downsampled, those withinmax_rangeand belowmax_height(robot frame) are grouped in 0.3 m columns, and a column is an obstacle when its highest point is more thanmin_height(plusmin_height_per_meterfor each meter from the robot) above the NavMap surface under it (along the surface’s normal). So a 2D laser detects obstacles too, and the ground or a ramp, being on the surface, is not one.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.max_range |
double |
10.0 |
Only points within this distance (x and y, robot frame) are used. |
<plugin>.min_height |
double |
0.1 |
Height above the NavMap surface below which points are the ground. |
<plugin>.min_height_per_meter |
double |
0.0 |
min_height grows this much per meter of horizontal distance from the robot (< 0 or not finite: 0). On rough terrain, a small error in the robot’s tilt lifts the ground more the farther it is; e.g. 0.05 adds 0.25 m at 5 m. |
<plugin>.max_height |
double |
NaN |
Points above this height (robot frame) are ignored; NaN disables it. |
<plugin>.downsample_resolution |
double |
0.3 |
Voxel size (m) the points are reduced to first; <= 0 disables it. |
| Input Key: | Reads list of point clouds from NavState group "points". |
||
| Output Layer: | Updates or creates NavMap layer "obstacles". |
InflationFilter
-
Plugin Name:
easynav_navmap_maps_manager/NavMapMapsManager/InflationFilter -
Type:
easynav::navmap::InflationFilter -
Description:
Expands obstacle information from the"obstacles"layer into an"inflated_obstacles"layer, assigning graded costs depending on distance to obstacles and map boundaries (NavCels with missing neighbors).
This filter mimics the behavior ofcostmap_2d::InflationLayerbut operates on the NavMap triangular mesh.
| Parameter | Type | Default | Description |
|---|---|---|---|
<plugin>.inflation_radius |
double |
0.3 |
Maximum inflation distance (m) from obstacles. |
<plugin>.cost_scaling_factor |
double |
3.0 |
Exponential decay rate controlling how fast cost decreases with distance. |
<plugin>.inscribed_radius |
double |
— |
Deprecated: the robot’s system_node.robot_geometry.inscribed_radius, used unless only this one is configured (with a warning). Radius of inscribed zone (constant high cost before decay). |
| Input Layer: | Reads from "obstacles". |
||
| Output Layer: | Writes to "inflated_obstacles". |
Interfaces (Topics and Services)
Subscriptions and Publications
| Direction | Topic | Type | Purpose | QoS |
|---|---|---|---|---|
| Publisher | <node_fqn>/<plugin>/map |
navmap_ros_interfaces/msg/NavMap |
Publishes the full NavMap. | depth=1 |
| Publisher | <node_fqn>/<plugin>/map_updates |
navmap_ros_interfaces/msg/NavMapLayer |
Publishes incremental layer updates. | depth=100 |
| Subscription | <node_fqn>/<plugin>/incoming_occ_map |
nav_msgs/msg/OccupancyGrid |
Input occupancy grid to import into NavMap. | depth=1, transient_local, reliable |
| Subscription | <node_fqn>/<plugin>/incoming_pc2_map |
sensor_msgs/msg/PointCloud2 |
Input point cloud to build/update NavMap. | depth=100 |
Services
| Direction | Service | Type | Purpose |
|---|---|---|---|
| Service Server | <node_fqn>/<plugin>/savemap |
std_srvs/srv/Trigger |
Saves the current NavMap and layers to disk. |
NavState Keys
File truncated at 100 lines see the full file
Changelog for package easynav_navmap_maps_manager
0.5.0 (2026-10-08)
- Runtime reconfiguration (rejected ones are reported)
- Robot geometry from system_node
- ObstacleFilter: keeps the static map; range and height limits; a column is an obstacle when it rises more than min_height above the NavMap surface (so a 2D laser sees obstacles, and the ground and ramps are not ones); min_height_per_meter and downsample_resolution parameters
- InflationFilter: inflates across unknown cells
- Fixed std::bad_alloc
- Builds on Humble, Jazzy, Kilted, Lyrical and Rolling
- Contributors: Francisco Martín Rico
0.4.2 (2026-07-26)
- Complete deps
- Navstate key among filters are always map, not an arbitrary key
- Update calls to deprecated get_package_share_directory
- Adaptations to #94
- Update plugins to new sensors API
- GPLv3 -> Apache 2.0
- Improve navstate print including the time
- Remove C++20/C++23 features and update to new MethodBase interface
- Merge branch 'set_robot_frame' into frames-fix-pr-40
- TFInfo in RTTFBuffer
- Final adjustements
- Refactor to use TFInfo
- Merge branch 'rolling' into improve_astar_costmap
- linting docs
- Optimize execution Cleanup unused headers
- Dependencies were fixed
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Update sheets
- First functional version of Inflation filter
- Update to Occ constants
- Add obstacle layer
- Optimized function
- First functional verison, but expensive
- Add params to navmap building map
- Contributors: Francisco Martín Rico, Francisco Miguel Moreno, Juan S. Cely, Juan S. Cely G., Miguel, migueldm
0.0.2 (2025-10-12)
- Reorganization initial
- Contributors: Francisco Martín Rico
Package Dependencies
System Dependencies
| Name |
|---|
| eigen |
| graphicsmagick |