ROS:变形金刚总是空的

时间:2014-03-04 06:33:27

标签: python ros

理论上,tf.Transformer应使用/tf模块从getFrameStrings()节点返回一个帧列表,但它返回的列表始终为空。

我使用它的小工具代码如下:

while not rospy.is_shutdown():
    t = tf.Transformer(True, rospy.Duration(10.0))
    rospy.loginfo("list: %s", t.getFrameStrings())

每个日志只是说清单:[]

如果我回显tf,那么它当时显示了大约30个不同的帧。

3 个答案:

答案 0 :(得分:1)

我发现应该使用tf.TransformListener类从python中的tf主题访问帧。它是“订阅“ / tf”消息主题的tf.TransformerROS的子类”,而tf.TransformerROS扩展了tf.Transformer(see docs)。

此外,我将在循环之前初始化TransformListener,以便给它一些时间来收集转换。因此,使用如下代码:

t = tf.TransformListener(True, rospy.Duration(10.0))
while not rospy.is_shutdown():
    rospy.loginfo("list: %s", t.getFrameStrings())

应该可以。

答案 1 :(得分:0)

Transformer对象需要数据源。 TransformListener对象将订阅tf主题,并在新数据到达时调用Transformer.setTransform以便能够进行查询。

这里有一个教程:http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28Python%29

另外,我建议您搜索http://answers.ros.org类似的问题。

答案 2 :(得分:0)

来自http://docs.ros.org/jade/api/tf/html/python/tf_python.html

的示例
t = tf.Transformer(True, rospy.Duration(10.0))
t.getFrameStrings() # prints []
m = geometry_msgs.msg.TransformStamped()
m.header.frame_id = 'THISFRAME'
m.child_frame_id = 'CHILD'
m.transform.translation.x = 2.71828183
m.transform.rotation.w = 1.0
t.setTransform(m)
t.getFrameStrings() # prints ['/CHILD', '/THISFRAME']