警告
您正在阅读的 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 可能抛出的其他异常。