当前位置:   article > 正文

TF2 Traveling in time (C++)_时间旅行c++解题

时间旅行c++解题

目标:了解 tf2 的高级时间旅行功能。

教程级别:中间

时间:10分钟

背景

在上一教程中,我们讨论了 tf2 和时间的基础知识。本教程将把我们更进一步,并揭示一个强大的tf2技巧:时间旅行。简而言之,tf2库的一个关键特征是它能够在时间和空间中转换数据。

这个tf2时间旅行功能可用于各种任务,例如长时间监视机器人的姿势或构建将遵循领导者“步骤”的跟随机器人。我们将使用该时间旅行功能查找时光倒流,并程序跟踪5秒。turtle2carrot1

时间旅行

首先,让我们回到上一教程“使用时间”中结束的位置。转到您的包裹。learning_tf2_cpp

现在,我们不是让第二只去机器人现在的位置,而是让第二只去5秒前第一只机器人的地方。将文件中的调用编辑为lookupTransform()turtle_tf2_listener.cpp

rclcpp::Time when = this->get_clock()->now() - rclcpp::Duration(5, 0);
transformStamped = tf_buffer_->lookupTransform(
    toFrameRel,
    fromFrameRel,
    when,
    50ms);

现在,如果你运行这个,在前5秒,第二只将不知道去哪里,因为我们还没有机器人姿势的5秒历史。但是在这5秒钟之后会发生什么呢?让我们试一试:

ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo.launch.py

您现在应该注意到您的正在不受控制地行驶,就像此屏幕截图中一样。让我们试着理解这种行为背后的原因。

  1. 在我们的代码中,我们向tf2提出了以下问题:“相对于5秒前,5秒前的姿势是什么?这意味着我们正在根据5秒前的位置以及5秒前第一只机器人的位置来控制第二只。carrot1turtle2

  2. 但是,我们真正想问的是:“相对于当前位置,5秒前的姿势是什么?carrot1turtle2

用于查找转换() 的高级 API

为了向 tf2 提出该特定问题,我们将使用一个高级 API,该 API 使我们能够明确地说出何时获取指定的转换。这是通过使用其他参数调用该方法来完成的。您的代码现在将如下所示:lookupTransform()

rclcpp::Time now = this->get_clock()->now();
rclcpp::Time when = now - rclcpp::Duration(5, 0);
transformStamped = tf_buffer_->lookupTransform(
    toFrameRel,
    now,
    fromFrameRel,
    when,
    "world",
    50ms);

的高级 API 采用六个参数:lookupTransform()

  1. 目标帧第二个机器人

  2. 第二个机器人当前时间

  3. 源帧第一个机器人

  4. 评估源帧的时间第一个机器人5秒前的时间

  5. 不随时间变化的帧,在本例中为帧world

  6. 等待目标帧变为可用所需的时间

总而言之,tf2 在后台执行以下操作。过去,它计算从 到 的转换。在帧中,tf2 时间从过去到现在。在当前时间,tf2 计算从 到 的转换。carrot1worldworldworldturtle2

检查结果

让我们再次运行模拟,这次使用高级时间旅行 API:

ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo.launch.py

是的,第二只被引导到5秒前第一只机器人的地方!

总结

在本教程中,您已经看到了 tf2 的高级功能之一。您了解到 tf2 可以及时转换数据,并通过 turtlesim 示例学习了如何执行此操作。tf2允许您使用高级API回到过去,并在海龟的旧姿势和当前姿势之间进行帧转换。lookupTransform()

参考:

Traveling in time (C++) — ROS 2 Documentation: Rolling documentation

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/540444
推荐阅读
相关标签
  

闽ICP备14008679号