ROS Indigo learning_tf-03 添加额外的坐标系 (Python版)

我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo


前言

这一节要做的事情:添加额外的坐标系。为什么要添加额外的坐标系:

对于许多任务很容易想到内嵌一个局部的坐标系。例如,将激光扫描仪的中心作为坐标系原点的激光扫描的结果更容易被理解。 TF 允许您为每个传感器、连杆等系统定义局部坐标系。

还是在 learning_tf 软件包中的 nodes 文件夹中创建一个 fixed_tf_broadcaster.py 文件:

$ roscd learning_tf
$ gedit  nodes/fixed_tf_broadcaster.py 

并将下面的代码添加进去:

#!/usr/bin/env python
import roslib
roslib.load_manifest('learning_tf')import rospy
import tf
import mathif __name__ == '__main__':rospy.init_node('my_tf_broadcaster')br = tf.TransformBroadcaster()rate = rospy.Rate(10.0)while not rospy.is_shutdown():t = rospy.Time.now().to_sec() * math.pibr.sendTransform((2.0 * math.sin(t), 2.0 * math.cos(t), 0.0),(0.0, 0.0, 0.0, 1.0),rospy.Time.now(),"carrot1","turtle1")rate.sleep()

代码讲解:

最后一步,给这个 fixed_tf_broadcaster.py 文件加上可执行权限:

$ chmod +x fixed_tf_broadcaster.py

和前几节一样,上面的程序是一个节点,我们需要编写一个启动脚本文件,将几个节点同时运行,才能看到效果:

$ roscd learning_tf/launch
$ gedit start_demo3.launch

所以,在 start_demo2.launch 文件的 <launch> 便签里面添加下面这句,另存为:start_demo3.launch :

<node pkg="learning_tf" type="fixed_tf_broadcaster.py" name="broadcaster_fixed" />

完整的 start_demo3.launch

<launch><!-- Turtlesim Node --><node pkg="turtlesim" type="turtlesim_node" name="sim" /><node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen" /><node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" ><param name="turtle" type="string" value="turtle1" /></node><node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" ><param name="turtle" type="string" value="turtle2" /></node><node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" /><node pkg="learning_tf" type="fixed_tf_broadcaster.py" name="broadcaster_fixed" />
</launch>

运行 start_demo3.launch 启动脚本文件:

$ roslaunch learning_tf start_demo3.launch

程序运行的效果,和上一节的是一样的。这是为什么?
因为我们没有启动名字叫 ” carrot1 ” 的节点。我们现在可以使用 rosnode list 将当前运行的节点都列出来:

$ rosnode list
/broadcaster_fixed
/listener
/rosout
/sim
/teleop
/turtle1_tf_broadcaster
/turtle2_tf_broadcaster

里面没有 “ carrot1 ” 这个节点。但是,我们将当前的 tf 树型关系图: ( tf 关系树) (新的命令)

$ rosrun rqt_tf_tree rqt_tf_tree

我们现在可以使用 rosrun tf tf_echo /turtle1 /carrot1 命令来将 carrot1tf 信息打印到终端上:

$ rosrun tf tf_echo /turtle1 /carrot1

在之前的博客里面,我们讲过:
tf_echo 关键字 : 打印出 源坐标系 和 目标坐标系 之间的特定转换信息。

$ rosrun tf tf_echo [源坐标系(父类)] [目标坐标系(子类)]

输出的信息:

这个结果是正确的,因为‘carrot1’ 绕着 ‘turtle1‘做半径为2的圆周运动。(上面打印出来的 ’ carrot1 ’ 的tf信息 是以 ’ turtle1 ’ 为坐标原点 做参考的。)

我们上面编程的fixed_tf_broadcaster.py程序它做了什么你知道吗?
它只是将 carrot1tf 信息广播了出来,并没有给 /carrot1/cmd_vel 这个话题发布消息,并且我们也没有再生( spawn )一个 ” carrot1 ” 小海龟。所以,结果就是现在这个样子。

By The Way :

上面出现的 tf 关系树,下面我做以解释:

Tf 建立了一个坐标系的关系树型图。一个坐标系节点只能有一个父类,可以有多个子类。

现在你要添加一个坐标系( carrot1 )到这个树型关系图中, 就必须选择一个已有的坐标系(turtle1turtle2world)作为父类,而这个新的坐标系( carrot1 )就是子类。 如图:



总结:
其实这一节想要讲的内容已经讲完了:就是如何新建一个 tf 坐标系。
ok , 这一节,就已经介绍完了。因为这一节,我们还有没有看到小海龟窗口中小海龟什么新的动作。
所以,下一节我们在写一个新的监听坐标系变化的程序,希望看到的运行效果是: turtle2 海龟围绕着 ’ turtle1 ’ 海龟转圈。(因为:’ turtle2 ’ 小海龟设置在 ’ carrot1 ’ 这个坐标系节点上,而 carrot 坐标系节点围绕这个 turtle1 坐标系节点做画圆的变化。)


转载于:https://www.cnblogs.com/aobosir/p/5928564.html

