警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

使用时间(Python)

目标 学习使用 超时查找变换 函数来等待 tf2 树上的转换可用。

辅导水平: 中级

时间 10 分钟

背景介绍

在之前的教程中,我们通过编写一个 tf2 广播公司 和一个 tf2 监听器.我们还学会了如何 为变换树添加新帧.现在,我们将进一步了解 超时 论点,它使 查找变换 在抛出异常之前,等待指定变换的时间最长可达指定的持续时间。该工具可用于监听以不同速率发布的变换,或那些网络不可靠、延迟不可忽略的传入源。本教程将教您如何在 查找变换 函数来等待 tf2 树上的转换可用。

任务

1 更新监听节点

编辑 turtle_tf2_listener.py 并移除 timeout=Duration(seconds=1.0) 参数传递给 lookup_transform() 调用第 76 行。它应该如下所示:

变速器 = 自我._tf_buffer.查找变换(
   至框架关系,
   从帧关系,
   现在)

此外,还要导入其他异常,我们将在文件开头处理这些异常:

 tf2_ros 舶来品 查找异常, 连接异常, ExtrapolationException

编辑第 81 行的异常处理,添加新导入的异常和 饲养 语句查看异常:

除开 (查找异常, 连接异常, ExtrapolationException):
   自我.get_logger().信息('转型还没准备好';)
   饲养
   返回

如果现在尝试运行启动文件,你会发现它失败了:

ros2 launch learning_tf2_py turtle_tf2_demo.launch.py

2 修复监听节点

您现在应该注意到 lookup_transform() 失败。它会告诉你帧不存在或数据在未来。要解决这个问题,请编辑第 76 行的代码,如下所示(返回 超时 参数):

变速器 = 自我._tf_buffer.查找变换(
   至框架关系,
   从帧关系,
   现在,
   超时=rclpy.会期.持续时间(秒钟=1.0))

"(《世界人权宣言》) 查找变换 可以接受四个参数,其中最后一个参数是可选的超时时间。在超时之前,它会阻塞一段时间。

备注

更改后,移除 饲养除() 块,否则代码将继续失败。

现在可以运行启动文件了。

ros2 launch learning_tf2_py turtle_tf2_demo.launch.py

您应该注意到 lookup_transform() 实际上会阻塞,直到两只海龟之间的变换可用(通常需要几毫秒)。一旦超时(本例中为 1 秒),只有在变换仍不可用时才会出现异常。

摘要

在本教程中,您将进一步了解 查找变换 函数及其超时功能。您还学会了如何捕获和处理 tf2 可能抛出的其他异常。