< >
Home » ROS2与tf2入门教程 » ROS2与tf2入门教程-使用tf2进行Time travel(C++)

ROS2与tf2入门教程-使用tf2进行Time travel(C++)

说明:

  • 介绍 tf2 的高级时间旅行功能

概述:

  • 在之前的教程中,我们讨论了 tf2 和 time 的基础知识。

  • 本教程将带我们更进一步,并揭示一个强大的 tf2 技巧:时间旅行。

  • 简而言之,tf2 库的关键特性之一是它能够在时间和空间上转换数据。

  • 此 tf2 时间旅行功能可用于各种任务,例如长时间监控机器人的姿势或构建跟随领导者“步骤”的跟随机器人。

  • 我们将使用该时间旅行功能及时查找变换,并编程turtle2 使其落后于carrot1 5 秒。

步骤:

  • 新建turtle_tf2_listener_travel.cpp
cd ~/tf2_ws/src/learning_tf2_cpp/src
cp turtle_tf2_listener_timeout.cpp turtle_tf2_listener_travel.cpp
vim turtle_tf2_listener_travel.cpp
  • 修改为如下内容
rclcpp::Time when = this->get_clock()->now() - rclcpp::Duration(5, 0);
transformStamped = tf_buffer_->lookupTransform(
    toFrameRel,
    fromFrameRel,
    when,
    50ms);
  • 修改CMakeLists.txt文件,再原来的内容基础上添加turtle_tf2_listener_travel.cpp的内容
add_executable(turtle_tf2_listener_travel src/turtle_tf2_listener_travel.cpp)
ament_target_dependencies(
  turtle_tf2_listener_travel
  geometry_msgs
  rclcpp
  tf2
  tf2_ros
  turtlesim
)
install(TARGETS
  turtle_tf2_listener_travel
  DESTINATION lib/${PROJECT_NAME})
  • 创建turtle_tf2_demo_travel.launch.py
cd ~/tf2_ws/src/learning_tf2_cpp/launch
cp turtle_tf2_demo_timeout.launch.py turtle_tf2_demo_travel.launch.py
vim turtle_tf2_demo_travel.launch.py
  • 修改内容如下
Node(
    package='learning_tf2_cpp',
    executable='turtle_tf2_listener_travel',
    name='listener',
    parameters=[
        {'target_frame': LaunchConfiguration('target_frame')}
    ]
),
  • 创建turtle_tf2_fixed_frame_demo_travel.launch.py
cd ~/tf2_ws/src/learning_tf2_cpp/launch
cp turtle_tf2_fixed_frame_demo_timetout.launch.py turtle_tf2_fixed_frame_demo_travel.launch.py
vim turtle_tf2_fixed_frame_demo_travel.launch.py
  • 修改内容如下:
  demo_nodes = IncludeLaunchDescription(
    PythonLaunchDescriptionSource([os.path.join(
      get_package_share_directory('learning_tf2_cpp'), 'launch'),
      '/turtle_tf2_demo_travel.launch.py']),
    launch_arguments={'target_frame': target_frame}.items()
  )
  • 构建
colcon build --symlink-install --packages-select learning_tf2_cpp
  • 加载工作空间
. ~/tf2_ws/install/local_setup.bash

测试:

  • 现在,如果你运行这个,在前 5 秒内,第二只海龟将不知道去哪里,因为我们还没有 5 秒的carrot1姿势历史。
  • 但是在这 5 秒之后会发生什么? 让我们试一试:
. ~/tf2_ws/install/local_setup.bash
ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_travel.launch.py

请输入图片描述

lookupTransform()高级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);
  • 综上所述,tf2 在后台做了以下工作。过去,它计算从carrot1到 的变换world。
  • 在world坐标系中,tf2 时间从过去到现在。
  • 并且在当前时间,tf2 计算从world到 的变换turtle2
  • 使用高级时间旅行 API
ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_travel.launch.py

请输入图片描述

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与tf2入门教程