ROS导航系列(三):costmap2D详解

一、介绍

costmap每个格子都有三种状态(occupied, free, unknown space)
两种行为 mark and clear

标记的时候,根据传感器的信息,执行上述的mark or clear的操作。

订阅tf是为了将激光雷达基于自身坐标系获得的传感器信息,转移到map坐标系下,完成costmap的更新。
参数transform_tolerance用于设置容忍没有获得tf_state的最大时限。超过的话,机器人将会停止。

使用move_base直接启动costmap的时候,他会创造两个costmap,分别将之命名为global_costmap 和 local_costmap。

最后,每个costmap都可以选择配置四层layer:

  • static map layer
  • obstacle map layer
  • inflation map
  • voxel_layer

他们通过插件的形式加载到cosmap_2d中。
ROS导航系列(三):costmap2D详解_第1张图片

我们会为global_costmap配置静态地图层+膨胀层,为local_costmap配置障碍物地图层 + 膨胀层

其中,静态地图层是订阅/map话题,通常由map_server提供。关键参数static_map设置为true

障碍物地图层是通过实时获取传感器信息,在周围设置好的地图范围内获取周围障碍物信息。关键参数rolling_window设置为true

二、示例

用turtlebot3举例

1. map_server

仅仅订阅map_server提供的/map话题:

ROS导航系列(三):costmap2D详解_第2张图片

2. global_costmap

仅仅订阅global_costmap:(下图包括静态地图层 + 障碍物层 + 膨胀层)
ROS导航系列(三):costmap2D详解_第3张图片只看静态地图层:

ROS导航系列(三):costmap2D详解_第4张图片

只看障碍物地图层:(基于传感器)

ROS导航系列(三):costmap2D详解_第5张图片


关于膨胀地图,其中关键参数为cost_scaling_factor,他是膨胀过程中应用到代价值的比例因子。

成本函数的计算方法如下:
exp(-1.0 * cost_scaling_factor * (distance_from_obstacle - inscribed_radius)) * (costmap_2d::INSCRIBED_INFLATED_OBSTACLE - 1)
公式中costmap_2d::INSCRIBED_INFLATED_OBSTACLE目前指定为254。

注意:由于在公式中将cost_scaling_factor乘以负数,所以增大比例因子会降低代价值。

3. local_costmap

仅仅订阅local_costmap:(下图包括障碍物层 + 膨胀层)
ROS导航系列(三):costmap2D详解_第6张图片
其中局部代价地图,只是查看周围的一定范围内的代价数值。
局部地图通常基于odom的frame:

  global_frame: odom
  robot_base_frame: base_footprint

你可能感兴趣的:(ROS导航,ROS学习)