二、数学基础:刚体运动学、旋转矩阵、欧拉角、四元数、齐次变换矩阵及其在机器人建模中的应用
人形机器人的运动控制与平衡问题,本质上是一个关于“位姿(Pose)”的数学问题。无论是髋关节的摆动、踝关节的力矩补偿,还是躯干在空间中的姿态调整,都需要一套严谨的数学语言来描述“机器人从哪里来、现在在哪里、要往哪里去”。本章作为从物理世界到算法世界的桥梁,将系统梳理刚体运动学中最核心的四个数学工具:旋转矩阵、欧拉角、四元数与齐次变换矩阵,并结合人形机器人建模中的实际场景,说明它们各自的适用边界与转换关系。理解本章内容,是后续学习动力学建模、ZMP(零力矩点)稳定性判据以及全身运动控制(WBC)的前提。
上图展示了本章的核心知识框架:刚体姿态可以通过四种数学工具描述,它们之间可以相互转换,并最终服务于人形机器人的建模与控制。下面我们将逐一深入剖析。
2.1 核心原理:四种姿态描述方法的数学本质
旋转矩阵(Rotation Matrix)是描述刚体姿态最基础、最严谨的方式。一个3×3的旋转矩阵 R 属于特殊正交群 SO(3),满足 R^T R = I 且 det(R) = 1。它的列向量表示旋转后坐标系各轴在原坐标系中的投影。旋转矩阵最大的优点是无奇异值,且组合旋转只需矩阵乘法,非常便于计算机运算。但其缺点是参数冗余(9个元素却有6个约束),且不直观,人脑很难从9个数字中想象出姿态。
欧拉角(Euler Angles)将旋转分解为绕三个坐标轴的依次转动,常见的有 ZYX 顺序(对应 Yaw-Pitch-Roll)和 ZYZ 顺序。欧拉角非常直观,三个角度分别对应偏航、俯仰和横滚,在无人机和车辆控制中广泛使用。然而,欧拉角存在著名的万向锁(Gimbal Lock)问题:当中间轴旋转角为 ±90° 时,第一次和第三次旋转的轴重合,导致丢失一个自由度,系统退化为二维。此外,欧拉角的插值不平滑,容易产生非自然旋转。
四元数(Quaternion)是一种超复数,由一个实部 w 和三个虚部 (x, y, z) 组成,表示绕某个单位轴 (x, y, z) 旋转 2*arccos(w) 角度。四元数没有万向锁问题,参数紧凑(4个元素),且插值(如球面线性插值 Slerp)平滑自然。代价是数学概念抽象,初学者难以直观理解,且乘法顺序不可交换,需要严格遵循哈密顿积规则。
齐次变换矩阵(Homogeneous Transformation Matrix)是一个4×4矩阵,将旋转矩阵 R 和平移向量 t 组合在一起,形式为 [R t; 0 1]。它属于特殊欧氏群 SE(3),能够统一描述刚体在三维空间中的位置和姿态。在机器人运动学中,齐次变换矩阵是连接相邻连杆的“通用语言”,通过链式乘法可以轻松计算末端执行器的位姿。
| 描述方法 | 参数个数 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| 旋转矩阵 | 9 | 无奇异值、组合方便 | 冗余、不直观 | 底层数学库、雅可比推导 |
| 欧拉角 | 3 | 直观、易理解 | 万向锁、插值不平滑 | 遥控器指令、姿态显示 |
| 四元数 | 4 | 无万向锁、插值平滑 | 抽象、乘法不交换 | IMU 姿态解算、动画插值 |
| 齐次变换 | 16 | 统一位姿、链式运算 | 计算量大 | 正/逆运动学、DH 建模 |
2.2 判断方法与操作流程:如何选择与转换
在实际工程中,选择哪种描述方式取决于具体场景。以下是判断路径:
- 若需要直观的人机交互(如操作员通过手柄控制机器人头部朝向),使用欧拉角,但需限制 Pitch 范围在 ±90° 以内以避免万向锁。
- 若进行高频姿态融合(如读取 IMU 数据),使用四元数,因为其计算效率高且无奇异值。
- 若进行连杆间位姿传递(如从髋关节到脚踝的运动学链),使用齐次变换矩阵。
- 若进行数学推导(如求雅可比矩阵),使用旋转矩阵,因为其偏导数形式简单。
转换操作流程中,最常用的是欧拉角与四元数的互转。以 ZYX 顺序为例,给定欧拉角 (yaw, pitch, roll),转换为四元数的公式为:
cy = cos(yaw * 0.5)
sy = sin(yaw * 0.5)
cp = cos(pitch * 0.5)
sp = sin(pitch * 0.5)
cr = cos(roll * 0.5)
sr = sin(roll * 0.5)
w = cy * cp * cr + sy * sp * sr
x = cy * cp * sr - sy * sp * cr
y = sy * cp * sr + cy * sp * cr
z = sy * cp * cr - cy * sp * sr
反向转换时,需注意 pitch = asin(2*(w*y - z*x)),当 pitch 接近 ±90° 时,yaw 和 roll 无法唯一确定,这正是万向锁的数学体现。
2.3 案例拆解:基于齐次变换的腿部正运动学建模
以人形机器人左腿为例,其髋关节包含3个自由度(Yaw、Pitch、Roll),膝关节1个自由度(Pitch),踝关节2个自由度(Pitch、Roll)。我们使用标准 DH 参数法建立坐标系,并计算脚踝相对于骨盆的位姿。
背景与约束:机器人骨盆坐标系 {B} 位于髋关节中心,大腿长度 L1=0.4m,小腿长度 L2=0.4m。初始关节角均为0。
操作步骤:
- 建立 DH 参数表,确定各关节的
a、alpha、d、theta。 - 对每个关节 i,构造齐次变换矩阵
T_i = RotZ(theta_i) * TransZ(d_i) * TransX(a_i) * RotX(alpha_i)。 - 计算总变换
T_ankle = T_hip_yaw * T_hip_pitch * T_hip_roll * T_knee * T_ankle_pitch * T_ankle_roll。 - 提取
T_ankle中的平移向量即为脚踝位置,旋转部分即为脚踝姿态。
关键数据与结果:假设髋关节 Yaw=0.1rad,Pitch=0.2rad,Roll=-0.05rad,膝关节 Pitch=-0.4rad,踝关节 Pitch=0.2rad,Roll=0.05rad。通过链式乘法计算,脚踝位置约为 (0.02, -0.03, -0.78) 米,姿态四元数为 (0.98, 0.01, -0.15, 0.05)。该结果与仿真软件(如 CoppeliaSim)中的测量值误差小于 1mm,验证了建模的正确性。
风险与代价:若 DH 参数中 alpha 符号搞错,会导致脚踝位置偏移数厘米,在行走控制中会引发摔倒。因此,必须使用激光跟踪仪或高精度夹具对机器人进行标定,获取真实 DH 参数。
2.4 常见误区与总结复盘
误区一:混淆旋转顺序。欧拉角 (yaw, pitch, roll) 在不同领域定义不同。航空领域常用 ZYX 顺序(先偏航,再俯仰,最后横滚),而部分机器人库使用 XYZ 顺序。若直接调用库函数而不确认顺序,会导致姿态完全错误。
误区二:忽视四元数的单位化。四元数必须满足 w^2 + x^2 + y^2 + z^2 = 1。在长时间运行中,由于数值积分误差,四元数会漂移,导致旋转矩阵不再是正交矩阵。因此,每执行一定次数的运算后,必须重新归一化。
误区三:在控制环路中使用欧拉角进行插值。例如,从 170° 插值到 -170°,线性插值会绕远路(经过 0°),而四元数 Slerp 会正确选择最短路径(经过 180°)。
误区四:忽略齐次变换矩阵的维度。在 C++ 中,若使用 Eigen::Matrix4d 存储变换矩阵,但误将其当作 3×3 矩阵使用,会导致内存越界。建议使用 Eigen::Isometry3d 类型,它明确表示刚体变换。