首页 > 其他分享 >【ROS2机器人入门到实战】tf2介绍

【ROS2机器人入门到实战】tf2介绍

时间:2023-10-31 10:33:38浏览次数:35  
标签:入门 transform Delay 坐标 TF 坐标系 ROS2 tf2


1.tf2介绍

写在前面

  1. 当前平台文章汇总地址:ROS2机器人从入门到实战
  2. 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
  3. 教程配套机器人开发平台:两驱版| 四驱版
  4. 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

TF即变换的英文单词TransForm的缩写。所以ROSROS2中的TF就是指和坐标变换相关的工具。

在搞机器人当中,坐标变换经常用到,所以ROS2帮我们做了一个强大易用的TF工具

【ROS2机器人入门到实战】tf2介绍_ROS2

1.发布坐标关系

我们先使用TF2的相关工具,解决上一节的手眼坐标转换问题,直观的感受一下TF2的强大。

要想让TF帮我们完成坐标变换,我们就需要告诉它坐标和坐标之间的关系。

【ROS2机器人入门到实战】tf2介绍_ROS2_02

拿上面的手眼系统来说,我们要想获取到相机的基坐标系{B}和工具{P}之间的关系,只需要将机械臂和相机、相机和工具之间的关系告诉TF即可。

2.我们如何告诉TF?

可以使用tf的坐标广播工具进行广播坐标关系,广播时需要三个数据:

  • 父坐标系名称(字符串)
  • 子坐标系名称(字符串)
  • 父子之间的变换关系(平移关系和旋转关系)

在终端中输入:

ros2 run tf2_ros static_transform_publisher

enter键,可以看到

A command line utility for manually sending a transform.
Usage: static_transform_publisher x y z qx qy qz qw frame_id child_frame_id 
OR 
Usage: static_transform_publisher x y z yaw pitch roll frame_id child_frame_id

这是该CLI所提供的使用提示,可以看出

使用TF发布位置和姿态时,位置的描述使用的是xyz三个参数,而姿态的描述则分两种

  • 第一种是四元数形式(qx qy qz qw)
  • 第二种是欧拉角形式(yaw偏航角-rz pitch俯仰角-ry roll滚转角-rx),我们这里采用的是欧拉形式,绕x轴旋转采用欧拉角中的滚转角roll来描述,注意角度单位采用弧度制。

【ROS2机器人入门到实战】tf2介绍_机器人_03

关于欧拉角和四元数的区别我们放到了姿态的多种表示章节来讲。

2.1 发布B到C的位姿

比如针对上面的手眼转换,广播机械臂坐标系{B}和相机坐标系{C}之间的关系。

父坐标系的名字就是B,子坐标系的名字是C,父子之间的平移关系是0 0 3,旋转关系是绕x轴旋转180度。

在ROS2中可以使用下面的指令发布变换,打开终端,输入下面的指令:

ros2 run tf2_ros static_transform_publisher 0 0 3 0 0 3.14 B C

如果在终端中看到下面的提示则代表发布成功

【ROS2机器人入门到实战】tf2介绍_ROS2_04

2.2 发布C到P的位姿

接着我们发布坐标系{C}到坐标系{T}的位姿

再打开一个新的终端,输入下面的命令:

ros2 run tf2_ros static_transform_publisher 2 1 2 0 0 0 C P

3. 监听/获取TF关系

发布也发布了,接着我们就把坐标系之间的关系打印出来,只要坐标系之间是有连接的,我们就可以使用TF求出来,使用下面的指令就可以得到机械臂基坐标系{B}和工具坐标系{P}之间的关系。

打开终端,输入命令:

ros2 run tf2_ros tf2_echo B P

【ROS2机器人入门到实战】tf2介绍_Max_05

可以看到终端中不断输出B和C之间的平移和旋转,平移采用的是xyz,基本正确,y和z的微小差异是因为我们发布变换时旋转输入的是3.14并不精确。

至于旋转部分采用的是四元数表示,关于这部分姿态的表示,小鱼在下一节会讲,大家不必纠结。

除了使用TF获取关系外,ros2还提供很多工具来查看坐标之间的关系,大家可以在终端中输入下面的命令自行尝试。

4.TF常用工具

4.1 rqt_tf_tree

2022-04-26更新的,这个工具的二进制安装版本作者3月底才发布,之前没提的原因是需要源码装太麻烦了

这个工具需要我们手动安装下

sudo apt install ros-humble-rqt-tf-tree

安装完成后,再次打开rqt工具,Plugins->Visualization->TF Tree

接着你就可以看到这个强大的,几乎可以实时看到系统tf更新信息的工具,这个工具对于后面我们进行导航和机械臂的调试非常有帮助。

长的不一样没关系,这是后面补充的图。

【ROS2机器人入门到实战】tf2介绍_ROS2_06

4.2 tf2_monitor

查看所有的发布者和频率。

ros2 run tf2_ros tf2_monitor 
Gathering data on all frames for 10 seconds...

RESULTS: for all Frames

Frames:
Frame: C, published by <no authority available>, Average Delay: 3001.98, Max Delay: 3001.98
Frame: P, published by <no authority available>, Average Delay: 741.497, Max Delay: 741.497
All Broadcasters:
Node: <no authority available> 5029.14 Hz, Average Delay: 1871.74 Max Delay: 3001.98


