Mobile Robot
文章平均质量分 55
BobLiao1987
工作领域:机器人软件系统开发,机器视觉,视觉伺服
展开
-
cartographer analysis - first chapter
为了分析这个代码的运行原理,首先切到最初的版本,这样的简化代码有利于理解cartographer的运行基本方式。 如上是cartographer的调用入口。 Node 是一个类,run 函数调用了Node的三个接口:构造函数,以及SpinForever, Initialize. 可以看到仅开放了main函数调用的方法。 Initialize()方法: 1. subscribe t原创 2017-01-06 00:04:50 · 1444 阅读 · 1 评论 -
cartographer source analysis
颓废了快半年了,换了工作,该重新开始对优秀代码的分析之旅了,最近好多想分析的代码没来得及看。 继上一次对ROS navigation的分析之后,接下来推出对google的cartographer源码分析。搜了一遍,没见到满意的源码分析,失望啊。 半年不上blog ,罪过罪过原创 2017-01-04 23:50:36 · 1812 阅读 · 0 评论 -
ROS navigation planner--GlobalPlanner
在关于move base 的配置文章中,关于planner部分的分析有一句:对于global planner,可以采用以下三种实现之一:"navfn/NavfnROS","global_planner/GlobalPlanner","carrot_planner/CarrotPlanner"本文分析其中的一种实现"global_planner/GlobalPlanner" : 首先,move b原创 2016-01-12 20:01:06 · 13814 阅读 · 8 评论 -
ROS plugin原理
在costmap_2d 中,大量使用了plugin技术实现可配置的layer和planner,为程序提供了很好的扩展性,而且这种扩展是不需要重新编译就能够实现。首先来看costmap_2d中使用到的plugin:bob@bob-Think:~$ rospack plugins --attrib=plugin costmap_2dcostmap_2d /opt/ros/indigo/share/原创 2016-01-12 16:01:47 · 4774 阅读 · 0 评论 -
机器人运动学
差分移动机器人的运动学离散方程:转载 2016-01-29 00:18:30 · 1791 阅读 · 0 评论 -
Move Base 的配置文件分析
本文分析move base 的配置文件,从配置文件设置的角度,可以更清晰的把握move base对于costmap2D,global planner,local planner的调用关系。 这里采用turtlebot_navigation package 为例:<launch> <include file="$(find turtlebot_navigation)/launch/include原创 2016-01-11 11:43:16 · 9655 阅读 · 4 评论 -
ROS naviagtion analysis: costmap_2d--InflationLayer
这是costmap_2d的最后一个重要的类了。InflationLayer 本身不存储map数据,所以所谓的地图层的概念,仅仅指的是一种对地图的操作,并不是数据层面的地图。 首先来看一个数据结构,知道有这个东西就行了:class CellData{public: CellData(double d, double i, unsigned int x, unsigned int y, un原创 2016-01-11 10:21:19 · 2906 阅读 · 2 评论 -
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原创 2016-01-10 23:13:52 · 8220 阅读 · 0 评论 -
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, doubl原创 2016-01-10 20:33:19 · 2742 阅读 · 1 评论 -
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)updateWithTrue原创 2016-01-10 18:50:57 · 1759 阅读 · 0 评论 -
ROS naviagtion analysis: costmap_2d--Layer
这个类中有一个LayeredCostmap* layered_costmap_数据成员,这个数据成员很重要,因为这个类就是通过这个指针获取到的对master map的操作。没有这个指针,所有基于Layer继承下去的地图的类,都无法操作master map。 这个类基本上没有什么实质性的操作,主要是提供了统一的接口,要求子类必须实现这些方法。这样plugin使用的时候,就可以不用管具体是什么类型的m原创 2016-01-10 18:28:59 · 2062 阅读 · 0 评论 -
ROS naviagtion analysis: costmap_2d--Costmap2D
Costmap2D是存储地图数据的父类。真正的地图数据就存储在数据成员unsigned char *costmap_ 。 首先,分析类的构造函数: 默认构造函数:Costmap2D::Costmap2D() :// just initialize everything to NULL by defaultCostmap2D::Costmap2D() : size_x_(0), siz原创 2016-01-10 17:35:10 · 2791 阅读 · 1 评论 -
ROS naviagtion analysis: costmap_2d--LayeredCostmap
在数据成员中,有两个重要的变量:Costmap2D costmap_; 和 std::vector<boost::shared_ptr<Layer> > plugins_; 。 这个类相对比较简单,首先来看构造函数:LayeredCostmap::LayeredCostmap(std::string global_frame, bool rolling_window, bool track_unk原创 2016-01-10 15:12:38 · 3197 阅读 · 3 评论 -
ROS naviagtion analysis: costmap_2d--Costmap2DROS
在上一篇文章中moveBase就有关于costmap_2d的使用: planner_costmap_ros_是用于全局导航的地图,controller_costmap_ros_是局部导航用的地图,地图类型为经过ROS封装的costmap_2d::Costmap2DROS*。 以下是这个ROS类的UML: 看看这个类的成员变量:LayeredCostmap* layered_costmap_原创 2016-01-09 23:28:52 · 7071 阅读 · 8 评论 -
ROS naviagtion analysis: move_base
这是navigation的第一篇文章,主要通过分析ROS代码级实现,了解navigation。本文从move_base入手。 机器人导航主要框架如图: Navigation Stack主要组成部分:move_base: 用户调用movebase是通过传入带tf参数的构造函数: move_base::MoveBase move_base( tf );以下分析move_base的构造函数原创 2016-01-09 01:19:17 · 5137 阅读 · 2 评论 -
DWA算法分析
先晒一个UML类图,接下来补上原创 2016-01-15 16:34:19 · 14320 阅读 · 3 评论 -
cartographer analysis - second chapter
第一章中的代码是ros-cartographer,实现了对cartographer的调用。通过trajectory_builder_ 的AddHorizontalLaserFan ,AddLaserFan3D ,AddImuData 方法向cartographer提供了传感器数据。 trajectory_builder_ 属于类 GlobalTrajectoryBuilderInterface.原创 2017-01-08 01:03:43 · 1206 阅读 · 0 评论