tf初步

ROS1 学习11 坐标系tf 管理系统 简介及demo示例 坐标系是我们非常熟悉的一个概念,也是机器人学中的重要基础,在一个完整的机器人系统中,会存在很多坐标系,这些坐标系之间的位置关系该如何管理?ROS给我们提供了一个坐标系的管理神器——TF。比如在机械臂形态的机器人中,机器人安装的位置叫做基坐标系Base Frame,机器人安装位置在外部环境下的参考系叫做世界坐标系World Frame,机器人末端夹爪的位置叫做工具坐标系,外部被操作物体的位置叫做工件坐标系,在机械臂抓取外部物体的过程中,这些坐标系之间的关系也在跟随变化。 阅读详情

本文主要内容参考自ROS wiki:tf/Tutorials/Introduction to tf,在加入了自己的一些理解的同时,我也对原文进行了适当的修改。原文使用Creative Commons Attribution 3.0,本文使用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议协议,若使用本文,请自觉遵守相关协议。

上一篇文章中,我们对tf已经有了一个大致的了解。在这篇文章中,大家将会看到一个使用tf库编写的有趣的小栗子,另外,我们也会介绍如何使用ROS内置的工具查看坐标变换及其详细信息。

安装必要工具

如果你安装的是完整的ros桌面版,那么你很可能会不需要进行这一步。这一步只是为了安装ros教程功能包、几何功能包、rviz、rosbash工具以及rqt坐标树工具。

$ sudo apt-get install ros-indigo-ros-tutorials ros-indigo-geometry-tutorials ros-indigo-rviz ros-indigo-rosbash ros-indigo-rqt-tf-tree

例子演示

运行下面的命令即可运行演示:

$ roslaunch turtle_tf turtle_tf_demo.launch

这时你会看到下面的结果:

demo

将光标定位在刚刚运行命令的终端,然后通过键盘方向键控制中间的小乌龟移动。这时,你会发现另一只乌龟会跟着你控制的那个乌龟移动,无论如何也甩不掉。

control

基本原理

这个例子其实只是简单地使用tf软件库创建了三个坐标:世界坐标系、turtle1坐标系、turtle2坐标系,并使用tf广播器(tf broadcaster)发布了它们之间的转换关系,然后使用tf监听器(tf listener)捕捉发布的转换关系,最后根据转换关系计算相应的速度信息,并将结果发给另一个小乌龟。

查看坐标变换树

在tf中,我们可以使用view frames查看坐标变换树:

NOTE:不要关闭前面运行的演示!

rosrun tf view_frames

然后你就会看到下面的信息:

Transform Listener initing
Listening to /tf for 5.000000 seconds
Done Listening
dot - Graphviz version 2.16 (Fri Feb 8 12:52:03 UTC 2008)

Detected dot version 2.16
frames.pdf generated

通过ubuntu下的pdf阅读器evince即可查看结果:

$ evince frames.pdf

当然你也可以直接手动打开文件frames.pdf。

view-frames-result

我们可以看到三个被tf发布的坐标系:世界坐标系、turtle1坐标系以及turtle2坐标系。我们也可以看到世界坐标系是turtle1坐标系和turtle2坐标系的父坐标系。另外,view frames也会产生一些用于调试的诊断信息,这些信息会告诉我们什么时候收到最旧的和最新的转换,以及tf坐标系被发布到tf的频率。

当然,借助万能的rqt,我们也可以查看坐标变换树。你可以使用下面的命令:

rosrun rqt_tf_tree rqt_tf_tree

或者直接启动rqt

rqt

然后再菜单栏中找到plugins>Visualization>TF Tree即可显示坐标变换树:

rqt

查看转换信息

使用tf的tf_monitor工具可以查看目前坐标转换树的详细信息,包括目前已存在的坐标,以及发布者、发布频率等信息:

Frames:
Frame: turtle1 published by unknown_publisher Average Delay: 0.000928401 Max Delay: 0.00398851
Frame: turtle2 published by unknown_publisher Average Delay: 0.000914138 Max Delay: 0.00386878

