tf之static_transform_publisher

2023-05-16

tf:transform,ROS中管理3D坐标系变换的工具。只要告诉tf两个相关联坐标系的坐标变换信息,tf会帮你一直记录这个两个坐标系的坐标变换,即使两个坐标系处于运动中。

1 tf的命令行用法有以下6种:

view_frames: visualizes the full tree of coordinate transforms. 打印当前tf图形化信息,树状结构。
tf_monitor: monitors transforms between frames. 起监控作用,可以在ROS_CONSOLE中打印出两个坐标系的延迟信息,以及每个坐标系是由哪个节点发布的。
tf_echo: prints specified transform to screen。类似于rostopic echo,打印当前的tf信息
roswtf: with the tfwtf plugin, helps you track down problems with tf.  找错的
static_transform_publisher is a command line tool for sending static transforms. 静态发布一个从父坐标系到子坐标系的一个坐标变换。这个用的非常频繁!

2 static_transform_publisher

接下来主要介绍下static_transform_publisher,因为这个用的最频繁。

2.1 yaw pitch roll


这是Eular的wiki中的原图,以飞机为例。
  • yaw 控制飞机方向,故称为偏航角
  • pitch 控制飞机俯仰角度,故称为俯仰
  • roll 控制飞机横滚,故称为横滚 (中文名称为经验之谈,可能不准确!!!)
这三个词同样可以应用在坐标系中。 
yaw代表这绕z轴旋转的角度,pitch代表绕Y轴的角度,roll代表绕X轴的角度。

2.2 用法解释

wiki.ros.org 中的原文说到:


static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
  • Publish a static coordinate transform to tf using an x/y/z offset in meters and yaw/pitch/roll in radians. (yaw is rotation about Z, pitch is rotation about Y, and roll is rotation about X). The period, in milliseconds, specifies how often to send a transform. 100ms (10hz) is a good value.
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id  period_in_ms
  • Publish a static coordinate transform to tf using an x/y/z offset in meters and quaternion. The period, in milliseconds, specifies how often to send a transform. 100ms (10hz) is a good value.

static_transform_publisher is designed both as a command-line tool for manual use, as well as for use within roslaunch files for setting static transforms. For example:


<launch>
  <node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>


从中可以看出static_transform_publisher有两种发布方式,一种是发布yaw pitch roll,一种是发布四元数。而且用法既可以通过命令行形式敲命令,也可以写进launch文件中启动。

值得一提的是:这个命令是发布静态坐标变换的,只能发布两个静止的坐标系间的坐标变换,而且,它是将坐标变换发布到tf中,剩下的由tf进行操作。

参数解释:

1 前边的x y z分别代表着相应轴的平移,单位是 米 。
2 yaw pitch roll 分别代表着绕三个轴的转动,单位是 弧度 。
  前文介绍过了,可能有人感觉这东西不好记,很容易忘掉哪个对应哪个坐标轴,其实你可以发现,yaw pitch roll 分别对应着 Z,Y,X轴的旋转,也就是把我们总说的XYZ的反过来,只要记住顺序还是不容易弄错的。
3 再之后的frame_id为坐标系变换中的父坐标系, child_frame_id为坐标系变换中的子坐标系。
4 最后一个参数为发布频率,单位为 毫秒。通常取100。

   一毫秒为一秒的千分之一,100毫秒即为0.1秒,也就是10Hz。

3 实例


现有如上坐标变换,想要再加上一个camera_link与kinect_Link的坐标变换,
<node pkg="tf" type="static_transform_publisher" name="camera_base_link"
  args="0 0 0 0 0 0 kinect_Link camera_link 100" />
这是没有加旋转的时候:

可以看到这两个坐标系重合了,所以要加上旋转才行,要把camera_link的方向弄到与base_link一致才行。
<node pkg="tf" type="static_transform_publisher" name="camera_base_link"
  args="0 0 0 1.57079 -1.57079 0 kinect_Link camera_link 100" />


现在方向对了。
yaw这种方式的旋转式有顺序的,具体顺序。。。我忘了。。。

至于四元数方式。。。我不懂,不在这里说了。




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

