坐标系与位姿表示:全局坐标系与局部坐标系

做路径跟踪,第一件事不是调参数,而是搞清楚你的机器人在哪、它要去哪。说白了,就是坐标系和位姿的问题。我见过不少新手,上来就写控制代码,结果机器人原地打转——后来发现是坐标系搞反了。嗯,咱们先把这地基打牢。

全局坐标系与局部坐标系

先问个问题:你站在路边看一辆车,和坐在车里看路,感觉一样吗?当然不一样。这就是全局坐标系和局部坐标系的区别。

  • 全局坐标系(世界坐标系):固定在地面上的参考系。比如地图上的经纬度,或者车间里的某个墙角。所有物体的位置,都可以用这个坐标系来描述。
  • 局部坐标系(机器人坐标系):固定在机器人身上的参考系。通常以机器人的中心为原点,正前方为X轴正方向。机器人感知到的障碍物、目标点,都是相对于它自己的。

我个人习惯把全局坐标系叫“上帝视角”,局部坐标系叫“第一人称视角”。做路径跟踪时,你需要在两个视角之间来回切换。

核心要点:全局坐标系用于规划路径,局部坐标系用于执行控制。两者之间的桥梁,就是坐标变换。

机器人位姿 (x, y, θ) 表示

机器人在二维平面上的状态,用三个量就够了:

  • x, y:机器人在全局坐标系中的位置坐标
  • θ:机器人的朝向角,通常以全局X轴正方向为0°,逆时针为正

举个例子:位姿 (2.0, 1.5, 30°) 表示机器人在全局坐标 (2.0, 1.5) 处,车头朝东北方向偏了30度。

我的经验:θ 的取值范围一定要统一。我习惯用 [-π, π] 而不是 [0, 2π),因为做角度差计算时不容易出错。曾经有个项目,就是因为角度归一化没做好,导致机器人原地转圈——嗯,那晚加班到凌晨三点。

齐次变换矩阵

坐标变换怎么算?用齐次变换矩阵。它把旋转和平移打包成一个 3×3 的矩阵,方便计算。

从局部坐标系到全局坐标系的变换矩阵长这样:

T = | cosθ  -sinθ  x |
    | sinθ   cosθ  y |
    |  0      0    1 |

假设机器人在局部坐标系中看到一个点 (x_local, y_local),想求它在全局坐标系中的坐标?直接乘:

| x_global |   | cosθ  -sinθ  x |   | x_local |
| y_global | = | sinθ   cosθ  y | * | y_local |
|   1      |   |  0      0    1 |   |   1     |

反过来,从全局到局部,求逆矩阵就行:

T_inv = | cosθ   sinθ  -x*cosθ - y*sinθ |
        | -sinθ  cosθ   x*sinθ - y*cosθ |
        |  0      0           1         |

避坑指南:我曾经在项目中直接用矩阵求逆函数算 T_inv,结果因为浮点数精度问题,算出来的结果有微小误差。对于旋转矩阵,直接用上面的公式算逆,又快又准。

坐标变换基础

实际项目中,坐标变换就三种场景:

  1. 传感器数据转全局:激光雷达测到的障碍物是局部坐标,要转到全局坐标系才能建图
  2. 全局路径转局部:规划器给出的路径点是全局坐标,要转到局部坐标系才能跟踪
  3. 多机器人协同:每个机器人有自己的局部坐标系,需要统一到全局坐标系才能协作

举个例子,假设机器人位姿是 (1.0, 2.0, 45°),它在局部坐标系中看到一个障碍物在 (0.5, 0.0)。那么障碍物的全局坐标是多少?

θ = 45° = π/4
cosθ ≈ 0.707, sinθ ≈ 0.707

x_global = 0.707 * 0.5 - 0.707 * 0.0 + 1.0 = 1.354
y_global = 0.707 * 0.5 + 0.707 * 0.0 + 2.0 = 2.354

你看,算起来其实不复杂。但要注意,实际代码里角度要用弧度制,别写成度数了——我见过有人直接传45进去,结果机器人跑偏了还找不到原因。

一句话总结:坐标系是视角,位姿是状态,变换矩阵是工具。这三样东西搞明白了,路径跟踪的底层逻辑就通了。

知识体系结构图

下面这张图,把本章的核心逻辑串起来了:

坐标系与位姿表示 · 知识体系 全局坐标系 固定在地面,上帝视角 局部坐标系 固定在机器人,第一人称 机器人位姿 (x, y, θ) 位置 + 朝向,描述机器人状态 齐次变换矩阵 T 旋转 + 平移,3×3 矩阵 坐标变换:全局 ↔ 局部 传感器数据转全局 · 全局路径转局部 · 多机器人协同 描述位置 描述位置 构造矩阵 实现变换

我的建议:刚开始学的时候,别急着背公式。先拿张纸,画个坐标系,标几个点,手动算一遍变换。我当年就是这么干的——算错了几次之后,印象特别深。

好了,坐标系和位姿这部分就聊到这。记住:搞清楚了“机器人在哪、它朝哪看、目标在哪”,剩下的控制算法才有意义。不然你调得再好,也是南辕北辙。

可可精品资料库