[ROS]TF:introduction to tf

本贴最后更新于 3259 天前,其中的信息可能已经天翻地覆

####前言
本文介绍了 tf 的功能,并使用 turtlesim 示例了多个机器人例子展示 tf 的能力。同时,本文也介绍了 tf_echo,view_frames,rqt_tf_tree 和 rviz。

####1.建立 Demo
本教程使用到的节点的 ubuntu 版本已经发布,只需要运行:

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

####2.运行 Demo

运行:

roslaunch turtle_tf turtle_tf_demo.launch

即可打开程序界面,如下:

如果运行的途中出现程序停止的问题,参考:http://answers.ros.org/question/45251/turtle_pointer-6-process-has-died-when-running-tf-tutorial/

一旦 turtlesim 窗口打开之后,可是点击方向按键让小乌龟到处移动,点击按键的时候注意选择 turtlesim 窗口,可以看到如下界面:

可以看到,在点击方向键让小乌龟到处移动的同时,另一只小乌龟会连续的跟着它移动。

####3.发生了什么

上述 demo 使用 tf 库创建了 3 个坐标系:世界系,乌龟 1 系,乌龟 2 系。本教程使用 tf broadcaster 来发布乌龟坐标系,使用 tf listener 计算乌龟坐标系的不同,然后驱动一只乌龟跟随另一只移动。

####4.tf 工具
接下来看看上述 demo 如何使用 tf。我们可以通过 tf 工具查看 tf 在后台做了什么。

#####4.1 使用 view_frames

view_frames 创建 tf 通过 ROS 广播的各系的图表关系。执行:

rosrun tf view_frames

可以看到:

Listening to /tf for 5.000000 seconds Done Listening dot - graphviz version 2.36.0 (20140111.2315) Detected dot version 2.36 frames.pdf generated

上述命令执行的 tf listener 监听通过 ROS 广播的各个系,并绘制各个系之间连接的树。如果要查看输出的树,运行:

evince frames.pdf

可以看到:

这里我们可以看到 tf 广播了 3 个系:world,turtle1,turtle2,并且 world 是 turtle1 和 turtle2 的父节点。为了调试,view_frames 也会上报一些诊断性的信息:关于什么时候接收到最早的和最近的体系转换和发布给 tf 的 tf frame 速度。

#####4.2 使用 rqt_tf_tree

rqt_tf_tree 是一个用于通过 ROS 广播的坐标系的树的可视化的运行时工具。你可以简单的通过左上角的刷新按钮来刷新。
用法:

rosrun rqt_tf_tree rqt_tf_tree

或者简单的

rqt &

然后选择 Plugins 标签页的 rqt_tf_tree。

#####4.3 使用 tf_echo
tf_echo 上报的是通过 ROS 广播的任意两个坐标系之间的转换。
用法:

rosrun tf tf_echo [reference_frame] [target_frame]

让我们来看看 turtle2 和 turtle1 坐标系之间的转换等同于:

执行:

rosrun tf tf_echo turtle1 turtle2

可以看到 tf_echo 监听器显示了通过 ROS 广播的坐标系的转换的过程。

At time 1416409795.450 - Translation: [0.000, 0.000, 0.000] - Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405] in RPY [0.000, -0.000, 2.308] At time 1416409796.441 - Translation: [0.000, 0.000, 0.000] - Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405] in RPY [0.000, -0.000, 2.308] At time 1416409797.450 - Translation: [0.000, 0.000, 0.000] - Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405] in RPY [0.000, -0.000, 2.308] At time 1416409798.441 - Translation: [0.000, 0.000, 0.000] - Rotation: in Quaternion [0.000, 0.000, 0.914, 0.405] in RPY [0.000, -0.000, 2.308] At time 1416409799.433 - Translation: [0.000, 0.000, 0.000] - Rotation: in Quaternion [0.000, 0.000, 0.691, 0.723] in RPY [0.000, -0.000, 1.526]

####5.rviz 和 tf

rviz 是一个非常有效的用户检查 tf 坐标系的可视化工具。接下来将从 rviz 中查看小乌龟的坐标系。运行:

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

从 rviz 中可以看到 tf 广播的各个坐标系。当驱动小乌龟运动的时候,可以看到 rviz 中的坐标系也随着运动。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 643 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    442 引用 • 1238 回帖 • 597 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 509 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 143 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 744 关注
  • 创业

    你比 99% 的人都优秀么?

    81 引用 • 1395 回帖 • 1 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 2 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    53 引用 • 190 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 673 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • 叶归
    14 引用 • 62 回帖 • 24 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 666 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 17 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    229 引用 • 476 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 10 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 109 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 33 关注
  • OpenCV
    15 引用 • 36 回帖 • 1 关注
  • RemNote
    2 引用 • 16 回帖 • 27 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖 • 1 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    10 引用 • 15 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 27 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 13 关注