LayeredCostmap类

LayeredCostmap类是Costmap2DROS的类成员,它是主地图,也能够管理各层地图,因为它含有指向各层子地图的指针,能够调用子地图的类方法,开启子地图的更新。 每一层在Costmap2DROS中以插件方式被实例化,并被添加到LayeredCostmap。每一层可以独立编译,且可使用C++接口对代价地图随意修改,即LayerdCostmapCostmap2DROS(用户接口)提供了加载地图层的插件机制,每个插件(即地图层)都是Layer类型的

LayeredCostmap的所有函数其实都是通过Costmap2D和各个Layer的函数执行的。

Layer调用的函数: isCurrent, onFootprintChanged, updateBounds, matchSize

Costmap2D调用的函数: updateOrigin, resizeMap, setDefaultValue

  • getCostmap()也可以获得costmap_2d::Costmap2D *costmap指针

  • getInscribedRadius() 获得内切圆半径

  • getCircumscribedRadius() 获得外接圆半径

  • 地图有效性 current

对于各层,都有current_参数,该参数继承自Layer类,且通过Layer::isCurrent查询。总的地图的current是通过各层current的与操作计算出来的, 可看LayeredCostmap::isCurrent(),主要的操作是对操作的实时性提供保证,提供是否发生超时的信息。

对于静态层,只要初始化(onInitialize)完成后current_就一直为true

对于障碍物层,其current_参数是各个观察缓冲区ObservationBuffer是否current的与操作,而ObservationBuffer的current取决于缓冲区更新时间(新的观测数据到来的时间)与expected_update_rate参数的对比。

对于膨胀层,也是只要初始化完成后current_就一直为true