第7章 世界坐标系与地图

码枢沄社 · 嵌入式体系化教程平台
入门 👤 刚接触机器人导航,需要理解机器人如何“知道自己在哪里”的开发者 🔧 为机器人构建一个全局、稳定、统一的定位与导航参考框架
本章你将学到
  • 世界坐标系的定义与核心作用
  • 地图的几种常见类型及其与坐标系的关系
  • 如何建立并维护一个稳定的世界坐标系
核心概念世界坐标系地图

想象一下,你被蒙上眼睛带到一个陌生的城市广场中央。你需要告诉朋友你的位置,你会怎么说?“我在广场中心喷泉的北边5米”,还是“我在以广场旗杆为原点,东边10米,南边3米的地方”?后一种描述方式,就是建立了一个“世界坐标系”。对于机器人而言,世界坐标系就是那个广场旗杆——一个全局的、固定的、所有机器人和物体位置都以其为参考的原点。

什么是世界坐标系?

世界坐标系是一个全局的、固定的三维直角坐标系。它为整个机器人工作环境提供了一个统一的、绝对的参考框架。机器人的位姿、障碍物的位置、目标点的坐标,最终都需要转换到这个坐标系下进行表达和计算。

技术定义上,世界坐标系通常表示为 {W},其原点 OW 和坐标轴 XW, YW, ZW 的方向在系统初始化时被定义,并在整个任务周期内保持不变(除非人为重置)。它是所有其他坐标系变换的最终参考系。

世界坐标系 vs. 本体坐标系

理解世界坐标系的关键,在于将其与机器人本体坐标系进行对比。这是导航中最基础也最重要的坐标关系之一。

对比维度世界坐标系 (World Frame, {W})机器人本体坐标系 (Base Frame, {B})
定义全局、固定、绝对固定在机器人本体上,随机器人移动
原点环境中的某个固定点(如启动点、特征点)通常为机器人底盘几何中心或驱动轮轴线中点
运动性静止不动随机器人平移和旋转
核心作用提供全局统一的“地图”和“绝对位置”描述机器人自身的姿态和感知到的局部环境
数据示例“目标点在(5.2, 3.1, 0)米处”“前方1米处有障碍物”

一个常见的应用场景是:机器人通过激光雷达(传感器坐标系 {L})探测到前方有一个障碍物。这个障碍物的坐标首先在 {L} 中表达,然后通过 {L} 到 {B} 的变换,得到相对于机器人本体的位置。最后,再通过 {B} 到 {W} 的变换,得到该障碍物在世界地图中的绝对坐标。这个坐标可以被记录下来,用于构建全局地图或进行路径规划。

核心要点

世界坐标系是导航的“锚点”。没有它,机器人只能知道自己周围有什么(本体坐标系视角),但永远无法回答“我在世界的哪个位置”这个根本问题。所有高级的导航任务,如“去往会议室”、“构建环境地图”,都依赖于一个稳定且一致的世界坐标系。

地图:世界坐标系的具象化

如果说世界坐标系是抽象的数学框架,那么地图就是这个框架的具体填充物。地图本质上是将环境信息(障碍物、特征点、语义信息)记录在世界坐标系下的数据集合。

传感器数据
坐标变换
世界坐标系 {W}
占据栅格地图
特征点地图
拓扑地图

地图有多种表示形式,适用于不同的导航任务。选择哪种地图,直接决定了你如何使用世界坐标系。

占据栅格地图

  • 是什么:将环境划分为均匀网格,每个网格记录“被占据”、“空闲”或“未知”的概率。
  • 与坐标系:网格索引直接对应世界坐标系下的离散坐标。例如,分辨率0.05米,网格(100, 50)对应世界坐标(5.0, 2.5)米。
  • 典型应用:基于激光雷达的避障与路径规划(如ROS的move_base)。

