关于tf2 [待校准@10229]

概述

tf2是坐标变换库,它允许用户跟踪随着时间的推移的多个坐标系。tf2在适时缓冲的树结构中保持坐标系之间的关系,并让用户在任何期望的时间点转换任意两个坐标系之间的点、向量等。 [Alyssa@10230]

../_images/ros2_tf2_frames.png

tf2的特性

一个机器人系统通常具有许多随时间变化的3D坐标系,例如世界坐标系、基坐标系、夹爪坐标系、头坐标系等。tf2会随着时间的推移跟踪所有这些坐标系,并允许您提出以下问题: [Alyssa@10232]

  • 相对于5秒前的世界坐标系,头坐标系在哪里? [Alyssa@10233]

  • 我的夹爪上的物体相对于我的底座的姿势是什么? [待校准@10234]

  • 在地图坐标系中基坐标系的当前姿态是什么? [Alyssa@10235]

tf2可以在分布式系统中运行。这意味着系统中任何计算机上的所有ROS 2组件都可以获得有关机器人坐标系的所有信息。tf2可以让分布式系统中的每个组件建立自己的转换信息数据库,或者有一个收集和存储所有转换信息的中心节点。 [Alyssa@10236]

教程

我们创建了一组 教程 ,逐步引导您使用tf2。你可以从 对tf2的介绍 教程开始。有关所有tf2和tf2相关的教程的完整列表,请查看 教程 页面。 [Alyssa@10238]

基本上,任何用户都可以使用tf2执行两个主要任务,即监听坐标转换和广播坐标转换。 [Alyssa@10239]

如果你想使用tf2在坐标系之间转换,节点需要监听坐标转换。你要做的就是接收和缓冲系统中被广播的所有坐标系,查询坐标系之间的特定变换。查看编写一个tf2监听者教程 (Python) (C++) 以了解更多信息。 [Alyssa@10240]

为了扩展机器人的能力,你需要开始广播坐标转换。广播坐标转换意味着将坐标系的相对姿态发送到系统的其余部分。一个系统可以有许多广播者,每个广播者提供关于机器人不同部分的信息。查看编写一个tf2广播者教程 (Python) (C++) 以了解更多信息。 [Alyssa@10241]

除此之外,tf2可以广播不会随时间变化的静态坐标转换。这主要节省了存储和查找时间,尽管发布开销也得到了改善。您应该注意的是,静态坐标转换只发布一次,并假定不会发生变,因此不存储时间历史。如果你想在你的tf2树中定义静态坐标转换,看看编写静态tf2广播者 (Python) (C++) 教程。 [Alyssa@10242]

您还可以在添加坐标系 (Python) (C++) 教程中学习如何将固定坐标系和动态坐标系添加到你的tf2树中。 [Alyssa@10243]

完成基本教程后,您可以继续学习tf2和时间。tf2和时间教程 (Python) (C++) 讲解了tf2和时间的基本原则。tf2和时间的提高教程 (Python) (C++) 讲解了tf2时间旅行的原理。 [Alyssa@10244]

论文 [Alyssa@10245]

有一篇关于tf2的论文发表在TePRA 2013: tf: 坐标变换库[Alyssa@10246]