gpt4 book ai didi

python - ROS帧变换(相机到底座)

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:17 24 4
gpt4 key购买 nike

我正在使用 Baxter 机器人,我想做的是使用增强现实标记获取物体的位置并将手移动到该位置以捕获它。

我正在使用 ar_tools 包来获取对象的位置/方向,但这是相对于我正在使用的 head_camera 而言的。在过去的几天里,我一直在试验如何将该引用框架 (head_camera) 更改为基础框架,因为该框架被 moveit 用于制定计划。我试图将我从 ar_tools 收到的消息 header 的 frame_id 手动设置为 'base':

 pose_target.header.frame_id = 'base'

但我得到的位置和方向仍然是 WRT head_camera。我也尝试这样做:

self.tl.lookupTransform("/base", "/head_camera", self.t) 

where self.t = self.tl.getLatestCommonTime("/head_camera", "/base"),但我遇到了外推错误。有点像

the transformation requires to extrapolate in the past

(我现在不太记得了,而且我不在实验室。)然后我想我可能需要运行 lookupTransformhead_camhead,从 headtorso 以及从 torso 到 Baxter 的 base

有人可以指导我如何将 ar_tools 标记的框架从 head_camera 更改为 base 吗?

此外,对于外推误差,有没有办法以静态方式做到这一点?

最佳答案

假设您要从 ar_tools 恢复 PoseStamped 消息,有一种稍微更直接的方法:

on_received_pose(pose):
'''
Handler for your poses from ar_tools
'''
if self.tl.waitForTransform(pose.header.frame_id, "/base", pose.header.stamp, rospy.Duration(0.1)): # this line prevents your extrapolation error, it waits up to 0.1 seconds for the transform to become valid
transd_pose = self.tl.transformPose("/base",pose)
# do whatever with the transformed pose here
else:
rospy.logwarn('Couldn\'t Transform from "{}" to "/base" before timeout. Are you updating TF tree sufficiently?'.format(pose.header.frame_id))

您得到外推错误可能是因为在您收到第一条消息时转换网络尚未完全形成; tf 拒绝外推,它只会内插,因此如果您在尝试转换为的时间戳之前和之后(或恰好在)的每一帧都没有收到至少一个转换消息,它会抛出异常。添加的 if 语句会在尝试执行转换之前检查它是否真的可以执行转换。您当然也可以将 transformPose() 调用包围在 try/catch block 中,但我觉得对于 tf更明确地说明您要做什么。

一般来说,查看简单的 ROS tf Python Tutorial更多示例/操作模式。

关于python - ROS帧变换(相机到底座),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com