4、刚体姿态描述:旋转矩阵的性质、旋转的表示方法、姿态插值基础

在机械臂运动学中,位置与姿态共同构成末端执行器的完整位形。位置描述相对直观,而姿态描述则涉及刚体在三维空间中的朝向。本章聚焦于旋转矩阵的数学性质、多种旋转表示方法(欧拉角、轴角、四元数)之间的内在联系与转换,并引入姿态插值的基础概念。理解这些内容不仅是推导正逆运动学方程的前提,更是后续轨迹规划中保证末端姿态平滑过渡的理论基石。

刚体姿态描述与插值知识框架 刚体姿态描述 旋转矩阵 R ∈ SO(3) 性质:正交、行列式=+1 列向量构成右手系标准正交基 逆矩阵 = 转置矩阵 旋转表示方法 欧拉角(ZYX/RPY) 轴角(旋转轴+旋转角) 单位四元数(无万向锁) 姿态插值基础 线性插值(LERP) 球面线性插值(SLERP) 四元数插值保证平滑 工程应用与转换关系 R = Rz(γ) · Ry(β) · Rx(α) (ZYX欧拉角) 四元数 ↔ 旋转矩阵 ↔ 轴角 ↔ 欧拉角 相互转换 姿态插值用于轨迹规划、视觉伺服、遥操作平滑

4.1 旋转矩阵的性质与几何意义

旋转矩阵是描述刚体姿态最基础、最严谨的数学工具。一个3×3旋转矩阵 R 属于特殊正交群 SO(3),其核心性质可归纳为:正交性(RᵀR = I)与行列式为+1。正交性意味着旋转矩阵的每一列(或每一行)都是单位向量,且两两正交;行列式为+1则保证了旋转不改变刚体的手性(不产生镜像)。从几何角度看,旋转矩阵的三列分别表示刚体固连坐标系各轴在参考坐标系中的方向余弦。

核心性质速查:
  • R⁻¹ = Rᵀ,即逆旋转等于转置,这一性质在运动学反解中频繁使用。
  • det(R) = +1,区别于反射矩阵(det = -1)。
  • 旋转矩阵的乘法不满足交换律:R₁R₂ ≠ R₂R₁,这反映了三维旋转的顺序依赖性。
  • 旋转矩阵的9个元素只有3个独立自由度,因此存在6个约束方程(正交性+归一化)。

在机械臂应用中,旋转矩阵通常用于描述连杆坐标系之间的变换。例如,从基座坐标系到末端执行器坐标系的旋转矩阵 R₆₀,可以通过各关节旋转矩阵连乘得到。这种表示方法在理论推导中非常清晰,但由于9个参数冗余,直接用于插值或优化时效率较低,因此工程中常转换为其他表示。

4.2 旋转的表示方法:欧拉角、轴角与四元数

为了更紧凑地描述旋转,工程中发展了多种参数化方法。每种方法各有优劣,适用于不同场景。

表示方法 参数数量 优点 缺点 典型应用
旋转矩阵 9 无奇异,组合方便 冗余,不直观 理论推导、坐标变换
欧拉角(ZYX) 3 直观,易理解 万向锁问题,插值不平滑 人机交互、姿态显示
轴角 4 几何意义明确 插值需转换为四元数 旋转增量计算
单位四元数 4 无奇异,插值平滑 不直观,需转换 轨迹规划、姿态控制

欧拉角(如ZYX约定,即先绕Z轴旋转γ,再绕新Y轴旋转β,最后绕新X轴旋转α)在机械臂示教器中广泛使用,因为操作员可以直观理解“偏航-俯仰-滚转”的含义。然而,当β接近±90°时,α和γ的旋转轴重合,导致自由度丢失,即万向锁现象。此时系统无法独立控制第三个轴,在轨迹规划中可能产生突变。

轴角表示用一个单位向量 k 和旋转角 θ 描述旋转,其旋转矩阵可由罗德里格斯公式计算。轴角在描述单次旋转时非常直观,但两个轴角之间不能直接进行线性插值,因为角度和轴在插值过程中需要分别处理。

单位四元数 q = (w, x, y, z) 是解决上述问题的理想工具。它满足 w² + x² + y² + z² = 1,且 q 和 -q 表示同一旋转。四元数乘法对应旋转组合,且不存在奇异点。更重要的是,四元数支持球面线性插值(SLERP),能够生成恒速、最短路径的平滑旋转过渡,这是机械臂姿态规划中最常用的插值方法。

4.3 姿态插值基础:从LERP到SLERP

在机械臂执行任务时,例如从A点抓取物体移动到B点放置,不仅需要规划末端位置路径,还需要规划姿态变化。若姿态变化剧烈或不平滑,可能导致关节速度突变、振动甚至奇异位形。姿态插值的核心目标是在两个给定姿态之间生成一系列中间姿态,使运动平滑且可预测。

最简单的线性插值(LERP)直接对旋转矩阵或四元数分量进行线性插值:q(t) = (1-t)q₁ + t q₂,然后归一化。这种方法计算简单,但存在明显缺陷:插值路径不是最短的,且角速度不均匀——中间过程旋转速度会先快后慢,导致末端执行器出现“抖动”感。

