2. 数学基础
机械臂的运动学本质上是描述刚体在三维空间中的位置与姿态随时间或关节角度的变化规律。无论是正运动学求解末端位姿,还是逆运动学反解关节角,其底层运算都建立在向量与矩阵的线性代数框架之上。旋转矩阵用于表达刚体在空间中的朝向,齐次变换矩阵则将旋转与平移统一为 4×4 的矩阵形式,从而能够用一次矩阵乘法完成坐标系的级联变换。本章将系统梳理这些数学工具的定义、性质与运算规则,并重点说明它们在机械臂建模中的实际应用方式。
2.1 向量与矩阵基础
2.1.1 向量的定义与运算
在机械臂运动学中,向量通常用来表示空间中的点、方向或力。一个三维向量 p = [x, y, z]T 可以表示机械臂末端在基坐标系中的位置。向量的基本运算包括加法、数乘、点积与叉积。点积 a·b = |a||b|cosθ 用于计算投影或夹角;叉积 a×b 产生一个垂直于两向量所在平面的新向量,其模长等于两向量构成的平行四边形面积,在机械臂中常用于计算力矩或构造旋转轴。
向量的模长定义为 ||p|| = √(x² + y² + z²),单位向量则通过除以模长获得。在轨迹规划中,单位向量常用于表示方向,而模长则用于判断距离或速度大小。
2.1.2 矩阵的定义与基本运算
矩阵是线性代数的核心工具。一个 m×n 矩阵 A 由 m 行 n 列元素组成。矩阵的加法要求同型矩阵,数乘则是每个元素乘以标量。矩阵乘法 A(m×n)·B(n×p) 得到 C(m×p),其元素 cij = Σk=1n aikbkj。矩阵乘法不满足交换律,即 AB ≠ BA,这一点在机械臂的复合变换中至关重要。
矩阵的转置 AT 将行列互换;逆矩阵 A-1 满足 AA-1 = I。行列式 det(A) 用于判断矩阵是否可逆(det ≠ 0)以及变换的缩放比例。对于正交矩阵,其逆等于转置,这一性质在旋转矩阵中具有特殊意义。
核心记忆点:矩阵乘法不满足交换律,因此在机械臂运动学中,变换顺序不能随意调换。先绕 X 轴旋转再平移,与先平移再绕 X 轴旋转,得到的结果完全不同。
2.2 旋转矩阵
2.2.1 旋转矩阵的定义与性质
旋转矩阵 R 是一个 3×3 的正交矩阵,满足 RTR = I 且 det(R) = +1。它用于描述刚体在三维空间中的姿态。绕 X 轴旋转角度 θ 的旋转矩阵为:
R_x(θ) = [1 0 0 ]
[0 cosθ -sinθ ]
[0 sinθ cosθ ]
类似地,绕 Y 轴和 Z 轴的旋转矩阵分别为:
R_y(θ) = [ cosθ 0 sinθ ]
[ 0 1 0 ]
[-sinθ 0 cosθ ]
R_z(θ) = [cosθ -sinθ 0]
[sinθ cosθ 0]
[ 0 0 1]
旋转矩阵的列向量表示旋转后坐标系的基向量在原坐标系中的投影。因此,R 的每一列都是单位向量且两两正交。这一性质使得旋转矩阵在数值计算中具有良好的稳定性。
2.2.2 复合旋转与旋转顺序
当机械臂的关节依次旋转时,需要将多个旋转矩阵相乘。复合旋转遵循“左乘固定坐标系,右乘当前坐标系”的规则。若绕固定坐标系旋转,则每次旋转矩阵左乘;若绕当前坐标系旋转,则右乘。例如,先绕固定 Z 轴旋转 α,再绕固定 Y 轴旋转 β,则总旋转矩阵 R = R_y(β)·R_z(α)。
欧拉角是旋转矩阵的另一种表示方式,常用的 ZYX 欧拉角定义为:先绕 Z 轴旋转 yaw(偏航角),再绕新 Y 轴旋转 pitch(俯仰角),最后绕新 X 轴旋转 roll(横滚角)。对应的旋转矩阵为 R = R_z(yaw)·R_y(pitch)·R_x(roll)。
| 表示方法 | 参数数量 | 优点 | 缺点 |
|---|---|---|---|
| 旋转矩阵 | 9 个元素 | 无奇异性,运算直接 | 冗余参数多,不直观 |
| 欧拉角 | 3 个角度 | 直观,易于理解 | 存在万向锁问题 |
| 轴角 | 4 个参数 | 紧凑,适合插值 | 运算需转换 |
| 四元数 | 4 个参数 | 无奇异性,插值平滑 | 不直观 |
2.3 齐次变换矩阵
2.3.1 齐次变换矩阵的结构
齐次变换矩阵 T 是一个 4×4 矩阵,将旋转与平移统一表示:
T = [R p]
[0 1]
其中 R 是 3×3 旋转矩阵,p 是 3×1 平移向量,最后一行固定为 [0 0 0 1]。齐次变换矩阵使得坐标变换可以表示为简单的矩阵乘法:p' = T·p,其中 p 和 p' 是齐次坐标(在三维向量后补 1)。
例如,将坐标系 {B} 相对于坐标系 {A} 的描述记为 ATB,则空间中任意一点 P 在两个坐标系中的坐标满足:Ap = ATB · Bp。
2.3.2 齐次变换的级联与逆变换
机械臂的每个关节都可以用一个齐次变换矩阵描述。对于 n 自由度的机械臂,末端坐标系相对于基坐标系的位姿为:
T_base_to_end = T_1 · T_2 · T_3 · … · T_n
其中每个 T_i 表示第 i 个关节坐标系相对于第 i-1 个坐标系的变换。这就是正运动学的基本方程。
齐次变换矩阵的逆变换为:
T⁻¹ = [Rᵀ -Rᵀ·p]
[0 1 ]
逆变换在逆运动学求解和坐标系转换中频繁使用。例如,已知末端位姿 T_base_to_end,要计算某个中间坐标系的位置,可以通过左乘逆矩阵实现。
工程经验:在实际编程中,建议使用四元数进行旋转插值,避免欧拉角的万向锁问题;但在描述关节变换时,齐次变换矩阵仍然是最直观的表示方式。许多机器人库(如 ROS 的 tf2)内部使用四元数存储姿态,但对外接口仍提供矩阵转换函数。
2.4 案例拆解:六轴机械臂正运动学建模
以典型的六轴串联机械臂(如 UR5 或 KUKA KR6)为例,其正运动学建模过程如下:
- 建立 D-H 参数表:根据机械臂的连杆长度 ai、连杆偏距 di、连杆转角 αi 和关节角 θi,建立各关节的 D-H 参数表。
- 构造各关节的齐次变换矩阵:每个关节的变换矩阵为 Ti = R_z(θi)·T_z(di)·T_x(ai)·R_x(αi)。
- 级联相乘:将六个变换矩阵依次相乘,得到末端坐标系相对于基坐标系的位姿 Tbaseend。
- 提取位置与姿态:从 T 矩阵中提取位置向量 p = [x, y, z]T,以及旋转矩阵 R,再转换为欧拉角或四元数供后续使用。
假设某关节的 D-H 参数为 a=0.5m, d=0.2m, α=90°, θ=30°,则对应的齐次变换矩阵为:
T = [cos30° -sin30°cos90° sin30°sin90° 0.5cos30°]
[sin30° cos30°cos90° -cos30°sin90° 0.5sin30°]
[ 0 sin90° cos90° 0.2 ]
[ 0 0 0 1 ]
代入数值计算后,即可得到该关节的变换矩阵。将所有关节的变换矩阵连乘,就完成了正运动学求解。
常见误区:初学者容易混淆旋转矩阵的乘法顺序。在 D-H 模型中,每个关节的变换矩阵已经包含了旋转和平移的固定顺序,不能随意调整。另外,注意角度单位(弧度 vs 度)的一致性,在编程中建议统一使用弧度。
2.5 常见误区与总结复盘
在机械臂运动学的数学基础学习中,以下误区值得特别关注:
- 矩阵乘法顺序错误:复合变换时,左乘与右乘的含义不同,必须根据是固定坐标系还是当前坐标系来选择。
- 忽略齐次坐标的最后一维:在编程实现时,向量需要补 1 才能与 4×4 矩阵相乘,否则维度不匹配。
- 旋转矩阵的正交性丢失:经过多次浮点运算后,旋转矩阵可能不再严格正交,需要定期正交化处理(如使用 SVD 分解或 Gram-Schmidt 正交化)。
- 欧拉角的万向锁:当 pitch 角接近 ±90° 时,yaw 和 roll 的旋转轴重合,导致自由度丢失。此时应改用四元数表示。
总结而言,向量与矩阵是机械臂运动学的语言基础,旋转矩阵描述姿态,齐次变换矩阵统一描述位姿。掌握这些数学工具的关键在于理解其几何意义和运算规则,并通过实际编程验证。建议读者使用 Python 的 NumPy 或 MATLAB 的 Robotics Toolbox 进行矩阵运算练习,加深对变换过程的理解。