tf static_transform_publisher

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" />

原文地址:https://www.cnblogs.com/dayspring/p/12546980.html

时间: 2024-11-10 12:07:05

tf static_transform_publisher的相关文章

安装arbotix simulator仿真环境()

先安装rbx1功能包: cd ~/catkin_ws/src git clone https://github.com/pirobot/rbx1.git cd rbx1 git checkout indigo-devel cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash rospack profile 安装模拟器: sudo apt-get install ros-indigo-arbotix-* 删除早期版本的arbo

(ros/navigation/gmapping)导航/建地图

概述 http://wiki.ros.org/gmapping Gmapping包包含OpenSlam的Gmapping的一个ROS封装.Gmapping 的ROS节点slam_gmapping提供基于激光的SLAM(同时定位和创建地图).依靠移动机器人收集的激光和位姿数据,使用slam_gmapping可以创建2维栅格地图. 外部文档 主要是一个第三方包. 硬件需求 使用slam_gmapping,需要移动机器人提供里程计数据,并且水平安装固定激光测距仪.slam_gmapping节点试图转换

ROS中利用V-rep进行地图构建仿真

V-rep中显示激光扫描点  在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→components→sensors中找到SICK TiM310 Fast激光雷达,拖入场景中: 打开脚本参数修改器,可以修改雷达扫描范围(默认为270°),是否显示雷达扫描线(true),以及最大探测距离(默认为4m)这三个参数.地图大小为5m×5m,我们将雷达最大探测距离改为2m 将激光雷达放到地图中任

ROS Tranform出错简易处理 tf出错现象及解析

有时候由于urdf以及代码中有些遗漏,可能导致TF出现问题,此文只作为阐明TF重要性的示例,不是解决方案! 请注意此方法不保证正确和唯一,解决方案多样,欢迎留言补充,这里抛砖引玉- 以下面为例: 启动地图构建程序,但是没有出现地图,rviz现象为: 这里有两个警告和两个错误: 使用下面命令查看TF tree: $ rosrun rqt_tf_tree rqt_tf_tree /odom和/base_footprint断开了! 这里有一点需要重点说明,tf中的odom和topic的odom虽然名称

TensorFlow之tf.unstack学习循环神经网络中用到!

unstack( value, num=None, axis=0, name='unstack' ) tf.unstack() 将给定的R维张量拆分成R-1维张量 将value根据axis分解成num个张量,返回的值是list类型,如果没有指定num则根据axis推断出! DEMO: import tensorflow as tf a = tf.constant([3,2,4,5,6]) b = tf.constant([1,6,7,8,0]) c = tf.stack([a,b],axis=0

TF Boys (TensorFlow Boys ) 养成记(五)

郑重声明:此文为本人原创,转载请注明出处:http://www.cnblogs.com/Charles-Wan/p/6207039.html 有了数据,有了网络结构,下面我们就来写 cifar10 的代码. 首先处理输入,在 /home/your_name/TensorFlow/cifar10/ 下建立 cifar10_input.py,输入如下代码: from __future__ import absolute_import # 绝对导入 from __future__ import div

ROS TF——learning tf

在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换. 相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一.tf简介 我们通过一个小小的实例来介绍tf的作用. 1.安装turtle包 $ rosdep install turtle_tf rviz $ rosmake turtle_tf rviz 2.运行demo 运行简单的demo: $ roslaunch turtle_tf turtle_tf_demo.lau

TF.Learn

TF.Learn 手写文字识别 转载请注明作者:梦里风林Google Machine Learning Recipes 7官方中文博客 - 视频地址Github工程地址 https://github.com/ahangchen/GoogleML欢迎Star,也欢迎到Issue区讨论 mnist问题 计算机视觉领域的Hello world 给定55000个图片,处理成28*28的二维矩阵,矩阵中每个值表示一个像素点的灰度,作为feature 给定每张图片对应的字符,作为label,总共有10个la

tf–idf算法解释及其python代码实现(下)

tf–idf算法python代码实现 这是我写的一个tf-idf的核心部分的代码,没有完整实现,当然剩下的事情就非常简单了,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四句话,每句表示一个文档 copus=['我正在学习计算机','它正在吃饭','我的书还在你那儿','今天不上班'] 由于中文需要分词,jieba分词是python里面比较好用的分词工具,所以选用jieba分词,文末是jieba的链接.首先对文档进行分词: i