ROS探索总结(十八)——重读tf

2023-05-16

        在之前的博客中,有讲解tf的相关内容,本篇博客重新整理了tf的介绍和学习内容,对tf的认识会更加系统。


1 tf简介

1.1 什么是tf

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

        tf的相关设计思想,可以参见:tf设计


1.2 tf可以做什么

        一个机器人系统通常有很多三维的参考系,而且会随着时间的推移发生变化,例如全局参考系(world frame),机器人中心参考系(base frame),机械夹参考系(gripper frame),机器人头参考系(head frame)等等。tf可以以时间为轴,跟踪这些参考系(默认是10秒之内的),并且允许用户提出如下的申请:

  • 五秒钟之前,机器人头参考系相对于全局参考系的关系是什么样的?
  • 机器人夹取的物体相对于机器人中心参考系的位置在哪里?
  • 机器人中心参考系相对于全局参考系的位置在哪里?

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

1.3 tf的使用流程

        想要使用tf功能包,总体来讲可以分为以下两个步骤:

      (1)   监听tf变换

        接收并缓存系统中发布的所有参考系变换,并从中查询所需要的参考系变换。

      (2)   广播tf变换

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

2 tf实例理解

        参见:ROS探索总结(十二)——坐标系统

3 tf基础教程

        参见:ROS探索总结(十二)——坐标系统


4 tf功能包的API说明

  • 数据类型
  • 变换与参考系
  • 发布tf变换广播
  • 接收并使用tf广播
  • 异常

5 命令行工具

        虽然tf是ROS中的一个代码链接库,但是仍然提供了丰富的命令行工具来帮助用户调试和创建tf变换。

5.1 tf_monitor

        tf_monitor工具的功能是打印tf树中的所有参考系信息,通过输入参数来查看指定参考系之间的信息。

        命令格式如下:

  • tf_monitor
  • tf_monitor <source_frame> <target_target>

        示例结果如下图所示:

5.2 tf_echo

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

        命令的格式如下:

  • tf_echo <source_frame> <target_frame>

        示例效果如下图所示:

5.3 static_transform_publisher

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

命令的格式如下:

  • static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
  • static_transform_publisher x y z qx qy qz qw frame_id child_frame_id  period_in_ms

         以上两种命令格式,需要设置坐标的偏移和旋转参数,偏移参数都使用相对于xyz三轴的坐标位移,而旋转参数第一种命令格式使用以弧度为单位的 yaw/pitch/roll三个角度(yaw是围绕x轴旋转的偏航角,pitch是围绕y轴旋转的俯仰角,roll是围绕z轴旋转的翻滚角),而第二种命令格式使用四元数表达旋转角度。发布频率以ms为单位,一般100ms比较合适。

        该命令不仅可以在终端中使用,还可以在launch文件中使用,使用方式如下:
<launch>
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>

5.4 view_frames

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

        命令行的执行方式如下:
$ rosrun tf view_frames
$ evince frames.pdf

5.5 roswtf plugin

        roswtf是ROS中自查的工具,也可以作为组件使用。针对tf,roswtf可以检查tf的配置并发现常见问题。

       命令的使用方式如下:
$ roswtf

6 如何调试tf

        参见:调试tf问题

