Skip to main content

15. 坐标变换 — TF2 广播与监听

概述

本示例通过 demo_xmake_tf2 包,演示 ROS 2 的 TF2 坐标变换系统:静态变换广播、动态变换广播和变换监听。

ROS 2 知识点:TF2 树、StaticTransformBroadcaster、TransformBroadcaster、TransformListener、lookupTransform

xmake 知识点tf2_rostf2_geometry_msgs 等多依赖包解析

ROS 2 知识

TF2 坐标变换

TF2 维护一棵坐标系树,描述各坐标系之间的空间关系:

world
└── base_link
└── sensor_link
  • StaticTransformBroadcaster:发布不随时间变化的变换(如传感器安装位置)
  • TransformBroadcaster:发布随时间变化的变换(如机器人运动)
  • TransformListener:监听变换树,查询任意两帧之间的变换

lookupTransform

auto t = tf_buffer_->lookupTransform("world", "sensor_link", tf2::TimePointZero);
// 返回 world -> sensor_link 的变换

示例代码

xmake.lua 构建配置

target("static_tf_broadcaster")
set_kind("binary")
set_installdir("lib/demo_xmake_tf2")
add_files("src/static_tf_broadcaster.cpp")
add_ros_deps("rclcpp", "tf2_ros", "geometry_msgs")

target("tf_listener")
set_kind("binary")
set_installdir("lib/demo_xmake_tf2")
add_files("src/tf_listener.cpp")
add_ros_deps("rclcpp", "tf2_ros", "tf2_geometry_msgs", "geometry_msgs")

add_ros_deps() 一次处理多个 TF2 相关包的依赖。

构建与运行

colcon build --packages-select demo_xmake_tf2
source install/setup.bash

# 终端 1:静态变换
ros2 run demo_xmake_tf2 static_tf_broadcaster

# 终端 2:动态变换
ros2 run demo_xmake_tf2 dynamic_tf_broadcaster

# 终端 3:监听变换
ros2 run demo_xmake_tf2 tf_listener

验证

# 查看 TF 树
ros2 run tf2_tools view_frames

# 查看特定变换
ros2 run tf2_ros tf2_echo world sensor_link

xmake 知识点小结

本示例展示了 add_ros_deps() 对多个互相关联的 ROS 包的统一管理能力。

内容扩展

以下资源可帮助你深入了解本章涉及的技术领域。

开源项目

  • tf2 — TF2 核心实现

工具

文档与教程

论文与技术报告

  • T. Foote, "tf: The Transform Library", IEEE TePRA, 2013

参考