球面线性插值(SLERP)则解决了上述问题。其公式为:

q(t) = [sin((1-t)θ) / sin θ] · q₁ + [sin(tθ) / sin θ] · q₂

其中 θ = arccos(q₁ · q₂) 是两个四元数之间的夹角。SLERP保证插值路径沿四维单位球面上的测地线进行,因此角速度恒定,且路径最短。当 q₁ 和 q₂ 夹角接近0或π时,sin θ 趋近于0,需改用LERP或Nlerp(归一化线性插值)避免数值不稳定。

工程经验:在机械臂轨迹规划中,建议将姿态插值统一在四元数空间进行。具体流程为:将起始和终止旋转矩阵转换为四元数 → 检查点积符号(若为负,取反其中一个四元数以保证最短路径) → 使用SLERP生成中间四元数 → 将插值结果转换回旋转矩阵用于逆运动学求解。

4.4 案例拆解:六轴机械臂姿态平滑过渡

背景与约束:某六轴关节型机械臂需要完成“螺丝拧紧”任务。起始姿态为末端法兰垂直向下(姿态A),目标姿态为倾斜30°对准螺丝孔(姿态B)。控制器要求姿态过渡时间1.5秒,且末端角速度峰值不超过30°/s,以避免损坏精密工件。

初始现象与目标:若直接使用欧拉角线性插值,在姿态B的俯仰角接近90°时出现万向锁,导致规划出的姿态路径出现180°突变,机械臂在运动中途发生剧烈抖动。目标是通过合理的姿态表示与插值方法,生成平滑且满足角速度约束的轨迹。

关键输入数据:

  • 姿态A(旋转矩阵):R_A = [1 0 0; 0 1 0; 0 0 1](单位矩阵)
  • 姿态B(旋转矩阵):R_B = [0.866 0 -0.5; 0 1 0; 0.5 0 0.866](绕Y轴旋转30°)
  • 插值时间:1.5s,控制周期:10ms(150个插值点)

分析判断过程:首先将R_A和R_B转换为四元数:q_A = (1, 0, 0, 0),q_B = (0.966, 0, 0.259, 0)。计算点积 q_A · q_B = 0.966 > 0,无需取反。使用SLERP公式生成150个中间四元数,再转换回旋转矩阵,最后通过逆运动学求解各关节角度。

实际操作步骤:

  1. 在MATLAB或Python中编写四元数转换与SLERP函数。
  2. 对每个插值点计算四元数,并转换为旋转矩阵。
  3. 调用机械臂逆运动学函数,得到关节角序列。
  4. 计算末端角速度:ω(t) ≈ 2·arccos(w(t)) / Δt,验证峰值是否低于30°/s。

结果对比:采用SLERP后,末端角速度曲线平滑,峰值约25°/s,满足约束。而采用欧拉角LERP时,在t=0.7s附近出现角速度尖峰达120°/s,且路径明显偏离最短旋转路径。

风险与代价:SLERP计算量略高于LERP,但在现代控制器中可忽略不计。主要风险在于四元数双覆盖性(q和-q),若未检查点积符号,可能导致插值路径绕远路。此外,当插值角度接近180°时,SLERP数值不稳定,需改用Nlerp并接受微小角速度波动。

复盘经验:在机械臂姿态规划中,应始终优先使用四元数表示与SLERP插值。同时,建议在控制器中内置四元数-旋转矩阵转换库,并设置万向锁检测机制,当欧拉角接近奇异时自动切换至四元数模式。

4.5 常见误区与总结复盘

在姿态描述与插值的工程实践中,以下误区值得特别注意:

误区一:混淆旋转矩阵的乘法顺序。在计算复合旋转时,若采用“固定坐标系”约定,则旋转矩阵左乘;若采用“动坐标系”约定,则右乘。机械臂运动学中通常使用动坐标系(即当前关节坐标系),因此连乘顺序为 R = R₁·R₂·…·Rₙ,其中R₁是最靠近基座的关节。若顺序颠倒,结果将完全不同。
误区二:忽视四元数的单位化。在插值过程中,若未对中间结果进行归一化,累积误差会导致旋转矩阵不再正交,进而使逆运动学求解失败。建议在每个控制周期对四元数进行归一化处理。
误区三:直接对欧拉角进行平滑滤波。欧拉角的分量在万向锁附近会发生跳变,直接滤波会产生虚假的旋转。正确做法是将欧拉角转换为四元数,在四元数空间进行滤波或插值,再转换回欧拉角用于显示。

总结:旋转矩阵是姿态描述的“通用语言”,适合理论推导与坐标变换;欧拉角适合人机交互与直观显示,但需警惕万向锁;轴角适合描述单次旋转;四元数则是轨迹规划与插值的首选。在实际机械臂系统中,通常采用“四元数内部计算 + 欧拉角外部显示”的混合架构,兼顾计算稳定性与操作直观性。掌握这些表示方法之间的转换关系,并能根据场景灵活选择,是机械臂运动控制工程师的基本功。