tf学习
来源:互联网 发布:淘宝网登录不上 编辑:程序博客网 时间:2024/05/22 08:02
在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换。
相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf
一、tf简介
我们通过一个小小的实例来介绍tf的作用。
1、安装turtle包
2、运行demo
运行简单的demo:然后就会看到两只小乌龟了。
该例程中带有turtlesim仿真,可以在终端激活的情况下进行键盘控制。
可以发现,第二只乌龟会跟随你移动的乌龟进行移动。
3、demo分析
接下来我们就来看一看到底ROS做了什么事情。
这个例程使用tf建立了三个参考系:a world frame, a turtle1 frame, and a turtle2 frame。然后使用tf broadcaster发布乌龟的参考系,并且使用tf listener计算乌龟参考系之间的差异,使得第二只乌龟跟随第一只乌龟。
我们可以使用tf工具来具体研究。
然后会看到一些提示,并且生成了一个frames.pdf文件。
这个例程使用tf建立了三个参考系:a world frame, a turtle1 frame, and a turtle2 frame。然后使用tf broadcaster发布乌龟的参考系,并且使用tf listener计算乌龟参考系之间的差异,使得第二只乌龟跟随第一只乌龟。
我们可以使用tf工具来具体研究。
然后会看到一些提示,并且生成了一个frames.pdf文件。
该文件描述了参考系之间的联系。三个节点分别是三个参考系,而/world是其他两个乌龟参考系的父参考系。还包含一些调试需要的发送频率、最近时间等信息。
tf还提供了一个tf_echo工具来查看两个广播参考系之间的关系。我们可以看一下第二只得乌龟坐标是怎么根据第一只乌龟得出来的。
tf还提供了一个tf_echo工具来查看两个广播参考系之间的关系。我们可以看一下第二只得乌龟坐标是怎么根据第一只乌龟得出来的。
控制一只乌龟,在终端中会看到第二只乌龟的坐标转换关系。
我们也可以通过rviz的图形界面更加形象的看到这三者之间的关系。
代码文件:/nodes/turtle_tf_broadcaster.py
移动乌龟,可以看到在rviz中的坐标会跟随变化。其中左下角的是/world,其他两个是乌龟的参考系。
下面我们就来详细分析这个实例。
下面我们就来详细分析这个实例。
二、Writing a tf broadcaster
1、创建包
2、broadcast transforms
我们首先看一下如何把参考系发布到tf。代码文件:/nodes/turtle_tf_broadcaster.py
创建launch文件start_demo.launch:
运行:
可以看到界面中只有移植乌龟了,打开tf_echo的信息窗口:
world参考系的原点在最下角,对于turtle1的转换关系,其实就是turtle1在world参考系中所在的坐标位置以及旋转角度。
三、Writing a tf listener
这一步,我们将看到如何使用tf进行参考系转换。首先写一个tf listener(nodes/turtle_tf_listener.py): 在launch文件中添加下面的节点:
然后在运行,就可以看到两只turtle了,也就是我们在最开始见到的那种跟随效果。
四、Adding a frame
在很多应用中,添加一个参考系是很有必要的,比如在一个world参考系下,有很一个激光扫描节点,tf可以帮助我们将激光扫描的信息坐标装换成全局坐标。
1、tf消息结构
tf中的信息是一个树状的结构,world参考系是最顶端的父参考系,其他的参考系都需要向下延伸。如果我们在上文的基础上添加一个参考系,就需要让这个新的参考系成为已有三个参考系中的一个的子参考系。
2、建立固定参考系(fixed frame)
我们以turtle1作为父参考系,建立一个新的参考系“carrot1”。代码如下(nodes/fixed_tf_broadcaster.py):
在launch文件中添加节点:
运行,还是看到两只乌龟和之前的效果一样。新添加的参考系并没有对其他参考系产生什么影响。打开nodes/turtle_tf_listener.py文件,将turtle1改成carrot1:
重新运行,现在乌龟之间的跟随关系就改变了:
3、建立移动参考系(moving frame)
我们建立的新参考系是一个固定的参考系,在仿真过程中不会改变,如果我们要把carrot1参考系和turtle1参考系之间的关系设置可变的,可以修改代码如下:
这次carrot1的位置现对于turtle1来说是一个三角函数关系了。
代码下载:http://download.csdn.net/detail/hcx25909/5708199
----------------------------------------------------------------
转自古-月
http://blog.csdn.NET/hcx25909
0 0
- tf学习
- TF框架学习笔记
- TF-IDF算法学习
- tf学习资源
- ROS--TF学习--介绍
- ROS-TF学习-欧拉角
- TF-slim学习
- tf.constant学习
- tf.diag学习
- tf.diag_part学习
- TF-Slim学习(1)
- TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
- TF/IDF概念学习笔记
- ROS学习--轻松使用tf
- ROS学习--轻松使用tf
- #tensorflow学习笔记#tf.gather
- TensorFlow- tf.argmax 函数学习
- 【笔记】TF学习1-9
- 使用Actian Dataflow往HDFS系统中写CSV格式文件报错问题
- php源码之路第八章第一节 (线程,进程和并发)
- Codeforces 742C Arpa's loud Owf 思维
- 第15周项目3 B-树的基本操作
- 【第十五周 项目1 (2)—验证直接插入排序】
- tf学习
- 初学MFC——对话框
- Android Espresso : cannot resolve symbol AndroidJUnit4.class处理办法备忘
- Android 开发者福利Google Developers中国网站发布
- Android 关于Shape画ring和line的问题
- 第15周项目2-用哈希法组织关键字
- 使用ItemDecoration 为 RecyclerView设置可 推动的 悬浮导航栏效果
- 实施远程项目常见的问题及总结
- Java反射机制详解