ROS学习-tf介绍

本文涉及的产品
资源编排,不限时长
简介: ROS学习-tf介绍

tf简介

一个机器人系统一个时间段通常有多个3D坐标系在变化,如世界全局坐标系,world frame, base frame, gripper frame(手臂/夹子坐标框架),head frame等。tf包能够一次性的跟踪这些所有的框架,并且允许我们询问类似于下述问题:

  • 在5秒之前,头坐标框架相对于世界坐标框架在哪里?
  • 机器人夹子上的物体相对于基座的位姿。
  • 基座框架在地图框架中现在的位姿是什么?

tf能够在一个分布式系统上工作。这意味着关于机器人的坐标框架的所有信息都能够在任意电脑系统中所有的ROS组件使用。其没有一个转换信息的中央服务器。

一个小例子

下面我们通过一个小例子来对tf进行细致的了解。

首先是安装运行ROS小例子所需要的包,针对作者使用的melodic版本,命令如下:

$ sudo apt-get install ros-melodic-ros-tutorials ros-melodic-geometry-tutorials ros-melodic-rviz ros-melodic-rosbash ros-melodic-rqt-tf-tree

现在我们得到了turtle_tf tutorial 包,开始运行一个demo:

$ roslaunch turtle_tf turtle_tf_demo.launch

这可能提示我们出现了类似于下述的错误:

ImportError: dynamic module does not define module export function (PyInit__)

这主要是因为电脑中安装的Anaconda环境默认使用Python 3 而 ROS中默认使用Python2,导致Python版本不匹配。解决方案可以参考:Anaconda 与 ROS 冲突解决

解决之后,我们执行命令可以看到启动了两个小乌龟,并且其中的一个小乌龟向另外一个小乌龟附近移动:

并且在启动之后,我们可以控制其中的一只小乌龟进行移动,另外一只小乌龟则会跟随移动。

解释

上述过程中展示了一个例子,其使用tf库来创建了三个坐标框架:一个世界坐标框架、一个turtle1框架和一个turtle2框架。此例子中使用一个tf broadcaster来广播turtle的坐标框架,以及一个tf listener来计算两个turtle坐标框架之间的不同,移动一个小乌龟来跟随另一个。

tf 工具

现在,我们使用tf中的工具来查看一下上述例子中是怎么创建tf的,看看tf在幕后做了什么:

使用view_frames

view_frames通过ROS tf 创建了一个框架的流程说明。

执行下述命令:

$ rosrun tf view_frames

我们可以看到下述结果:

Listening to /tf for 5.0 seconds
Done Listening
dot - graphviz version 2.40.1 (20161225.0304)
Detected dot version 2.40
frames.pdf generated

这里,一个tf listener正在接听来自于ROS广播的框架,并且画出了一个树来说明这些框架之间是怎么联系的:

接着执行下述命令进行查看:

$ evince frames.pdf

注:Evince是Ubuntu和GNOME默认的文档阅读工具,它的设计极度简化。

可以看到如下所示的结果:

在这里我们能够看到tf广播了三个坐标框架,world,turtle1,以及turtle2。此外,我们还能够看到world是turtle1和turtle2框架的父亲。出于调试的目的,view_frames还能够报告一些何时接收到最旧或最近框架变换,以及tf框架发布到tf速度的诊断信息。

使用rqt_tf_tree

rqt_tf_tree是ROS广播的一个用于可视化坐标框架树的实时工具。我们可以简单的通过点击对话框左上方的 refresh 按钮来刷新 tf 树

用法如下:

rosrun rqt_tf_tree rqt_tf_tree

或者使用rqt &命令,然后在弹出的窗口的plugin中选取tf tree。

显示结果如下所示:

使用tf_echo

tf_echo报告了ROS任意两个框架广播之间的变换,用法如下:

rosrun tf tf_echo [reference_frame] [target_frame]

回到我们前述的例子中,turtle2坐标框架相对于turtle1坐标框架的变换等价于:turtle1坐标框架到世界坐标的转换 * 世界坐标到turtle2坐标框架的转换。

我们执行下述命令:

$ rosrun tf tf_echo turtle1 turtle2

我们可以看到tf_echo接听到ROS广播的坐标框架之间的变换类似如下述形式:

At time 1637390452.937
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.171, 0.985]
            in RPY (radian) [0.000, 0.000, -0.344]
            in RPY (degree) [0.000, 0.000, -19.687]
At time 1637390453.641
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.171, 0.985]
            in RPY (radian) [0.000, 0.000, -0.344]
            in RPY (degree) [0.000, 0.000, -19.687]
At time 1637390454.633
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.171, 0.985]
            in RPY (radian) [0.000, 0.000, -0.344]
            in RPY (degree) [0.000, 0.000, -19.687]

如果我们继续控制小乌龟移动,能够看到返回值会随着两个小乌龟相对位姿的变化和变化。

rviz 和 tf

rviz是一个测试tf框架的有用的可视化工具。我们可以使用rviz来查看我们的小乌龟坐标框架。通过rviz中的 -d 参数来找到 turtle_tf包下配置的.rviz文件。

如下图所示:

左侧选项卡中可以看到关于通过tf广播坐标框架的一些信息。我们移动小乌龟时坐标框架也会在rviz中进行对应的移动。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
1月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
3月前
|
缓存 数据可视化 机器人
07 ROS的TF坐标管理工具
本文详细介绍了ROS(机器人操作系统)中TF(Transform)坐标管理工具的使用方法,包括如何监听和广播坐标变换消息,使用相关命令行工具查看TF关系,以及如何通过编写节点代码来创建TF广播器和监听器,并展示了如何在launch文件中配置TF相关的节点。
98 0
|
机器人 API
[ROS基础] --- TF坐标转换
[ROS基础] --- TF坐标转换
193 0
|
C++
ROS学习-写一个tf broadcaster(C++)
ROS学习-写一个tf broadcaster(C++)
185 0
ROS学习-写一个tf broadcaster(C++)
|
存储
ROS学习-记录和回放数据
ROS学习-记录和回放数据
440 0
ROS学习-记录和回放数据
|
传感器 数据可视化 机器人
ROS学习-下一步探索方向
ROS学习-下一步探索方向
120 0
ROS学习-roswtf入门
ROS学习-roswtf入门
162 0
|
定位技术
ROS学习-从bag文件中读取messages
ROS学习-从bag文件中读取messages
799 0
|
1月前
|
Ubuntu 机器人 Linux

推荐镜像

更多
下一篇
无影云桌面