ROS中TF坐标变换常用工具

      对于机器人,无论是多机器人还是单机器人中的各个部分,其都可以以自身建立坐标系,除此之外还有一个世界坐标系,对于这么多的坐标系,我们经常会需要知道某一物体在不同坐标系下的位置,这就需要使用到坐标变换。

      对于坐标变换,我们知道其对应的有线性的位移和旋转变换,在坐标变换的表达上也有很多方式,例如旋转矩阵,欧拉角,四元数等方式,我们不详细讨论这些坐标变换的具体内容,我们主要关注在ros中带有的坐标变换的tf功能包。

     在TF功能包中常见的几个TF工具有tf_monitor、tf_echo、static_transform_publisher、view_frames等,这几个工具能够实现TF坐标变换的简单显示。

tf_monitor是用于查看TF树中的坐标系的发布状态,可以查看所有坐标系的发布状态,也可以查看指定坐标系之间的发布状态。

我们运行如下命令:

rosrun tf tf_monitor

即可查看所有坐标系的发布状态,我现在运行了几个小乌龟,其显示发布状态如下:

ROS中TF坐标变换常用工具_第1张图片

       在上面的显示发布信息中,我们可以看到,我们一共发布了三个小乌龟的信息,后面显示的是平均延时和最大延时的信息。

要想看两个坐标系之间的坐标变换,我们可以使用tf_echo命令,显示不同坐标系之间的转换关系。运行如下命令:

rosrun tf tf_echo turtle1 turtle2

可以显示两个坐标系之间的转换关系,其中第一个是源坐标系,第二个是目标坐标系,其输出如下:

ROS中TF坐标变换常用工具_第2张图片

我们可以看到,显示的坐标转换的消息主要包括如下信息:

1、时间戳信息,显示特定时刻下的转换关系,由于坐标系之间可能会随着时间变化而变化。

2、平移变换,以向量的形式发布在x,y,z上的平移变换

2、旋转变换,旋转变换的信息表示有三种,分别是以四元数、弧度下的欧拉角、角度下的欧拉角表示。

除了显示不同坐标系之间的变换关系外,我们还可以发布两个坐标系之间的静态坐标变换,使用如下命令

rosrun tf static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms

       这个命令发布两个坐标系之间的额静态的坐标变化,这两个坐标系不发生相对位置变化,相当于设置一个父坐标和子坐标之间的变换关系。

        上述命令中的x,y,z表示其变换的平移,后边三个分别为yaw偏航角,绕z轴逆时针旋转,pitch俯仰角,绕y轴逆时针旋转,roll翻滚角,绕x轴逆时针旋转,旋转变换的三个角正好是按着zyx这样反着的顺序来的,如果对欧拉角相关不熟,可以参考飞机飞行姿态时的角度消息,会对这些角有更形象的理解。

       除此之外,还可以用四元数来表示旋转信息。命令和上面的命令十分接近,如下:

rosrun tf static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms

        由上面的命令可以看出,我们只是把欧拉角的参数换成了四元数,四元数是定义了一个有一个实部,三个虚部的数,可以和旋转向量之间进行转换。这里有关欧拉角、旋转变换、四元数以及万向锁的的问题,以后有空再讲。

       除了以上的命令外,TF还有可视化的调试工具,可以生成pdf文件进行查看整个TF树。使用如下命令可以生成pdf文件:

rosrun tf view_frame

我们生成的pdf显示如下:

ROS中TF坐标变换常用工具_第3张图片

可以看出,整个TF树中,我们有世界坐标系和三个小乌龟的坐标系。

在后续中的文章中,对TF的例程进行说明。

你可能感兴趣的:(ROS)