####前言
本文介绍了 tf 的功能,并使用 turtlesim 示例了多个机器人例子展示 tf 的能力。同时,本文也介绍了 tf_echo,view_frames,rqt_tf_tree 和 rviz。
####1.建立 Demo
本教程使用到的节点的 ubuntu 版本已经发布,只需要运行:
sudo apt-get install ros-indigo-ros-tutorials ros-indigo-geometry-tutorials ros-indigo-rviz ros-indigo-rosbash ros-indigo-rqt-tf-tree
####2.运行 Demo
运行:
roslaunch turtle_tf turtle_tf_demo.launch
即可打开程序界面,如下:
如果运行的途中出现程序停止的问题,参考:http://answers.ros.org/question/45251/turtle_pointer-6-process-has-died-when-running-tf-tutorial/
一旦 turtlesim 窗口打开之后,可是点击方向按键让小乌龟到处移动,点击按键的时候注意选择 turtlesim 窗口,可以看到如下界面:
可以看到,在点击方向键让小乌龟到处移动的同时,另一只小乌龟会连续的跟着它移动。
####3.发生了什么
上述 demo 使用 tf 库创建了 3 个坐标系:世界系,乌龟 1 系,乌龟 2 系。本教程使用 tf broadcaster 来发布乌龟坐标系,使用 tf listener 计算乌龟坐标系的不同,然后驱动一只乌龟跟随另一只移动。
####4.tf 工具
接下来看看上述 demo 如何使用 tf。我们可以通过 tf 工具查看 tf 在后台做了什么。
#####4.1 使用 view_frames
view_frames 创建 tf 通过 ROS 广播的各系的图表关系。执行:
rosrun tf view_frames
可以看到:
Listening to /tf for 5.000000 seconds
Done Listening
dot - graphviz version 2.36.0 (20140111.2315)
Detected dot version 2.36
frames.pdf generated
上述命令执行的 tf listener 监听通过 ROS 广播的各个系,并绘制各个系之间连接的树。如果要查看输出的树,运行:
evince frames.pdf
可以看到:
这里我们可以看到 tf 广播了 3 个系:world,turtle1,turtle2,并且 world 是 turtle1 和 turtle2 的父节点。为了调试,view_frames 也会上报一些诊断性的信息:关于什么时候接收到最早的和最近的体系转换和发布给 tf 的 tf frame 速度。
#####4.2 使用 rqt_tf_tree
rqt_tf_tree 是一个用于通过 ROS 广播的坐标系的树的可视化的运行时工具。你可以简单的通过左上角的刷新按钮来刷新。
用法:
rosrun rqt_tf_tree rqt_tf_tree
或者简单的
rqt &
然后选择 Plugins 标签页的 rqt_tf_tree。
#####4.3 使用 tf_echo
tf_echo 上报的是通过 ROS 广播的任意两个坐标系之间的转换。
用法:
rosrun tf tf_echo [reference_frame] [target_frame]
让我们来看看 turtle2 和 turtle1 坐标系之间的转换等同于:
执行:
rosrun tf tf_echo turtle1 turtle2
可以看到 tf_echo 监听器显示了通过 ROS 广播的坐标系的转换的过程。
At time 1416409795.450
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
in RPY [0.000, -0.000, 2.308]
At time 1416409796.441
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
in RPY [0.000, -0.000, 2.308]
At time 1416409797.450
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
in RPY [0.000, -0.000, 2.308]
At time 1416409798.441
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405]
in RPY [0.000, -0.000, 2.308]
At time 1416409799.433
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.691, 0.723]
in RPY [0.000, -0.000, 1.526]
####5.rviz 和 tf
rviz 是一个非常有效的用户检查 tf 坐标系的可视化工具。接下来将从 rviz 中查看小乌龟的坐标系。运行:
rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz
从 rviz 中可以看到 tf 广播的各个坐标系。当驱动小乌龟运动的时候,可以看到 rviz 中的坐标系也随着运动。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于