Lookup would require extrapolation at time 1789549028.298214, but only time 1789549029.885393 is in the buffer, when looking up transform from frame [base_link] to frame [map] 

我这边在nav2中,我需要把base_link下某个物体转到map下,然后我进行转换就提示报错。

try:
    trans_base2map = self.tf_buffer.lookup_transform(
        target_frame="map",
        source_frame="base_link",
        time=header.stamp, # 原始点云时间戳
        timeout=rclpy.duration.Duration(seconds=1)
    )
except TransformException as tf_err:
    self.get_logger().warn(f"TF查询失败 base_link -> map: {tf_err}")
    return

在这里插入图片描述
原因是:你请求的时间,比 TF 缓存里最新的 TF 时间还要靠后(未来),TF 缓存没有这个时刻的 base_link→map 变换,没法预测未来的机器人位姿。

但是这句话,我其实不能理解,我用的是点云中的时间,然后点云处理啥的都需要时间,但是为啥缓存没有。

后来我尝试了一下,取TF buffer中最新的时间,这时候能运行了,偶尔会报错。

try:
    trans_base2map = self.tf_buffer.lookup_transform(
        target_frame="map",
        source_frame="base_link",
        time=rclpy.time.Time(), # 取TF buffer里最新的变换
        timeout=rclpy.duration.Duration(seconds=1)
    )
except TransformException as tf_err:
    self.get_logger().warn(f"TF查询失败 base_link -> map: {tf_err}")
    return
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