3. 刚体姿态描述
在机械臂运动学中,位置描述解决的是“末端在哪儿”的问题,而姿态描述解决的是“末端朝哪个方向”的问题。对于六自由度串联机械臂,末端执行器的姿态通常由三个独立参数确定,但如何用数学形式表达这三个自由度,直接影响到正运动学计算的效率、轨迹插值的平滑性以及奇异点的处理方式。本章围绕欧拉角、旋转向量和四元数三种主流姿态描述方法,从数学定义、工程适用性到相互转换关系展开系统讲解,为后续雅可比矩阵推导和轨迹规划打下基础。
3.1 欧拉角:直观但需警惕万向锁
3.1.1 核心原理
欧拉角的基本思想是将任意姿态分解为绕三个坐标轴的依次旋转。以工业机器人最常用的 ZYX 欧拉角为例,其旋转顺序为:先绕固定坐标系 Z 轴旋转偏航角 yaw(ψ),再绕新 Y 轴旋转俯仰角 pitch(θ),最后绕新 X 轴旋转横滚角 roll(φ)。对应的旋转矩阵为:
R = Rz(ψ) · Ry(θ) · Rx(φ)
其中每个基本旋转矩阵均为标准形式。ZYX 约定在航空航天和移动机器人领域应用广泛,而 ZYZ 约定则常见于六轴工业机器人的腕部姿态描述。需要特别注意的是,欧拉角的 12 种约定(不同旋转轴顺序)会产生不同的旋转矩阵表达式,在跨平台数据交换时必须明确标注约定类型。
3.1.2 判断方法与操作流程
选择欧拉角约定时,应遵循以下判断流程:
- 明确应用场景:若用于地面机器人导航,优先 ZYX(偏航-俯仰-横滚);若用于机械臂腕部,ZYZ 或 ZYX 均可,需与 DH 参数表配合。
- 检查奇异位置:ZYX 约定在 pitch = ±90° 时出现万向锁,此时 roll 和 yaw 无法独立区分。
- 确认数据接口:与外部系统(如视觉引导、上位机)通信时,必须统一约定顺序和正方向。
3.1.3 案例拆解:六轴机器人腕部姿态读取
某品牌六轴机器人控制器返回的末端姿态为 ZYX 欧拉角(单位:度):ψ = 30°,θ = 45°,φ = 60°。工程师需要将其转换为旋转矩阵用于正运动学验证。计算过程如下:
Rz(30°) = [0.866 -0.5 0; 0.5 0.866 0; 0 0 1]
Ry(45°) = [0.707 0 0.707; 0 1 0; -0.707 0 0.707]
Rx(60°) = [1 0 0; 0 0.5 -0.866; 0 0.866 0.5]
R = Rz · Ry · Rx = [0.435 0.659 0.612; 0.789 -0.047 -0.612; -0.435 0.750 -0.500]
验证:R 的行列式应为 +1,且 R·Rᵀ = I。该矩阵可直接用于后续的坐标变换计算。
3.2 旋转向量:紧凑的轴角表示
3.2.1 核心原理
旋转向量(又称轴角表示)用一个三维向量 r = θ·k 描述姿态,其中 k 为单位旋转轴,θ 为绕该轴的旋转角度。其优势在于参数紧凑(仅 3 个分量),且物理意义明确——旋转轴和转角直接对应机械臂关节的等效旋转。旋转向量到旋转矩阵的转换由罗德里格斯公式给出:
R = I + sin(θ)·[k]× + (1 - cos(θ))·[k]ײ
其中 [k]× 为 k 的反对称矩阵。该公式在机械臂标定和视觉伺服中频繁使用。
3.2.2 操作流程与注意事项
- 归一化处理:使用前必须确保 k 为单位向量,否则需先除以模长。
- 角度范围:θ 通常限制在 [0, π] 区间,超出部分可通过角度加减 2π 等效变换。
- 与角速度的关系:旋转向量的时间导数与角速度之间存在映射矩阵,可用于微分运动学推导。
3.2.3 实战场景:机械臂手眼标定中的旋转向量
在眼在手上的手眼标定中,标定板相对于相机的位姿变化常以旋转向量形式输出。假设某次标定得到旋转向量 r = [0.1, 0.2, 0.3]ᵀ,则 θ = ||r|| = 0.374,k = [0.267, 0.535, 0.802]ᵀ。代入罗德里格斯公式即可得到旋转矩阵,用于构建 AX = XB 方程。该表示法避免了欧拉角的奇异问题,且计算量小于四元数转换。
3.3 四元数:计算效率与无奇异性的最优解
3.3.1 核心原理
单位四元数 q = (w, x, y, z) 满足 w² + x² + y² + z² = 1,其中 w 为标量部分,表示旋转角的一半余弦;向量部分 (x, y, z) 表示旋转轴方向乘以半角正弦。四元数到旋转矩阵的转换公式为:
R = [[1-2(y²+z²), 2(xy-wz), 2(xz+wy)],
[2(xy+wz), 1-2(x²+z²), 2(yz-wx)],
[2(xz-wy), 2(yz+wx), 1-2(x²+y²)]]
四元数的核心优势在于:无奇异点、插值平滑(球面线性插值 slerp)、组合旋转仅需一次乘法,且计算量比矩阵乘法少约 25%。
3.3.2 判断方法与操作流程
| 特性 | 欧拉角 | 旋转向量 | 四元数 |
|---|---|---|---|
| 参数数量 | 3 | 3 | 4(1 约束) |
| 奇异性 | 有(万向锁) | 无 | 无 |
| 插值平滑性 | 差 | 中等 | 优(slerp) |
| 计算效率 | 中 | 中 | 高 |
| 直观性 | 高 | 中 | 低 |
| 典型应用 | 人机交互、可视化 | 标定、微分运动学 | 轨迹规划、姿态融合 |
3.3.3 案例拆解:四元数插值在轨迹规划中的应用
某协作机器人需要在两点之间平滑过渡姿态:起点四元数 q₁ = (1, 0, 0, 0)(单位姿态),终点 q₂ = (0.707, 0, 0.707, 0)(绕 Y 轴旋转 90°)。采用 slerp 插值,在 t = 0.5 时:
θ = acos(q₁·q₂) = acos(0.707) = 45°
q(t) = [sin((1-t)θ)·q₁ + sin(tθ)·q₂] / sin(θ)
q(0.5) = [sin(22.5°)·(1,0,0,0) + sin(22.5°)·(0.707,0,0.707,0)] / sin(45°)
= (0.924, 0, 0.383, 0)
该插值保证了旋转轴恒定、角速度均匀,避免了欧拉角插值可能出现的姿态抖动。实际工程中,还需对插值后的四元数进行归一化处理,防止累积误差。
3.4 相互转换:以旋转矩阵为桥梁的统一框架
3.4.1 转换流程与公式
四种表示方法(旋转矩阵、欧拉角、旋转向量、四元数)之间的转换,推荐统一以旋转矩阵为中间桥梁,避免直接转换带来的公式复杂化和数值不稳定。核心转换路径如下:
- 欧拉角 → 旋转矩阵:按约定顺序连乘基本旋转矩阵。
- 旋转矩阵 → 欧拉角:根据矩阵元素反解,注意奇异情况处理。
- 旋转向量 → 旋转矩阵:罗德里格斯公式。
- 旋转矩阵 → 旋转向量:θ = arccos((tr(R)-1)/2),k 由反对称部分提取。
- 四元数 → 旋转矩阵:直接代数映射。
- 旋转矩阵 → 四元数:利用矩阵迹和主对角元素求解。
3.4.2 转换中的数值稳定性问题
从旋转矩阵提取欧拉角时,当 pitch 接近 ±90° 时,atan2 函数的两个参数同时趋近于零,导致角度解不稳定。此时应改用四元数作为中间表示。从旋转矩阵提取四元数时,若 w 接近零,需改用 x、y、z 中值最大的分量作为主元,避免除以接近零的数。
3.4.3 案例拆解:视觉引导抓取中的姿态转换
某视觉系统输出目标物体的姿态为四元数 q = (0.924, 0.383, 0, 0),机械臂控制器需要欧拉角格式(ZYX)进行运动指令下发。转换过程:
步骤1:四元数 → 旋转矩阵
R = [[1, 0, 0],
[0, 0.707, -0.707],
[0, 0.707, 0.707]]
步骤2:旋转矩阵 → ZYX 欧拉角
ψ = atan2(R[1,0], R[0,0]) = atan2(0, 1) = 0°
θ = atan2(-R[2,0], sqrt(R[0,0]²+R[1,0]²)) = atan2(0, 1) = 0°
φ = atan2(R[2,1], R[2,2]) = atan2(0.707, 0.707) = 45°
最终得到欧拉角 (0°, 0°, 45°),即绕 Z 轴旋转 45°。该转换耗时约 5μs,满足实时性要求。若直接使用四元数到欧拉角的公式,则需处理多组解和象限判断,代码复杂度显著增加。
3.5 常见误区与工程复盘
3.5.1 典型错误
- 混淆旋转顺序:不同厂家控制器可能使用不同的欧拉角约定,直接套用公式会导致姿态偏差。
- 忽略四元数归一化:连续乘法后四元数模长漂移,导致旋转矩阵非正交。
- 在奇异点附近使用欧拉角插值:产生“抖动”或“绕远路”现象。
- 旋转向量角度超过 π:导致旋转轴方向翻转,插值路径异常。
3.5.2 工程复盘清单
| 检查项 | 方法 | 通过标准 |
|---|---|---|
| 旋转矩阵正交性 | 计算 R·Rᵀ | 与单位矩阵误差 < 1e-6 |
| 四元数模长 | 计算 w²+x²+y²+z² | 与 1 误差 < 1e-6 |
| 欧拉角范围 | 检查 pitch 是否接近 ±90° | 远离奇异区域 |
| 转换往返一致性 | 姿态 → 矩阵 → 姿态 | 角度误差 < 0.01° |
3.5.3 总结与选型建议
在实际机械臂系统中,推荐采用混合策略:人机交互界面使用欧拉角显示,内部计算和轨迹插值使用四元数,标定和微分运动学使用旋转向量。所有数据交换统一通过旋转矩阵作为中间格式,确保不同模块之间的兼容性。对于实时性要求高的场景(如力控、视觉伺服),应优先使用四元数;对于需要直观理解姿态的场景(如示教器显示),欧拉角仍是不可替代的选择。