1、TF功能包可以记录10秒钟之内的机器人所有坐标系之间的位置关系,TF坐标变换是通过监听和广播的机制实现的,当我们启动节点管理器和TF之后,就会在后台去维护一个TF树
2、本部分我们要实现的内容是通过键盘控制第一个海龟移动,让另一个海龟通过TF坐标变换自动的跟踪第一个海龟
3、接下来需要通过以下指令来安装turtle-tf示例的功能包
sudo apt-get install ros-melodic-turtle-tf
注意这个地方因安装的ROS的版本不同,安装语句也不同,比如我安装的ROS是noetic版本,而不是上面那条语句中的melodic版本,需要将该语句中的melodic改为noetic,如下所示:
sudo apt-get install ros-noetic-turtle-tf
sudo apt-get install ros-noetic-turtle-tf
4、接下来用到了ROS中的roslaunch 指令,去启动一个launch文件,launch文件可以理解为一个脚本文件,可以把很多节点的启动都写进去,运行一下的语句(内容后面再做介绍
roslaunch turtle_tf turtle_tf_demo.launch
rosrun turtlesim turtle_teleop_key
5、接下来运行键盘控制节点,使用↑↓←→键来控制第一个海龟移动,可以发现第二个海龟会跟踪第一个海龟移动
6、在tf功能包里提供了一个小工具view_frames可以可视化的看见系统中所有tf间的关系,使用 rosrun tf view_frames命令来运行它,它会先监听5s的时间,然后把5s内的所有坐标系之间的关系保存下来,它会生成一个pdf文件,默认放在主文件夹下
7、其中的world坐标系是建立在仿真器左下角的,坐标系turtle1和turtle2是建立在两个海龟上的,若是turtle与world之间的箭头没有则说明坐标系没有建立成功
8、接下来我们看一下另一个tf工具:tf_echo工具,这个工具可以直接查询任意两个节点在树中的坐标关系,如rosrun tf tf_echo turtle1 turtle2 可以查看节点turtle1 到节点turtle2的坐标变换,也就是turtle2坐标系如何变换到turtle1坐标系,我们用键盘控制第一个海龟运动,可以发现数据会变化,其中Translation表示的是平移,Rotation表示的是旋转,在Rotation中,Quaternion行是用四元数表示的,下一行是RPY(通过XYZ轴旋转)是通过的弧度来描述的,下一行的RPY是通过角度来描述的。
9、接下来看一个更加可视化的工具rviz工具,他是一个三维可视化的显示平台,我们通过以下的指令来运行该工具,运行后点击Add添加tf,然后就可以直观的看到坐标系之间的关系,使用键盘指令控制第一只海龟移动可以发现坐标系的移动
rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz