理论上,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个不同的帧。
答案 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']