Python 使用tf listener变换姿势在Rviz中不起作用

Python 使用tf listener变换姿势在Rviz中不起作用,python,ubuntu-14.04,ros,Python,Ubuntu 14.04,Ros,我在Rviz中为PR2的head_plate_帧设置了一些固定位置和方向(pose)值,尝试将pose从head_plate_帧转换为base_链接帧,并将值保存在位置和四元数数组中。但是,除了执行except块之外,谁能帮上忙呢?这里的错误是什么 这是我的密码: pose1 = PoseStamped() pose1.header.stamp = rospy.Time.now() pose1.header.frame_id = "head_plate_frame" pose1.pose.pos

我在Rviz中为PR2的head_plate_帧设置了一些固定位置和方向(pose)值,尝试将pose从head_plate_帧转换为base_链接帧,并将值保存在位置和四元数数组中。但是,除了执行except块之外,谁能帮上忙呢?这里的错误是什么

这是我的密码:

pose1 = PoseStamped()
pose1.header.stamp = rospy.Time.now()
pose1.header.frame_id = "head_plate_frame"
pose1.pose.position.x = 0.7
pose1.pose.position.y = -0.05
pose1.pose.position.z = 1.1
pose1.pose.orientation.x = 0.3
pose1.pose.orientation.y = 0.3
pose1.pose.orientation.z = 0.2
pose1.pose.orientation.w = 0.2

listener = tf.TransformListener()

try:
    position, quaternion = listener.lookupTransform("/base_link",  "/head_plate_frame", rospy.Time())

except (tf.LookupException, tf.ConnectivityException,   tf.ExtrapolationException):
    print("Not working")
    pass

您应该首先检查转换是否实际有效。使用以下命令查看TF树,以查看两个链接之间的树中实际上有一条路径:

rosrun rqt_tf_tree rqt_tf_tree
还有另一个实用程序执行与输出到PDF文件相同的操作:

rosrun tf view_frames
一旦你确定你的树看起来和预期的一样,你就可以继续我的下一个推荐了。总的来说,我发现这些TF查找从来都不是非常可靠的。当您的节点第一次启动时,您经常会遇到这个异常块,因为在收到足够的TF消息之前,最初可能会有一个查找异常,或者队列中可能有旧数据,您将得到一个extractionException。即使TF树中的所有内容都是相互关联的,也可能发生这种情况。更可靠的方法是不断尝试查找,直到得到所需的内容:

position = None
quaternion = None
while position is None and quaternion is None:
    try:
        position, quaternion = listener.lookupTransform("/base_link",  "/head_plate_frame", rospy.Time())
    except (tf.LookupException, tf.ConnectivityException,   tf.ExtrapolationException):
        print("Not working")
        pass
如果你这样做的话,我可能还建议添加一个超时检查,这样它只会在某个时间限制内运行,这样你就不会等待永恒。他们使这一点更易于使用,在中有一个内置超时的查找调用,因此您可以取消while循环,它将继续尝试查找转换,直到达到超时。这是一个很好的例子。

首先。还有,谢谢!