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 的一些强大功能
让我们从安装演示包及其依赖项开始。
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命令能够运行。然后运行以下命令:
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py
您将看到海龟模拟从两只海龟开始
在第二个终端窗口中键入以下命令:
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”。
ros2 run tf2_tools view_frames
你会看见:
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,它相当于:
ros2 run tf2_ros tf2_echo turtle2 turtle1
tf2_echo当侦听器接收通过 ROS 2 广播的帧时,您将看到显示的转换。
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通过使用以下选项通过配置文件启动它来查看我们的海龟框架
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz
在侧栏中,您将看到 tf2 广播的帧。当您驾驶乌龟四处走动时,您会看到框架在 rviz 中移动,tu
图中的两个坐标就会重合到一起