美文网首页
02-TF-tf监听

02-TF-tf监听

作者: joey_zhou | 来源:发表于2016-08-04 18:58 被阅读146次

1.编码

$ roscd learning_tf
$ vim nodes/turtle_tf_listener.py

#!/usr/bin/env python  
import roslib
roslib.load_manifest('learning_tf')
import rospy
import math
import tf
import geometry_msgs.msg
import turtlesim.srv

if __name__ == '__main__':
    rospy.init_node('tf_turtle')

    listener = tf.TransformListener()
  #tf.TransformListener()开启tf.TransformListener结构体,一旦listener开启,就开始接受坐标变换数据,数据有10s的缓存。
    rospy.wait_for_service('spawn')
    spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
    spawner(4, 2, 0, 'turtle2')

    turtle_vel = rospy.Publisher('turtle2/cmd_vel', geometry_msgs.msg.Twist,queue_size=1)

    rate = rospy.Rate(10.0)
    while not rospy.is_shutdown():
        try:
            (trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
        #核心代码解析:lookupTransform('frame1','frame2',rospy.Time(0))
        #frame1是变换的起始坐标系,frame2是变换的目的坐标系。简单说就是将坐标系1变换到坐标系2.time是转换时间,rospy.Time(0)表示马上转换。最后的结果是坐标系1相对坐标系2的坐标。
        except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
            continue

        angular = 4 * math.atan2(trans[1], trans[0])
        linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
        cmd = geometry_msgs.msg.Twist()
        cmd.linear.x = linear
        cmd.angular.z = angular
        turtle_vel.publish(cmd)

        rate.sleep()

chmod +x nodes/turtle_tf_listener.py

2.运行listener

修改launch文件

vim launch/start_demo.launch

  <launch>
    ...
    <node pkg="learning_tf" type="turtle_tf_listener.py" 
          name="listener" />
  </launch>

roslaunch learning_tf start_demo.launch

3.检查结果

按照官方文档运行后会报错,如下所示是官方文档部分
运行后terminal报错,找不到turtler2坐标系

[ERROR] 1253915565.300572000: Frame id /turtle2 does not exist! When trying to transform between /turtle1 and /turtle2.
[ERROR] 1253915565.401172000: Frame id /turtle2 does not exist! When trying to transform between /turtle1 and /turtle2.

出现问题的原因是创建第二个海龟坐标系并发布数据需要一些时间,而在此之前listener无法读取数据。
实际测试过程中运行ok,可能是电脑比较慢的缘故。。

相关文章

  • 02-TF-tf监听

    1.编码 $ roscd learning_tf$ vim nodes/turtle_tf_listener.py...

  • 02-TF-tf介绍

    TF介绍 描述 教程介绍了tf的实际应用,并展示了使用 turtlesim的多机器人示例. 同时介绍了tf_ech...

  • 02-TF-tf与时间

    tf与时间 之前的教程中介绍了tf如何管理坐标系,坐标系树随时间而变化,每次坐标变换tf会储存时间戳,最高储存10...

  • Android之常用Listener监听器

    常用Listener监听器 ListView事件监听: EditText事件监听: RadioGroup事件监听:...

  • 1.Vue- Watch(监听props/data)

    监听基本使用 监听props/data deep 深度监听,可监听到对象、数组的变化

  • iOS 实时监听沙盒文件夹的变化

    OC 版本 添加属性 开启监听 结束监听 Swift 版本 添加属性 开启监听 结束监听

  • 生命周期函数

    onLoad 监听页面加载 onReady 监听页面初次渲染完成 onShow 监听页面显示 onHide 监听页...

  • KVO监听scrollView的滚动方向

    设置监听 监听回调处理 移除监听 利用KVO来监听scrollView类contentOffset的变化

  • watch监听方面的笔记

    一、普通监听略过二、监听数组 三、监听对象

  • SpringBoot--监听器解析

    监听器模式 监听器模式有要素 事件 监听器 广播器 触发机制 系统监听器 监听器 ApplicationListe...

网友评论

      本文标题:02-TF-tf监听

      本文链接:https://www.haomeiwen.com/subject/jzbmdttx.html