Tf2
概述
tf2 是一个变换库,它允许用户随时间跟踪多个坐标系。 tf2 以树状结构及时缓冲坐标系之间的关系,并允许用户在任何所需时间点在任意两个坐标系之间变换点、矢量等。
tf2 的属性
机器人系统通常具有许多随时间变化的 3D 坐标系,例如世界坐标系、基座坐标系、夹持器坐标系、头部坐标系等。 tf2 会随时间跟踪所有这些坐标系,并允许您提出以下问题:
5 秒前头部坐标系相对于世界坐标系的位置在哪里?
夹持器中的物体相对于基座的姿势是什么?
基座坐标系在地图坐标系中的当前姿势是什么?
tf2 可以在分布式系统中运行。 这意味着系统中任何计算机上的所有 ROS 2 组件都可以获取有关机器人坐标系的所有信息。 tf2 可以让分布式系统中的每个组件构建自己的变换信息数据库,或者拥有一个收集和存储所有变换信息的中央节点。
教程
我们创建了一系列 tutorials 它将一步一步指导您使用 tf2。 您可以开始 introduction to tf2 教程。 有关所有 tf2 和 tf2 相关教程的完整列表,请查看 tutorials 页。
任何用户使用 tf2 的主要任务基本上有两个:监听变换和广播变换。
如果您想使用 tf2 在坐标系之间进行变换,您的节点将需要监听变换。 您要做的是接收和缓冲系统中广播的所有坐标系,并查询坐标系之间的特定变换。 查看“编写监听器”教程 (Python) (C++) 了解更多信息。
要扩展机器人的功能,您需要开始广播变换。 广播变换意味着将坐标系的相对姿势发送到系统的其余部分。 一个系统可以有多个广播器,每个广播器都提供有关机器人不同部分的信息。 查看“编写广播器”教程 (Python) (C++) 了解更多信息。
除此之外,tf2 还可以广播不会随时间变化的静态变换。 这主要节省了存储和查找时间,但也减少了发布开销。 您应该注意,静态变换只发布一次,并且假定不会改变,因此不会存储任何历史记录。 如果您想在 tf2 树中定义静态变换,请查看“编写静态广播器” (Python) (C++) 教程.
您还可以在“添加框架”中了解如何向 tf2 树添加固定和动态框架 (Python) (C++) 教程.
完成基础教程后,您可以继续了解 tf2 和时间。 tf2 和时间教程 (C++) 教授 tf2 和时间的基本原理。 tf2 与时间的高级教程 (C++) 教授使用 tf2 进行时间旅行的原理。
论文
TePRA 2013 上有一篇关于 tf2 的论文: tf: The transform library.