ROS naviagtion analysis: costmap_2d--Layer

来源:互联网 发布:逐点圆弧插补算法 编辑:程序博客网 时间:2024/05/19 23:25

UML
这个类中有一个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() {}

这个类就这么多内容,接下来进入真正干活的几个类分析:

ObstacleLayerInflationLayerStaticLayerVoxelLayer
0 0
原创粉丝点击