ROS技术点滴 —— tf坐标变换库

 

 

坐标变换是机器人学中一个非常基础同时也是非常重要的概念。

机器人本体和机器人的工作环境中,往往存在大量的组件元素,在机器人设计和机器人应用中都会涉及不同组件的位置和姿态,这就需要引入坐标系以及坐标变换的概念。

 

如图所示的A、B两个坐标系,A坐标系下的位姿,可以通过平移和旋转变换成B坐标系下的位姿,这里的平移和旋转可以通过4*4的变换矩阵来描述,其理论原理可以参考机器人学的理论教程。

 

坐标变换是机器人系统中常用的基础功能,ROS中的坐标变换系统由TF功能包维护。

 

—  一、TF功能包 —

 

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

                            

 

一个机器人系统通常有很多三维的坐标系,而且会随着时间的推移发生变化,例如全局坐标系(World Frame),机器人中心坐标系(Base Frame),机械夹爪坐标系(Gripper Frame),机器人头部坐标系(Head Frame)等等。

 

TF可以时间为轴,跟踪这些坐标系(默认10秒之内),并且允许开发者请求如下类型的数据:

  • 五秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?

  • 机器人夹取的物体相对于机器人中心坐标系的位置在哪里?

  • 机器人中心坐标系相对于全局坐标系的位置在哪里?

 

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_target>

 

2.tf_echo

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

$ tf_echo <source_frame> <target_frame>

 

运行后的效果如下图所示。

3.static_transform_publisher

static_transform_publisher工具的功能是发布两个坐标系之间的静态坐标变换,这两个坐标系不发生相对位置变化。命令的格式如下:

$ static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms

$ static_transform_publisher x y z qx qy qz qw frame_id child_frame_id  period_in_ms

 

以上两种命令格式,需要设置坐标的偏移和旋转参数:偏移参数使用相对于xyz三轴的坐标位移,而旋转参数的第一种格式使用以弧度为单位的 yaw/pitch/roll角度,第二种命令格式使用四元数表达旋转角度。发布频率以ms为单位。

 

该命令不仅可以在终端中使用,还可以在launch文件中使用,方法如下:

<launch>
<node pkg="tf"type="static_transform_publisher" name="link1_broadcaster"args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>

 

4.view_frames

view_frames 是可视化的调试工具,可以生成pdf文件,显示整棵TF树的信息。该命令的执行方式如下图所示:

$ rosrun tf view_frames

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

$ evince frames.pdf

文章转载自古月居

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值