介绍TF2
概述
tf2是一个转换库,它允许用户跟踪一段时间内的多个坐标系。
tf2在时间上缓冲的树结构中维持坐标帧之间的关系,并允许用户在任何期望的时间点变换任意两个坐标帧间的点、向量等。
tf2的特性
机器人系统通常具有许多随时间变化的3D坐标系,如世界坐标系、基础坐标系、抓取器坐标系、头坐标系等。
tf2会随时间跟踪所有这些坐标系,并允许您提出以下问题:
- 相对于5秒前的世界坐标系,头坐标系在哪里?
- 抓取器中的物体相对于基础坐标系的姿态是什么?
- 地图坐标系中基础坐标系的当前姿态是什么?
tf2可以在分布式系统中运行。
这意味着关于机器人坐标系的所有信息都可用于系统中任何计算机上的所有ROS 2组件。
tf2可以让分布式系统中的每个组件构建自己的转换信息数据库,或者拥有一个收集和存储所有转换信息的中心节点。
安装演示
让我们从安装演示包及其依赖项开始。
sudo apt-get install ros-galactic-turtle-tf2-py ros-galactic-tf2-tools ros-galactic-tf-transformations
运行演示
既然我们已经安装了turtle_tf2_py教程包,让我们运行演示。
首先,打开一个新的终端并从ros2安装获取,以便ros2命令可以工作。
然后运行以下命令:
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py
你会看到带有两只乌龟turtlesim启动。
在第二个终端窗口中键入以下命令:
ros2 run turtlesim turtle_teleop_key
一旦turtlesim启动,您可以使用键盘箭头键在turtlesim中驱动中央龟,选择第二个终端窗口,这样您的击键将被捕获以驱动龟。
你可以看到一只乌龟不断地移动,跟随你驾驶的乌龟。
发生了什么?
本演示使用tf2库创建三个坐标系:世界坐标系、龟1坐标系和龟2坐标系。
本教程使用tf2广播器发布海龟坐标系,使用tf2监听器计算海龟坐标的差异,并移动一只海龟以跟随另一只。
tf2工具
现在让我们看看tf2是如何被用来创建这个演示的。
我们可以使用tf2_tools来查看tf2在幕后所做的事情。
- 使用view_frames
view_frames创建tf2通过ROS广播的帧的图。
您将看到:
Listening to tf data during 5 seconds...
Generating graph in frames.pdf file...
在这里,tf2监听器正在收听通过ROS广播的帧,并绘制帧如何连接的树。
要查看树,请使用您最喜爱的PDF查看器打开作为结果的生成的frames.pdf。
这里我们可以看到tf2广播的三个帧:世界、乌龟1和乌龟2。
这里的世界是乌龟1与乌龟2帧的父帧。
view_frames还报告一些关于何时接收到最旧和最新的帧转换以及tf2帧发布到tf2的速度的诊断信息,以便进行调试。
- 使用
tf2_echo
tf2_echo
报告通过ROS广播的任意两个帧之间的转换。
用法:
ros2 run tf2_ros tf2_echo [reference_frame] [target_frame]
让我们看看龟2帧相对于龟1帧的变换,它相当于:
ros2 run tf2_ros tf2_echo turtle2 turtle1
当tf2_echo
侦听器接收通过ROS2广播的帧时,您将看到显示的转换。
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]
当你驾驶你的乌龟四处走动时,你会看到两只乌龟相对移动时的变换变化。
rviz和tf2
rviz是一个可视化工具,可用于检查tf2帧。
让我们使用rviz来看看我们的海龟帧。
让我们从rviz开始。使用-d
选项的turtle_rviz.rviz配置文件:
在侧栏中,您将看到tf2广播的帧。
当您驾驶乌龟四处走动时,您会看到帧在rviz中移动。
四元数基本原理
背景
四元数是方向的四元组表示,比旋转矩阵更简洁。
四元数对于分析涉及三维旋转的情况非常有效。
四元数广泛应用于机器人、量子力学、计算机视觉和3D动画。
你可以在维基百科上了解更多关于基本数学概念的信息。
你也可以看一看3blue1brown制作的可探索视频系列《可视化四元数》。
在本教程中,您将学习四元数和转换方法如何在ROS 2中工作。