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