特征点地图

  • 是什么:不记录环境的完整几何,只记录一系列稀疏的、可重复观测的特征点(如墙角、SIFT/SURF特征)。
  • 与坐标系:每个特征点存储其三维坐标 (x, y, z) 和描述子,这些坐标直接定义在世界坐标系 {W} 中。
  • 典型应用:视觉SLAM、基于特征的定位。

拓扑地图

  • 是什么:一种抽象地图,用节点表示地点(如房间、路口),用边表示连接关系。
  • 与坐标系:节点可能关联一个粗略的世界坐标,但导航更依赖于节点间的连通关系,对绝对坐标精度要求较低。
  • 典型应用:高层级任务规划、室内服务机器人导航。

常见误区

  • 混淆地图原点与世界坐标系原点:地图文件(如PGM图片)的像素(0,0)点不一定对应世界坐标系原点(0,0,0)。地图通常包含一个原点偏移参数(如ROS地图的origin),用于将像素坐标转换到世界坐标。我在项目初期曾忽略这个参数,导致机器人定位完全错乱。
  • 认为世界坐标系必须是“正北方向”:世界坐标系的X轴和Y轴方向可以任意定义,通常选择与建筑物主轴线对齐,或简单地将机器人启动时的朝向作为X轴正方向。关键在于整个系统对此定义保持一致。
  • 动态改变世界坐标系原点:一旦系统开始运行(尤其是SLAM建图后),世界坐标系原点必须保持固定。随意重置原点会导致已有地图数据全部失效。

如何建立世界坐标系?

建立世界坐标系不是一个简单的赋值,而是一个包含初始化和持续维护的过程。

系统启动
定义初始原点与轴向
传感器数据对齐
持续定位与地图更新

1. 初始化定义:最简单的方式是在机器人上电启动的瞬间,将此时机器人本体坐标系 {B} 的位置和姿态直接定义为世界坐标系 {W}。即,此时机器人位姿为 (x=0, y=0, θ=0)。另一种方式是在环境中选取一个明确的物理特征点(如特定AR码标签的中心)作为世界坐标系原点。

2. 数据对齐:所有传感器的外参(传感器坐标系相对于{B}的变换)必须事先标定准确。这样,任何传感器观测都能通过确定的变换链转换到 {W} 中。如果使用多个机器人或外部定位系统(如UWB),它们必须共享同一个世界坐标系定义。

3. 维护与修正:在实际导航中,机器人的位姿估计(它在{W}中的坐标)会随着里程计误差累积而漂移。SLAM(同步定位与地图构建)技术的核心作用之一,就是通过观测环境中的特征(这些特征在地图中有固定的{W}坐标),来持续修正机器人的位姿估计,从而维护一个全局一致的世界坐标系。

编者提示:世界坐标系原点的选择策略
在实际开发中,大部分团队会选择机器人首次启动点作为世界坐标系原点。这样做简单直接,但有个隐藏的坑:如果机器人需要长时间运行或多次断电重启,确保每次都能在“物理上”回到完全相同的启动点非常困难。一个更鲁棒的做法是,在环境中布置一个永久的、易于观测的视觉标记(如AprilTag),并将其中心定义为世界坐标系原点。这样,无论机器人从哪里启动,只要看到这个标记,就能立刻计算出自己相对于世界原点的位姿,实现坐标系的重定位,避免了每次都需要手动对齐的麻烦。

世界坐标系下的典型数据流

让我们看一个简化的代码逻辑,理解传感器数据如何通过坐标变换,最终在世界坐标系下表达。这里我们假设有一个2D激光雷达,并已获取到机器人在世界坐标系下的位姿 `robot_pose_w`(包含x, y, yaw)。

// 假设:激光雷达扫描到前方一个点,在雷达坐标系{L}中的坐标为 (range, 0)
double point_in_laser_x = measured_range;
double point_in_laser_y = 0.0;

// 1. 从激光雷达坐标系 {L} 变换到机器人本体坐标系 {B}
// 假设外参已知:激光雷达安装在机器人前方0.2米,中心线上,0度朝向
double laser_to_base_x = 0.2; // X方向偏移
double laser_to_base_y = 0.0; // Y方向偏移
double laser_to_base_yaw = 0.0; // 安装角度

double cos_theta = cos(laser_to_base_yaw);
double sin_theta = sin(laser_to_base_yaw);
double point_in_base_x = laser_to_base_x + point_in_laser_x * cos_theta - point_in_laser_y * sin_theta;
double point_in_base_y = laser_to_base_y + point_in_laser_x * sin_theta + point_in_laser_y * cos_theta;

// 2. 从机器人本体坐标系 {B} 变换到世界坐标系 {W}
// robot_pose_w 包含了机器人在世界坐标系下的位置(x,y)和朝向(yaw)
double robot_x = robot_pose_w.x;
double robot_y = robot_pose_w.y;
double robot_yaw = robot_pose_w.yaw;

cos_theta = cos(robot_yaw);
sin_theta = sin(robot_yaw);
double point_in_world_x = robot_x + point_in_base_x * cos_theta - point_in_base_y * sin_theta;
double point_in_world_y = robot_y + point_in_base_x * sin_theta + point_in_base_y * cos_theta;

// 此时,(point_in_world_x, point_in_world_y) 就是该激光点在全局世界坐标系{W}中的坐标
// 这个坐标可以被加入占据栅格地图或特征点地图

这段代码清晰地展示了坐标变换的链条:传感器数据 → 本体坐标系 → 世界坐标系。在实际的机器人中间件(如ROS)中,这些变换通常由TF2库自动管理和计算。

动手试一试

1. 概念可视化:在一张白纸上画一个矩形代表房间。在房间内任意位置画一个三角形代表机器人,并标出机器人的“前向”(本体坐标系X轴)。现在,请你:

  • 选择房间的一个角落作为世界坐标系 {W} 的原点,并画出 XW 和 YW 轴。
  • 测量并写出机器人三角形中心(本体坐标系 {B} 原点)在世界坐标系 {W} 下的 (x, y) 坐标。
  • 在机器人“前方”2厘米处画一个点代表障碍物。分别写出这个点在本体坐标系 {B} 和世界坐标系 {W} 下的坐标。

2. 思维实验:如果机器人移动到了房间的另一个位置,它的本体坐标系 {B} 发生了变化。请问:

  • 世界坐标系 {W} 的原点和轴向改变了吗?
  • 你在第一步中写下的障碍物在世界坐标系 {W} 下的坐标改变了吗?
  • 这个障碍物在机器人本体坐标系 {B} 下的坐标改变了吗?
通过这个练习,你能深刻体会“固定”与“相对”的区别。

检验你的理解

1. 判断题:世界坐标系的原点必须设置在机器人身体的中心点上。 ( )

2. 判断题:一旦机器人开始构建地图,世界坐标系的原点和方向就应该始终保持不变。 ( )

3. 选择题:机器人通过激光雷达发现正前方1米处有一个障碍物。这个“1米”的描述,是相对于哪个坐标系的?
A. 世界坐标系
B. 机器人本体坐标系
C. 激光雷达传感器坐标系

本章小结

  • 世界坐标系 {W} 是一个全局、固定、绝对的参考框架,是机器人导航的“锚点”,所有其他坐标最终都转换到此处进行统一表达。
  • 地图是世界坐标系中环境信息的具体化,常见类型有占据栅格地图、特征点地图和拓扑地图,它们以不同方式利用世界坐标系。
  • 世界坐标系与机器人本体坐标系 {B} 有本质区别:{W} 固定于环境,{B} 固连于机器人并随之运动。
  • 建立世界坐标系需要明确定义原点与轴向,并通过准确的传感器外参标定和SLAM等技术进行初始化和持续维护。
  • 理解从传感器数据到世界坐标的变换链,是进行任何实际导航算法开发的基础。
← 上一章 返回目录 下一章 →