博客转载自: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/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/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/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/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.概述 注:红色代表代价地图中的障碍物,蓝色代表的是通过机器人内切圆半径计算的障碍物膨胀,红色的多边形代表机器人外壳.为了使机器人不碰到障碍物,机器人的外壳绝对不允许…
导航与定位是机器人研究中的重要部分.         一般机器人在陌生的环境下需要使用激光传感器(或者深度传感器转换成激光数据),先进行地图建模,然后在根据建立的地图进行导航.定位.在ROS中也有很多完善的包可以直接使用.         在ROS中,进行导航需要使用到的三个包是:       (1) move_base:根据参照的消息进行路径规划,使移动机器人到达指定的位置:       (2) gmapping:根据激光数据(或者深度数据模拟的激光数据)建立地图:       (3) amc…