tf之static_transform_publisher 的相关文章

  • 旋转后获取线的新位置

    我需要在一条线上使用 RotateTransform 方法找到旋转后线的新坐标 例如 在这一行之后 line RenderTransform new RotateTransform 25 0 0 line X1其他三个属性不会改变 我找到了
  • 在node.js Express框架中设置两个不同的静态目录

    是否可以 我想设置两个不同的目录来提供静态文件 假设 public 和 mnt 您还可以通过指定附加 第一个 参数来设置将静态文件提供给 Web 的路径use 像这样 app use public express static dirnam
  • 强制动态链接库中静态变量的预初始化

    C 11 标准第 3 6 2 条 第 4 条规定 具有静态存储持续时间的非局部变量的动态初始化是否在 main 的第一个语句之前完成是由实现定义的 C 标准将静态初始化与动态初始化区分开来 静态初始化仅需要计算编译时常量 我相信急切静态初始
  • C++ 模板静态成员实例化

    include
  • PHP 静态变量用双引号引起来

    如何让 PHP 计算双引号中的静态变量 我想做这样的事情 log self CLASS METHOD entering 我尝试过各种 组合来获取变量值self CLASS 但没有任何效果 我目前已经解决了字符串连接问题 但输入起来很痛苦 l
  • Java - 同步方法导致程序大幅减慢

    我正在尝试了解线程和同步 我做了这个测试程序 public class Test static List
  • 在嵌入式 Jetty 上使用 DefaultServlet 提供静态 html 文件

    我正在开发一个需要独立的项目 因此我决定将 Jetty 嵌入到我的应用程序中 我将提供静态 HTML 页面 一些 JSP 页面 并且还将使用一些自定义 servlet 我找到了一个完美的示例 说明如何设置嵌入式 Jetty 来完成所有这一切
  • 外部类与单例类

    假设我们使用 extern 关键字有一些外部链接 我有 在class1 cpp中 MyClass myClassVar NULL 构造函数初始化上述内容 析构函数删除 然后在class2 cpp和class3 cpp中有 extern My
  • __callStatic():从静态上下文实例化对象?

    我对 PHP 中的 静态 和 动态 函数和对象如何协同工作感到困惑 特别是在 callStatic 方面 callStatic 的工作原理 您可以有一个普通的班级 MyClass 在班级内您可以 放置一个名为 callStatic 的静态函
  • Sails js 路由静态 html

    我想在我的 sails js 应用程序中完全分离客户端和服务器端 如果我删除 路由 它将自动从 assets 文件夹中提供一个名为index html的文件 我想从资产文件夹中提供另一个文件 我该怎么做 如果你看看 sails 使用的中间件
  • 如何在 Eclipse CDT 中查看静态或全局变量?

    我一直试图弄清楚如何在 CDT 的 eclipse 变量窗口中显示静态变量 但不知道如何 CDT 的菜单按钮似乎没有 java gt globals 菜单 如何在 Eclipse CDT 调试器中显示静态 全局变量 Window gt Sh
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 仅在 Windows Chrome 上使用变换比例会导致文本模糊

    我遇到了一个关于 CSS 转换的非常令人沮丧的问题scale 我有一个文本块 我想在悬停时将其缩放 105 但它导致文本模糊 但仅限于 Windows 版本的 Chrome 我发现这个问题 https stackoverflow com q
  • 在 Android 中将应用程序上下文保存到静态变量是否安全?

    我知道在 Android 上使用静态变量是相当危险的 特别是当您将它们引用到活动时 但是 如果我有一个扩展 Application 的类 我们称此类为 App 引用此类的实例是否安全 如果是这样 任何其他类对应用程序上下文进行任何类型的引用
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • C++中全局变量和静态成员变量动态初始化的实现

    我有一些关于执行C 中关于链接和可执行模块加载过程的变量初始化 我主要关心的是全局变量和静态成员变量的动态初始化 其中初始化过程涉及代码的执行 我正在寻找解决 Windows 和 Linux 问题的答案 我已经明白在静态初始化的情况下 编译
  • css 变换,chrome 中的锯齿状边缘

    我一直在使用 CSS3 转换来旋转网站中带有边框的图像和文本框 问题是 Chrome 中的边框看起来呈锯齿状 就像没有抗锯齿的 低分辨率 游戏一样 在 IE Opera 和 FF 中看起来好多了 因为使用了 AA 仍然清晰可见 但也没有那么
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支

