在网上看了一些大佬的解释,还是感觉有点迷糊,多看了几次之后感觉好像get到了,如果说错了还请指正。
map和base_link都很好理解,一个是绝对坐标系,另一个是以机器人自身为原点的坐标系,很容易懂。
唯一麻烦的就是odom,里程计坐标系。
下面就以我的拙见尝试小白化地解释一下这个玩意儿。
首先,我们制定机器人路径时,使用的必然是绝对坐标系——
比如我现在让机器人去点(10,10)。
要完成这件事,机器人需要先知道自己在哪。它没有GPS,所以只能倒推——通过里程计。这也是为什么“没有偏移的话odom应该与map重合”,因为odom本来就是用来倒推map的。
(经评论提醒,特强调,这个“偏移”指的是偏差,误差,而不是位移)
里程计告诉它,自从原点启动起,它在X向上移动2,Y向上移动了5。于是它就认为自己在(2,5)。反馈给base_link,则base_link里原点在(-2,-5),目标在(8,5)。
然而实际上,因为偏移,它的里程计是错的,它其实在(3,4)(map)。
此时,在map,也就是实际上,它在(3,4),但在odom中它在(2,5)。
它理应运动(7,6)到达目标点,但它会运动(8,5),因为odom反馈给base_link后,在base_link中,目标在(8,5)。
而这时,校正传感器又告诉它了,“我觉得你的里程计刚才X漏算了0.999,Y多算了1.001”。
于是它把自己所在位置修正为了(2.999,3.999)(odom),把目标在base_link中修正到了(7.001,6.001)(base_link)接下来该移动(7.001,6.001)。
以上。
odom←base_link+里程计
+
校正
↓
接近map的坐标系
参考:https://blog.csdn.net/flyinsilence/article/details/51854123