tf2 介绍
目标
运行turtlesim演示版本,并在使用turtlesim的多机器人示例中看到tf2强大的功能。
安装demo
1 | sudo apt install |
还需要额外的安装transforms3d这个python包,它提供了tf_transformations功能包中所需要的四元数和欧拉角之间的转换功能
1 | pip3 install transforms3d |
跑demo
现在我们已经安装了turtle_tf2_py这个功能包。首先打开一个终端,source 对应的ROS2版本,输入
1 | ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py |
你会看见两只乌龟
打开另外一个终端,输入
1 | ros2 run turtlesim turtle_teleop_key |
启动后,选择可以按下方向键,观察乌龟的运动情况,第二只乌龟是自动跟随第一只乌龟
到底发生了什么
这个案例使用了tf2库建立了三个坐标系:world
frame,turtle1
frame和 turtle2
frame。在这个教程中,我们使用了tf2 broadcaster 发布了turtle坐标系,并且使用tf2 listener 来计算turtle坐标系的差,然后前进。
tf2_tools
下面我们可以通过tf2_tools 来查看tf2是如何运作的
使用view_frames
1 | ros2 run tf2_tools view_frames |
在这里,tf2监听器正在监听通过ROS的frame,并绘制了一棵关于frame如何连接的树。要查看树状图,请使用您喜爱的PDF查看器打开生成的frames.pdf。
我们可以看见有三个坐标系被tf2广播出来,world 是 turtle1和turtle2的父节点,还可以看见tf2发布的频率,最早,最晚发布的时间等信息。
使用tf2_echo
tf2_echo 可以打印出任何两个frame的关系
1 | ros2 run tf2_ros tf2_echo [reference_frame] [target_frame] |
下面我们查看一下turtle2 相对于 turtle1 的坐标变换,等价于下面的命令
1 | ros2 run tf2_ros tf2_echo turtle2 turtle1 |
应该可以看见如下内容
1 | At time 1622031731.625364060 |
tf2 和 rviz
rviz是一个可视化的工具,我们可以通过rviz来查看这俩小乌龟,通过加载rviz文件参数打开rviz
1 | ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz |
在这里你会看见tf2发布出来的frame,按下方向键依然也可以看见移动的frame。
Comments