ROS 坐标系 官方教程与个人理解

ROS 坐标系 官方教程与个人理解

  • 1. 概述
  • 2. REP 105——移动平台坐标系(ROS.org)
  • 3. 坐标系
    • 3.1 base_link
    • 3.2 odom
    • 3.3 map
    • 3.4 坐标系的约定
  • 4. 坐标系之间的联系
  • 5. 多个机器人坐标系
  • 6. 坐标系转换
  • 7. 个人理解
  • 8. 参考链接

1. 概述

根据官方教程和SLAM中坐标系的使用总结ROS中坐标系相关知识,以供自己以后复习参考。建议直接跳转到7.个人理解部分,当然前面的也可以慢慢看看~

2. REP 105——移动平台坐标系(ROS.org)

REP代表了ROS使用的移动平台的坐标框架的命名约定和语义意义。

为了更好地集成和重用软件组件,驱动程序、模型和库的开发人员需要一个共享约定来协调框架。坐标框架的共享约定为开发人员创建移动基地的驱动程序和模型提供了规范。类似地,创建库和应用程序的开发人员可以更容易地使用与此规范兼容的各种移动基础上的软件。例如,该代表指定了编写新的本地化组件所需的框架。它还指定了可以用来引用机器人的移动基座的帧。

3. 坐标系

3.1 base_link

base_link坐标系刚性附着在移动机器人基座上。该base_link可以以任意位置或方向附着在底座上;对于每个硬件平台,在基础上都有不同的位置提供明显的参考点。注意,REP 103[1]指定了坐标系的首选方向。

3.2 odom

odom坐标系是一个固定的世界坐标系。移动平台在odom中的位姿可以随时间漂移,没有任何界限。这种漂移使得odom坐标系作为长时间全局参考时用处下降。然而,机器人在odom下的位姿保证是连续的,这意味着移动平台在odom下的位姿始终是平滑的,没有离散的变化。新坐标值通常是根据前一个时刻坐标得到的。
在实际运用中,odom是基于一个里程计源计算的,例如车轮里程计、视觉里程计或惯性测量单元等。
odom可以作为短时间、精确的局部参考系,由于漂移的存在,误差会越来越大,长时间使用的效果很差

3.3 map

map坐标系是一个固定的世界坐标系,其z轴指向上。移动平台相对于map坐标系的位姿不会随时间发生漂移。地图帧不是连续的,这意味着移动平台在地图帧中的位姿可以随时发生离散式的跳跃变化
在典型的设置中,定位组件根据传感器的观察不断地在地图框架中重新计算机器人的姿态,因此消除了漂移,但当新的传感器信息到达时,会导致离散的跳跃。坐标值通常是通过传感器的数据重新计算或测量得到的。
map坐标系可用于作为长期的全局参考,由于离散变化的性质,进行局部感知和局部行动时效果并不好。

3.4 坐标系的约定

坐标系可以作为全局的参考,也可以只是应用于程序的特定场合。
特定场合的一个例子:根据EGM1996[4]的平均海平面[3],map坐标系的z位置相当于海平面以上几米。无论选择什么,最重要的是参考位置的选择要清楚地记录下来,以使用户避免混淆。

当定义一个像地球这样的全局参考系时:
默认情况下,x轴向东对齐,y轴向北对齐,z轴向上对齐。东北天坐标系
如果没有其他参考,默认的z轴位置在WGS84椭球高度为零。

如果应用的具体要求不能满足上述要求,则仍应尽可能多地满足要求。
不能满足上述要求的应用程序的一个例子:机器人在没有外部参考设备(如GPS、罗盘或高度计)的情况下启动。但如果机器人仍然有一个加速计,它可以将当前位置进行map初始化,z轴向上。
如果机器人在启动时有一个罗盘航向,那么它也可以初始化x向东,y向北。
如果机器人在启动时有测高仪估计,则可以将高度初始化为MSL。

4. 坐标系之间的联系

我们选择了一种树表示法来将机器人系统中的所有坐标系连接到一起。因此每个坐标系都有一个父坐标系和任意数量的子坐标系。REP所描述的坐标系联系关系如下:

earth
map
odom
base_link

map是odom的父坐标系,odom是base_link的父坐标系,每个坐标系只有一个父坐标系。

5. 多个机器人坐标系

这是另一个tf树的例子:有两个机器人使用不同的地图进行定位,并有一个共同的坐标系earth。

odom_1
base_link1
map_1
earth
odom_2
base_link2
map_2

为了清晰起见,上面的图表使用了不同的帧id。然而,为了实现最大的可重用性,建议在每个机器人上使用规范坐标系id,并使用脚本转发机器人的信息。当信息被转发时,应该重新映坐标系id以消除它们来自哪个机器人和引用哪个机器人的歧义。

6. 坐标系转换

从odom到base_link的转换由一个里程计源计算并广播。
从map到base_link的转换是由本地化组件(处理数据的节点程序)计算的。但是,本地化组件(处理数据的节点程序)并不广播从map到base_link的转换。它首先接收从odom到base_link的转换,然后使用该信息广播从map到odom的转换。

7. 个人理解

根据对Gmapping SLAM的阅读梳理,个人认为各个坐标系的关系如下,欢迎指正!
附一张Hector SLAM的坐标系关系参考图
ROS 坐标系 官方教程与个人理解_第1张图片
结合上面的图以及下面的文字部分可以对各个参考系的关系有一定的了解

  • odom坐标系:不精确化的map坐标系,使用里程计数据,得到odom和base_link的转换。
  • base_link坐标系,机器人坐标系。
  • laser_link坐标系,雷达坐标系,扫描的距离数据以该参考系为基准,因此建图时需要转换到base_link坐标系。激光扫描角度的中心在激光系下的位姿是0,0,center。以此位姿作为参考,使用getOdomPose得到激光中心在odom坐标系的位姿。
  • map坐标系,经过优化的精确坐标系,等同于世界坐标系。地图就是在该坐标系下建立得到的。

在Gmapping中各个参考系的关系如下所示

  • base_linkbase_laser的转换关系是一定的,不会发生变化
  • mapodom的转换关系是需要当前节点程序计算的,也就是本地化组件计算并且发布。
    ROS 坐标系 官方教程与个人理解_第2张图片

8. 参考链接

rep-0105
autolabor
如何设置机器人

你可能感兴趣的:(ROS,ubuntu,linux,c++)