博客转载自:https://blog.csdn.net/u013158492/article/details/50493676 构造函数 ObstacleLayer() { costmap_ = NULL; // this is the unsigned char* member of parent class Costmap2D.这里指明了costmap_指针保存了Obstacle这一层的地图数据 } 对于ObstacleLater,首先分析其需要实现的Layer层的方法: virtual v…
博客转载自:https://blog.csdn.net/u013158492/article/details/50493246 从UML中能够看到,StaticLayer主要是在实现Layer层要求实现的接口. virtual void onInitialize(); virtual void activate(); virtual void deactivate(); virtual void reset(); virtual void updateBounds(double robot_x,…
博客转载自:https://blog.csdn.net/u013158492/article/details/50485418 在上一篇文章中moveBase就有关于costmap_2d的使用: planner_costmap_ros_是用于全局导航的地图,controller_costmap_ros_是局部导航用的地图,地图类型为经过ROS封装的costmap_2d::Costmap2DROS*. ROS Costmap2DROS类的UML 看看这个类的成员变量:LayeredCostmap*…
博客转载自:https://blog.csdn.net/u013158492/article/details/50483123 这是navigation的第一篇文章,主要通过分析ROS代码级实现,了解navigation.本文从move_base入手. 机器人导航主要框架 Navigation Stack主要组成部分:move_base 用户调用movebase是通过传入带tf参数的构造函数: move_base::MoveBase move_base( tf ); 以下分析move_base的…
博客转自:https://blog.csdn.net/u013158492/article/details/50493220 这个类是为ObstacleLayer StaticLayer voxelLayer 这种维护了自己所在层的地图数据的类,提供了一些公共的操作方法. 从UML中可以看到,这个类提供了以下方法,这些方法的参数列表均为(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j)…
博客转自:https://blog.csdn.net/u013158492/article/details/50490490 在数据成员中,有两个重要的变量:Costmap2D costmap_和 std::vector<boost::shared_ptr<Layer> > plugins_ . 这个类相对比较简单,首先来看构造函数: LayeredCostmap::LayeredCostmap(std::string global_frame, bool rolling_wind…
博客转载自:https://blog.csdn.net/u013158492/article/details/50493113 这个类中有一个LayeredCostmap* layered_costmap_数据成员,这个数据成员很重要,因为这个类就是通过这个指针获取到的对master map的操作.没有这个指针,所有基于Layer继承下去的地图的类,都无法操作master map. 这个类基本上没有什么实质性的操作,主要是提供了统一的接口,要求子类必须实现这些方法.这样plugin使用的时候,就…
博客转载自:https://blog.csdn.net/u013158492/article/details/50492506 Costmap2D是存储地图数据的父类.真正的地图数据就存储在数据成员unsigned char *costmap_ . 首先,分析类的构造函数:,默认构造函数:Costmap2D::Costmap2D()  // just initialize everything to NULL by default Costmap2D::Costmap2D() : size_x_…
costmap_2d这个包提供了一种2D代价地图的实现方案,该方案利用输入的传感器数据,构建数据2D或者3D代价地图(取决于是否使用基于voxel的实现),并根据占用网格和用户定义的膨胀半径计算2D代价地图的代价. 此外,该包也支持利用map_server初始化代价地图,支持滚动窗口的代价地图,支持参数化订阅和传感器主题的配置. 1.概述 注:红色代表代价地图中的障碍物,蓝色代表的是通过机器人内切圆半径计算的障碍物膨胀,红色的多边形代表机器人外壳.为了使机器人不碰到障碍物,机器人的外壳绝对不允许…
在做机器人导航的时候,肯定见到过global_costmap和local_costmap.global_costmap是为了全局路径规划服务的,如从这个房间到那个房间该怎么走.local_costmap是为局部路径规划服务的,如机器人局部有没有遇到行人之类的障碍.costmap就是栅格图,每个栅格里存放着障碍物信息.但是hydro里的costmap不是单独一个栅格图,而是将一个栅格图分成了很多层,如最底下是静态地图,即墙壁,桌子等建地图时已经存在的障碍物:第二层是障碍物层:第三层是膨胀层,可以理…