ROS功能包之gmapping(SLAM)

 

gmapping功能包集成了Rao-Blackwellized粒子滤波算法,为开发者隐去了复杂的内部实现

gmapping功能包订阅机器人的深度信息、IMU信息和里程计信息,同时完成一些必要参数的配置,即可创建完成基于概率的二维栅格地图(机器人地图一般分为三种类型:栅格地图,拓扑地图,特征地图)。gmapping功能包基于openslam社区的开源SLAM算法,相关链接:openslam

一、话题和服务

 

 

  名称 类型 描述
话题订阅 tf tf/tfMessage 需要进行激光,用于坐标系、基准和测距的相关框架转换
scan sensor_msgs/LaserScan 激光雷达扫描数据
话题发布 map_metadata nav_msgs / MapMetaData 发布地图Meta数据
map nav_msgs / OccupancyGrid 发布地图栅格数据
〜entropy std_msgs / Float64 发布机器人姿态分布熵的估计
服务 dynamic_map nav_msgs / GetMap 调用此服务以获取地图数据

二、参数

三、坐标变换

  TF变换 描述
必须的TF变换 —> base_link 激光雷达坐标系之间与基坐标系之间的变换,一般由start_transform_publisher发布
base_link —> odom 基坐标系与里程坐标系之间的变换,一般由里程计节点发布
发布的TF变换 map —> odom 地图坐标系与机器人里程计坐标系之间的变换,估计机器人在地图中的位姿

下面是来自与一篇博客的学习笔记:tf坐标系转换(gmapping)

ROS功能包之gmapping(SLAM)_第1张图片

对于gmapping来说,一般坐标系就是map,odom,base_link,base_laser坐标系。

  1. map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fixed frame),一般与机器人所在的世界坐标系一致
  2. odom:里程计坐标系,这里要区分开odom topic,这是两个概念,一个是坐标系,一个是根据编码器(或者视觉等)计算的里程计。 但是两者也有关系,odom topic 转化得位姿矩阵是odom–>base_link的tf关系。这时可有会有疑问,odom和map坐标系是不是重合的?可以很肯定的告诉你,机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map–>odom的tf怎么得到?就是在一些校正传感器合作校正的package比如gmapping会给出一个位置估计(localization),这可以得到map–>base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–>odom的tf就是0(最后一句话是不是有点问题)
  3. base_footprint:坐标系原点base_link在2d平面(一般为地面)的投影
  4. base_link:一般位于tf tree的最根部,物理语义原点,一般表示机器人中心,为相对机器人的本体的坐标系
  5. base_laser:激光雷达的坐标系,与激光雷达的安装点有关,其与base_link的tf为固定的
     

这些坐标系之间的关系有些是静态的、有些是动态的。比如当机器人底盘移动的过程中,机器人底盘与世界的相对关系map->base_footprint就会随之变化;而安装在机器人底盘上的激光雷达、imu这些传感器与机器人底盘的相对关系base_footprint->base_laser_link、base_footprint->imu_link就不会随之变化

 

 

 

 

 

 

 

 

你可能感兴趣的:(ROS,python,人工智能)