3. 坐标变换与位姿描述:齐次坐标、旋转矩阵、欧拉角、四元数基础

各位,欢迎来到第三章。说实话,这一章是整个多自由度调整机构的数学基石。你后面要做的运动学分析、轨迹规划、误差补偿,全得靠这里的东西撑起来。

我记得刚入行那会儿,总觉得坐标变换不就是矩阵乘来乘去嘛,有啥难的?直到第一次调试六轴机器人,发现末端执行器死活对不准目标点……嗯,从那以后我再也不敢小看这章内容了。

3.1 为什么需要坐标变换?

多自由度机构里,每个关节都有自己的坐标系。你想想看,基座一个坐标系,关节1一个坐标系,关节2一个坐标系……末端执行器又一个坐标系。这些坐标系之间怎么互相转换?

说白了,坐标变换就是解决这个问题的——把某个点在A坐标系下的坐标,换算到B坐标系下。我习惯把它叫做「翻译官」。

核心思想: 一个刚体在空间中的位姿(位置+姿态),可以用一个4×4的齐次变换矩阵完整描述。

3.2 齐次坐标——为什么要多一个维度?

先问个问题:一个3D点 (x, y, z),怎么用矩阵乘法同时完成旋转和平移?

答案就是——引入齐次坐标。把三维点扩展成四维:(x, y, z, w)。通常 w=1,表示一个点;w=0,表示一个方向向量。

// 普通三维点 → 齐次坐标
P = (x, y, z) → P_h = (x, y, z, 1)

// 方向向量 → 齐次坐标
V = (vx, vy, vz) → V_h = (vx, vy, vz, 0)

为什么要这么干?因为这样旋转和平移就能合并成一个矩阵乘法了。我在做并联机构标定时,用齐次坐标把几十个测量点的坐标统一转换到基坐标系下,省了不少事。

3.3 旋转矩阵——描述姿态的核心工具

旋转矩阵是一个3×3的正交矩阵,行列式为+1。它描述了坐标系之间的旋转关系。

绕X轴旋转角度θ:

R_x(θ) = [1      0       0    ]
         [0   cosθ   -sinθ   ]
         [0   sinθ    cosθ   ]

绕Y轴旋转角度θ:

R_y(θ) = [ cosθ   0   sinθ   ]
         [ 0      1   0      ]
         [-sinθ   0   cosθ   ]

绕Z轴旋转角度θ:

R_z(θ) = [cosθ  -sinθ   0   ]
         [sinθ   cosθ   0   ]
         [ 0      0     1   ]
我的经验: 旋转矩阵虽然直观,但有个大坑——它容易产生「万向锁」。你如果只用欧拉角做插值,到某些角度时自由度会丢失。我曾经在调一个云台时吃过这个亏,后来果断换了四元数。

3.4 欧拉角——直观但危险

欧拉角用三个角度描述旋转:通常叫滚转(Roll)、俯仰(Pitch)、偏航(Yaw)。

名称 旋转轴 符号 范围
滚转 (Roll) X轴 φ -π ~ π
俯仰 (Pitch) Y轴 θ -π/2 ~ π/2
偏航 (Yaw) Z轴 ψ -π ~ π

欧拉角的好处是直观,人脑容易理解。但坏处也很明显:

  • 万向锁: 当俯仰角接近±90°时,滚转和偏航会变成同一个轴
  • 不唯一: 同一姿态对应多组欧拉角
  • 插值困难: 两个姿态之间做线性插值,路径可能很奇怪
避坑指南: 我曾经在做一个五自由度调整台时,直接用欧拉角做轨迹规划。结果在某个中间位置,机构突然「跳」了一下——就是万向锁搞的鬼。从那以后,我只要涉及连续运动,一律用四元数做内部计算,只在人机界面显示时才转成欧拉角。

3.5 四元数——工业界的首选

四元数是个超复数:q = w + xi + yj + zk,其中 w 是实部,(x, y, z) 是虚部。它用四个参数描述旋转,没有奇点,插值平滑。

单位四元数(模长为1)表示旋转:

q = [cos(θ/2), sin(θ/2)·nx, sin(θ/2)·ny, sin(θ/2)·nz]

其中 (nx, ny, nz) 是旋转轴单位向量,θ 是旋转角度

四元数的好处:

  • 无万向锁
  • 插值平滑(球面线性插值SLERP)
  • 计算效率高(比旋转矩阵少乘法)
  • 存储紧凑(4个浮点数 vs 9个)
我的习惯: 所有内部运动学计算都用四元数。只在最后输出给用户看时,才转成欧拉角。这样既保证了计算稳定性,又照顾了人的直观理解。

3.6 齐次变换矩阵——把旋转和平移打包

齐次变换矩阵 T 是4×4的:

T = [R   t]
    [0   1]

其中 R 是3×3旋转矩阵,t 是3×1平移向量

用这个矩阵,你可以把点从坐标系A变换到坐标系B:

P_B = T_AB · P_A

多个变换可以连乘:

T_AC = T_AB · T_BC

这就是多自由度机构运动学的基础——每个关节的变换矩阵连乘,就得到了末端相对于基座的位姿。

3.7 知识体系总览

下面这张图,是我做课程时画的。它把本章的核心概念串起来了:

坐标变换与位姿描述知识体系 位姿描述 位置描述 姿态描述 齐次变换 旋转矩阵 欧拉角 四元数 4×4变换矩阵 链式乘法 三维坐标 齐次坐标 核心:齐次变换矩阵 T = [R t; 0 1] 统一描述旋转+平移 内部计算用四元数,人机交互用欧拉角

3.8 实际应用中的选择建议

说了这么多,到底什么时候用哪个?我根据自己的项目经验,整理了一个对照表:

应用场景 推荐方法 原因
人机界面显示 欧拉角 直观,操作员容易理解
运动学计算 齐次变换矩阵 统一处理旋转和平移
轨迹插值 四元数 平滑无奇点
传感器数据融合 四元数 计算效率高,无万向锁
静态位姿标定 旋转矩阵 数学性质好,误差分析方便
我的建议: 刚开始学的时候,先把齐次变换矩阵和旋转矩阵搞透。这两个是基础中的基础。四元数可以先用起来,慢慢理解它的几何意义。欧拉角嘛……能不用就不用,除非你只是给用户看个读数。

好了,这一章的内容就到这里。记住:坐标变换不是数学游戏,它是你控制多自由度机构的「通用语言」。把这套语言练熟了,后面做运动学、动力学、轨迹规划,都会顺手很多。