ROS专题----tf和tf2坐标变换
ROS专题----tf和tf2坐标变换
----
从tf1迁移到tf2
- 转换数据类型
这是对转换数据类型的语法更改的快速说明。
- 将TransformListener从tf迁移到tf2
这是一个将tf TransformListener类转换为tf2监听器类的指南
- 将TransformBroadcaster从tf迁移到tf2
这是一个将tf TransformBroadcaster类转换为tf2 Broadcaster类的指南
学习tf2
- tf2简介
本教程将给你一个好主意tf2可以为你做什么。它显示了使用turtlesim的多机器人示例中的一些tf2功率。这也引入使用tf2_echo,view_frames和rviz。
C ++ |
蟒蛇 |
|
|
调试tf2
- 调试tf2问题
本教程提供了一个系统的方法来调试tf2相关的问题。
使用带有tf2的传感器消息
- 使用带有tf2_ros :: MessageFilter的标记数据类型
本教程描述如何使用tf2_ros :: MessageFilter处理Stamped数据类型。
用tf2设置你的机器人
- 使用tf设置您的机器人
本教程提供了设置您的机器人开始使用tf的指南。
- tfを用いたロボットのセットアップ
このチュートリアルではtfを使ってロボットをセットアップする方法を学びます。
- 为你的机器人配置tf
本教程提供了设置您的机器人开始使用tf的指南。
- 在自己的机器人上使用机器人状态发布器
本教程解释了如何使用机器人状态发布器将机器人的状态发布到tf。
- Utiliser le“机器人国家出版商”倾倒votre propre机器人
策tutoriel explique评论VOUS pouvez publier L'政变德VOTRE机器人TF,连接utilisant乐“机器人状态出版商”。
- 在自己的机器人上使用机器人状态发布器
このチュートリアルでは机器人状态出版商を使うことで,どのようにしてロボットの状态をTFに发布できるのかを学びます。
----
tf2做什么?为什么要使用tf2?
你想看看什么tf可以做,而不是只是阅读它吗?查看tf2介绍演示。
机器人系统通常具有随时间改变的许多3D 坐标系,例如世界框架,基础框架,夹具框架,头框架等.tf2随着时间跟踪所有这些框架,并且允许你提出诸如以下问题:
- 5秒钟前头框相对于世界框架在哪里?
- 对象在我的夹子上相对于我的基地的姿势是什么?
- 基础框架在地图框架中的当前姿势是什么?
tf2可以在分布式系统中操作。这意味着有关机器人坐标系的所有信息可用于系统中任何计算机上的所有ROS组件。Tf2可以使用包含所有变换信息的中央服务器运行,或者您可以让分布式系统中的每个组件构建自己的变换信息数据库。
有关设计的更多信息,请参阅设计
教程
我们创立了一套教程来指导您使用TF2,一步一步来。你可以开始介绍tf2教程。有关所有tf2和tf2相关教程的完整列表,请查看教程页面。
基本上有两个任务,任何用户将使用tf2,监听变换和广播变换。
任何使用tf2的人都需要监听转换:
要扩展机器人的功能,您需要开始广播变换。
一旦你完成了基本的教程,你可以继续学习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_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。
工具
ROS绑定
tf2_ros为tf2提供roscpp绑定,包括BufferListener,BufferBroadcaster,BufferServer和BufferClient的类
tf2_ros还为tf2提供rospy绑定,包括BufferListener BufferBroadcaster和BufferClient的类
从tf迁移
----
学习tf
C ++ |
蟒蛇 |
|
|
现在您已经完成这些教程,请花时间完成这个简短的问卷。
调试tf
- 调试tf的问题
本教程提供了一个系统的方法来调试tf相关的问题。
使用传感器消息与tf
- 使用带有tf :: MessageFilter的标记数据类型
本教程描述如何使用tf :: MessageFIlter来处理Stamped数据类型。
用tf设置你的机器人
- 使用tf设置您的机器人
本教程提供了设置您的机器人开始使用tf的指南。
- 在自己的机器人上使用机器人状态发布器
本教程解释了如何使用机器人状态发布器将机器人的状态发布到tf。
- 与robot_state_publisher一起使用urdf
本教程给出了使用URDF的机器人模型的完整示例,其中使用robot_state_publisher。首先,我们创建具有所有必要部分的URDF模型。然后我们写一个节点,发布JointState和transforms。最后,我们一起运行所有的部分。
----
tf做什么?为什么要使用tf?
你想看看什么tf可以做,而不是只是阅读它吗?查看tf介绍演示。
机器人系统通常具有随时间改变的许多3D 坐标系,例如世界框架,基础框架,夹具框架,头框架等。tf随着时间跟踪所有这些框架,并且允许你提出诸如以下问题:
- 5秒钟前头框相对于世界框架在哪里?
- 对象在我的夹子上相对于我的基地的姿势是什么?
- 基础框架在地图框架中的当前姿势是什么?
tf可以在分布式系统中操作。这意味着有关机器人坐标系的所有信息可用于系统中任何计算机上的所有ROS组件。有没有中央服务器转换信息的。
有关设计的更多信息,请参阅/设计
纸
在TePRA 2013 论文/ TePRA2013_Foote上有一篇关于tf的论文
教程
我们创建了一组教程,逐步引导您使用tf。你可以开始介绍tf教程。有关所有tf和tf相关教程的完整列表,请查看教程页面。
基本上有两个任务,任何用户将使用tf,监听变换和广播变换。
任何使用tf的人都需要监听转换:
要扩展机器人的功能,您需要开始广播变换。
完成基本教程后,您可以继续学习tf和时间。tf和时间教程(Python) (C ++)教导tf和时间的基本原理。关于tf和时间(Python) (C ++)的高级教程教导了时间旅行与tf的原则。
代码API概述
经常问的问题
命令行工具
虽然tf主要是一个意图在ROS 节点中使用的代码库,但它附带了一组大量的命令行工具,它们有助于调试和创建tf坐标系。这些工具包括:
view_frames:显示坐标变换的完整树。
tf_monitor:监视帧之间的变换。
tf_echo:打印指定的变换到屏幕
roswtf:与tfwtf插件,帮助你跟踪tf的问题。
static_transform_publisher是用于发送静态变换的命令行工具。
您还可以使用tf_remap节点,它是重新映射坐标变换的实用程序节点。
tf_monitor
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 <source_frame> <target_target>
监视特定的转换。例如,要监视从/ 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
tf_echo <source_frame> <target_frame>
打印有关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
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
- 使用x / y / z偏移量(以米为单位)和偏航/俯仰/滚动(以弧度为单位)将静态坐标变换发布到tf。(偏转是绕Z的旋转,俯仰是绕Y的旋转,滚动是绕X的旋转)。周期(以毫秒为单位)指定发送转换的频率。100ms(10hz)是一个很好的值。
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
- 使用以米和四元数为单位的x / y / z偏移量将静态坐标变换发布到tf。周期(以毫秒为单位)指定发送转换的频率。100ms(10hz)是一个很好的值。
static_transform_publisher被设计为用于手动使用的命令行工具,以及在roslaunch文件中用于设置静态变换。例如:
1 <launch> 2 <node pkg =“tf”type =“static_transform_publisher”name =“link1_broadcaster”args =“1 0 0 0 0 0 1 link1_parent link1 100”/> 3 </ launch>
view_frames
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插件
roswtf tf附带一个roswtf的插件,当你运行roswtf时自动运行。这个插件将分析您当前的tf配置,并尝试找到常见的问题。要运行,只需调用roswtf:
$ roswtf
节点
#Keywords转换,变换,坐标变换
----
----
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/62052505
- 点赞
- 收藏
- 关注作者
评论(0)