目标:学习如何在特定时间获取变换,并使用 lookupTransform()
函数等待 tf2 树上的变换可用。
教程级别:中级
时间:10 分钟
目录
背景
任务
1 更新侦听器节点
2. 修复监听器节点
3 检查结果
摘要
背景
在之前的教程中,我们通过编写 tf2 广播器和 tf2 监听器重新创建了 turtle 演示。我们还学习了如何向变换树添加新帧,并了解了 tf2 如何跟踪坐标帧的树。这个树会随着时间变化,tf2 会为每个变换存储一个时间快照(默认情况下最多 10 秒)。到目前为止,我们使用 lookupTransform()
函数来获取 tf2 树中最新的可用变换,而不知道该变换是在什么时间记录的。本教程将教您如何在特定时间获取变换。
任务
1 更新监听器节点
让我们回到添加框架教程结束的地方。转到 learning_tf2_cpp
包。打开 turtle_tf2_listener.cpp
并查看 lookupTransform()
调用:
try {
t = tf_buffer_->lookupTransform(
toFrameRel,
fromFrameRel,
tf2::TimePointZero);
} catch (const tf2::TransformException & ex) {
您可以看到我们通过调用 tf2::TimePointZero
指定了一个等于 0 的时间。
便条
tf2
包有自己的时间类型 tf2::TimePoint
,它不同于 rclcpp::Time
。包中的许多 API tf2_ros
会在 rclcpp::Time
和 tf2::TimePoint
之间自动转换。
rclcpp::Time(0, 0, this->get_clock()->get_clock_type())
本可以在这里使用,但无论