Costmap 2D

Source code on Github.

Costmap 2D 包实现了基于 2D 网格的代价地图,用于环境表示和多个传感器处理插件(AI 输出、深度传感器障碍物缓冲、语义信息等)。 它用于规划器和控制器服务器,用于创建检查碰撞或更高成本区域的空间以进行协商。

Costmap2D ROS参数

always_send_full_costmap:

Type

Default

bool

False

Description

是否每次更新时都发送完整的成本图,而不是更新。

footprint_padding:

Type

Default

double

0.01

Description

相当于垫块占地面积 (m)。

footprint:

Type

Default

vector<double>

“[]”

Description

以字符串形式传入的有序足迹点集,必须是封闭集。例如,以下定义了一个边长为 0.2 米的正方形底座 footprint: “[ [0.1, 0.1], [0.1, -0.1], [-0.1, -0.1], [-0.1, 0.1] ]”。请注意,这也可以使用 costmap 的 ~/footprint 主题随时间进行调整,该主题将根据机器人状态的变化(例如连接的操纵器的移动、拾起托盘或其他调整机器人形状的操作)随时间更新多边形。如果设置了此参数,isPathValid 将进行完整的碰撞检查。

global_frame:

Type

Default

string

“map”

Description

參考框架。

height:

Type

Default

int

5

Description

代价地图的高度(米)。

width:

Type

Default

int

5

Description

代价地图的宽度(m)。

lethal_cost_threshold:

Type

Default

int

100

Description

占用网格图的最低成本被视为致命障碍。

map_topic:

Type

Default

string

“map”

Description

来自 map_server 或 SLAM 的地图主题。

map_vis_z:

Type

Default

double

0.0

Description

地图高度,可以避免 rviz 可视化在 -0.008 处闪烁

observation_sources:

Type

Default

string

“”

Description

以字符串形式列出传感器源,如果插件特定配置中未指定,则使用。例如“static_layer stvl_layer”

origin_x:

Type

Default

double

0.0

Description

相对于宽度(m)的成本地图的X原点。

origin_y:

Type

Default

double

0.0

Description

相对于高度(米)的成本地图的 Y 原点。

publish_frequency:

Type

Default

double

1.0

Description

将成本图发布到主题的频率。

resolution:

Type

Default

double

0.1

Description

代价地图1像素的分辨率,以米为单位。

robot_base_frame:

Type

Default

string

“base_link”

Description

机器人底座框架。

robot_radius:

Type

Default

double

0.1

Description

如果未提供足迹坐标,则使用机器人半径。如果设置了此参数,“isPathValid”将进行圆形碰撞检查。

rolling_window:

Type

Default

bool

False

Description

代价地图是否应该随机器人基座框架滚动。

track_unknown_space:

Type

Default

bool

False

Description

如果为假,则将未知空间视为自由空间,否则视为未知空间。

transform_tolerance:

Type

Default

double

0.3

Description

TF 变换容差。

initial_transform_timeout:

Type

Default

double

60.0

Description

等待从机器人基座坐标系到全局坐标系的转换可用的时间。如果超过此时间,配置阶段将中止。

trinary_costmap:

Type

Default

bool

True

Description

如果占用网格图应解释为仅 3 个值(空闲、占用、未知)或其存储的值。

unknown_cost_value:

Type

Default

int

255

Description

如果跟踪未知空间则需要花费成本。

update_frequency:

Type

Default

double

5.0

Description

成本地图更新频率。

use_maximum:

Type

Default

bool

False

Description

组合代价地图时是否使用最大代价或者覆盖。

plugins:

Type

Default

vector<string>

{“static_layer”, “obstacle_layer”, “inflation_layer”}

Description

参数命名空间和名称的映射插件名称列表。

Note

此列表中定义的每个插件命名空间都需要有一个:code:plugin 参数来定义要在命名空间中加载的插件类型。

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

参数命名空间和名称的映射代价地图过滤器名称列表。

Note

成本地图过滤器也是可加载的插件,就像普通的成本地图层一样。这种分离是为了避免插件和过滤器的干扰,并将这些过滤器放在组合分层成本地图的顶部。与插件一样,此列表中定义的每个成本地图过滤器命名空间都需要有一个:code:plugin 参数,定义要在命名空间中加载的过滤器插件的类型。

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

当未覆盖:code:plugins 参数时,将加载以下默认插件:

Namespace

Plugin

“static_layer”

“nav2_costmap_2d::StaticLayer”

“obstacle_layer”

“nav2_costmap_2d::ObstacleLayer”

“inflation_layer”

“nav2_costmap_2d::InflationLayer”

插件参数

代价地图过滤器参数

例子

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