ROS的TF系统

news2024/9/21 11:16:54

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qml:Material风格下改变控件的颜色

用过Material的都知道,所有控件的默认颜色是玫红色,如果要改变颜色,只需要加一句代码即可:Material.accent: "blue" 你可以将这句写在顶层,那就是所有颜色都改了,如果你单独写在某个控件下&…

【linux】Shell 脚本中的 For 循环详细用法教程

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Elasticsearch详细介绍

B站对应视频: Elasticsearch01-01.为什么学习elasticsearch_哔哩哔哩_bilibili 大多数日常项目,搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,存在很多问题。 首先,查询效率较低。 由于数据…

类和对象(初)

目录 一、面向过程和面向对象初步认识 二、类的引入 命名规则 三、类的定义 四、访问限定符 五、类的作用域 六、类的实例化 七.类对象模型 一、面向过程和面向对象初步认识 1.C语言是面向过程的,关注的是过程,分析出求解问题的步骤,…

开发个人Ollama-Chat--5 模型管理 (二)

开发个人Ollama-Chat–5 模型管理 (二) ChatGPT 这是该项目的最终效果,使用ollama的open-webui进行人与机器的对话功能,对话的后端服务则完全对接自己开发的Go项目。 如何实现呢?则通过这篇文章,一一给大家剖析后端的原理及功能…

【进阶篇-Day8:JAVA中递归、异常的介绍】

目录 1、递归的介绍和使用1.1 递归的介绍1.2 案例案例一:案例二:案例三:案例四: 1.3 总结 2、异常的介绍和使用2.1 异常的介绍:(1)能够看懂异常(2)异常的体系接口和分类&…

fortran快速排序算法,示例对一维数组进行排序

fortran快速排序算法,示例对一维数组进行排序 0. 引言1. 快速排序方法(QuickSqrt)代码实现2. 结语 0. 引言 快速排序(QuickSort)是一种常用的排序算法,采用分治策略实现。它的基本思想是通过一趟排序将待排序的数据分割成独立的两…

[笔试训练](三十六)106:提取不重复的整数107:哈夫曼编码108:abb

目录 106:提取不重复的整数 107:哈夫曼编码 108:abb 106:提取不重复的整数 题目链接:提取不重复的整数_牛客题霸_牛客网 (nowcoder.com) 题目: ​ 题解: #include <iostream> #include <string> using namespace std; int n0; int cnt[10]; int ret0; int mai…

MySQL CONCAT函数的简单使用

CONCAT函数用于将mysql中查询多列的值拼成一列显示&#xff0c; 使用示例&#xff1a; SELECT CONCAT(attr_name,"&#xff1a;",attr_value) FROM pms_sku_sale_attr_value WHERE sku_id1; 上面SQL语句使用CONCAT函数将attr_name、attr_value两列的值拼成一列&am…

【代码随想录】【算法训练营】【第62天】 [卡码108]冗余连接 [卡码109]冗余连接II

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 62&#xff0c;又是一个周一&#xff0c;ding~ 题目详情 [卡码108] 冗余连接 题目描述 卡码108 冗余连接 LeetCode类似题目684 冗余连接 解题思路 前提&#xff1a; 思路&#xff1a; 重点&a…

如何对odoo17网站cookies进行配置(How to configure cookies for Odoo 17 website?)

浏览器cookies具有缓存和加速的作用&#xff0c;odoo17 website 模块内置了cookies的选项: &#xff08;Browser cookies have the function of caching and acceleration, and the Odoo 17 website module has built-in options for cookies:&#xff09; 1、安装website模块后…

TCP传输控制协议

传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793[1]定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机…

【C++】哈希表的模拟实现及 unordered_set 和 unorderded_map 的封装

目录 前言一、哈希表的模拟实现1.1 哈希表的改造1.1.1 模板参数列表的改造1.1.2 增加迭代器操作 1.2 哈希表的模拟实现1.2.1 哈希表中仿函数的实现1.2.2 哈希表中节点类的实现1.2.3 哈希表中迭代器类的实现1.2.4 哈希表中构造函数、析构函数和 Clear() 函数的实现1.2.5 哈希表中…

JZ62 孩子们的游戏(圆圈中最后剩下的数)

题目来源&#xff1a;牛客 题目描述&#xff1a; 每年六一儿童节&#xff0c;牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中&#xff0c;有个游戏是这样的&#xff1a;首先&#xff0c;让 n 个小朋友们围成一个大圈&#xff0c;小朋友们的编号是0~n-1。然后&…

Git 课程任务

** ** https://github.com/InternLM/Tutorial/pull/905 https://github.com/onlyzer0/all_you_need/blob/main/README.md

Dify中固定递归字符文本分割器的chunk长度计算方式

本文主要从源码角度剖析了Dify中FixedRecursiveCharacterTextSplitter的chunk长度计算方式。 1.self._length_function(chunk) 源码位置:dify\api\core\splitter\fixed\_text\_splitter.py\FixedRecursiveCharacterTextSplitter类\split\_text方法\self.\_length\_function(…

实验9 存储过程与函数的创建管理实验

一、实验目的&#xff1a; 理解存储过程和函数的概念。掌握创建存储过程和函数的方法。掌握执行存储过程和函数的方法。掌握游标的定义、使用方法。 二、实验内容 1&#xff0e;某超市的食品管理的数据库的Food表&#xff0c;Food表的定义如表所示&#xff0c; Food表的定义…

GESP 2023年12月C++二级真题

参考程序1&#xff1a; #include<iostream> using namespace std;int first,second; int m,n; int sum 0;int fn(int n) {if(n1) {return first;} else if (n2) {return second;} else {return fn(n-1)fn(n-2);} } int main() {cin>>first>>second;cin>…

【Golang】map的使用

map声明的方式 //声明var m map[string]string//在使用map之前&#xff0c;先make&#xff0c;make的作用就是给map分配空间m make(map[string]string)m["lover"] "Yzx"m["friend1"] "Zxw"m["friend2"] "Zzc"…

【电子通识】什么是无源元件的认证用可靠性试验标准AEC-Q200?

目前电动汽车已经是一个大趋势&#xff0c;汽车上安装有由多个电子零部件构成的ECU&#xff08;电子控制单元&#xff09;。即使汽车在恶劣的环境下行驶&#xff0c;电子零部件也必须不出故障地正常工作。因此&#xff0c;车载电子零部件与消费类电子相比&#xff0c;要求其达到…