博客转自:https://blog.csdn.net/Neo11111/article/details/104798065
Costmap通过各层地图订阅话题、接收传感器数据,维护各层地图数据,并最终整合出一张用于路径规划的主地图。
【结构示意图】
【相关文件】
costmap_2d/src/costmap_2d_ros.cpp
costmap_2d/src/costmap_2d.cpp
costmap_2d/src/layered_costmap.cpp
costmap_2d/src/costmap_layer.cpp
costmap_2d/plugins/static_layer.cpp
costmap_2d/plugins/obstale_layer.cpp
costmap_2d/plugins/inflation_layer.cpp
Costmap2DROS类是对整个代价地图内容的封装。
LayeredCostmap类是Costmap2DROS的类成员,它是“主地图”,也能够管理各层地图,因为它含有指向各层子地图的指针,能够调用子地图的类方法,开启子地图的更新。并且,各层子地图最后都会合并到主地图上,提供给规划器的使用。它含有Costmap2D类成员,这个类就是底层地图,用于记录地图数据。
CostmapLayer类派生自Layer类和Costmap2D类。Layer类中含有子地图层用到的一些函数,如更新size、更新bound、和主地图合并等;Costmap2D类存储该层维护的地图数据。由CostmapLayer类派生出StaticLayer类和ObstacleLayer类,即静态层和障碍层,前者获取静态地图,后者通过传感器数据不断更新,获得能反映障碍物信息的子地图。