ROS Learning-019 learning_tf-03(编程) 添加额外的坐标系 (Python版)相关推荐

  1. 【计算机视觉】OpenCV 4高级编程与项目实战(Python版)【7】:拼接图像

    我们已经知道,图像是通过数组描述的,那么拼接图像其实就是拼接数组.NumPy提供了2个拼接数组的函数,分别是hstack函数和vstack函数,这两个拼接函数可以将两个数组水平和垂直拼接在一起,也就相 ...

  2. ROS机器人高效编程(原书第3版)勘误、问题及资料汇总

    ROS机器人高效编程(原书第3版)勘误.问题及资料汇总--持续更新 如果小伙伴发现书中错误,恳请批评指正,非常感谢.勘误在文末. 补充一行代码装ROS,适用于14.04LTS(indigo)和16.0 ...

  3. R使用abline()函数在图中添加额外的直线

    R使用abline()函数在图中添加额外的直线 目录 R使用abline()函数在图中添加额外的直线 abline() 添加水平线

  4. 台式计算机怎么加一个硬盘,如何再安装一个台式计算机硬盘驱动器?如何在计算机安装中添加额外的硬盘...

    如果台式计算机的硬盘运行时间较长,它将存储大量数据. 长时间后,硬盘空间将不足. 更换计算机将花费大量金钱. 实际上,我们可以在计算机上添加额外的硬盘以增加硬盘空间并加快系统速度. 那么如何再安装一个 ...

  5. python分发包_Python 分发包中添加额外文件的方法

    在制作一个 Python 分发包时经常需要把一些文件添加到包中.最常见的例子是你希望通过 pip install命令安装 Python 包时会在 /etc/ 等目录下自动添加默认配置文件,由此可以让 ...

  6. 《树莓派实战秘籍》——1.20 技巧20使用Swap添加额外的内存

    本节书摘来异步社区<树莓派实战秘籍>一书中的第1章,第1.20节,作者:[美]Ruth Suehle ,Tom Callaway,更多章节内容可以访问云栖社区"异步社区" ...

  7. 添加额外jars包到Hive

    介绍 有时需要添加额外JARs到Hive的classpath,例如自定义的SERDE包或者与其他应用集成的包. 方法 在Hive shell中使用add命令 添加包 add jar <jar_p ...

  8. pandas 插入空列_Pandas在DF创建期间添加额外的空列(Pandas add additional empty columns during DF creation)...

    Pandas在DF创建期间添加额外的空列(Pandas add additional empty columns during DF creation) 我越来越: AssertionError: 1 ...

  9. mybatis拦截器添加额外参数

    上一篇中讲了mybatis拦截器的实现 这一篇扩展mybatis在拦截器中添加额外参数 在mybatis的mapper.xml文件中,我们可以使用#{}或${}的方式获取到参数,这些参数都需要提前我们 ...

  10. SpringData Manytomany 中间表添加额外字段

    SpringData Manytomany 中间表添加额外字段 Course跟user是两张多对多关联表 添加中间表实体类,表名跟多对多插入的中间表一致 说明 参数说明 Course跟user是两张多 ...

最新文章

  1. Python 学习记录1
  2. php广告任务网源码_THINKPHP仿我爱广告任务网|任务网站源码下载基于PHP+MYSQL的在线广告打码任务网站源码...
  3. Python函数参数传递:传值还是传引用
  4. ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理
  5. 华为云战略投入政企市场,发布华为云Stack
  6. 开源版本命名规范_11个开源项目如何命名
  7. 轻松搞定面试中的链表题目
  8. 新年快乐!这是份值得收藏的2017年AI与深度学习要点大全
  9. 硬盘分区表知识—详解硬盘MBR
  10. 博客积分为0,这是又出错了?
  11. 关于VMware的Server版卸载须知
  12. 【代码片段分享】获取公历日期阴历日期二十四节气干支纪年传统节日Java版
  13. 锁定计算机好在下游戏吗,用windows7系统锁定计算机防止孩子沉迷游戏
  14. 网络中超难的75道逻辑题及答案
  15. 判断某整数是否既是5又是7的整数倍()
  16. servlet容器,web容器,spring容器,springmvc容器的区别
  17. 【知识分享】异步串行收发器Uart(串口)-通信协议详解
  18. 详解 16 个 Pandas 读与写函数
  19. everything常用搜索命令
  20. PMP项目管理认证证书到期了怎么办

热门文章

  1. CF1106F Lunar New Year and a Recursive Sequence(矩阵快速幂+bsgs+exgcd)
  2. 笨办法学C 练习31:代码调试
  3. 处理SQLServer死锁
  4. JJavaBean中使用JDBC方式进行事务处理
  5. 新手必看——JAVA排序详解(冒泡排序和插入排序)
  6. android studio技巧之设置monitor窗口模式查看logcat
  7. [2018.07.21 T3] Booom
  8. Luogu4114 Qtree1
  9. vue2项目中全局引入scss变量
  10. oracle游标作为out参数,oracle 存储过程 带游标作为OUT参数输出