ROS TF坐标变换 - TF树

一、TF树介绍

在机器人系统中,存在运动学模型和动力学模型。对于刚体机器人,动力学模型基于刚体动力学,代表机器人系统在运动过程中力/力矩与其运动状态的变化关系。而运动学模型则由一系列固连在不同位置的坐标系来表示,仅仅代表机器人的运动状态。例如,对于多自由度机械臂,其运动学模型为末端位置到各个关节角的坐标变换关系;对于旋翼无人机,主要的运动学关系是机体固连坐标系与世界坐标系之间的变换。

TF树在ROS中的作用就是对应于这些不同位置固连坐标系之间的变换关系,以显示机器人的运动状态。TF树的广播器和监听器的基本书写形式可以通过实际例子进行分析,从中可以展示如何提取和应用TF变换的信息。总的来说,TF树是ROS中非常重要的一部分,它维护了整个机器人甚至地图的坐标转换关系。

对于一个完整的机器人来说,会有很多个坐标系,如下图:

在这里插入图片描述

每广播一个坐标关系,ROS都会把他加入到一个列表中维护起来,这个列表就是TF树。
TF树是ROS中管理坐标系变换关系的一种数据结构,它对应于机器人不同位置固连坐标系之间的变换关系,以显示机器人的运动状态。TF的本质是一个树状的数据结构,所以被称为TF树。

此外,TF库也是ROS中的一个重要组成部分,它允许用户随时记录并管理多个坐标系之间的变换关系。tf库维护了坐标系之间的关系,并在时间上缓冲这种关系,使用户能够在任何所需的时间点在任何两个坐标系之间转换点、向量等。

二、TF2与TF

TF主要用于机器人在不同坐标系下的运动和感知的控制和导航等任务。然而,TF2已经取代了TF,并且是TF的超集。因此,对于新用户来说,建议学习TF2而非TF。

在行为和API方面,TF1.x和TF2有根本区别。这些区别主要体现在执行方式(TF2中的Eager Execution)、变量、控制流、张量形状和张量相等性比较上,TF2使用了一组不同的运行时。此外,TF2增强了内聚性,不同类型的API实现做了分包处理。具体来说,TF对应的是tf包,而TF2对应的是tf2和tf2_ros包。

在实现效率上,TF2也更胜一筹。例如,在Tensorflow 1.x中,图执行模式主要通过“直接构建计算图 + tf.Session"进行操作。而在TF2中,这种操作方式得到了优化。总的来说,TF2在功能上比TF更为强大和高效。

三、构建TF树

使用以下命令可以把TF树保存为pdf文档(如果没有安装 tf2_tools 需要先安装 sudo apt install ros-noetic-tf2-tools):

rosrun tf2_tools view_frames.py

执行后会打印入下日志:
[INFO] [1704000786.800796]: Listening to tf data during 5 seconds...
[INFO] [1704000791.808397]: Generating graph in frames.pdf file...

实验步骤:

  • 运行前文编译的静态坐标转换节点: rosrun tf2_learning tf2_learning_broadcast
  • 运行前文编译的动态坐标转换节点:rosrun tf2_learning tf2_learning_dynamic_broadcast
  • 启动小乌龟,发布小乌龟的世界坐标位姿:rosrun turtlesim turtlesim_node
  • 保存TF树pdf文档:rosrun tf2_tools view_frames.py
  • 查看pdf文档:evince frames.pdf(也可以直接双击打开文档)

在这里插入图片描述

可以发现,我们发布了两组坐标关系bask_link -> laserworld -> turtle1base_linkworld 的坐标关系没有发布,所以有两棵TF树,现在我们发布base_linkworld 的坐标关系来看看效果。

ROS为我们封装了单次发布坐标关系的节点,使用方法如下:

rosrun tf2_ros static_transform_publisher param0 param1 param2 param3 param4 param5 param6 param7
后面有8个参数,依次表示:
x偏移量 y偏移量 z偏移量 z偏航角度 y俯仰角度 x翻滚角度 父级坐标系 子级坐标系

我们发布 base_linkworld 的坐标关系:

位置偏移量为:(0.5, 0.8, 0)

旋转偏移量为:(1.57, 0.0, 0.0) 角度单位为弧度

所以命令如下:

rosrun tf2_ros static_transform_publisher 0.5 0.8 0 0 0 1.5 /world /base_link

查看TF树如下:

在这里插入图片描述

四、rviz查看TF坐标关系

  • 输入命令:rviz
  • 在启动的 rviz 中设置 Fixed Frame 为 world
  • 点击左下的 Add 按钮,在弹出的窗口中选择 TF 组件,即可显示坐标关系。

如下:

在这里插入图片描述

相关推荐

  1. ROS学习笔记8:TF坐标变换

    2024-01-02 00:58:01       55 阅读
  2. ROS学习笔记12——tf坐标变换

    2024-01-02 00:58:01       29 阅读
  3. 天文算法--坐标变换

    2024-01-02 00:58:01       30 阅读
  4. Qt坐标变换详解

    2024-01-02 00:58:01       28 阅读
  5. matlab 坐标系变换

    2024-01-02 00:58:01       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 00:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 00:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 00:58:01       87 阅读
  4. Python语言-面向对象

    2024-01-02 00:58:01       96 阅读

热门阅读

  1. SQL面试题挑战10:累计占比

    2024-01-02 00:58:01       59 阅读
  2. 双击编辑el-table的单元格数据

    2024-01-02 00:58:01       60 阅读
  3. WPF 结合 MVVM模式下SqlSugar ORM框架的使用

    2024-01-02 00:58:01       49 阅读
  4. Python常用技能手册 - 包package

    2024-01-02 00:58:01       50 阅读
  5. 2023.12.28 Python高级-正则表达式

    2024-01-02 00:58:01       60 阅读
  6. 软件白盒测试

    2024-01-02 00:58:01       60 阅读
  7. php多进程处理任务

    2024-01-02 00:58:01       49 阅读
  8. Spring 事务实现

    2024-01-02 00:58:01       53 阅读
  9. Spring03

    Spring03

    2024-01-02 00:58:01      42 阅读