All Broadcasters:
Node: unknown_publisher 125.211 Hz, Average Delay: 0.000942602 Max Delay: 0.00386878

通过tf的tf_echo可以查看发布到ROS网络中的两个坐标之间的转换信息:

rosrun tf tf_echo [reference_frame] [target_frame]

假如我们想查看turtle2的坐标系相对turtle1坐标系的转换信息的话可以使用下面的命令:

$ rosrun tf tf_echo turtle1 turtle2

你会得到类似于下面的结果:

At time 1494299988.380
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.714, 0.700]
            in RPY (radian) [0.000, 0.000, -1.591]
            in RPY (degree) [0.000, 0.000, -91.163]
At time 1494299989.148
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.714, 0.700]
            in RPY (radian) [0.000, 0.000, -1.591]
            in RPY (degree) [0.000, 0.000, -91.163]
At time 1494299990.156
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.714, 0.700]
            in RPY (radian) [0.000, 0.000, -1.591]
            in RPY (degree) [0.000, 0.000, -91.163]

这里简单介绍下输出结果,后面我会详细介绍。输出结果是一个时间戳和一个6或者7自由度的相对位姿信息: 平移量(Translation)和旋转量(Rotation)。

At time 1494299990.156

上面是该转换信息的时间戳,你可能会问为什么这个时间表示得这么奇怪。其实,这个时间是从系统获取到的的时间,即我们在ROS中经常看到的挂钟时间(Wall-Time or Wall-clock)。对Unix比较熟悉的应该知道,计算机内部的时间是从1970年1月1日开始的,所以这里给出的时间就是从这个时间点开始到现在的时间,单位是秒。

Translation: [0.000, 0.000, 0.000]

这个数据表示的是一个3D的平移向量,即xyz构成的向量,它表示从目标坐标系(reference_frame)到相对坐标系(reference_frame)的平移量。

Rotation: in Quaternion [0.000, 0.000, -0.714, 0.700]
in RPY (radian) [0.000, 0.000, -1.591]
in RPY (degree) [0.000, 0.000, -91.163]

这三个数据都表示旋转量,在ROS中对旋转量的表达主要有两种:欧拉角(后两个数据,它们只是单位不同)和四元式(第一个数据)。上面的输出结果将这两个数据都显示了出来。同样,它表示目标坐标系中的三个坐标轴到相对坐标系的旋转量。这个可能比较抽象,你可以类比平移量来理解。

关于转换信息,ROS wiki中有详细的介绍,在后面的文章中,我会对转换信息做详细的解释。

下一篇文章中,我们将会通过使用tf库一步一步实现上面的那个小栗子。

使用rviz

使用rviz可以很直观的观察tf转换的过程。现在我们可以直接启动rviz观察tf转换,记住不要关闭前面运行的例子:

rosrun rviz rviz

这时你会看到右侧边栏(Displays)中,global status出现错误(Error),不过没关系,我们需要做一些简单的设置就可以看到我们想看到的东西。

start-rviz

将Global Options->Fixed Frame中的默认选项”map”改为”world”,这时你会发现下面的错误就会消失;不过别着急,我们的设置还没有完。

global-option

下面点击右侧边栏的最下方的“add”按钮,然后添加“tf”。

add tf

添加好之后,你就可以看到下面的效果:

rviz-config-result

在刚刚运行例子的命令行中使用方向键控制乌龟运动并观察rviz中的变化。中间不动的那个是世界坐标系,其他两个是turtle1和turtle2的坐标系。后面的教程我们还会使用rviz进行说明,因为rviz可以很直观地看到坐标系的变化。

参考资料

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

SLAM从入门到入土:TF转换中,odom与base_footprint没有连接上。 TF转换错误 阅读详情

相关推荐

python:TF-IDF计算

