Turtlebot 2e 导航之 `move_base` 参数详解: ROS坐标系的理解

Turtlebot 2e 导航之 move_base 参数详解:ROS坐标系的理解

文章目录

  • Turtlebot 2e 导航之 `move_base` 参数详解:ROS坐标系的理解
    • ROS坐标系的定义
      • 如何理解`map`、`odom`、`base_link`三者关系

ROS坐标系的定义

ROS最常用的坐标系为mapodombase_linkbase_laser坐标系。这些坐标系无论是在AMCL或是Gmapping中都要用到的。

  • map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fixed frame),一般与机器人所在的世界坐标系一致。

  • base_link:机器人本体坐标系,与机器人中心重合,坐标系原点一般为机器人的旋转中心。

  • base_footprint坐标系原点为base_link原点在地面的投影,有些许区别(z值不同)。

  • odom:里程计坐标系,这里要区分开odom topic,这是两个概念。一个是坐标系,一个是根据编码器(或者视觉等)计算的里程计。但是两者也有关系,odom topic 转化的位姿矩阵是odom–>base_link的tf关系。

    这时可有会有疑问,odom和map坐标系是不是重合的?可以很肯定的告诉你,机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map–>odom的tf怎么得到?就是在一些校正传感器合作校正的package比如amcl会给出一个位置估计(localization),这可以得到map–>base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–>odom的tf就是0.

  • base_laser:激光雷达的坐标系,与激光雷达的安装点有关,其与base_link的tf为固定的。

参考:http://www.ros.org/reps/rep-0105.html

如何理解mapodombase_link三者关系

  • 世界坐标(map)

该map坐标系是一个世界固定坐标系,其Z轴指向上方。相对于map坐标系的移动平台的姿态,不应该随时间显著移动。map坐标是不连续的,这意味着在map坐标系中移动平台的姿态可以随时发生离散的跳变。

典型的设置中,定位模块基于传感器的监测,不断的重新计算世界坐标中机器人的位姿,从而消除偏差,但是当新的传感器信息到达时可能会跳变。

map坐标系作为长期的全局参考是很有用的,但是跳变使得对于本地传感和执行器来说,其实是一个不好的参考坐标。

  • 里程计坐标系(odom)

odom 坐标系是一个世界固定坐标系。在odom 坐标系中移动平台的位姿可以任意移动,没有任何界限。这种移动使得odom 坐标系不能作为长期的全局参考。然而,在odom 坐标系中的机器人的姿态能够保证是连续的,这意味着在odom 坐标系中的移动平台的姿态总是平滑变化,没有跳变。

在一个典型设置中,odom 坐标系是基于测距源来计算的,如车轮里程计,视觉里程计或惯性测量单元。

odom 坐标系作为一种精确,作为短期的本地参考是很有用的,但偏移使得它不能作为长期参考

  • 基座标(base_link)

该base_link坐标刚性地连接到移动机器人基座。base_link可以安装在基座中的任意方位;对于每个硬件平台,在基座上的不同地方都会提供一个明显的参考点。

坐标之间的关系: 在机器人系统中,我们使用一棵树来来关联所有坐标系,因此每个坐标系都有一个父坐标系和任意子坐标系,如下:

map --> odom --> base_link
世界坐标系是odom坐标系的父,odom坐标系是base_link的父。虽然直观来说,map和odom应连接到base_link,这是不允许的,因为每坐标系只能有一个父类。

坐标系权限
odom到base_link的转换是由里程计源计算和发布的。然而,定位模块不发布map到base_link的转换(transform)。相反,定位模块先接收odom到base_link的 transform,并使用这个信息发布map到odom的transform。

通俗理解
odom和map坐标系在机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map–>odom的tf就是在一些校正传感器合作校正的package比如gmapping会给出一个位置估计(localization),这可以得到map–>base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–->odom的tf就是

Turtlebot 2e 导航之 `move_base` 参数详解: ROS坐标系的理解_第1张图片

The map frame is the parent of odom, and odom is the parent of base_link. Although intuition would say that both map and odom should be attached to base_link, this is not allowed because each frame can only have one parent.**

你可能感兴趣的:(ROS,Navigation,ROS激光SLAM导航,ROS,move_base,导航)