参考链接

  • tf : http://wiki.ros.org/tf
  • tf设计:http://wiki.ros.org/tf/Design
  • tf教程:http://wiki.ros.org/tf/Tutorials
  • tf: The transform library:http://wiki.ros.org/Papers/TePRA2013_Foote

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS探索总结(十八)——重读tf 的相关文章

  • 【硬核】 ROS Navigation 局部路径规划常见算法

    简介 最近 作者参加了关于RMUS 高校 SimReal挑战赛 首次接触到了机器人导航领域 这里记录一下这段时间的收货 sim2real的全称是simulation to reality 是强化学习的一个分支 同时也属于transfer l
  • ROS系统基本功能的使用详解(基本指令/节点/服务/启动文件/动态参数)

    ROS系统基本功能的使用详解 一 创建工作空间 二 创建与编译ROS功能包 三 ROS的基本命令 3 1 节点 3 2 主题 3 3 服务 3 4 参数服务器 四 节点的创建与运行 4 1 创建源文件 4 2 修改CMakeLists tx
  • ROS中使用VLP16激光雷达获取点云数据

    ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为 Ubuntu20 04 ROS Noetic 需要将激光雷达与PC连接 然后在设置 gt 网络 gt 有线中将IPv4改为手动 并且地址为192 168 1 100
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • ROS诸多调试工具总结1

    ROS有许多调试工具来为ROS调试你的工具 1 rosnode 参数 用法 作用 list rosnode list 查看当前运行了哪些节点 info rosnode info node name 查看该节点发布 接受哪些话题以及服务 ki
  • 1-如何安装ROS

    如何安装ROS 大家好 我是如何 今天尝试在Ubantu下安装ROS Robot Operating System 测试环境 虚拟机VMware Ubantu20 04 准备步骤 添加ROS软件源 sudo sh c echo deb ht
  • 线速度和角速度

    转自 https baike baidu com item E7 BA BF E9 80 9F E5 BA A6 1532652 fr aladdin https baike baidu com item E8 A7 92 E9 80 9F
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • 在Ubuntu 14.04.2 LTS上安装Qt

    Qt是一个跨平台的应用程序框架 广泛用于开发具有GUI界面的应用软件以及命令行工具 几乎所有操作系统都可以使用Qt 如Windows Mac OS X Android等 用于开发Qt应用程序的主要编程语言是C 但是可以使用诸如Python
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • 《学习篇》学会这18个常用ROS命令集合就能入门ROS了

    常用ROS命令概述 ROS常用命令可以按照其使用场景分为ROSshell命令 ROS执行命令 ROS信息命令 ROS catkin命令与ROS功能包命令 虽然很难从一开始就很熟练地使用所有的命令 但是随着使用的次数增多 你会发现常用的几个R
  • (ros/qt报错) FATAL: ROS_MASTER_URI is not defined in the environment

    安装qt之后 明明打开roscore但是qt运行跟ros有关的节点时报错 FATAL 1450943695 306401842 ROS MASTER URI is not defined in the environment Either
  • 《机器人操作系统入门》课程代码示例安装出错解决方法

    问题描述 学习 机器人操作系统入门 课程时 在Ubuntu 16 04 上安装了kinetic 安装ROS Academy for Beginners时依赖总是报错 如下所示 rosdep install from paths src ig
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 在 ROS - Python 中使用来自多个主题的数据

    我能够显示来自两个主题的数据 但无法在 ROS 中实时使用和计算这两个主题的数据 用 Python 代码编写 您有想法存储这些数据并实时计算吗 谢谢 usr bin env python import rospy import string
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic
  • 如何使用 PyQT5 连接和分离外部应用程序或对接外部应用程序?

    我正在使用 ROS 为多机器人系统开发 GUI 但我对界面中最不想做的事情感到困惑 在我的应用程序中嵌入 RVIZ GMAPPING 或其他屏幕 我已经在界面中放置了一个终端 但我无法解决如何向我的应用程序添加外部应用程序窗口的问题 我知道
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件

