博客转载自:https://blog.csdn.net/u013158492/article/details/50493113
这个类中有一个LayeredCostmap* layered_costmap_
数据成员,这个数据成员很重要,因为这个类就是通过这个指针获取到的对master map的操作。没有这个指针,所有基于Layer继承下去的地图的类,都无法操作master map。 这个类基本上没有什么实质性的操作,主要是提供了统一的接口,要求子类必须实现这些方法。这样plugin使用的时候,就可以不用管具体是什么类型的map,反正都有同样的方法名。
以下是这个类实现的两个方法,其他的方法基本上都是virtual ,要求子类实现。
void Layer::initialize(LayeredCostmap* parent, std::string name, tf::TransformListener *tf) { layered_costmap_ = parent; name_ = name; tf_ = tf; onInitialize(); } const std::vector<geometry_msgs::Point>& Layer::getFootprint() const { return layered_costmap_->getFootprint(); }
重要的几个virtual方法:
virtual void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, double* max_x, double* max_y) {} /** * @brief Actually update the underlying costmap, only within the bounds * calculated during UpdateBounds(). */ virtual void updateCosts(Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) {} /** @brief Stop publishers. */ virtual void deactivate() {} /** @brief Restart publishers if they've been stopped. */ virtual void activate() {} virtual void reset() {}
这个类就这么多内容,接下来进入真正干活的几个类分析:
ObstacleLayer InflationLayer StaticLayer VoxelLayer