3. 坐标变换与位姿描述:齐次坐标、旋转矩阵、欧拉角、四元数基础
各位,欢迎来到第三章。说实话,这一章是整个多自由度调整机构的数学基石。你后面要做的运动学分析、轨迹规划、误差补偿,全得靠这里的东西撑起来。
我记得刚入行那会儿,总觉得坐标变换不就是矩阵乘来乘去嘛,有啥难的?直到第一次调试六轴机器人,发现末端执行器死活对不准目标点……嗯,从那以后我再也不敢小看这章内容了。
3.1 为什么需要坐标变换?
多自由度机构里,每个关节都有自己的坐标系。你想想看,基座一个坐标系,关节1一个坐标系,关节2一个坐标系……末端执行器又一个坐标系。这些坐标系之间怎么互相转换?
说白了,坐标变换就是解决这个问题的——把某个点在A坐标系下的坐标,换算到B坐标系下。我习惯把它叫做「翻译官」。
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 知识体系总览
下面这张图,是我做课程时画的。它把本章的核心概念串起来了:
3.8 实际应用中的选择建议
说了这么多,到底什么时候用哪个?我根据自己的项目经验,整理了一个对照表:
| 应用场景 | 推荐方法 | 原因 |
|---|---|---|
| 人机界面显示 | 欧拉角 | 直观,操作员容易理解 |
| 运动学计算 | 齐次变换矩阵 | 统一处理旋转和平移 |
| 轨迹插值 | 四元数 | 平滑无奇点 |
| 传感器数据融合 | 四元数 | 计算效率高,无万向锁 |
| 静态位姿标定 | 旋转矩阵 | 数学性质好,误差分析方便 |
好了,这一章的内容就到这里。记住:坐标变换不是数学游戏,它是你控制多自由度机构的「通用语言」。把这套语言练熟了,后面做运动学、动力学、轨迹规划,都会顺手很多。