在构建语料库的时候,把每篇文献的关键词抽取出来,接下来是要利用语料库计算文本特征,打算从TF-IDF和拓扑特征两个角度计算,再将二者合并在一起,计算文献之间的相似度。 目前拓扑特征还在无限当机中…TF-IDF的概念很熟悉网上也有很多现成的代码,之前查资料的时候看到已经有现成的包可以之间计算TF-IDF,但是我个人觉得用自己编写内部机理可能更加自如吧~ 重点计算的原理参考链接是https://blo...

weixin_37834134的博客 2506

LIO-SAM定位+Move_base导航+实车调试

LIO-SAM定位+Move_base导航+实车调试

lixushi的博客 1万+

ROS TF原理和使用方法

ROS TF介绍 一、TF是什么? 1.TF是ROS的一个包(package) 2.TF能让用户随时记录各种坐标系之间的变换关系 3.TF能让用户在一个坐标系中进行坐标运算,并将转换关系后的位置关系传到另一个坐标系 在ROS里面查看tf变换关系 rosrun rqt_tf_tree rqt_tf_tree 图中为某一时刻的tf变换图(先要启动一个机器人模型),表示turtle1和turt...

Savage888777的博客 9245

【ROS基础】map、odom、base_link、laser 的理解 及其 tf 树的理解

加入了个人理解,望采纳

贾亚超的博客 6738

tf.nn,tf.layers, tf.contrib模块介绍

一、tf.nn,tf.layers, tf.contrib概述 我们在使用tensorflow时,会发现tf.nn,tf.layers, tf.contrib模块有很多功能是重复的,尤其是卷积操作,在使用的时候,我们可以根据需要现在不同的模块。但有些时候可以一起混用。 下面是对三个模块的简述: (1)tf.nn:提供神经网络相关操作的支持,包括卷积操作(co...

Yuancccc的博客 5611

ROS进二阶学习笔记(1) TF 学习笔记1:TF介绍 + tf工具

ROS TF 学习笔记(1) -- TF介绍 Ref:  http://wiki.ros.org/tf/Tutorials/Introduction%20to%20tf 惭愧的是,时隔10个月,重新来学习tf的东西。 1. Running the Demo Now that we're done getting the turtle_tf tutorial packag

Combine Art and Sciences. 7545

初步TF-IDF算法

TF-IDF算法 在自然语言处理中非常重要的算法,用于计算一个词汇在文本中的重要性。 TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency,简写为TF),IDF意思是逆文本频率指数(Inverse Document Frequency),它与一个词的常见程度成反比。 注: TF-IDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。 TF

Above the cloud 343

ros中设置Global Options,以及rqt_tf_tree树讲解,TF树的理解,使用GUI插件,用于可视化ROS-TF的框架树

其中的Fixed Frame参数是全局显示区域依托的坐标系,我们知道机器人中有很多坐标系,坐标系之间有各自的转换关系,有些是静态关系,有些是动态关系,不同的Fixed Frame参数有不同的显示效果,在导航机器人应用中,一般将Fixed Frame参数设置为map,也就是以map坐标系作为全局坐标系。上图所表示的TF树中base_link坐标系是base_footprint的子坐标系,base_cover_link坐标系也是base_footprint的子坐标系。在TF树中用箭头表示这种父子关系。

pvmsmfchcs的博客 2963

TF -IDF的 算法原理初步熟悉

