ROS中map、odom、base_link坐标系的理解和这三个坐标系在AMCL中的关系

学了ROS快一年了,依旧对map坐标系、odom坐标系、base_link坐标系之间的关系不是很清晰,这段时间下定决心要捋清楚他们之间的关系。

map坐标系:地图坐标系,是一个固定的坐标系
base_link:机器人本体坐标系,一般和机器人的中心重合,会随着机器人的运动而运动;
odom坐标系:里程计坐标系,不是固定的坐标系,是可以运动的。odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系(原因见下面的举例说明)。

一、前提说明:

首先先明确一点,我们计算移动机器人走了多远,是根据编码器信息(也就是里程计数据)来获得的。
在起始位置,机器人静止,

  1. 在map坐标系下实际位置是0;
  2. 此时里程计数据也是0,所以根据里程计数据计算得到的运动距离是0,计算得到的机器人位置也在0位置。

所以,在起始位置时,map坐标系和odom坐标系是重合的(注意map坐标系是固定的坐标系,odom坐标系是可以运动的坐标系)。

二、举例说明:

为了简单起见,我们在一维的情况下进行举例讨论。
假设机器人在t=0时刻从起点x=0处开始运动,一段时间t时刻后到达某一位置A点(x=7m);在这段时间内,利用里程计数据计算得到机器人运动了10m(只能利用里程计数据来计算距离,然后得到现在的位置),但是实际在地图中,机器人的实际位置是x=7m(A点)。
所以计算的坐标和真实坐标之间出现了偏差。但是在ROS中换了一个说法,不说计算得到的坐标在map坐标系中漂移了3m,而是说是odom坐标系相对于map坐标系漂移了3m。具体看下图:
ROS中map、odom、base_link坐标系的理解和这三个坐标系在AMCL中的关系_第1张图片
所以,base_link坐标系相对于map坐标系的真实位置是7m,odom坐标系相对于map坐标系的漂移是 -3m(也就是map坐标系相对于odom坐标系的漂移是 3m),计算出来的base_link坐标系相对于odom坐标系的距离是10m ,因此 10m= 7m+3m;

当然使用IMU作积分来计算里程计信息,会随着时间的累积,IMU会产生累积误差,和上面的编码器来计算里程计信息产生误差是一样的情况。

所以odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系。

这里引用ros官网资料上面的一个图:
Relationship between Frames

在这里插入图片描述
(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.)

map坐标系是odom的父坐标系,odom是base_link的父坐标系。尽管直觉会说map坐标系和odom坐标系都应该连接到base_link坐标系,但这是不允许的,因为每个坐标系只能有一个父坐标系。

三、AMCL定位中的坐标系关系:

ROS中map、odom、base_link坐标系的理解和这三个坐标系在AMCL中的关系_第2张图片

  1. 对于上图上半部分Odometry Localization ,纯粹的里程计定位,它是直接根据里程计信息,来计算出base_frame 和odom_frame 之间的偏移,这种情况一般是默认map坐标系和odom坐标系始终是绑在一起的,始终是重合的。所以会有累积误差,随着里程计的增加,它往往会偏差越来越大,越漂越远。

  2. 对于上图的下半部分的AMCL,它是通过比对 当前的地图 与 激光雷达检测到的环境地图,来自己的位置进行一个修正,这个修改正就体现在 odometry drift,把之前的运算得到的漂移补到 map_frame 和 odom_frame 两个坐标系之间。这就是AMCL的作用(SLAM里面也有map_frame 和 odom_frame 两个坐标系之间 这样的修正)。

参考链接:
[1] ROS里基本坐标系的理解:map,odom,base_link,base_laser https://blog.csdn.net/flyinsilence/article/details/51854123
[2] ROS中odom、map坐标系的理解 https://blog.csdn.net/u012686154/article/details/88174195
[3] amcl http://wiki.ros.org/amcl

你可能感兴趣的:(ROS学习之路)