ROS学习笔记8~TF坐标变换1

文章目录

  • 一、TF功能包
    • 1、TF功能包简介
    • 2、TF功能包使用步骤:
      • (1) 监听TF变换
      • (2) 广播TF变换
    • 3、TF工具
      • (1) tf_monitor
      • (2) tf_echo
      • (3) static_transform_publisher
      • (4) view_frames
  • 二、乌龟例程中的TF

一、TF功能包

1、TF功能包简介

坐标变换是机器人系统中常用的基础功能,ROS中的坐标变换系统由TF功能包维护。

TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间、在坐标系间完成点、向量等坐标的变换。

TF可以在分布式系统中操作。也就是说,一个机器人系统中所有的坐标变换关系,对于所有的节点组件都是可用的,所有订阅TF消息的节点都会缓冲一份所有坐标系的变换关系数据,所以这种结构不需要中心服务器来存储任何数据。

2、TF功能包使用步骤:

(1) 监听TF变换

接收并缓存系统中发布的所有坐标变换数据,并从中查询所需要的坐标变换关系。

(2) 广播TF变换

向系统中广播坐标系之间的坐标变换关系。系统中可能会存在多个不同部分的TF变换广播,每个广播都可以直接将坐标变换关系插入TF树中,不需要再进行同步。

3、TF工具

(1) tf_monitor

tf_monitor工具的功能是打印TF树中所有坐标系的发布状态,也可以通过输入参数来查看指定坐标系之间的发布状态。

(2) tf_echo

tf_echo工具的功能是查看指定坐标系之间的变换关系。

(3) static_transform_publisher

static_transform_publisher工具的工能是发布两个坐标系之间的静态坐标变换,这两个坐标系不发生相对位置变化。

(4) view_frames

view_frames是可视化的调试工具,可以生成pdf文件,显示整颗TF树的信息。

二、乌龟例程中的TF

在乌龟仿真其中安装功能包 turtle_tf :

$ sudo apt-get install ros-kinetic-turtle-tf

安装完成后使用如下命令运行例程:

$  roslaunch turtle_tf turtle_tf_demo.launch

乌龟仿真器打开后会出现两只小乌龟,并且下方下方的小乌龟会自动向中心位置的的小乌龟移动,如下图:
ROS学习笔记8~TF坐标变换1_第1张图片
打开键盘控制节点,控制中心位置的小乌龟运行:

$  rosrun turtlesim turtle_teleop_key   

另外一只乌龟总会跟着我们控制的那只乌龟运行,如下图:

ROS学习笔记8~TF坐标变换1_第2张图片
使用TF工具查看一下这个例程中的TF树:

$ rosrun tf view_frames

得到结果如下图所示:
ROS学习笔记8~TF坐标变换1_第3张图片如上图所示:在当前系统中存在三个坐标系:world、 turte1、turtle2 。
world 是世界坐标系,作为系统的基础坐标系,其他坐标系都相对该坐标系建立,所以world 是TF树的根节点 。相对于world 世界坐标系,又分别针对两只乌龟建立了两个乌龟坐标系,这两个坐标系的原点就是乌龟在世界坐标系下的坐标位置。
要让 turtle2 跟随 turte1 运动,等价于 turtle2 坐标系需要向 turtle1 坐标系移动,就需要知道两个坐标系之间的坐标变换。
使用 tf_echo 工具在TF树中查找乌龟坐标系之间的变换关系:

$ rosrun tf tf_echo turtle1 turtle2

乌龟坐标系之间的变换关系如下图所示:
ROS学习笔记8~TF坐标变换1_第4张图片
也可以通过rviz 的图形界面更加形象地看到这三者之间的左边关系:

$  rosrun rviz rviz -d 'rospack find turtle_tf'/rviz/turtle_rviz.rviz

得到 turtle2 与 turte1 之间的坐标变换后,就可以计算两只小乌龟的角度和距离,即可控制 turtle2 向 turte1 移动了。

你可能感兴趣的:(ROS,坐标系统,TF,ROS)