浅析TF树中ros::Time(0)和ros::Time::now()

在处理ROS TF树时遇到错误,由于请求坐标变换时使用ros::Time::now(),导致与缓冲区数据不匹配。分析表明,应使用ros::Time(0)来获取缓冲区中最新的TF数据,或者加入延时等待函数。总结了ros::Time(0)和ros::Time::now()的差异及其在TF坐标变换中的应用。

问题产生:

最近在跑一个程序时,需要采集TF树中两个坐标的坐标变换,但是在运用过程中,通过下面语句进行坐标采集时,出现如下报错:

语句:

tf_transform = tf_buffer.lookupTransform(desired_camera_frame, current_camera_frame, ros::Time(0), ros::Duration(0));

这里我想获取坐标desired_camera_frame和current_camera_frame的坐标变换。

报错信息:

[ERROR] [1619773238.770668534]: Lookup would require extrapolation into the past.  Requested time 1619773238.270257792 but the earliest data is at time 1619773238.276599648, when looking up transform from frame [camera_color_optical_frame] to frame [desired_cam_frame]

在这里插入图片描述

问题分析:

可以看到我们获取信息的时间与数据最早的时间并不匹配。
因为每个监听器都有一个缓冲区,存储来自不同TF广播的所有坐标转换。当广播者发送转换时,转换进入缓冲区需要一段时间(通常是几毫秒)。所以,当您在“现在”请求帧转换时,从缓冲区提取不到当前的发布变换,您应该等待几毫秒,等待该信息

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值