[ROS]TF:introduction to tf

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

####前言
本文介绍了 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 中的坐标系也随着运动。

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 39 关注
  • Follow
    4 引用 • 12 回帖 • 4 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖 • 1 关注
  • Sillot

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

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

    主仓库地址:Hi-Windom/Sillot

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

    注意事项:

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

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

    4 引用 • 18 回帖 • 636 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 1 关注
  • abitmean

    有点意思就行了

    35 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 710 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 7 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 369 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 3 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 3 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 5 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 662 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8217 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 85 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 625 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 111 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 818 回帖 • 1 关注
  • SendCloud

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

    2 引用 • 8 回帖 • 507 关注
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 407 关注