Costmap 2D
Source code on Github.
The Costmap 2D package implements a 2D grid-based costmap for environmental representations and a number of sensor processing plugins (AI outputs, depth sensor obstacle buffering, semantic information, etc). It is used in the planner and controller servers for creating the space to check for collisions or higher cost areas to negotiate around.
Costmap2D ROS Parameters
- always_send_full_costmap
Type
Default
bool
False
- Description
Whether to send full costmap every update, rather than updates.
- footprint_padding
Type
Default
double
0.01
- Description
Amount to pad footprint (m).
- footprint
Type
Default
vector<double>
“[]”
- Description
Ordered set of footprint points passed in as a string, must be closed set. For example, the following defines a square base with side lengths of 0.2 meters footprint: “[ [0.1, 0.1], [0.1, -0.1], [-0.1, -0.1], [-0.1, 0.1] ]”. Note that this can also be adjusted over time using the costmap’s
~/footprint
topic, which will update the polygon over time as needed due to changes in the robot’s state, such as movement of an attached manipulator, picking up a pallet, or other actions that adjust a robot’s shape. If this parameter is set,isPathValid
will do full collision checking.
- global_frame
Type
Default
string
“map”
- Description
Reference frame.
- height
Type
Default
int
5
- Description
Height of costmap (m).
- width
Type
Default
int
5
- Description
Width of costmap (m).
- lethal_cost_threshold
Type
Default
int
100
- Description
Minimum cost of an occupancy grid map to be considered a lethal obstacle.
- map_vis_z
Type
Default
double
0.0
- Description
The height of map, allows to avoid rviz visualization flickering at -0.008
- observation_sources
Type
Default
string
“”
- Description
List of sources of sensors as a string, to be used if not specified in plugin specific configurations. Ex. “static_layer stvl_layer”
- origin_x
Type
Default
double
0.0
- Description
X origin of the costmap relative to width (m).
- origin_y
Type
Default
double
0.0
- Description
Y origin of the costmap relative to height (m).
- publish_frequency
Type
Default
double
1.0
- Description
Frequency to publish costmap to topic.
- resolution
Type
Default
double
0.1
- Description
Resolution of 1 pixel of the costmap, in meters.
- robot_base_frame
Type
Default
string
“base_link”
- Description
Robot base frame.
- robot_radius
Type
Default
double
0.1
- Description
Robot radius to use, if footprint coordinates not provided. If this parameter is set,
isPathValid
will do circular collision checking.
- rolling_window
Type
Default
bool
False
- Description
Whether costmap should roll with robot base frame.
- track_unknown_space
Type
Default
bool
False
- Description
If false, treats unknown space as free space, else as unknown space.
- transform_tolerance
Type
Default
double
0.3
- Description
TF transform tolerance.
- initial_transform_timeout
Type
Default
double
60.0
- Description
Time to wait for the transform from robot base frame to global frame to become available. If exceeded, the configuration stage is aborted.
- trinary_costmap
Type
Default
bool
True
- Description
If occupancy grid map should be interpreted as only 3 values (free, occupied, unknown) or with its stored values.
- unknown_cost_value
Type
Default
int
255
- Description
Cost of unknown space if tracking it.
- update_frequency
Type
Default
double
5.0
- Description
Costmap update frequency.
- use_maximum
Type
Default
bool
False
- Description
whether when combining costmaps to use the maximum cost or override.
- plugins
Type
Default
vector<string>
{“static_layer”, “obstacle_layer”, “inflation_layer”}
- Description
List of mapped plugin names for parameter namespaces and names.
- Note
Each plugin namespace defined in this list needs to have a
plugin
parameter defining the type of plugin to be loaded in the namespace.Example:
local_costmap: ros__parameters: plugins: ["obstacle_layer", "voxel_layer", "inflation_layer"] obstacle_layer: plugin: "nav2_costmap_2d::ObstacleLayer" voxel_layer: plugin: "nav2_costmap_2d::VoxelLayer" inflation_layer: plugin: "nav2_costmap_2d::InflationLayer"
- filters
Type
Default
vector<string>
{}
- Description
List of mapped costmap filter names for parameter namespaces and names.
- Note
Costmap filters are also loadable plugins just as ordinary costmap layers. This separation is made to avoid plugin and filter interference and places these filters on top of the combined layered costmap. As with plugins, each costmap filter namespace defined in this list needs to have a
plugin
parameter defining the type of filter plugin to be loaded in the namespace.Example:
local_costmap: ros__parameters: filters: ["keepout_filter", "speed_filter"] keepout_filter: plugin: "nav2_costmap_2d::KeepoutFilter" speed_filter: plugin: "nav2_costmap_2d::SpeedFilter"
Default Plugins
When the plugins
parameter is not overridden, the following default plugins are loaded:
Namespace
Plugin
“static_layer”
“nav2_costmap_2d::StaticLayer”
“obstacle_layer”
“nav2_costmap_2d::ObstacleLayer”
“inflation_layer”
“nav2_costmap_2d::InflationLayer”
Plugin Parameters
Costmap Filters Parameters
Example
global_costmap:
global_costmap:
ros__parameters:
footprint_padding: 0.03
update_frequency: 1.0
publish_frequency: 1.0
global_frame: map
robot_base_frame: base_link
use_sim_time: True
robot_radius: 0.22 # radius set and used, so no footprint points
resolution: 0.05
plugins: ["static_layer", "obstacle_layer", "voxel_layer", "inflation_layer"]
obstacle_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
footprint_clearing_enabled: true
max_obstacle_height: 2.0
combination_method: 1
scan:
topic: /scan
obstacle_max_range: 2.5
obstacle_min_range: 0.0
raytrace_max_range: 3.0
raytrace_min_range: 0.0
max_obstacle_height: 2.0
min_obstacle_height: 0.0
clearing: True
marking: True
data_type: "LaserScan"
inf_is_valid: false
voxel_layer:
plugin: "nav2_costmap_2d::VoxelLayer"
enabled: True
footprint_clearing_enabled: true
max_obstacle_height: 2.0
publish_voxel_map: True
origin_z: 0.0
z_resolution: 0.05
z_voxels: 16
max_obstacle_height: 2.0
unknown_threshold: 15
mark_threshold: 0
observation_sources: pointcloud
combination_method: 1
pointcloud: # no frame set, uses frame from message
topic: /intel_realsense_r200_depth/points
max_obstacle_height: 2.0
min_obstacle_height: 0.0
obstacle_max_range: 2.5
obstacle_min_range: 0.0
raytrace_max_range: 3.0
raytrace_min_range: 0.0
clearing: True
marking: True
data_type: "PointCloud2"
static_layer:
plugin: "nav2_costmap_2d::StaticLayer"
map_subscribe_transient_local: True
enabled: true
subscribe_to_updates: true
transform_tolerance: 0.1
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
enabled: true
inflation_radius: 0.55
cost_scaling_factor: 1.0
inflate_unknown: false
inflate_around_unknown: true
always_send_full_costmap: True
local_costmap:
local_costmap:
ros__parameters:
update_frequency: 5.0
publish_frequency: 2.0
global_frame: odom
robot_base_frame: base_link
use_sim_time: True
rolling_window: true
width: 3
height: 3
resolution: 0.05