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树中获取

在这里插入图片描述

相关推荐

  1. ROS学习笔记8:TF坐标变换

    2024-07-13 03:16:04       52 阅读
  2. ROS学习笔记12——tf坐标变换

    2024-07-13 03:16:04       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 03:16:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 03:16:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 03:16:04       62 阅读
  4. Python语言-面向对象

    2024-07-13 03:16:04       72 阅读

热门阅读

  1. python多线程与多进程开发实践及填坑记(3)

    2024-07-13 03:16:04       26 阅读
  2. MySQL-锁

    2024-07-13 03:16:04       15 阅读
  3. 我的PHP8编译日志

    2024-07-13 03:16:04       20 阅读
  4. error: #29: expected an expression

    2024-07-13 03:16:04       20 阅读
  5. MySQL版本升级

    2024-07-13 03:16:04       19 阅读
  6. 数据建设实践之大数据平台(四)安装mysql

    2024-07-13 03:16:04       22 阅读
  7. Python-数据爬取(爬虫)

    2024-07-13 03:16:04       21 阅读
  8. 关于QT实现绘图库的技术栈考虑

    2024-07-13 03:16:04       21 阅读
  9. 使用Python绘制百分比堆积条形图

    2024-07-13 03:16:04       23 阅读