随机推荐

  • 手把手教你使用CMake自动编译中CMakeLists.txt 怎么写

    背景 CMake 一直都是用别人的开源项目来编译 Makefile都是自己写 最近看zlm源码 里面用的CMake编译 比较简洁易懂 所以有尝试给现有项目也写个CMakeList txt来使用cmake自动编译 跟它耍耍 基础语法介绍 主要
  • 巧用snprintf动态打印任意长度的buf

    Q xff1a 调试程序的时候 xff0c 经常需要对传入的连续地址空间或数组进行打印 xff0c 常规做法是起一个for循环 xff0c 在每次循环中调用printf依次打印每个数组下标的值 就像这样 xff1a char Buf 99
  • 仿滴滴抢单倒计时的Demo

    滴滴里面有一个下单完成之后等待界面的倒计时转圈的视图 就是这个 原理 xff1a 通过CAShapeLayer层添加到自己自定义的视图layer上 设置ShapeLayer的path 他的路劲绘制一般通过UIBezierPath配合设置 通
  • 电机PID控制补充篇-野火上位机串口协议介绍

    0 引言 之前介绍的电机PID控制的系列文章 电机控制与PID实践 得到不少电子爱好者的关注 xff0c 不过也收到一些关于串口通信的疑问反馈 之前的一系列文章 xff0c 确实没有着重介绍串口软件的使用细节以及通信协议的具体格式 本篇就来
  • 【Ubuntu】修改ubuntu和windows双系统启动顺序

    目录 一 问题描述二 背景知识1 GRUB是什么2 GRUB配置文件3 96 etc default grub 96 主配置文件 二 问题分析三 解决方案1 修改grub主配置文件2 更新grub配置文件 一 问题描述 Ubuntu 43
  • STM32状态机编程实例——全自动洗衣机(上)

    前面几篇文章 xff0c 以按键功能 xff0c 介绍了状态机的原理与按键状态机实例 xff0c 实现按键单击 双击 长按等状态的检测 本篇 xff0c 继续使用状态机编程 xff0c 来实现一个更有趣的功能 全自动洗衣机 1 全自动洗衣机
  • Keil的stm32工程中一些文件的作用

    stm32工程中有一堆文件如下 xff1a 一直没搞明白他们的作用 xff0c 现整理如下 xff1a 从start文件夹开始 xff0c 第一个文件startup stm32f10x md s 这是启动文件 xff0c 是用汇编语言编写的
  • FreeRTOS消息队列、信号量、事件组、任务通知之间的总结

    转载自 xff1a FreeRTOS消息队列 信号量 事件标志组 任务通知 丨匿名用户丨的博客 CSDN博客 功能及区别列表 消息队列 xff08 需要传递消息时使用 xff09 在任务与任务间 中断和任务间传递信息 xff0c 可以数据传
  • FreeRTOS小项目实战------基于FreeRTOS和stm32的门禁系统

    目录 收获 系统总体框架 程序框架 具体程序实现 工程文件网盘链接 收获 学习freertos的移植与裁剪 xff0c 对任务间通信的认识更加深刻 xff0c 加深了实时操作系统的理解 xff0c 学习了as608指纹模块 xff0c rc
  • 自制操作系统12:移动鼠标 - 中断机制探秘,捕获键盘中断

    参考 xff1a https www bilibili com video BV1VJ41157wq p 61 12 amp spm id from 61 pageDriver https blog csdn net tyler downl
  • 全日制和非全日制的含金量是哪个高啊?

    我们不该拿成人学历去和普通全日制的学历去比较 xff0c 去纠结成人学历的含金量高与低 成人在职人士只是需要学历作为人生进步的敲门砖 不是每个人都有魄力和时间去重新参加全日制高考 xff0c 读完三 四年的全日制学历再去工作
  • c/c++笔试

    1 xff0e 进程和线程的差别 线程是指进程内的一个执行单元 也是进程内的可调度实体 与进程的区别 1 调度 xff1a 线程作为调度和分配的基本单位 xff0c 进程作为拥有资源的基本单位 2 并发性 xff1a 不仅进程之间可以并发执
  • Linux摄像头驱动1——vivid

    CSDN仅用于增加百度收录权重 xff0c 排版未优化 xff0c 日常不维护 请访问 xff1a www hceng cn 查看 评论 本博文对应地址 https hceng cn 2018 03 08 Linux摄像头驱动1 vivid
  • webrtc 百亿流媒体服务器开发(1)-服务器编程基础

    webrtc 百亿流媒体服务器开发 xff08 1 xff09 网络编程基础 xff08 1 xff09 文章目录 如何开发以一个简单服务器 信号什么是信号信号的处理方式都有哪些信号 几个重要的信号发送信号signal xff08 xff0
  • 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式

    不知道怎么开发VR游戏 xff1f Unity5 3官方VR教程重磅登场 系列3 VR中的交互方式 王寒 4 个月前 https zhuanlan zhihu com p 20505470 概览 xff1a 在VR项目中 xff0c 我们需
  • md5.pro.js前端MD5加密插件

    下载地址 例如我们对abc进行md5加密 xff0c 则只需要调用hex md5 34 md5 34 xff0c 方法则会返回加密后的字符串900150983cd24fb0d6963f7d28e17f72 dd
  • 【项目经验】Jetson xavier nx开发板-从裸机到深度学习环境配置

    Jetson xavier nx 开发板 一 镜像安装 参考博文Jetson Xavier NX 烧写系统镜像 1 镜像下载 到英伟达官方下载地址https developer nvidia com zh cn embedded downl
  • ROS探索总结(十五)——amcl(导航与定位)

    在理解了move base的基础上 xff0c 我们开始机器人的定位与导航 gmaping包是用来生成地图的 xff0c 需要使用实际的机器人获取激光或者深度数据 xff0c 所以我们先在已有的地图上进行导航与定位的仿真 amcl是移动机器
  • 关于ROS学习的一些反思

    距离发布上一篇ROS的博客已经过去两年了 xff0c 才发现原来自己已经这么久可没有写过关于ROS的文章 xff0c 想来很是惭愧 这两年时间 xff0c 自己怀着程序员的梦想 xff0c 研究过RTOS xff0c 探索过Linux xf
  • ROS探索总结(十八)——重读tf

    在之前的博客中 xff0c 有讲解tf的相关内容 xff0c 本篇博客重新整理了tf的介绍和学习内容 xff0c 对tf的认识会更加系统 1 tf简介 1 1 什么是tf tf是一个让用户随时间跟踪多个参考系的功能包 xff0c 它使用一种