RESULTS: for all Frames
Frames:
Frame: C, published by <no authority available>, Average Delay: 3001.98, Max Delay: 3001.98
Frame: P, published by <no authority available>, Average Delay: 741.497, Max Delay: 741.497
All Broadcasters:
Node: <no authority available> 5029.14 Hz, Average Delay: 1871.74 Max Delay: 3001.98
view_frames.py

可以生成TF的pdf,目前也有在线的实时查看工具。

ros2 run tf2_tools view_frames.py 
[INFO] [1636558316.667894410] [view_frames]: Listening to tf data during 5 seconds...
[INFO] [1636558321.702280144] [view_frames]: Generating graph in frames.pdf file...
[INFO] [1636558321.709904442] [view_frames]: Result:tf2_msgs.srv.FrameGraph_Response(frame_yaml="C: \n  parent: 'B'\n  broadcaster: 'default_authority'\n  rate: 10000.000\n  most_recent_transform: 0.000000\n  oldest_transform: 0.000000\n  buffer_length: 0.000\nP: \n  parent: 'C'\n  broadcaster: 'default_authority'\n  rate: 10000.000\n  most_recent_transform: 0.000000\n  oldest_transform: 0.000000\n  buffer_length: 0.000\n")
/opt/ros/humble/lib/tf2_tools/view_frames.py:75: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  data = yaml.load(result.frame_yaml)

【ROS2机器人入门到实战】tf2介绍_机械臂_07

除了使用命令行进行坐标关系的广播和监听,我们还可以使用代码来广播和监听,接下来小鱼就带你一起用程序来发布TF广播和获取坐标关系。


标签:入门,transform,Delay,坐标,TF,坐标系,ROS2,tf2
From: https://blog.51cto.com/u_15473553/8102199

相关文章

  • 【ROS2机器人入门到实战】姿态的不同表示
    3.姿态的不同表示写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn大家好,我是小鱼,本节课,我们来学习姿态的多种表示方式。在前......
  • 【ROS2机器人入门到实战】MiniConda与Jupyter介绍安装
    2.MiniConda与Jupyter介绍安装写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn大家好,我是小鱼,上一节我们介绍了机器人学的基......
  • 【ROS2机器人入门到实战】矩阵运算实战
    3.矩阵运算实战写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn上一节我们安装好了MiniConda和Jupyter,本节课我们继续回到学......
  • TypeScript入门到精通——泛型
    泛型 泛型程序设计是一种编程风格或编程范式,它允许在程序中定义形式类型参数,然后在泛型实例化时使用实际类型参数来替换形式类型参数。通过泛型,我们能够定义通用的数据结构或类型,这些数据结构或类型仅在它们操作的实际类型上有差别。泛型程序设计是实现可重用组件的一种手段。......
  • ​飞行模拟机使用入门—X-Plane使用介绍
    偶然的机会深刻体会了飞行程序规划与模拟机中的路径之间经常存在的显著差异,于是开始考虑深入了解一下飞行模拟机。搜索之后,发现当下主流的模拟游戏X-Plane、FlightGear等,一定程度上已经具备了飞行模拟机所需的基础功能,高仿真的界面、高仿真的操作流程,可更新的数据库,支持多......
  • [WUSTCTF2020]alison_likes_jojo
    boki图片中有隐藏文件压缩包需要密码暴力破解出密码888866解压得到信息经过三次base64解码后得到信息得到密码,这是另一张图片outguess隐写的密码,之后到虚拟机中进行破解得到flagflag{pretty_girl_alison_likes_jojo}......
  • 二、UI入门
    1.QWidget类QWidget类是Qt所有图形用户界面(组件)的基类,因此QWidget类内部规定了所有最基础的UI相关功能。例如以下成员:●width:constint宽度(单位:像素,后文同)Qt中的getter和setter属性都在Accessfunctions下面●height:constint高度//修改宽高可以使用此函数//参数......
  • 硬件测试快速入门你必须了解的知识!
    硬件测试工程师这个职位越来越吃香,相对纯技术开发而言,要求不是那么高,但又需要一定技术含量。对于想从事技术领域,技术又不是那么自信的可以选择测试岗位,在测试中积累经验,晋升做技术开发,算是一个不错的过渡职位,对于想要从事技术领域的女生来说,也非常适合。测试工具的选择主要有以下......
  • 数据集成实现以及平台安装部署入门
    ETLCloud是什么?ETLCloud提供了一套工具和服务,用于将数据从不同的来源抽取(Extract)、转换(Transform)和加载(Load)到目标系统中。ETL代表了这个过程的三个主要步骤。抽取(Extract):从不同的数据源中获取数据,可以是关系型数据库、文件、Web服务或其他数据存储系统。ETLCloud提供了各种连接器......
  • mysql优化入门
    查看慢sqlSelect*frominformation_schema.processlist;Show[full]processlist;不加full只能显示前100字符 通过慢日志Slowquerylog记录时间超过long_query_time的SQLlog_slow_admin_statements记录ALTERTABLE,ANALYZETABLE,CHECKTABLE,CREATEINDEX,DROPINDE......