naviagtion专题

ROS naviagtion analysis: costmap_2d--ObstacleLayer

构造函数 ObstacleLayer(){costmap_ = NULL; // this is the unsigned char* member of parent class Costmap2D.这里指明了costmap_指针保存了Obstacle这一层的地图数据} 对于ObstacleLater,首先分析其需要实现的Layer层的方法: virtual void o

ROS naviagtion analysis: costmap_2d--StaticLayer

从UML中能够看到,StaticLayer主要是在实现Layer层要求实现的接口。 virtual void onInitialize();virtual void activate();virtual void deactivate();virtual void reset();virtual void updateBounds(double robot_x, double rob

ROS naviagtion analysis: costmap_2d--CostmapLayer

这个类是为ObstacleLayer StaticLayer voxelLayer 这种维护了自己所在层的地图数据的类,提供了一些公共的操作方法。 从UML中可以看到,这个类提供了以下方法,这些方法的参数列表均为(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) updateWit

ROS naviagtion analysis: costmap_2d--Layer

这个类中有一个LayeredCostmap* layered_costmap_数据成员,这个数据成员很重要,因为这个类就是通过这个指针获取到的对master map的操作。没有这个指针,所有基于Layer继承下去的地图的类,都无法操作master map。 这个类基本上没有什么实质性的操作,主要是提供了统一的接口,要求子类必须实现这些方法。这样plugin使用的时候,就可以不用管具体是什么类

ROS naviagtion analysis: costmap_2d--Costmap2D

Costmap2D是存储地图数据的父类。真正的地图数据就存储在数据成员unsigned char *costmap_ 。 首先,分析类的构造函数: 默认构造函数:Costmap2D::Costmap2D() : // just initialize everything to NULL by defaultCostmap2D::Costmap2D() :size_x_(0), si

ROS naviagtion analysis: move_base

这是navigation的第一篇文章,主要通过分析ROS代码级实现,了解navigation。本文从move_base入手。 机器人导航主要框架如图: Navigation Stack主要组成部分:move_base: 用户调用movebase是通过传入带tf参数的构造函数: move_base::MoveBase move_base( tf ); 以下分析move_base