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_topic:

Type

Default

string

“map”

Description

Topic of map from map_server or SLAM.

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