机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 ?

tf2的全称是transform2,在ROS(Robot Operating System)中,它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于"transform"这个词,表示坐标变换,而"2"则代表了这是该库的第二版,即改进和优化过的版本。

ROS2(Robot Operating System 2)中的**tf2是一个用于处理机器人各部件之间相对位置关系的库**。它主要用于追踪多个坐标系之间的相对位置和方向,并在这些坐标系之间实现无缝转换。tf2是ROS2中一个重要的组件,因为在机器人的许多应用中,正确理解各个部件如何相对于彼此移动是至关重要的。

tf2库提供以下几个关键功能:

  • 坐标变换:允许用户在不同的坐标系之间转换向量、点、姿态等。
    时间差异处理:由于传感器数据可能在不同时间到达,tf2能够处理这些时间上的差异,确保坐标变换的正确性。
  • 坐标系跟踪:tf2维护一个时间线,记录各坐标系之间关系的变化,支持查询过去任何时刻的坐标变换。
  • 接口友好:tf2提供了丰富的API,方便在C++和Python等语言中进行调用。

主要的应用场景:

  • 机器人导航:在机器人导航中,tf2用于管理和转换机器人、传感器和环境之间的坐标系。例如,将来自激光雷达的数据转换到全局坐标系中,以实现路径规划和障碍物避让。
  • 传感器数据融合:在使用多个传感器(如IMU、GPS、视觉摄像头等)时,tf2可以帮助同步和整合不同传感器的数据。通过将所有传感器数据统一到一个坐标系中,可以更准确地进行环境感知和定位。
  • 机械臂操作:在机械臂和其他自动化设备的控制中,tf2被用来计算和更新机械臂各关节之间的相对位置和方向。这对于精确控制机械臂执行复杂的操控任务至关重要。
  • 仿真和建模:在机器人仿真系统中,tf2可以用于管理虚拟环境中的各种坐标系,确保模拟数据的准确性和一致性。
  • 多机器人系统:在多机器人协作场景中,tf2能够帮助各个机器人理解彼此的相对位置和姿态,从而进行协调合作。
  • 动态环境交互:当机器人在不断变化的环境中操作时,tf2可以帮助机器人实时更新和调整其对环境的理解,例如在人群中导航或与动态对象互动。

示例演示:

运行turtlesim 演示,并在使用turtlesim 的多机器人示例中了解tf2 的一些强大功能

让我们从安装演示包及其依赖项开始。

cpp 复制代码
sudo apt-get install ros-humble-rviz2 ros-humble-turtle-tf2-py ros-humble-tf2-ros ros-humble-tf2-tools ros-humble-turtlesim

现在我们已经安装了turtle_tf2_py教程包,让我们运行演示。首先,打开一个新终端并获取 ROS 2 安装的源代码,以便ros2命令能够运行。然后运行以下命令:

cpp 复制代码
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py

您将看到海龟模拟从两只海龟开始

在第二个终端窗口中键入以下命令:

cpp 复制代码
ros2 run turtlesim turtle_teleop_key

一旦turtlesim启动,您可以使用键盘箭头键在turtlesim中驱动中央乌龟,选择第二个终端窗口,以便捕获您的击键来驱动乌龟。

您可以看到一只乌龟不断移动以跟随您驾驶的乌龟。

该演示使用 tf2 库创建三个坐标系:一个world坐标系、一个turtle1坐标系和一个turtle2坐标系。本教程使用tf2 广播器来发布海龟坐标系,并使用tf2 侦听器来计算海龟坐标系中的差异并移动一只海龟以跟随另一只海龟。

查看tf2 工具-tf2_tools

view_frames创建 tf2 通过 ROS 广播的帧的图表。请注意,该实用程序仅适用于 Linux;如果您使用的是 Windows,请跳至下面的"使用 tf2_echo"。

cpp 复制代码
ros2 run tf2_tools view_frames

你会看见:

cpp 复制代码
Listening to tf data during 5 seconds...
Generating graph in frames.pdf file...

这里,tf2 侦听器正在侦听通过 ROS 广播的帧,并绘制帧连接方式的树。要查看树,请frames.pdf使用您喜欢的 PDF 查看器打开结果。

这里我们可以看到 tf2 广播的三个帧:world、turtle1和turtle2。该框架是和框架world的父级。 还报告一些有关何时接收最旧和最新帧转换以及将 tf2 帧发布到 tf2 以便进行调试的诊断信息。turtle1turtle2view_frames

tf2_echo 报告通过 ROS 广播的任意两个帧之间的转换。

用法 :ros2 run tf2_ros tf2_echo source_frame target_frame

turtle2让我们看看框架相对于框架的变换turtle1,它相当于:

cpp 复制代码
ros2 run tf2_ros tf2_echo turtle2 turtle1

tf2_echo当侦听器接收通过 ROS 2 广播的帧时,您将看到显示的转换。

cpp 复制代码
At time 1622031731.625364060
- Translation: [2.796, 1.039, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.202, 0.979]
At time 1622031732.614745114
- Translation: [1.608, 0.250, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.032, 0.999]

当您驾驶乌龟四处走动时,您会看到两只乌龟相对移动时变换发生变化。

rviz2 和 tf2

rviz2是一个可视化工具,对于检查 tf2 帧很有用。让我们rviz2通过使用以下选项通过配置文件启动它来查看我们的海龟框架

cpp 复制代码
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz

在侧栏中,您将看到 tf2 广播的帧。当您驾驶乌龟四处走动时,您会看到框架在 rviz 中移动,tu

图中的两个坐标就会重合到一起

相关推荐
2601_955662461 分钟前
情感解说视频如何提升感染力?配音细节很关键
人工智能·音视频·语音识别·视频
苏醒的人生4 分钟前
电商品牌物料AI生图工具推荐:让品牌调性一套到底
人工智能
lank_M9 分钟前
截图OCR预处理在普通屏上翻车,Retina截图却没事
图像处理·人工智能·计算机视觉·ocr
Aloudata9 分钟前
LookML 语义模型 vs 企业级独立语义层:BI 建模语言能否承担企业语义底座?
数据库·人工智能·数据分析·数据资产·dataagent
龙亘川20 分钟前
AI 协同赋能城市治理:支撑政协数字化履职的技术路径探析
大数据·人工智能·智慧城市·开源软件·数据可视化
通信大模型20 分钟前
IEEE TCCN | 面向低空经济网络的Agentic AI驱动多无人机轨迹优化
网络·人工智能·无人机
爱编程的小白L32 分钟前
2027 计算机毕业设计选题汇总|深度学习专项(2027最新)
人工智能·深度学习·课程设计
逸模36 分钟前
BIM在连锁餐饮装修中的应用:不只是画三维图
大数据·数据库·人工智能·物联网·建模