ROS专题----tf和tf2坐标变换
----
如果您尚未创建用于完成教程的工作区, 请单击此处查看一些简要说明 。
这是对转换数据类型的语法更改的快速说明。
这是一个将tf TransformListener类转换为tf2监听器类的指南
这是一个将tf TransformBroadcaster类转换为tf2 Broadcaster类的指南
本教程将给你一个好主意tf2可以为你做什么。它显示了使用turtlesim的多机器人示例中的一些tf2功率。这也引入使用tf2_echo,view_frames和rviz。
C ++ |
蟒蛇 |
|
|
本教程提供了一个系统的方法来调试tf2相关的问题。
本教程描述如何使用tf2_ros :: MessageFilter处理Stamped数据类型。
本教程提供了设置您的机器人开始使用tf的指南。
このチュートリアルではtfを使ってロボットをセットアップする方法を学びます。
本教程提供了设置您的机器人开始使用tf的指南。
本教程解释了如何使用机器人状态发布器将机器人的状态发布到tf。
策tutoriel explique评论VOUS pouvez publier L'政变德VOTRE机器人TF,连接utilisant乐“机器人状态出版商”。
このチュートリアルでは机器人状态出版商を使うことで,どのようにしてロボットの状态をTFに发布できるのかを学びます。
----
你想看看什么tf可以做,而不是只是阅读它吗?查看tf2介绍演示。
机器人系统通常具有随时间改变的许多3D 坐标系,例如世界框架,基础框架,夹具框架,头框架等.tf2随着时间跟踪所有这些框架,并且允许你提出诸如以下问题:
tf2可以在分布式系统中操作。这意味着有关机器人坐标系的所有信息可用于系统中任何计算机上的所有ROS组件。Tf2可以使用包含所有变换信息的中央服务器运行,或者您可以让分布式系统中的每个组件构建自己的变换信息数据库。
有关设计的更多信息,请参阅设计
我们创立了一套教程来指导您使用TF2,一步一步来。你可以开始介绍tf2教程。有关所有tf2和tf2相关教程的完整列表,请查看教程页面。
基本上有两个任务,任何用户将使用tf2,监听变换和广播变换。
任何使用tf2的人都需要监听转换:
侦听变换 - 接收和缓冲在系统中广播的所有坐标帧,并查询帧之间的特定变换。检查写一个tf2监听教程(Python) (C ++)。
要扩展机器人的功能,您需要开始广播变换。
广播变换 - 将坐标帧的相对姿态发送到系统的其余部分。系统可以具有许多广播器,每个广播器提供关于机器人的不同部分的信息。查看写一个tf2广播机构教程(Python) (C ++)。
一旦你完成了基本的教程,你可以继续学习tf2和时间。tf2和时间教程(Python) (C ++)教导tf2和时间的基本原理。关于tf2和时间(Python) (C ++)的高级教程教导了使用tf2的时间旅行的原理。
如果您正在寻找一个简单的工具来手动调整tf变换,例如快速逐眼调整,请尝试手动TF校准工具
在设计页面描述的TF2库的高层设计。
tf2是形成tf的第二代的一组包的核心。有三种类型的软件包。
tf2实现模板化数据类型支持。这允许核心包具有最小的依赖性,并且存在添加对转换到和来自不同数据类型以及转换这些数据类型的支持的包。 请参阅tf2转换概述,以及本教程了解如何在不同的数据类型中使用tf2。tf2有一个内部数据类型,它基于项目符号的LinearMath库。但是,建议使用一个完全支持的数学数据类型,以最好地支持您的应用程序。 tf2转换方法也支持在多个不同数据类型之间转换和转换。
在它的核心tf2依赖于标记的数据类型,可以方便地与具有消息#报头的 ROS消息相关联。
这些包提供了允许tf2本地与任何外部库的数据类型一起工作的方法。大多数都是C ++或Python特定的。
tf2_bullet tf2方法在c ++中本机使用项目符号数据类型
tf2_eigen tf2方法在C ++中原生地使用Eigen数据类型。
tf2_geometry_msgs tf2方法在C ++或Python中本机使用geometry_msgs数据类型。
tf2_kdl TF2方法一起工作KDL本地C ++或Python的数据类型。
tf2_sensor_msgs tf2方法在C ++或Python本地使用sensor_msgs数据类型。
使用tf2的一个重要部分是使用坐标框架的标准约定。
使用坐标框架的约定有几个来源。
REP 103中涵盖单位,方向惯例,手性,旋转表示和协方差表示
REP 105中介绍了移动基准坐标系的标准名称
类人机器人的标准坐标框架在REP 120中
有关使用的一些数学术语的定义,请参见/术语页。
ROS中的坐标帧由字符串frame_id标识,格式为小写字母下划线分隔。此字符串在系统中必须是唯一的。所有生成的数据可以简单地识别它的frame_id,以说明它在世界上的位置。
否tf_prefix: 在以前的版本中有一个tf_prefix的概念,它将使用/ separator 作为框架名称的前缀。用于表示它已经被加前缀的前导斜杠。 为了向后兼容,tf2将剥离任何前导/字符。
无重新映射:
tf frame_ids的概念与ROS名称没有相同的作用域。特别地,命名空间计算图的特定子部分不改变tf树表示的物理布局。因为这个frame_id不遵循命名空间重新映射规则。通常支持ROS参数以允许改变算法中使用的frame_id。
多个机器人:
对于具有多个机器人的用例,通常建议在机器人之间使用多个主机和转发特定的tf信息。 在主机之间实现桥接有几种不同的方法。 有关更多信息,请参阅sig / Multimaster。
tf2 tf2包是一个ROS独立实现的核心功能。如果复制了消息数据类型,则可以在ROS之外使用。
tf2_tools提供了许多工具来在ROS中使用tf2
这些包为使用tf2的开发人员提供了主要接口。
tf2_ros为tf2提供roscpp绑定,包括BufferListener,BufferBroadcaster,BufferServer和BufferClient的类
tf2_ros还为tf2提供rospy绑定,包括BufferListener BufferBroadcaster和BufferClient的类
有关从tf迁移的更多信息,请参阅迁移指南
----
如果您尚未创建用于完成教程的工作区, 请单击此处查看一些简要说明 。
tf简介
C ++ |
蟒蛇 |
|
|
现在您已经完成这些教程,请花时间完成这个简短的问卷。
本教程提供了一个系统的方法来调试tf相关的问题。
本教程描述如何使用tf :: MessageFIlter来处理Stamped数据类型。
本教程提供了设置您的机器人开始使用tf的指南。
本教程解释了如何使用机器人状态发布器将机器人的状态发布到tf。
本教程给出了使用URDF的机器人模型的完整示例,其中使用robot_state_publisher。首先,我们创建具有所有必要部分的URDF模型。然后我们写一个节点,发布JointState和transforms。最后,我们一起运行所有的部分。
----
你想看看什么tf可以做,而不是只是阅读它吗?查看tf介绍演示。
机器人系统通常具有随时间改变的许多3D 坐标系,例如世界框架,基础框架,夹具框架,头框架等。tf随着时间跟踪所有这些框架,并且允许你提出诸如以下问题:
tf可以在分布式系统中操作。这意味着有关机器人坐标系的所有信息可用于系统中任何计算机上的所有ROS组件。有没有中央服务器转换信息的。
有关设计的更多信息,请参阅/设计
在TePRA 2013 论文/ TePRA2013_Foote上有一篇关于tf的论文
我们创建了一组教程,逐步引导您使用tf。你可以开始介绍tf教程。有关所有tf和tf相关教程的完整列表,请查看教程页面。
基本上有两个任务,任何用户将使用tf,监听变换和广播变换。
任何使用tf的人都需要监听转换:
侦听变换 - 接收和缓冲在系统中广播的所有坐标帧,并查询帧之间的特定变换。查看写一个tf监听教程(Python) (C ++)。
要扩展机器人的功能,您需要开始广播变换。
广播变换 - 将坐标帧的相对姿态发送到系统的其余部分。系统可以具有许多广播器,每个广播器提供关于机器人的不同部分的信息。查看写一个tf广播机构教程(Python) (C ++)。
完成基本教程后,您可以继续学习tf和时间。tf和时间教程(Python) (C ++)教导tf和时间的基本原理。关于tf和时间(Python) (C ++)的高级教程教导了时间旅行与tf的原则。
tf API概述:
数据类型
转换和帧
广播变换
使用发布的变换
例外
经常问的问题
旋转方法
坐标框架约定
虽然tf主要是一个意图在ROS 节点中使用的代码库,但它附带了一组大量的命令行工具,它们有助于调试和创建tf坐标系。这些工具包括:
view_frames:显示坐标变换的完整树。
tf_monitor:监视帧之间的变换。
tf_echo:打印指定的变换到屏幕
roswtf:与tfwtf插件,帮助你跟踪tf的问题。
static_transform_publisher是用于发送静态变换的命令行工具。
您还可以使用tf_remap节点,它是重新映射坐标变换的实用程序节点。
tf_monitor
$ rosrun tf tf_monitor 结果:对于所有帧 框架: 框架:/ base_footprint发布者/ robot_pose_ekf平均延迟:0.0469324最大延迟:0.0501503 Frame:/ base_laser_link发布者/ robot_state_publisher平均延迟:0.00891066最大延迟:0.009591 Frame:/ base_link / by / robot_state_publisher发布时间平均延迟:0.00891147最大延迟:0.009592 0.00891431最大延迟:0.009595 ...为了简洁... 广播公司: 节点:/ realtime_loop 94.7371 Hz,平均延迟:0.000599916最大延迟:0.001337 节点:/ robot_pose_ekf 30.8259 Hz,平均延迟:0.0469324最大延迟:0.0501503 节点:/ robot_state_publisher 25.8099 Hz,平均延迟:0.0089224最大延迟:0.00960276
tf_monitor
监视特定的转换。例如,要监视从/ base_footprint到/ odom的转换:
$ rosrun tf tf_monitor / base_footprint / odom 结果:for / base_footprint到/ odom 链当前是:/ base_footprint - > / odom 净延迟avg = 0.00371811:max = 0.012472 框架: 框架:/ base_footprint发布者/ robot_pose_ekf平均延迟:0.0465218最大延迟:0.051754 帧:/ odom发布者/ realtime_loop平均延迟:0.00062444最大延迟:0.001553 广播公司: 节点:/ realtime_loop 95.3222 Hz,平均延迟:0.00062444最大延迟:0.001553 节点:/ robot_pose_ekf 30.9654 Hz,平均延迟:0.0465218最大延迟:0.051754 节点:/ robot_state_publisher 25.9839 Hz,平均延迟:0.00903061最大延迟:0.00939562
tf_echo
打印有关source_frame和target_frame之间的特定转换的信息。例如,要回显/ map和/ odom之间的转换:
$ rosrun tf tf_echo / map / odom 时间1263248513.809 - 翻译:[2.398,6.783,0.000] - 旋转:四元数[0.000,0.000,-0.707,0.707] 在RPY [0.000,-0.000,-1.570]
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
static_transform_publisher被设计为用于手动使用的命令行工具,以及在roslaunch文件中用于设置静态变换。例如:
12 3 launch>
view_frames是一个图形调试工具,用于创建当前变换树的PDF图形。
$ rosrun tf view_frames
您可能希望在完成后查看图表,因此Ubuntu系统上的典型用法是:
$ rosrun tf view_frames $ evince frames.pdf
因此,在.bashrc中添加一个有用的快捷方式是:
alias tf ='cd / var / tmp && rosrun tf view_frames && evince frames.pdf&'
注:参见rqt_tf_tree允许帧的动态自省。
roswtf tf附带一个roswtf的插件,当你运行roswtf时自动运行。这个插件将分析您当前的tf配置,并尝试找到常见的问题。要运行,只需调用roswtf:
$ roswtf
#Keywords转换,变换,坐标变换
----
----