写在前面
按照官网教程 ( http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28C++%29 ) 学习tf的时候,运行程序的时候,想的有点多,也就多问了自己几个问题:
一、问题描述
终端运行 rosrun tf tf_echo turtle1 turtle2
来查看 tf 转换关系的时候的问题:
好像无论 turtle1 与 turtle2 距离有多远,终端打印的 Translation 的三个( x, y, z )参数,只有第一个参数变化大,第二个参数变化很小(当然第三个参数是z不变 很好理解)。
大致是出现这样的效果:
而且,自己控制 turtle1 横向走或者纵向走,终端打印的 Translation 的三个( x, y, z )参数,还是只有第一个参数变化大,第二个参数变化很小。
二、原因解释
自己想来想去,一直没想明白,后来重新捋了一遍 tf 的过程,才意识到是 参考坐标系(的坐标轴方向) 的问题。
首先我们要明确一点,小乌龟这个例程的坐标系是 x轴正方向是小乌龟的头的朝向,y轴正方向是小乌龟的左边。(这个规则是始终成立的,小乌龟1旋转,坐标系turtle1 也跟着旋转,这个很关键,我就被这个绕进去了 -_-)
这样测试就能看出来问题:
通过以上靠边界向上向下运动,可以发现,此时的Translation 的三个( x, y, z )参数,第二个参数变化得大了。(记得参照下图的手绘图)
原因就是以turtle1为参考坐标系,沿着y轴正方向(小乌龟的左边)的朝向的距离变大了。也就是Translation 的三个( x, y, z )参数中的 y 轴的位移变大了。
如下图所示,
当小乌龟向上运动时,以 /turtle1 为参考坐标系,turtle2 的坐标x为正,y为负,并且随着两小乌龟间的距离的增大,x的绝对值增大,y的绝对值增大;
当小乌龟向下运动时,以 /turtle1 为参考坐标系,turtle2 的坐标x为正,y为正,并且随着两小乌龟间的距离的增大,x的绝对值增大,y的绝对值增大。