随机推荐

  • TIANBOT MINI机器人使用blender进行贴图并导出详细教程

    很多小伙伴在看一些仿真视频中会看到 xff0c 仿真模型栩栩如生 xff0c 但是我们自己导出的模型总是不堪入目 xff0c 哪是因为你还没学会贴图 xff0c 下面我来教大家一步一步怎么学会贴图 首先我们打开blender并设置好简体中文
  • 什么是ROS2GO随身系统?

    随着ROS xff08 Robot Operating System xff09 机器人操作系统的越来越热 xff0c 大家都跃跃欲试 想一睹ROS的风采 xff0c 感受ROS的魅力 但是挡在初学者面前的第一个难题就是如何在Ubuntu系
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(二)

    第二章 配置xacro文件 0 前言 上一节已经将urdf导出来了 xff0c 这一节需要配置一下xacro文件 先看一下导出的功能包在gazebo以及rviz中显示的效果 将功能包放进工作空间进行编译 xff0c source一下环境 x
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(三)

    第三章 让小车动起来 1 配置controller 在tianracer description功能包新建config文件夹时 xff0c 我们可以通过一个yaml文件smart control config yaml来声明我们所需要的co
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(五)

    第四章 用xacro优化URDF并配置gazebo仿真插件 1 前言 上节用简易模型写了一个小车的URDF代码 xff0c 这一节将用xacro对其进行优化 xff0c 这里我并不打算用宏对参数进行封装 xff0c 因为我个人觉得这样看起来
  • 教程 | Jetson Xavier NX 开发板强化学习环境配置流程

    一 基本介绍 NX开发板 全名Jetson Xavier NX xff08 后简称为NX xff09 xff0c 是NVIDIA英伟达提供的模组和开发者套件 xff0c 保持Jetson Nano小巧尺寸的同时拥有相当于Jetson TX2
  • 免费教程·开源 | 从零开始制作ROS无人竞速车RACECAR教程

    一 课程前提 自动驾驶汽车即将成为交通出行的主流工具之一 xff0c 它以计算机 现代汽车产业技术为基础 xff0c 以数字化 智能化为依托实现自动化驾驶 xff0c 学习自动驾驶需要了解架构 环境感知 行为决策 规划路径 xff0c 多传
  • c++ 继承 学习总结3 继承中父类和子类同名非静态成员或者同名静态成员的处理方式

    1 继承中父类和子类有同名非静态成员的处理方式 eg include lt iostream gt using namespace std class Base public Base m A 61 100 void func cout l
  • 2022ROS暑期学校暨人工智能与机器人论坛报名及日程安排

    机器人操作系统 ROS 暑期学校自2015年举办以来 xff0c 被中国机器人业界和学界 xff0c 以及ROS开源基金会誉为除了ROSCon之外规模最大 参与人数最多 最成功的ROS线下活动 过去八年 xff0c 共吸引了全国300多所高
  • MATLAB Simulink开发ROS无人车与机器人应用 详细教程

    引言 xff1a MATLAB在机器人中的应用 现在大多数机器人开发者都会选择ROS xff0c 在ROS整个框架下 调包 极其容易 很多ROS开发者热衷于 调包 来实现功能 xff0c 却难以在机器人学的理论知识上有所突破 MATLAB的
  • DE1-SOC入门之Linux开发环境搭建

    入手DE1 SOC这块FPGA也有两三个月了 xff0c 将友晶提供的入门学习例程 代码等摸索了一下 xff0c 感觉正常的fpga和arm之间的通信 控制已经没多大问题了 可是很多时候 xff0c 事情没有自己想的那么简单 现在接手的项目
  • sensor_msgs/NavSatFix Message

    1 sensor msgs NavSatStatus Message http docs ros org en api sensor msgs html msg NavSatStatus html Navigation Satellite
  • 零基础如何入门激光SLAM

    零基础如何入门激光SLAM 最近有几个人加我 xff0c 都说是刚开始学激光slam xff0c 基本都是研一 xff0c 也有一些大四的 xff08 大四的都开始学SLAM了 xff01 xff09 情况也都差不多 xff0c 有的是课题
  • 从零开始搭二维激光SLAM --- 栅格地图的构建

    上周搬家 导致这篇文章更新的慢了点 之前的文章我们都是通过scan to scan的方式进行位姿变换的计算 接下来的文章将带领大家体验scan to map的计算位姿变换的方式 首先 来简要介绍一下什么是map 1 地图与占用栅格地图 1
  • 从零开始搭二维激光SLAM --- 基于gtsam的后端优化的代码实现

    上一篇文章我们分析了如何使用ceres进行位姿图的优化 这篇文章来讲一下如何使用gtsam进行位姿图的优化 1 gtsam简介 gtsam是最近几年火起来的一个优化库 GTSAM xff08 Georgia Tech Smoothing a
  • 从零开始学定位 --- kaist数据集体验

    1 Kaist数据集简介 选择数据集选择了好几天 xff0c 最终选择了kaist数据集 xff0c 这个数据集中有 轮速计 xff0c imu gps 16线雷达 xff0c 这些传感器满足了我认为多传感器融合定位的需要 简要介绍一下Ka
  • 从零开始学定位 --- 使用kaist数据集进行LIO-SAM建图

    之前的文章只是将数据的雷达在rviz中进行可视化了 xff0c 并没有实际用起来 这篇文章将使用Kaist Urban08 数据使用LIO SAM进行三维点云地图的构建 1 clone 工程 仓库的地址是 https github com
  • 我的2048天创作纪念日

    距离发布第一篇博客竟然已经2048天了 不知不觉都已经这么长时间了啊 xff0c 真是岁月不饶人啊 随想 5年的时间 xff0c 这5年经历了硕士时期 xff0c 经历了毕业之后的第一份工作 xff0c 第二份工作 xff0c 第三份工作
  • 基于粒子滤波的SLAM(GMapping)算法分析

    本文是 Improved Techniques for Grid Mapping with Rao Blackwellized Particle Filters 的大致翻译 xff0c 难免有不通顺与错误的地方 xff0c 如有错误请指出
  • tf之static_transform_publisher

    tf xff1a transform xff0c ROS中管理3D坐标系变换的工具 只要告诉tf两个相关联坐标系的坐标变换信息 xff0c tf会帮你一直记录这个两个坐标系的坐标变换 xff0c 即使两个坐标系处于运动中 1 tf的命令行用