ROS探索总结(十八)——重读tf

news/2025/2/22 10:53:37

        在之前的博客中,有讲解tf的相关内容,本篇博客重新整理了tf的介绍和学习内容,对tf的认识会更加系统。


1 tf简介

1.1 什么是tf

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

        tf的相关设计思想,可以参见:tf/Design" rel="noopener noreferrer">tf设计


1.2 tf可以做什么

        一个机器人系统通常有很多三维的参考系,而且会随着时间的推移发生变化,例如全局参考系(world frame),机器人中心参考系(base frame),机械夹参考系(gripper frame),机器人头参考系(head frame)等等。tf可以以时间为轴,跟踪这些参考系(默认是10秒之内的),并且允许用户提出如下的申请:

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

        tf可以在分布式系统中进行操作,也就是说一个机器人系统中所有的参考系变换关系,对于所有节点组件,都是可用的,所有订阅tf消息的节点都会缓冲一份所有参考系的变换关系数据,所以这种结构不需要中心服务器来存储任何数据。

1.3 tf的使用流程

        想要使用tf功能包,总体来讲可以分为以下两个步骤:

      (1)   监听tf变换

        接收并缓存系统中发布的所有参考系变换,并从中查询所需要的参考系变换。

      (2)   广播tf变换

        向系统中广播参考系之间的坐标变换关系。系统中更可能会存在多个不同部分的tf变换广播,每个广播都可以直接将参考系变换关系直接插入tf树中,不需要再进行同步。

2 tf实例理解

        参见:ROS探索总结(十二)——坐标系统

tf基础教程

        参见:ROS探索总结(十二)——坐标系统


tf功能包的API说明

  • 数据类型
  • 变换与参考系
  • 发布tf变换广播
  • 接收并使用tf广播
  • 异常

5 命令行工具

        虽然tfROS中的一个代码链接库,但是仍然提供了丰富的命令行工具来帮助用户调试和创建tf变换。

5.1 tf_monitor

        tf_monitor工具的功能是打印tf树中的所有参考系信息,通过输入参数来查看指定参考系之间的信息。

        命令格式如下:

  • tf_monitor
  • tf_monitor <source_frame> <target_target>

        示例结果如下图所示:



5.2 tf_echo

        tf_echo工具的功能是查看指定参考系之间的变换关系。

        命令的格式如下:

  • tf_echo <source_frame> <target_frame>

        示例效果如下图所示:


5.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三个角度(yaw是围绕x轴旋转的偏航角,pitch是围绕y轴旋转的俯仰角,roll是围绕z轴旋转的翻滚角),而第二种命令格式使用四元数表达旋转角度。发布频率以ms为单位,一般100ms比较合适。

        该命令不仅可以在终端中使用,还可以在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>

5.4 view_frames

        view_frames 是可视化的调试工具,可以生成pdf文件,来显示整棵tf树的信息。

        命令行的执行方式如下:
$ rosrun tf view_frames
$ evince frames.pdf

5.5 roswtf plugin

        roswtfROS中自查的工具,也可以作为组件使用。针对tf,roswtf可以检查tf的配置并发现常见问题。

       命令的使用方式如下:
$ roswtf

6 如何调试tf

        参见:调试tf问题

参考链接

  • tf : http://wiki.ros.org/tf
  • tf设计:http://wiki.ros.org/tf/Design
  • tf教程:http://wiki.ros.org/tf/Tutorials
  • tf: The transform library:http://wiki.ros.org/Papers/TePRA2013_Foote

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客






http://www.niftyadmin.cn/n/845060.html

相关文章

mysql select 用法_MySql数据库中Select用法小结

一、条件筛选1、数字筛选&#xff1a;sql "Select * from [sheet1$] Where 销售单价 > 100"2、字符条件&#xff1a;sql "Select * from [sheet1$] Where 物品名称 挡泥板"3、日期条件&#xff1a;sql "Select * from [sheet1$] Where 物品名称…

ROS探索总结(十九)——如何配置机器人的导航功能

1、概述ROS的二维导航功能包&#xff0c;简单来说&#xff0c;就是根据输入的里程计等传感器的信息流和机器人的全局位置&#xff0c;通过导航算法&#xff0c;计算得出安全可靠的机器人速度控制指令。但是&#xff0c;如何在特定的机器人上实现导航功能包的功能&#xff0c;却…

hql与mysql的区别_HQL和SQL的区别

hql是面向对象查询&#xff0c;格式&#xff1a;from 类名 类对象 where 对象的属性sql是面向数据库表查询&#xff0c;格式&#xff1a;from 表名 where 表中字段1、查询一般在Hibernate中使用查询时&#xff0c;推荐使用hql(Hibernate Query Language)查询语句。使用h…

博客迁移通知

为方便博客内容的管理&#xff0c;今后本人的博客内容会在个人网站——古月居&#xff08;http://www.guyuehome.com&#xff09;进行更新&#xff0c;CSDN博客不作主要维护&#xff0c;感谢大家的支持。由于网站方面的能力有限&#xff0c;个人网站可能会存在一些问题&#xf…

mysql 函数调用外部动态库_在Go函数中调用c动态库

在很多场景下&#xff0c;在Go的程序中需要调用c函数或者是用c编写的库(底层驱动&#xff0c;算法等&#xff0c;不想用Go语言再去造一遍轮子&#xff0c;复用现有的c库)。那么该如何调用呢&#xff1f;Go可是更好的C语言啊&#xff0c;当然提供了和c语言交互的功能&#xff0c…

mysql影藏危险_MySQL危险而诡异的update操作和惊魂5分钟

MySQL危险而诡异的update操作和惊魂5分钟简介Part1:写在最前上班正忙的不可开交呢&#xff0c;一个消息过来&#xff0c;得知研发人员误操作数据库了....不带where条件&#xff0c;整表更新Orz,还让不让人好好活了&#xff0c;心中一万只XXX啊~无奈&#xff0c;分清事情的轻重&…

嵌入式操作系统

嵌入式操作系统一、嵌入式操作系统概述1.1 嵌入式操作系统的特点1.2 嵌入式操作系统的分类1.2.1 非实时操作系统1.2.1 实时操作系统二、实时操作系统2.1 实时操作系统与通用操作系统的比较2.2 实时操作系统的评价指标三、基于Linux的嵌入式操作系统3.1 ARMLinux简介3.2 uCLinux…

mgr mysql8_mysql8之MGR

一、mysql主从复制的三种复制方式1、主从复制之异步复制MySQL主从异步复制是最常见的复制场景。数据的完整性依赖于主库BINLOG的不丢失&#xff0c;只要主库的BINLOG不丢失&#xff0c;那么就算主库宕机了&#xff0c;我们还可以通过BINLOG把丢失的部分数据通过手工同步到从库上…