2. 坐标系与位姿描述:刚体在空间中的描述、齐次变换矩阵、欧拉角与四元数

各位同学,咱们今天聊点硬核的。坐标系与位姿描述,说白了就是回答三个问题:“它在哪里?”、“它朝哪看?”、“我怎么从A走到B?”。

我刚开始做机器人那会儿,觉得这玩意儿不就是高中数学里的向量嘛。直到第一次调试六轴机械臂,发现末端执行器死活对不准目标点……嗯,从那以后我才真正明白,位姿描述不准确,后面所有的运动规划都是空中楼阁。

核心观点: 刚体在空间中的完整状态 = 位置(3个自由度)+ 姿态(3个自由度)= 6自由度。任何运动规划,第一步就是把这6个自由度说清楚。

2.1 刚体在空间中的描述

刚体,你可以想象成一块“不会变形的铁疙瘩”。它在空间里怎么表示?

  • 位置:用坐标系原点相对于参考系原点的偏移量 (x, y, z) 表示。
  • 姿态:用固连在刚体上的坐标系相对于参考系的旋转关系表示。

我个人习惯把姿态想象成“把参考系掰弯成刚体坐标系”的过程。这个“掰弯”的过程,就是旋转矩阵。

举个例子,一个坐标系 {B} 相对于 {A} 的姿态,可以用一个 3x3 的旋转矩阵 ABR 来表示。矩阵的每一列,其实就是 {B} 的坐标轴在 {A} 中的投影。

// 旋转矩阵示例:绕Z轴旋转θ角
R_z(θ) = | cosθ  -sinθ  0 |
         | sinθ   cosθ  0 |
         | 0      0     1  |
实战小技巧: 我在项目中经常用旋转矩阵做坐标变换。但要注意,旋转矩阵有9个元素,却只有3个自由度,所以它必须满足正交性(RTR = I)。如果你手算的矩阵不满足这个条件,那一定是算错了。

2.2 齐次变换矩阵

旋转矩阵只能描述姿态,不能描述位置。那怎么办?把旋转和位移打包在一起,就是齐次变换矩阵。

齐次变换矩阵是一个 4x4 的方阵,长这样:

T = | R   p |
    | 0   1 |

其中:
R:3x3 旋转矩阵
p:3x1 位置向量
0:1x3 零向量
1:标量 1

为什么要加个“1”?说白了就是为了把旋转和位移统一成一次矩阵乘法。你想想看,如果只用 3x3 矩阵,你没法处理平移。齐次坐标(加一维)让这个问题变得优雅。

我记得有一次做多轴联动插补,需要把工具坐标系下的力传感器数据转换到基坐标系。如果没有齐次变换矩阵,你得先旋转再平移,步骤繁琐还容易出错。用齐次矩阵,一次乘法搞定。

避坑指南: 我曾经在串联机器人运动学标定中,因为齐次变换矩阵的乘法顺序搞反了,导致标定结果差了10毫米。记住:左乘表示相对于固定坐标系变换,右乘表示相对于当前坐标系变换。这个顺序错了,整个运动学链就崩了。

2.3 欧拉角

旋转矩阵虽然数学上严谨,但人看着头疼。你想想看,9个数字,谁能一眼看出机器人转了多少度?所以工程上更常用欧拉角。

欧拉角的核心思想:三次绕坐标轴的旋转,合成任意姿态。

常见的欧拉角约定有:

约定名称 旋转顺序 应用场景
ZYX(RPY) 绕Z轴→绕Y轴→绕X轴 航空、机器人末端姿态
ZYZ 绕Z轴→绕Y轴→绕Z轴 工业机器人运动学
XYZ(固定角) 绕X轴→绕Y轴→绕Z轴 视觉标定、相机位姿

这里有个大坑——万向锁。当第二次旋转达到 ±90° 时,第一次和第三次旋转的轴会重合,导致丢失一个自由度。我在做六轴机器人奇异点规避时,就吃过这个亏。当时机器人姿态突然“抽搐”,就是因为欧拉角表示遇到了万向锁。

我的建议: 欧拉角适合给人看、做界面交互,但不适合做插补和连续运动。如果你要做轨迹平滑,请用四元数。

2.4 四元数

四元数,听起来玄乎,其实就是一个“带约束的复数升级版”。它用四个数表示旋转:

q = w + xi + yj + zk

其中:
w:实部(标量部分)
x, y, z:虚部(向量部分)
约束:w² + x² + y² + z² = 1

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

  1. 无万向锁:这是最大的优势。你随便转,不会丢自由度。
  2. 插补平滑:球面线性插补(SLERP)可以在两个姿态之间生成平滑过渡。
  3. 计算高效:比旋转矩阵少一个维度,比欧拉角更稳定。

我记得有一次做协作机器人的拖动示教,需要实时记录操作者拖动的姿态轨迹。如果用欧拉角,稍微转得快一点就出现跳变。换成四元数后,数据平滑得像丝绸一样。

实战口诀: 四元数乘法不满足交换律,顺序很重要。q1 * q2 表示先转 q2 再转 q1。这个和矩阵乘法一样,别搞反了。

2.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你仔细看一遍,就能明白这些概念之间的关系。

坐标系与位姿描述知识体系 刚体位姿 (6-DOF) 位置 (x, y, z) 姿态 (旋转) 旋转矩阵 (3x3) 欧拉角 (RPY) 四元数 (w,x,y,z) 齐次变换矩阵 (4x4) 核心逻辑:位置 + 姿态 → 齐次变换 → 运动学链 → 轨迹插补 欧拉角适合人机交互,四元数适合插补计算,旋转矩阵适合数学推导

2.6 工程选型建议

最后,我根据多年项目经验,给你一个选型对照表。不同场景用不同表示方法,别死磕一种。

应用场景 推荐表示方法 原因
运动学正解/逆解 齐次变换矩阵 链式乘法方便,物理意义清晰
轨迹插补(连续运动) 四元数 无万向锁,SLERP插补平滑
人机界面/示教器 欧拉角 (RPY) 直观,操作者容易理解
视觉标定/手眼标定 旋转矩阵 + 平移向量 便于与相机模型对接
姿态优化/滤波 四元数 无奇异,适合数值优化
再次提醒: 我曾经在一个项目中,因为偷懒直接用欧拉角做插补,结果在奇异点附近机器人剧烈抖动,差点撞坏夹具。从那以后,凡是涉及连续运动的轨迹规划,我一律用四元数。这个习惯,救了我很多次。

好了,这一章的内容就到这里。坐标系和位姿描述是运动规划的基石,你花时间把它吃透,后面学轨迹插补、避障算法会轻松很多。记住:基础不牢,地动山摇。