map、odom、base_link坐标系之间的关系

总括:

        map坐标系:地图坐标系,是固定的坐标系
        base_link:机器人本体坐标系,一般和机器人的中心重合,会随着机器人的运动而运动;

        odom坐标系:里程计坐标系,不是固定的坐标系,是可以运动的。odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系。

一、前提说明: 

        首先,我们计算移动机器人走了多远,是根据编码器信息(也就是里程计数据)来获得的。

        在起始位置,机器人静止,在map坐标系下实际位置是0;此时里程计数据也是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。

        所以,base_link坐标系相对于map坐标系的真实位置是7m,odom坐标系相对于map坐标系的漂移是 -3m(也就是map坐标系相对于odom坐标系的漂移是 3m),计算出来的base_link坐标系相对于odom坐标系的距离是10m ,因此 10m= 7m+3m;

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

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

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

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

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

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

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值