move_base costmap 类关系及costmap更新过程

类关系图

costmap_class.png

Figure 1: costmap类关系

  • layered cosmtap和需要保存一个costmap的分层都会实例化一个Costmap2D,这里static, obstacle都用到了,inflation没有用到。
  • Costmap2D中有表示map原点,分辨率,尺寸的变量,在rolling_window中,layered的会发 生改变,否则是不会变的,总是和static map一样大。

更新cosmtap过程

要从各Layer创建开始说起,各层继承关系有些差别:如果这一层需要保存costmap的值,那么 就继承CostmapLayer,进一步继承Layer和Costmap2D,这样可以通过Costmap2D来保存costmap; 如果不需要保存costmap,就直接继承Layer即可。

static,obstacle和inflation这三层中,static和obstacle需要保存costmap,所以都继承的是 CostmapLayer,inflation不用保存costmap,这一层膨胀前面两层的结果即可。

全局costmap更新过程

global_costmap.png

说明

  • updateBounds不改变各层的costmap的size,除非新地图来了重新resize。
  • 原则上每一层的size要比上一层小。
  • 新地图出现,会改变所有层大小。
  • 膨胀半径或者足迹改变,会重新膨胀所有信息,而不只是膨胀bounds内的区域。

Comments

comments powered by Disqus