ROS的TF系统

一、SLAM

1、SLAM全称是Simultaneous Localization And Mapping,即同时定位地图构建

2、SLAM软件包Hector_Mapping建图可参考链接所示文章

二、机器人定位

1、假设机器人开始建图的位置是地图坐标系的原点

在这里插入图片描述

2、则机器人在建图过程中的位置可以描述为机器人和这个地图原点坐标系之间的空间关系

在这里插入图片描述

3、定义机器人建图的初始位置为地图坐标系,坐标轴方向遵循右手法则,给该坐标系命名map

在这里插入图片描述

4、机器人坐标系的原点定义在机器人地盘的中心位置,坐标系同样遵循右手法则,该坐标系叫做base_footprint,它是ROS中约定俗称的一个坐标系名称

在这里插入图片描述

5、地图坐标系作为父坐标系,机器人坐标系作为子坐标系,则这两个坐标系的空间关系就可以描述为子坐标系在父坐标系中X、Y、Z三个轴上的距离偏移量

在这里插入图片描述

6、对于在地面上移动的机器人来说,Z的值为0

在这里插入图片描述

7、对于地面移动的机器人来说,只需要沿X、Y轴的偏移量绕Z轴的角度,便可描述机器人坐标系相对于地图坐标系的空间关系

在这里插入图片描述

三、TF系统

1、TF是TransForm的缩写,主要描述两个坐标系的空间关系,可以理解为坐标系变换

2、地图坐标系和机器人坐标系的距离和角度偏移量就属于一个TF关系

在这里插入图片描述

3、TF关系由特定的ROS节点以消息包的形式发布到/tf话题中去,其它的节点可以订阅这个话题来查询当前运行的节点网络中都存在哪些坐标系。在RViz中能够显示地图和机器人的相对位置就是因为RViz订阅了这个/tf话题

在这里插入图片描述

四、在RViz中显示TF坐标系

1、进入工作空间输入source ./devel/setup.bash设置ROS的环境变量,以便在当前的终端窗口中正确运行ROS软件包。

在这里插入图片描述

2、输入roslaunch wpr_simulation wpb_hector.launch运行SLAM建图程序

==roslaunch wpr_simulation wpb_hector==

3、控制机器人随意行走一段距离

在这里插入图片描述

4、在RViz里添加TF显示项目

在这里插入图片描述

5、可以看到机器人身上和地图原点出现了很多细小的三维坐标轴

6、修改坐标轴的显示大小

在这里插入图片描述

7、Frames选项里面只保留base footprintmap

在这里插入图片描述

8、便能直观的观察到这了两个坐标系的空间关系

在这里插入图片描述

9、打开一个新的终端,输入rostopic list,查找包含TF数据的话题

在这里插入图片描述

10、这个/tf是包含TF数据的话题

在这里插入图片描述

11、输入rostopic type /tf查看它的消息格式

在这里插入图片描述

12、可以看到/tf这个话题的消息格式是tf2_msgs的TFMessage

在这里插入图片描述

13、去ROS index里查查这个消息类型的结构

在这里插入图片描述

14、输入tf2_msgs进行搜索

在这里插入图片描述

15、选择noetic版本

在这里插入图片描述

16、进入wiki界面

在这里插入图片描述

17、点击TFMessage

在这里插入图片描述

18、这是一个TransformStamped类型的数组

在这里插入图片描述

19、点击进入,查看它的结构

在这里插入图片描述

20、结构长这样

在这里插入图片描述

21、header里的fram id是父坐标系的名称

在这里插入图片描述

22、这个child_frame_id是子坐标系的名称

在这里插入图片描述

23、父子坐标系的空间关系在这个transform

在这里插入图片描述

24、transform里有一个translation

在这里插入图片描述

25、结构是x、y、z三个浮点数

在这里插入图片描述

26、就是子坐标系在父坐标系里的坐标偏移量

在这里插入图片描述

27、rotation是个四元数

在这里插入图片描述

28、描述的是子坐标系相对于父坐标系的角度偏差量,使用的是四元数格式

在这里插入图片描述

29、回到终端输入rostopic echo /tf,查看TF的具体数值

在这里插入图片描述

30、可以看到有很多TF消息包在刷屏,按CTRL+C暂停,找到这个“map”和“base_footprint”

在这里插入图片描述

31、这个便是子坐标系相对于父坐标系的位置偏移量

在这里插入图片描述

32、这个是子坐标系相对于父坐标系的角度偏移量(四元数形式)

在这里插入图片描述

33、在这个/TF话题里会不停发来TF消息,每一个TF消息包对应的是不同时刻坐标系的空间关系,它随着机器人的移动不断变化

在这里插入图片描述

34、TFMessage消息包包含的是一个TransformStamped类型的数组,里面除了mapbase_footprint可能还会存在许多别的TF关系

在这里插入图片描述

35、如果有许多TF关系时都在这里刷屏,很难看清区分

在这里插入图片描述

36、输入rosrun rqt_tf_tree rqt_tf_tree用于理清众多TF关系

在这里插入图片描述

37、会弹出一个窗口

在这里插入图片描述

38、每个椭圆都代表一个坐标系,可以看出这些坐标系是存在层级关系的

在这里插入图片描述

39、上方椭圆是下方椭圆的父级坐标系,当一个ROS程序运行起来时,所有的空间坐标关系都可以在这个TF树中获取

在这里插入图片描述

ROS(Robot Operating System)是一款用于机器人开发的开源软件平台,它提供了一些常用的功能模块和工具,如传感器数据处理、运动控制、导航、定位等。其中,TF(Transform)是ROS中非常重要的一个模块,主要用于机器人坐标系的变换和坐标系之间的关系。随着ROS的不断发展,TF2被引入到ROS中,取代了原来的TF模块。本文将介绍ROS系统TFTF2的相关知识。 1. TF TFROS中的一个模块,主要用于机器人坐标系的变换和坐标系之间的关系。TF可以帮助我们处理机器人在不同坐标系下的运动和感知,为机器人控制和导航等任务提供支持。TF的主要功能包括: 1)管理坐标系之间的关系:TF可以帮助我们管理机器人不同坐标系之间的关系,包括父子关系、坐标系之间的相对位置和姿态等。 2)发布变换:TF可以将一个坐标系的变换发布到ROS系统中,供其他节点使用。 3)监听变换:TF可以监听一个坐标系的变换,当变换发生变化时,TF会自动更新坐标系之间的关系。 2. TF2 TF2是ROSTF模块的升级版,它主要解决了TF模块存在的一些问题,并且提供了更加灵活和高效的接口。TF2的主要改进包括: 1)可扩展性:TF2支持动态添加和移除坐标系,可以在运行时动态调整坐标系之间的关系。 2)高效性:TF2使用了一些优化算法,可以在运行时快速计算坐标系之间的变换关系,提高了系统的效率。 3)可靠性:TF2使用了一些错误检测和纠正机制,可以防止坐标系之间出现不一致或错误的关系。 总的来说,TF2相对于TF模块来说更加灵活、高效和可靠,是ROS系统中不可或缺的一个模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先睡个好觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值