TF :统计文本中每个词的出现频率 IDF :逆文本评率,这个权重调整参数就是“逆⽂本频率”(IDF),它的⼤⼩与⼀个词的常⻅程度成反⽐。 举个例子: 利用scikit-learn 进行TF-IDF处理 from sklearn.feature_extraction.text import TfidfTransformer from sklearn.feature_extraction.text import CountVectorizer corpus=["I come to China to t

qq_45531594的博客 308

Python爬虫实战:5分钟搞定东方财富A股数据抓取(附完整代码)

本文提供了一套基于Python的A股数据自动化采集与分析系统构建方案。文章详细解析了如何通过稳健的爬虫框架从东方财富等公开数据源高效抓取A股数据,并设计数据库进行自动化存储与管理,特别适合量化研究和数据分析场景。

weixin_29062963的博客 4425

UG/NX二次开发实例流程样例(nx1980+vs2019)

以上就是基本操作了,下面进入界面开发流程,nx1980的界面开发操作,也需要在块UI界面编辑器中操作,很多教程都没有讲解这一点,尤其是如何进入块UI界面编辑器,那么我在这里详细说明一下步骤。》,这一篇文章我们将详细讲述,如何开发一个具体的功能——根据用户输入的数据,在特定的点上创建一个指定大小的立方体。可以将文件保存当桌面,笔者保存在桌面的create_block目录中了,如下图所示,可以发现生成了三个文件。4.在新建模型完成后,我们准备创建交互UI,按照下图所示的顺序,找到块UI界面编辑器,。

秋月的私语 1万+

简单初步掌握30天吃掉TF2.0

简单入门TF2.0框架。 30天吃掉TF2.0中拓展出适合自己的内容,简单入门,以后可以慢慢深入。 Github地址在如下: https://github.com/yingdajun/EAT-TF-MIN 简单实现了结构数据的二分类、多分类、回归。 实现了图像数据分类。 实现文本数据分类。 文本数据太大了,我懒得上传,有需要直接私信,谢谢。 ...

yingdajun的博客 305

S32K3双核实战:手把手教你用EB配置CAN与CANFD(附中断/轮询代码对比)

本文详细解析了NXP S32K3双核处理器在CAN/CANFD通信开发中的实战应用。通过Elektrobit配置工具链,从双核通信架构设计到EB tresos Studio配置全流程,再到中断与轮询模式的代码实现对比,全面指导开发者优化S32K3 FlexCAN模块性能,提升汽车电子系统的通信效率与可靠性。

weixin_30955617的博客 440

正点原子嵌入式linux驱动开发——TF-A使用

正点原子的linux驱动开发的文档学习,这一片是TF-A的初步认识(I.MX6U-ALPHA不存在TF-A这一步)

xhj12138的博客 1190

16、Arduino MEGA 2560 固件与电路详解

本文详细介绍了Arduino MEGA 2560的固件编程与电路设计,涵盖ATmega16U2和ATmega2560的熔丝配置、stk500v2引导加载程序的备份与恢复方法、使用Microchip Studio通过ICSP烧录固件的步骤,以及debugWIRE和JTAG调试接口的选择与配置。同时提供了电路块图解析、组件位置参考及常见问题解决方案,帮助用户深入理解硬件结构并进行高效开发与调试。

swift5iosmith的博客 193

Android日志实战——车机日志获取(十五)

这个项目中的 Log 管理系统,其实只是将系统原生 Log 进行输出并导出,并没有太复杂的操作。还有一种 Log 管理系统需要对 Android 原生 Log 系统进行重写,例如我们使用 Log.d(tag, msg) 打印 Log,需要我们根据 tag 信息将不同模块的 Log 数据写入不同的本地文件下,这样可以方便不同模块查看自己的 Log,追踪异常问题。

小旭的专栏 3773

TF-IDF算法

TF-IDF(词频-逆文档频率)是一种用于衡量文本中词语重要性的方法,特别适用于信息检索和文本挖掘任务。下面我将深入讲解TF-IDF的计算过程,以便更好地理解。和。词频是指某个词语在文档中出现的频率。TF表示了一个词语在文档中的重要性,通常通过以下公式计算:其中表示词语 t 在文档 d 中出现的次数,表示文档 d 中所有词语的出现次数之和。逆文档频率度量了一个词语在整个文档集合中的重要性。IDF值越大,表示词语在整个文档集合中越不常见,因此在文档中的重要性越高。

2301_79012932的博客 1476

[PCIE5.0] 2.2.8.9 Optimized Buffer Flush/Fill (OBFF) Message

这段文字讲解的是 优化的缓冲区清空/填充(OBFF)消息,它是 PCI Express(PCIe)规范中的一个可选功能,用于向设备报告平台中央资源的状态。简单来说,OBFF 主要帮助设备了解当前平台资源(如缓存或内存)的状态,从而优化数据的处理和传输。这章重点内容如下。

系统固件工程师 538

机器学习:生动理解TF-IDF算法

什么是TF-IDF? TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术,常用于挖掘文章中的关键词,而且算法简单高效,常被工业用于最开始的文本数据清洗。 TF-IDF有两层意思,一层是"词频"(Term Frequency,缩写为TF),另一层是"逆文档频率"(Inverse Document Frequ...

从未完美过的博客 807

【微信小程序】微信小程序开发环境搭建:安装微信小程序开发者工具

通过本文的介绍,你应该已经成功安装并配置了微信小程序开发者工具,为微信小程序开发做好了准备。接下来,你可以开始编写你的第一个小程序项目,探索更多有趣的功能和特性。祝你开发顺利,创造更多优秀的作品!

墨夶的博客 2946

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

建立一个神经元的网络并用TF2进行代码实现线性回归

用TF2代码实现建立一个神经元的网络 (了解TF2的代码) 文章目录用TF2代码实现建立一个神经元的网络 (了解TF2的代码)前言一、导入第三方库二、建立简单神经元1.Sequential 顺序模型2.编译过程3.训练过程4.预测三、小结 前言 刚刚步入深度学习领域,掌握了简单的基础知识,我们便可以开始建立我们的第一个神经网络,仅利用一个神经元来进行对一组数据的进行线性的回归预测。本文将详细介绍如何用代码实现此功能,以此使得初学者对Tensorflow 2.0有一个初步的认识。 主要解决问题:已知两

choosetobehappy的博客 395

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

探索 TF‑IDF:语义搜索与文本分析核心技术详解

TF‑IDF 是一种快速、可解释的文本特征方法,适用于检索、关键词提取与初步分析。将 TF 与 IDF 相乘可得到 TF‑IDF 值:TF‑IDF(t, d, D) = TF(t, d) × IDF(t, D):衡量一个词在语料库中多常见,用来降低那些出现在多数文档中的普通词的权重。公式:TF(t, d) = 词 t 在文档 d 中出现次数 ÷ 文档总词数。公式:IDF(t, D) = log(N ÷ df(t)):衡量一个词在文档中出现的频率,代表文档内该词的重要性。

weixin_42386002的博客 817

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

从词频到主题建模:TF、TF-IDF 与 LDA 文本分析入门

本文系统梳理了文本分析中的三大经典方法:TF(词频统计)、TF-IDF(词频-逆文档频率)和LDA(潜在狄利克雷分配)。文章从分析需求出发,指出三种方法分别解决不同层次的问题:TF关注高频词统计,用于数据探索和质量检查;TF-IDF通过加权突出具有区分度的关键词;LDA则通过概率模型挖掘潜在主题结构。作者强调,虽然现代NLP技术(如BERT、LLM)在语义理解上更强大,但这些传统方法因其简单性、透明性和可解释性,仍具有独特价值。文章通过具体案例展示了如何根据分析目标选择合适方法,并指出传统方法与现代技术可以

2401_83712180的博客 380

[ROS 系列学习教程] TF坐标变换 - TF树

每广播一个坐标关系,ROS都会把他加入到一个列表中维护起来,这个列表就是TF树。旋转偏移量为:(1.57, 0.0, 0.0) 角度单位为弧度。使用以下命令可以把TF树保存为pdf文档(如果没有安装。的坐标关系没有发布,所以有两棵TF树,现在我们发布。位置偏移量为:(0.5, 0.8, 0)可以发现,我们发布了两组坐标关系。的坐标关系来看看效果。

淋曦的进击手记 6795

ROS——一文读懂:tf变换

https://www.guyuehome.com/355

xiaohu的博客 8333
上一篇: 了解tf
下一篇: 使用tf库:编写tf广播器(C++)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值