ROS中的常用组件(二)——TF坐标变换

ROS中的常用组件(二)——TF坐标变换

总述

坐标变换是机器人学中一个非常基础同时也是非常重要的概念。机器人本体和机器人的工作环境中往往存在大量的组件元素,在机器人设计和机器人应用中都会涉及不同组件的位置和姿态,这就需要引入坐标系以及坐标变换的概念。
坐标变换是机器人系统中常用的基础功能,ROS中的坐标变换系统由TF功能包维护。

一、TF功能包

TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间、在坐标系间完成点、向量等坐标的变换。
在这里插入图片描述

一个机器人系统通常有很多三维坐标系,而且会随着时间的推移发生变化,如世界坐标系(World Frame)、基坐标系(Base Frame)、机械夹爪坐标系(Gripper Frame)、机器人头部坐标系(Head Frame)等。TF可以时间为轴跟踪这些坐标系,并且允许开发者请求如下类型的数据:

  • 5秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?
  • 机器人夹取的物体相对于机器人中心坐标系的位置在哪里?
  • 机器人中心坐标系相对于全局坐标系的位置在哪里?

TF可以在分布式系统中进行操作,也就是说,一个机器人系统中所有的坐标变换关系,对于所有的节点组件都是可用的,所有订阅TF消息的节点都会缓冲一份所有坐标系的变换关系数据,所以这种结构不需要中心服务器来存储任何数据。
使用TF功能包,需要以下两个步骤:
1)监听TF变换
接收并缓存系统中发布的所有坐标变换数据,并从中查询所需要的坐标变换关系。
2)广播TF变换
向系统中广播坐标系之间的坐标变换关系。系统中可能会存在多个不同部分的TF变换广播,每个广播都可以直接将坐标变换关系插入TF树中,不需要再进行同步。

二、TF工具

坐标系统虽然是一个基础概念,但是由于涉及多个空间之间的变换,不容易进行想象,所以TF提供了丰富的终端工具来帮助开发者调试和创建TF变换。
1、tf_monitor
tf_monitor工具的功能是打印TF树中所有坐标系的发布状态,也可以通过输入参数来查看指定坐标系之间的发布状态。

tf_monitor
tf_monitor <source_frame> <target_frame>

2、tf_echo
tf_echo工具的功能是查看指定坐标系之间的变换关系。命令的格式如下:

tf_echo <source_frame> <target_frame>

3、static_transform_publisher
static_transform_publisher工具的功能是发布两个坐标系之间的静态坐标变换,这两个坐标系不发生相对位置变化。
4、view_frames
view_frames是可视化的调试工具,可以生成pdf文件,显示整棵TF树的信息。该命令的执行方式:

rosrun tf view_frames

然后使用如下命令,或者使用pdf阅读器查看生成的pdf文件。

evince frames.pdf

三、乌龟例程中的TF

四、创建TF广播器

实现功能:创建TF广播器,创建坐标变换值并实时发布坐标变换
编程思路:
1、初始化ROS节点,并订阅 turtle 的位置消息;
2、循环等待话题消息,接收到之后进入回调函数,该回调函数用以处理并发布坐标变换;
3、在该回调函数内部定义一个广播器;
4、根据接收到的小海龟的位置消息,创建坐标变换值;
5、通过定义的广播器发布坐标变换

五、创建TF监听器

实现功能:创建TF监听器,创建第二只海龟,监听坐标变换并发布运动控制指令使第二只海龟向第一只海龟运动。
编程思路:
1、初始化ROS节点,并向MASTER注册节点信息;
2、通过服务调用产生第二只海龟;
3、创建turtle2的速度控制发布器;
4、创建tf监听器并监听turtle2相对于turtle1的坐标变换;
5、根据坐标变换发布速度控制指令;

六、实现效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45661757/article/details/112769158