ROS坐标系那些事儿:map、odom、base_link、laser 是啥?tf树又是啥?
大家好,我是陈景序,今天咱们来聊聊ROS中的坐标系,尤其是那些让人头大的map、odom、base_link、laser,还有神秘的tf树。别急,我会用最接地气的方式,帮你把这些概念搞清楚。
一、题目各个坐标系的含义
背景:咱们以gmapping为例,看看这些坐标系都是怎么来的。gmapping通常使用laser_scan_matcher包,在没有里程计的情况下,只用激光雷达也能跑起来。
rosrun rqt_tf_tree rqt_tf_tree
下面这张图是执行rqt_tf_tree的结果:
- map:可以理解为世界坐标系
- odom:机器人以为的世界坐标系
- base_link:机器人本体坐标系
- laser:激光雷达坐标系
二、对坐标系的理解
map:地图坐标系,一般设为固定坐标系(fixed frame),通常与机器人所在的世界坐标系一致。
base_link:机器人本体坐标系,与机器人中心重合,原点一般为机器人的旋转中心。
odom:里程计坐标系,这里要注意odom topic和坐标系的区别。odom topic是里程计的一种,而坐标系是另一种概念。odom和map坐标系在机器人起始运动位置是重合的,但随着时间的推移会逐渐出现偏差,这个偏差就是里程计的累积误差。
laser:激光雷达的坐标系,与激光雷达的安装点有关,其与base_link的tf是固定的。
三、对于 map --> odom 举个例子
假设我们要制定机器人路径,使用的必然是绝对坐标系。机器人没有GPS,所以只能通过里程计来倒推自己的位置。这也是为什么odom应该与map重合的原因。
假设机器人终点定在了(8,5),初始时刻,map的(8,5)和odom的(8,5)是重合的。
odom坐标系视角看运动过程:假设里程计告诉它,自原点启动起,它在X方向移动2,Y方向移动5,运动描述为(+2,+5)。于是它就认为自己在odom坐标系下的(2,5)。
map坐标系看运动过程:然而实际上,因为里程计累计误差,它其实第一次运动到了(3,4)。但在odom中它在(2,5)。它理应运动(8,5)-(3,4)=(+5,+1)到达目标点,但它会运动(+6,+0),因为odom反馈给base_link后,目标在base_link坐标系下的(6,0)。其实到达的是map坐标系下的(9,4),并不能达到运动到map坐标系下目标点(8,5)的目的。
校正传感器又告诉它,“我觉得你的里程计刚才X漏算了0.999,Y多算了1.001”。于是它把自己所在位置修正为了(2 + 0.999,5 - 1.001)=(2.999,3.999),接下来该移动(8,5)-(2.999,3.999)=(+5.001,+1.001)。就能将偏差校正回来,到达map坐标系下的终点(8,5)了。
四、tf树是怎么回事
布拉布拉...
小结与拓展
好了,今天的内容就到这里。希望这篇文章能帮你搞清楚ROS中的坐标系和tf树。如果你还有其他问题,欢迎在评论区留言。我是陈景序,下次再见!
想了解更多关于Web开发的技术干货,可以关注websoft网络软件专家网站。
