ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)

机器人中的坐标变换

例如有A、B两个坐标系,两个坐标系之间的关系可以通过这样一个向量去做描述,这里面会包含一个平移的变换和一个旋转的变换,所以任意两个坐标系之间的变换可以通过一个4*4的矩阵去描述它的平移和旋转

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第1张图片

 

ROS中的坐标系管理系统——TF

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第2张图片

一个机器人系统中有很多坐标系,怎么来描述任意两个坐标系之间的关系就是一个比较麻烦的事情

TF功能包给我们提供的很重要的功能就是管理坐标系。用这个功能包就可以通过查询的方式告诉我们这两个坐标系之间的关系是什么样的,所有底层的数学计算都封装到里面帮我们完成了,我们就不需要自己去做一遍运算了

TF的意思就是transform坐标变换

 

TF坐标变换如何实现

  • 广播TF变换
  • 监听TF变换

 

只要启动ros master之后,启动TF之后,就会在后台维护一个TF树,所有坐标系都是通过树形结构保存在这个树当中的,想去查询任意两个坐标系之间的变换关系的话直接可以通过树去查询得到

 

举例

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第3张图片

 

 

tf树维护坐标关系,tf其实是个topic

 

https://blog.csdn.net/qq_25678319/article/details/88090914

 

 

turtlesim小乌龟跟随实例

两个小海龟,两个海龟之间会一直保持位置一致。控制一只海龟移动,另一只会自动跟随,同步去做运动。

这就是通过坐标变换实现的

 

首先安装一个功能包

sudo apt-get install ros-melodic-turtle-tf 

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第4张图片

 

roslaunch是用来启动一个在ROS当中的launch文件,launch文件大家可以认为是一个脚本,可以把很多节点的启动都写进去

roslaunch turtle_tf turtle_tf_demo.launch

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第5张图片

第二只海龟产生之后,我们没有任何操作,他就已经在跟第一只海龟重叠到一起了

 

启动键盘控制节点

rosrun turtlesim turtle_teleop_key

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第6张图片

我们控制海龟动,另一只海龟就会跟着动。他会抄近道

 

运行view_frames工具

rosrun tf view_frames

这是tf功能包里面给我们提供的工具,可以可视化的看到系统当中的所有tf的关系

他要稍微监听5s的时间,把5s之内所有坐标系之间的关系都给保存下来。然后生成一个pdf

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第7张图片

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第8张图片

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第9张图片

world就是全局坐标系,表示整个海龟仿真器的坐标原点,就是左下角的零点

turtle1和turtle2就分别是位于两只海龟上面的坐标系

 

使用rqt_tf_tree

rosrun rqt_tf_tree rqt_tf_tree

这是一个实时工具,观察在ROS上被发布的坐标系树,可用刷新按钮来更新树的内容。

view_frames工具的区别在于:上一个工具连续采样5s获得的树的内容,并存成一个图片;这个工具可以连续的观察树的内容,使用起来更方便。

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第10张图片

 

命令行工具 tf_echo

rosrun tf tf_echo turtle1 turtle2

直接帮助我们查询两个坐标系之间的位置关系。这里就是查询turtle1和turtle2之间的位置关系

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第11张图片

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第12张图片

可以看到数据包含translation和rotation两部分

 

可视化工具 rviz

是一个三维可视化的显示平台

rviz可以做建图,能visualize点云

rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第13张图片

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第14张图片

add添加一个TF

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第15张图片

 

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第16张图片

网格中间的点就是world,左下角就是turtle1和turtle2

现在用键盘控制乌龟动一下

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第17张图片

ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)_第18张图片

可以看到坐标上的点就跟着不停动

 

 

turtle2和turtle1的位置关系可以通过两者相对于world之间的关系来得到

 

 

你可能感兴趣的:(ROS)