当前位置:网站首页>【ROS基础】map、odom、base_link、laser 的理解 及其 tf 树的理解
【ROS基础】map、odom、base_link、laser 的理解 及其 tf 树的理解
2022-08-02 06:38:00 【贾亚超】
一、题目各个坐标系的含义
背景:
本文以 gmapping 为例,其中 map、odom、base_link、laser 均来自 gmapping 中的坐标系。这里的 gmapping 是指使用laser_scan_matcher包,在仅使用激光雷达、无需里程计的情况下跑 gmapping。
下图是执行rosrun rqt_tf_tree rqt_tf_tree的结果:
- map:可以理解为世界坐标系
- odom:机器人以为的世界坐标系
- base_link:机器人本体坐标系
- laser:激光雷达坐标系
二、对坐标系的理解
- map:地图坐标系,顾名思义,一般设该坐标系为固定坐标系(fixed frame,rviz中的设置项),一般与机器人所在的世界坐标系一致。
- base_link:机器人本体坐标系,与机器人中心重合,原点一般为机器人的旋转中心。当然有些机器人(PR 2)是 base_footprint,其实意思差不多,base_footprint 坐标系原点为 base_link 原点在地面的投影,有些许区别(z值不同)。
- odom:里程计坐标系,这里要区分开odom topic,这是两个概念,一个是坐标系(本文),一个是根据编码器或者视觉等计算的里程计。但是两者也有关系,odom topic 转化的位姿矩阵是odom–>base_link的tf关系。这时可能会有疑问,odom 和 map 坐标系是不是重合的?可以很肯定地说,机器人起始运动位置这两者是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那 map–>odom 的 tf 怎么得到?就是在一些校正传感器合作校正的 package 比如 amcl 会给出一个位置估计(localization),这可以得到 map–>base_link 的 tf,所以估计位置和里程计位置的偏差也就是 odom 与 map 的坐标系偏差。所以,如果你的 odom 计算没有错误,那么 map–>odom 的 tf 就是 0。
- laser:激光雷达的坐标系,与激光雷达的安装点有关,其与 base_link 的 tf 为固定的。
三、对于 map --> odom 举个例子
- 首先,我们制定机器人路径时,使用的必然是绝对坐标系。要完成这件事,机器人需要先知道自己在哪。它没有GPS,所以只能倒推——通过里程计。这也是为什么“没有偏移的话 odam 应该与 map 重合”,因为 odam 本来就是用来倒推 map 的。
- 假设机器人终点定在了(8,5),初始时刻,map 的(8,5)和 odom 的(8,5)是重合的。
- odom 坐标系视角看运动过程:假设里程计告诉它,自原点启动起,它在 X 方向移动 2 ,Y 方向移动 5 ,运动描述为(+2,+5)。于是它就认为自己在 odom 坐标系下的(2,5)。反馈给 base_link,则 base_link 坐标系下,机器人需要运动(8,5) - (2,5) = (+6,+0)才能到达目标点(8,5)。而此时如果机器人按(+6,+0)运动完后,确实能到达odom下的终点(8,5),并开始以完成任务为由而沾沾自喜,殊不知,它并没有运动到真正的终点终点:map 坐标系下的(8,5)。
- map 坐标系看运动过程:然而实际上,因为里程计累计误差,它其实第一次运动到了(3,4)。但在 odom 中它在(2,5)。它理应运动(8,5)-(3,4) = (+5,+1)到达目标点,但它会运动(+6,+0),因为 odam 反馈给 base_link 后,目标在 base_link 坐标系下的(6,0)。其实到达的是 map 坐标系下的(9,4),并不能达到运动到 map 坐标系下目标点(8,5)的目的。机器人只能自以为是地认为自己运动到了odom 坐标系下的(8,5)就算万事大吉了。
- 而这时,校正传感器又告诉它了,“我觉得你的里程计刚才 X 漏算了 0.999,Y 多算了 1.001”。
于是它把自己所在位置修正为了(2 + 0.999,5 - 1.001)=(2.999,3.999),接下来该移动(8,5)-(2.999,3.999)=(+5.001,+1.001)。就能将偏差校正回来,到达 map 坐标系下的终点(8,5)了。

过程总结:
四、tf 树是怎么回事
布拉布拉
边栏推荐
- Facebook社媒营销的5大技巧,迅速提高独立站转化率!
- About the local server problem after ue4.27 pixel streaming package
- abaqus如何快速导入其他cae文件的assembly?
- 交换部分 VLAN
- CAT1 4G+Ethernet development board Tencent cloud mobile phone WeChat applet display temperature and delivery control
- PHP Warning: putenv() has been disabled for security reasons in phar
- nacos源码启动找不到istio包
- Leetcode Weekly 304
- 解决:- SPY: No data found for this date range, symbol may be delisted报错
- 【故障诊断分析】基于matlab FFT轴承故障诊断【含Matlab源码 2001期】
猜你喜欢
随机推荐
chrome plugin development guide
PHP Warning: putenv() has been disabled for security reasons in phar
2020美亚团队赛复盘
ue先视频教程后深入
数据库概论之MySQL表的增删改查1
张驰课堂:六西格玛测量系统的误差分析与判定
【机器学习】实验5布置:AAAI会议论文聚类分析
mysql 注入
SphereEx苗立尧:云原生架构下的Database Mesh研发实践
【图像去噪】基于matlab双立方插值和稀疏表示图像去噪【含Matlab源码 2009期】
分离轴定理SAT凸多边形精确碰撞检测
Servlet
项目开发规范
根据一个字段的内容去更新另一个字段的数据,这样的sql语句该怎么样书写
C# FileInfo类
[数据集][VOC]男女数据集voc格式6188张
笔记本开机黑屏提示:ERROR 0199:System Security-Security password retry count exceeded
【暑期每日一题】洛谷 P1551 亲戚
(笔记整理未完成)【图论】图的遍历
CAT1 4G+以太网开发板腾讯云手机微信小程序显示温度和下发控制


![[数据集][VOC]男女数据集voc格式6188张](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
——设备树的概述(硬件、目标、效果、文件类型)](/img/c6/6c2321bfcd184886e1cb59664bec11.png)






