ROS TF坐标变换 - TF树

news/2025/2/6 4:33:21/

目录

  • 一、TF树介绍
  • 二、TF2与TF
  • 三、构建TF树
  • 四、rviz查看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 组件,即可显示坐标关系。

如下:

在这里插入图片描述


http://www.ppmy.cn/news/1288224.html

相关文章

线性代数基础知识

计算机视觉一些算法中常会用到线性代数的一些知识,为了便于理解和快速回忆,博主这边对常用的一些知识点做下整理,主要来源于如下这本书籍。 1. 矩阵不仅仅是数字排列而已,不然也不会有那么大精力研究它。其可以表示一种映射 关于…

深入理解Mysql事务隔离级别与锁机制

1. 概述 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题&am…

QT上位机开发(抽奖软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 用抽奖软件抽奖,是一种很常见的抽奖方式。特别是写这篇文章的时候,正好处于2023年12月31日,也是一年中最后一天…

[react]脚手架create-react-app/vite与reac项目

[react]脚手架create-react-app/vite与reac项目 环境问题描述create-react-app 脚手架根据脚手架修改项目结构安装脚手架注入配置文件-config文件夹package.json文件变更删除 serviceWorker.js新增reportWebVitals.js文件更新index.js文件 脚手架creat-react-app 缺点 vite 脚手…

【记录】开始学习网络安全

本文持续更新学习进度 背景 在私企干了5年虚拟化、云原生相关的运维,学到了很多,但不成体系。老板是清华毕业法国留学在德勤干过,最后回国创业的野路子。我工作是为了更好的生活,我挺担心老板因为家庭变故或者炒个原油宝&#x…

AIGC开发:调用openai的API接口实现简单机器人

简介 开始进行最简单的使用:通过API调用openai的模型能力 OpenAI的能力如下图: 文本生成模型 OpenAI 的文本生成模型(通常称为生成式预训练 Transformer 或大型语言模型)经过训练可以理解自然语言、代码和图像。这些模型提供文…

Javascript细节、经验锦集

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/135311084 出自【进步*于辰的博客】 纯文字阐述,内容比较干。并且,由于考…

java maven项目添加oracle jdbc的依赖

一般添加依赖是直接在pom.xml中添加配置即可,Maven会自动获取对应的jar包,但是oracle驱动依赖添加后会显示红色,代表找不到依赖项,是因为Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中…