< >
Home » ROS2与Navigation2入门教程 » ROS2与Navigation2入门教程-配置Costmap 2D

ROS2与Navigation2入门教程-配置Costmap 2D

说明:

  • 介绍如何配置Costmap 2D

概述

  • 其源代码位于Github网站上。

  • Costmap 2D软件包为环境表示和许多传感器处理插件实现了基于 2D网格的成本地图。

  • 在规划器和控制器服务器中使用该软件包来创建空间以检测碰撞区域或更高成本区域,以便机器人作出应对

Costmap2D ROS参数

  • always_send_full_costmap参数
数据类型:bool
默认值:False
参数描述:用于设置是否在每次更新时发送完整的成本地图,而不是对成本地图进行更新。
  • footprint_padding参数
数据类型:double
默认值:0.01
参数描述:用于设置填充footprint的数量(单位为m)。
  • footprint参数
数据类型:vector<double>
默认值:“[]”
参数描述:用于设置作为字符串传入的有序足迹点集,必须是闭集。例如,下面这个footprint定义了一个边长为0.2米的正方形底座。footprint:“[ [[0.1, 0.1], [0.1, -0.1], [-0.1, -0.1], [-0.1, 0.1] ]”。
  • global_frame参数
数据类型:string
默认值:“map”
参数描述:用于设置参考坐标系。
  • height参数
数据类型:int
默认值:5
参数描述:用于设置成本地图的高度(单位为m)。
  • width参数
数据类型:int
默认值:5
参数描述:用于设置成本地图的宽度(单位为m)。
  • lethal_cost_threshold参数
数据类型:int
默认值:100
参数描述:用于设置被视为致命障碍的占用网格地图的最低成本。
  • map_topic参数
数据类型:string
默认值:“map”
参数描述:用于设置map_server或SLAM地图的话题。
  • observation_sources参数
数据类型:string
默认值:“”
参数描述:用于设置字符串格式的传感器源列表,如果未在插件特定配置中指定,则使用此参数。例如:“static_layer stvl_layer”。
  • origin_x参数
数据类型:double
默认值:0.0
参数描述:用于设置成本地图上相对于宽度方向的X轴原点(单位为m)。
  • origin_y参数
数据类型:double
默认值:0.0
参数描述:用于设置成本地图上相对于高度方向的Y轴原点(单位为m)。
  • publish_frequency参数
数据类型:double
默认值:1.0
参数描述:用于设置将成本地图发布到话题上的频率。
  • resolution参数
数据类型:double
默认值:0.1
参数描述:用于设置成本地图上1个像素的分辨率,单位为m。
  • robot_base_frame参数
数据类型:string
默认值:“base_link”
参数描述:用于设置机器人底座坐标系。
  • robot_radius参数
数据类型:double
默认值:0.1
参数描述:用于设置要使用的机器人半径(如果未提供足迹坐标)。
  • rolling_window参数
数据类型:bool
默认值:False
参数描述:用于设置成本地图是否应该随机器人基座滚动。
  • track_unknown_space参数
数据类型:bool
默认值:False
参数描述:用于设置是否将未知空间视为空闲空间。如果为false,则会将未知空间视为空闲空间;否则视为未知空间。
  • transform_tolerance参数
数据类型:double
默认值:0.3
参数描述:用于设置TF变换的容忍误差。
  • trinary_costmap参数
数据类型:bool
默认值:True
参数描述:用于设置是否对成本地图进行三值化。如果为True,占用网格地图应该被解译为只有3个值(空闲、占用、未知);否则直接使用其存储的值。
  • unknown_cost_value参数
数据类型:int
默认值:255
参数描述:用于设置未知空间的成本(如果要对其进行追踪)。
  • update_frequency参数
数据类型:double
默认值:5.0
参数描述:用于设置成本地图的更新频率。
  • use_maximum参数
数据类型:bool
默认值:False
参数描述:用于设置在组合成本地图时是否使用最大成本或者进行覆盖。
  • plugins参数
数据类型:vector<string>
默认值:{“static_layer”, “obstacle_layer”, “inflation_layer”}
参数描述:用于设置参数命名空间和名称的映射插件名称列表。
  • 注释:此列表中定义的每个插件命名空间都需要有一个plugin参数,用于定义要在该命名空间中加载的插件类型。
  • 例如:
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参数
数据类型:vector<string>
默认值:{}
参数描述:用于设置参数命名空间和名称的映射成本地图过滤器名称列表。
  • 注释:成本地图过滤器也是可加载的插件,就像普通的成本地图图层一样。将它们区分开来是为了避免插件和过滤器相互干扰,并会将这些过滤器放在组合的分层成本地图的最上面。与插件一样,此列表中定义的每个成本地图过滤器命名空间都需要有一个plugin参数,用于定义要在命名空间中加载的过滤器插件的类型。
  • 例如:
local_costmap:
  ros__parameters:
   filters: ["keepout_filter", "speed_filter"]
    keepout_filter:
      plugin: "nav2_costmap_2d::KeepoutFilter"
    speed_filter:
      plugin: "nav2_costmap_2d::SpeedFilter"

默认插件

  • 当plugins参数未被覆盖时,将会加载以下默认插件:
命名空间插件
“static_layer”“nav2_costmap_2d::StaticLayer”
“obstacle_layer”“nav2_costmap_2d::ObstacleLayer”
“inflation_layer”“nav2_costmap_2d::InflationLayer”

插件参数

  • 静态图层(Static Layer)参数
<static layer>是为此类型选择的相应插件名称。
  • .enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否启用静态图层(static layer)。
  • .subscribe_to_updates参数
数据类型:bool
默认值:False
参数描述:用于设置是否在接收到第一个静态地图后订阅静态地图更新。
  • .map_subscribe_transient_local参数
数据类型:bool
默认值:True
参数描述:用于设置是否将地图话题的QoS设置为瞬态本地(transient local)。
  • .transform_tolerance参数
数据类型:double
默认值:0.0
参数描述:用于设置坐标变换TF的容许误差。
  • .map_topic参数
数据类型:string
默认值:“”
参数描述:用于设置要订阅的地图话题。如果其值为空,则地图话题将会默认为costmap_2d_ros中的全局map_topic参数。
  • 膨胀图层(Inflation Layer)参数
<inflation layer>是为此类型选择的相应插件名称。
  • < inflation layer>.enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否启用膨胀图层(inflation layer)。
  • < inflation layer>.inflation_radius参数
数据类型:double
默认值:0.55
参数描述:用于设置围绕致命障碍物膨胀成本地图的半径。
  • < inflation layer>.cost_scaling_factor参数
数据类型:double
默认值:10.0
参数描述:用于设置跨膨胀半径的指数衰减因子。
  • < inflation layer>.inflate_unknown参数
数据类型:bool
默认值:False
参数描述:用于设置是否将未知单元格膨胀成致命障碍。
  • < inflation layer>.inflate_around_unknown参数
数据类型:bool
默认值:False
参数描述:用于设置是否围绕未知单元格进行膨胀。
  • 障碍图层(Obstacle Layer)参数
<obstacle layer>是为此类型选择的相应插件名称。
<data source>是该数据源参数对应的观测源(传感器)名称。
  • < obstacle layer>.enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否启用障碍图层(obstacle layer)。
  • < obstacle layer>. footprint_clearing_enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否清除机器人足迹下的任何占用单元格。
  • < obstacle layer>. max_obstacle_height参数
数据类型:double
默认值:2.0
参数描述:用于设置返回给占用网格的障碍物最大高度。
  • < obstacle layer>. combination_method参数
数据类型:int
默认值:1
参数描述:用于设置将数据添加到主成本地图的方式的枚举,默认为最大值。
  • < obstacle layer>. observation_sources参数
数据类型:vector<string>
默认值:{“”}
参数描述:用于设置数据源的命名空间。
  • < obstacle layer>. .topic参数
数据类型: string
默认值:“”
参数描述:用于设置某个数据源发布数据的话题。
  • < obstacle layer>. .sensor_frame参数
数据类型: string
默认值:“”
参数描述:用于设置某个传感器的坐标系(如果消息未提供该传感器坐标系的话则使用此参数值)。如果为空,则使用消息提供的坐标系ID(frame_id)。
  • < obstacle layer>. .observation_persistence参数
数据类型:double
默认值:0.0
参数描述:用于设置在删除消息之前在缓冲区中存储要添加到成本地图上的某个传感器消息的时间(单位为秒)。
  • < obstacle layer>. .expected_update_rate参数
数据类型:double
默认值:0.0
参数描述:用于设置从某个传感器获取新数据的预期更新频率。
  • < obstacle layer>. .data_type参数
数据类型:string
默认值:“LaserScan”
参数描述:用于设置某个传感器的输入数据类型,其值为LaserScan或PointCloud2。
  • < obstacle layer>. .min_obstacle_height参数
数据类型:double
默认值:0.0
参数描述:用于设置某个传感器添加返回给占用网格的障碍物最小高度。
  • < obstacle layer>. .max_obstacle_height参数
数据类型:double
默认值:0.0
参数描述:用于设置某个传感器添加返回给占用网格的障碍物最大高度。
  • < obstacle layer>. .inf_is_valid参数
数据类型:bool
默认值:False
参数描述:用于设置来自激光扫描的无限返回是否能有效度量光线投射。
  • < obstacle layer>. .marking参数
数据类型:bool
默认值:True
参数描述:用于设置某个数据源是否应在成本地图中进行标记。
  • < obstacle layer>. .clearing参数
数据类型:bool
默认值:False
参数描述:用于设置某数据源是否应对成本地图中的光线追踪进行清除。
  • < obstacle layer>. . obstacle_max_range参数
数据类型:double
默认值:2.5
参数描述:用于设置某个数据源对成本地图中障碍物进行标记的最大范围。
  • < obstacle layer>. . obstacle_min_range参数
数据类型:double
默认值:0.0
参数描述:用于设置某个数据源对成本地图中障碍物进行标记的最小范围。
  • < obstacle layer>. . raytrace_max_range参数
数据类型:double
默认值:3.0
参数描述:用于设置某个数据源对成本地图中障碍物进行光线追踪清除的最大范围。
  • < obstacle layer>. .raytrace_min_range参数
数据类型:double
默认值:0.0
参数描述:用于设置某个数据源对成本地图中障碍物进行光线追踪清除的最小范围。
  • 体素图层(Voxel Layer)参数
<voxel layer>是为此类型选择的相应插件名称。
<data source>是该数据源参数对应的观测源(传感器)名称。
  • < voxel layer>.enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否启用体素图层(voxel layer)。
  • < voxel layer>. footprint_clearing_enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否清除机器人足迹下的任何占用单元格。
  • < voxel layer>. max_obstacle_height参数
数据类型:double
默认值:2.0
参数描述:用于设置返回给占用网格的障碍物最大高度。
  • < voxel layer>. z_voxels参数
数据类型:int
默认值:10
参数描述:用于设置要标记z轴方向高度的体素个数,最多为16个体素。
  • < voxel layer>. origin_z参数
数据类型:double
默认值:0.0
参数描述:用于设置从哪里开始标记体素即z轴原点(单位为m)。
  • < voxel layer>. z_resolution参数
数据类型: double
默认值:0.2
参数描述:用于设置高度方向上(z轴)体素的分辨率(单位为m)。
  • < voxel layer>.unknown_threshold参数
数据类型: int
默认值:15
参数描述:用于设置某柱中要在2D占用网格中标记为未知的最小空体素数。
  • < voxel layer>. mark_threshold参数
数据类型:int
默认值:0
参数描述:用于设置某柱中要在2D占用网格中标记为已占用的最小体素数。
  • < voxel layer>. combination_method参数
数据类型:int
默认值:1
参数描述:用于设置将数据添加到主成本地图的方式的枚举,默认为最大值。
  • < voxel layer>. publish_voxel_map参数
数据类型:bool
默认值:False
参数描述:用于设置是否要为调试发布3D体素网格,其计算量大。
  • < voxel layer>. observation_sources参数
数据类型:vector<string>
默认值:{“”}
参数描述:用于设置数据源的命名空间。
  • < voxel layer>. .topic参数
数据类型: string
默认值:“”
参数描述:用于设置某个数据源发布数据的话题。
  • < voxel layer>. .sensor_frame参数
数据类型: string
默认值:“”
参数描述:用于设置某个传感器的坐标系(如果消息未提供该传感器坐标系的话则使用此参数值)。如果为空,则使用消息提供的坐标系ID(frame_id)。
  • < voxel layer>. .observation_persistence参数
数据类型:double
默认值:0.0
参数描述:用于设置在删除消息之前在缓冲区中存储要添加到成本地图上的某个传感器消息的时间(单位为秒)。
  • < voxel layer>. .expected_update_rate参数
数据类型:double
默认值:0.0
参数描述:用于设置从某个传感器获取新数据的预期更新频率。
  • < voxel layer>. .data_type参数
数据类型:string
默认值:“LaserScan”
参数描述:用于设置某个传感器的输入数据类型,其值为LaserScan或PointCloud2。
  • < voxel layer>. .min_obstacle_height参数
数据类型:double
默认值:0.0
参数描述:用于设置某个传感器添加返回给占用网格的障碍物最小高度。
  • < voxel layer>. .max_obstacle_height参数
数据类型:double
默认值:0.0
参数描述:用于设置某个传感器添加返回给占用网格的障碍物最大高度。
  • < voxel layer>. .inf_is_valid参数
数据类型:bool
默认值:False
参数描述:用于设置来自激光扫描的无限返回是否能有效度量光线投射。
  • < voxel layer>. .marking参数
数据类型:bool
默认值:True
参数描述:用于设置某个数据源是否应在成本地图中进行标记。
  • < voxel layer>. .clearing参数
数据类型:bool
默认值:False
参数描述:用于设置某数据源是否应对成本地图中的光线追踪进行清除。
  • < voxel layer>. . obstacle_max_range参数
数据类型:double
默认值:2.5
参数描述:用于设置某个数据源对成本地图中障碍物进行标记的最大范围。
  • < voxel layer>. . obstacle_min_range参数
数据类型:double
默认值:0.0
参数描述:用于设置某个数据源对成本地图中障碍物进行标记的最小范围。
  • < voxel layer>. . raytrace_max_range参数
数据类型:double
默认值:3.0
参数描述:用于设置某个数据源对成本地图中障碍物进行光线追踪清除的最大范围。
  • < voxel layer>. .raytrace_min_range参数
数据类型:double
默认值:0.0
参数描述:用于设置某个数据源对成本地图中障碍物进行光线追踪清除的最小范围。
  • 距离传感器(Range Sensor Layer)参数
<range layer>是为此类型选择的相应插件名称。
  • < range layer>.enabled参数
数据类型:bool
默认值:True
参数描述:用于设置是否启用距离传感器图层(range layer)。
  • < range layer>. topics参数
数据类型:vector<string>
默认值:[“”]
参数描述:用于设置要订阅的距离话题。
  • < range layer>. phi参数
数据类型:double
默认值:1.2
参数描述:用于设置Phi值。
  • < range layer>.inflate_cone参数
数据类型:double
默认值:1.0
参数描述:用于设置对传感器覆盖的三角形区域进行膨胀的百分比。
  • < range layer>.no_readings_timeout参数
数据类型:double
默认值:0.0
参数描述:用于设置距离传感器读数超时时间。如果设为0,则此参数无效。否则,如果在设定的时间内图层没有接收到传感器数据,图层就会向用户发出警告,并且图层会被标记为不是当前的。
  • < range layer>.clear_threshold参数
数据类型:double
默认值:0.2
参数描述:用于设置清除概率阈值,低于该概率时单元格会被标记为空闲。
  • < range layer>.mark_threshold参数
数据类型:double
默认值:0.8
参数描述:用于设置标记概率阈值,高于该概率时单元格会被标记为占用。
  • < range layer>.clear_on_max_reading参数
数据类型:bool
默认值:False
参数描述:用于设置是否在最大范围上清除传感器读数。
  • < range layer>.input_sensor_type参数
数据类型:string
默认值:ALL
参数描述:用于设置输入传感器的类型,要么为ALL(自动选择),要么为VARIABLE(最小范围!= 最大范围),或者为FIXED(最小范围 == 最大范围)。

成本地图过滤器参数

  • 禁区过滤器(Keepout Filter)参数

  • 禁区过滤器(Keepout Filter)是一个成本地图过滤器,通过使用过滤器掩码信息更新相应的成本地图图层,强制机器人避开禁区或留在首选车道上。

  • :是为该类型选择的相应插件名称。

  • < filter name >.enabled参数

数据类型:bool
默认值:True
参数描述:用于设置是否启用禁区过滤器(Keepout Filter)。
  • < filter name >. filter_info_topic参数
数据类型: string
默认值:N/A
参数描述:设置传入的带有过滤器相关信息的CostmapFilterInfo话题名称。由成本地图过滤器信息服务器一起发布该话题和过滤器掩码话题。有关地图服务器和成本地图过滤器信息服务器配置的更多详细信息,请参阅Map Server / Saver配置页面。
  • < filter name >.transform_tolerance参数
数据类型:double
默认值:0.1
参数描述:用于设置发布的坐标变换事后日期的时间,以表明此坐标变换在未来有效。当过滤器掩码与当前成本地图图层具有不同坐标系时使用。
  • 示例:
global_costmap:
  global_costmap:
    ros__parameters:
      ...
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      filters: ["keepout_filter"]
      ...
      keepout_filter:
        plugin: "nav2_costmap_2d::KeepoutFilter"
        enabled: True
        filter_info_topic: "/costmap_filter_info"
        transform_tolerance: 0.1
...
local_costmap:
  local_costmap:
    ros__parameters:
      ...
      plugins: ["voxel_layer", "inflation_layer"]
      filters: ["keepout_filter"]
      ...
      keepout_filter:
        plugin: "nav2_costmap_2d::KeepoutFilter"
        enabled: True
        filter_info_topic: "/costmap_filter_info"
        transform_tolerance: 0.1

速度过滤器(Speed Filter)参数

  • 速度过滤器(Speed Filter)是一种限制机器人最大速度的成本地图过滤器。机器人应该减速的区域和最大允许速度值会在过滤器掩码中进行编码。

  • 过滤器掩码由地图服务器(Map Server)发布的,且与 成本地图过滤器信息服务器发布的过滤器信息话题成对出现。速度过滤器本身会向控制器发布速度限制消息,以使机器人不超过要求的速度。

  • :是为该类型选择的相应插件名称。

  • < filter name >.enabled参数

数据类型:bool
默认值:True
参数描述:用于设置是否启用速度过滤器(Speed Filter)。
  • < filter name >. filter_info_topic参数
数据类型: string
默认值:N/A
参数描述:设置传入的带有过滤器相关信息的CostmapFilterInfo话题名称。由成本地图过滤器信息服务器一起发布该话题和过滤器掩码话题。有关地图服务器和成本地图过滤器信息服务器配置的更多详细信息,请参阅Map Server / Saver配置页面。
  • < filter name >.speed_limit_topic参数
数据类型:string
默认值:“speed_limit”
参数描述:用于设置发布速度限制消息的话题。该消息具有以下字段含义:①percentage字段:如果设置为true,则速度限制会以百分比表示;若设置为false,则会以绝对值表示。此参数根据CostmapFilterInfo消息的type字段值进行设置。②speed_limit字段:非零值表明最大允许速度,取决于percentage字段值,会以机器人最大速度的百分比或者绝对值表示。零值表明没有速度限制(与percentage字段值无关)。speed_limit会从OccupancyGrid过滤器掩码值线性转换为:speed_limit = base + multiplier * mask_value,其中base和multiplier系数取自CostmapFilterInfo消息。
  • *注:以百分比表示的speed_limit其取值范围应为(0.0 .. 100.0]。

  • 此话题将由控制器服务器使用。请参阅控制器服务器配置页面进行适当地设置。

  • < filter name >.transform_tolerance参数

数据类型:double
默认值:0.1
参数描述:用于设置发布的坐标变换事后日期的时间,以表明此坐标变换在未来有效。当过滤器掩码与当前成本地图图层具有不同坐标系时使用。
  • 示例:
global_costmap:
  global_costmap:
    ros__parameters:
    ...
    plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
    filters: ["speed_filter"]
    ...
    speed_filter:
      plugin: "nav2_costmap_2d::SpeedFilter"
      enabled: True
      filter_info_topic: "/costmap_filter_info"
      speed_limit_topic: "/speed_limit"
      transform_tolerance: 0.1

示例

  • 演示例子
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

参考:

  • https://navigation.ros.org/configuration/packages/configuring-costmaps.html

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与navigation2入门教程