move_base costmap 类关系及costmap更新过程
类关系图
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更新过程
说明
- updateBounds不改变各层的costmap的size,除非新地图来了重新resize。
- 原则上每一层的size要比上一层小。
- 新地图出现,会改变所有层大小。
- 膨胀半径或者足迹改变,会重新膨胀所有信息,而不只是膨胀bounds内的区域。