2. 坐标系与刚体运动基础:世界坐标系、机器人坐标系、旋转矩阵、四元数、欧拉角

做轨迹评估,说白了就是回答一个问题:机器人到底走没走对?

要回答这个问题,你首先得有个「尺子」和「参照物」。这个尺子就是坐标系,而机器人怎么动,就是刚体运动。我刚开始接触SLAM时,觉得坐标系这东西太简单了,结果第一次做轨迹对齐就栽了跟头——两个坐标系没搞对,误差曲线画出来跟心电图似的。嗯,从那以后我再也不敢小看这一章了。

2.1 世界坐标系与机器人坐标系

世界坐标系,你可以理解为「上帝视角」。它固定在地面上,通常用 W 表示。机器人坐标系,也叫本体坐标系,跟着机器人走,通常用 B 或 R 表示。

举个例子:

  • 世界坐标系:原点在房间角落,X轴朝东,Y轴朝北,Z轴朝天。
  • 机器人坐标系:原点在机器人中心,X轴朝前,Y轴朝左,Z轴朝天。

轨迹评估时,我们拿到的往往是机器人坐标系下的位姿估计,但真值通常在世界坐标系下。所以,坐标变换是绕不开的一步。

核心概念: 一个点在世界坐标系下的坐标 pW,与在机器人坐标系下的坐标 pB,满足:
pW = RWB · pB + tWB
其中 RWB 是旋转矩阵,tWB 是平移向量。

2.2 旋转矩阵

旋转矩阵,是描述刚体旋转最直观的方式。它是一个 3×3 的正交矩阵,行列式为 +1。

我个人习惯用旋转矩阵做中间转换,因为它数学性质好,组合方便。但缺点也很明显——9个参数,冗余,而且容易受数值误差影响变成非正交矩阵。

绕 X、Y、Z 轴旋转 θ 角的基本旋转矩阵:

Rx(θ) = [[1, 0, 0],
            [0, cosθ, -sinθ],
            [0, sinθ, cosθ]]

Ry(θ) = [[cosθ, 0, sinθ],
            [0, 1, 0],
            [-sinθ, 0, cosθ]]

Rz(θ) = [[cosθ, -sinθ, 0],
            [sinθ, cosθ, 0],
            [0, 0, 1]]
我的小技巧: 在代码里,我一般用 Eigen 或 Sophus 库来管理旋转矩阵,避免手写。手写容易写错符号,我曾经因为一个 sin 的符号搞反,调试了整整一个下午。

2.3 四元数

四元数,很多人觉得它抽象。说白了,它就是「旋转轴 + 旋转角度」的一种紧凑表示。

一个四元数 q = [w, x, y, z],其中 w 是实部,(x, y, z) 是虚部。它满足 w² + x² + y² + z² = 1。

为什么用四元数?三个理由:

  • 无万向锁——欧拉角的死穴,四元数完美避开
  • 插值平滑——做轨迹平滑时,球面线性插值(SLERP)非常自然
  • 紧凑——4个参数,比旋转矩阵少5个

我记得有一次做无人机轨迹评估,用欧拉角做插值,结果在俯仰90°时姿态直接飞了。换成四元数,问题瞬间解决。

注意: 四元数有「左乘」和「右乘」之分,不同库的约定可能不同。我曾经在对接两个团队代码时,发现一个用 Hamilton 约定,一个用 JPL 约定,结果轨迹差了十万八千里。务必统一!

2.4 欧拉角

欧拉角,最直观的旋转表示。三个角度:滚转(Roll)、俯仰(Pitch)、偏航(Yaw)。

但直观归直观,坑也最多:

  • 万向锁:当俯仰角接近 ±90° 时,滚转和偏航会耦合,丢失一个自由度
  • 顺序依赖:ZYX、XYZ、ZYZ……不同顺序结果完全不同
  • 多值性:同一个旋转对应多组欧拉角

我个人只在可视化或人机交互时用欧拉角,内部计算一律用四元数或旋转矩阵。

表示方式 参数数量 优点 缺点
旋转矩阵 9 数学性质好,组合方便 冗余,需正交化
四元数 4 无万向锁,插值平滑 不够直观
欧拉角 3 直观,易理解 万向锁,顺序依赖

2.5 知识体系总览

下面这张图,是我自己总结的坐标系与刚体运动知识结构。你想想看,整个轨迹评估的底层逻辑,其实就围绕这几个概念转。

坐标系与刚体运动知识体系 世界坐标系 (W) 固定在地面,上帝视角 机器人坐标系 (B) 跟着机器人走 坐标变换 刚体运动 (R + t) 旋转矩阵 3×3 正交矩阵 9参数,冗余 四元数 [w, x, y, z] 4参数,无万向锁 欧拉角 Roll/Pitch/Yaw 3参数,有万向锁

2.6 避坑指南

我曾经踩过的坑:
  • 四元数顺序搞反:Eigen 和 ROS 的 q.w 位置不同,一个在前一个在后
  • 欧拉角顺序没确认:对方用 ZYX,我用 XYZ,轨迹直接镜像
  • 旋转矩阵忘记正交化:迭代多次后矩阵变形,导致尺度错误
我的建议:
  • 内部计算统一用四元数,只在输入输出时转欧拉角
  • 每次做坐标变换前,先打印一个已知点验证
  • 写单元测试,用恒等变换(旋转0°)做基准测试

好了,坐标系和刚体运动的基础就这些。别看概念简单,实际项目中80%的轨迹评估问题,根源都在这里。搞懂了这一章,后面的误差指标计算才能站得住脚。


可可精品资料库