坐标系与姿态表示:载体坐标系、世界坐标系、欧拉角、四元数
在基于IMU的步态检测与计步算法中,坐标系与姿态表示是整个数学模型的基石。IMU输出的原始数据(加速度、角速度、磁场强度)都是相对于其自身内部传感器轴定义的,而步态分析、位移积分、姿态解算则需要在世界坐标系下进行。如果坐标系定义混乱或姿态表示方法选择不当,后续的滤波、融合、步态特征提取都将失去物理意义。本章将系统梳理载体坐标系与世界坐标系的定义与转换关系,深入对比欧拉角与四元数在姿态解算中的优劣,并结合实际步态检测场景给出选型建议。
上图展示了本章的核心框架:左侧为固定在IMU芯片上的载体坐标系(通常以芯片封装方向定义X、Y、Z轴),右侧为步态分析所需的世界坐标系(通常以重力方向定义Z轴,水平面定义X、Y轴)。中间通过姿态表示方法(欧拉角或四元数)建立两者之间的数学映射。下面我们逐一深入。
3.1 载体坐标系与世界坐标系的定义
3.1.1 载体坐标系(Body Frame)
载体坐标系是固定于IMU传感器本身的直角坐标系,其原点位于IMU的测量中心。对于大多数商用IMU(如MPU6050、BMI160、LSM6DS3),芯片表面通常印有坐标轴标识。以常见的右手坐标系为例:X轴指向芯片前方(通常与PCB板边平行),Y轴指向左侧,Z轴垂直芯片表面向上。IMU输出的三轴加速度(ax, ay, az)和三轴角速度(gx, gy, gz)均在此坐标系下定义。
在步态检测中,载体坐标系的物理意义直接决定了数据的解读方式。例如,当人将手机放在裤兜时,手机屏幕朝向人体,此时载体坐标系的Z轴大致指向人体左侧,而X轴指向人体前方。如果直接将载体坐标系的加速度数据用于步频计算,会因设备佩戴方向不同而产生巨大偏差。因此,必须通过姿态解算将数据转换到世界坐标系。
3.1.2 世界坐标系(World Frame)
世界坐标系(又称导航坐标系或全局坐标系)是一个固定不动的参考系,其原点通常选择为IMU上电时的位置或步态测试的起点。世界坐标系的Z轴与重力方向相反(即指向天空),X轴和Y轴位于水平面内,具体指向可根据应用场景定义(如正北、正东或行走方向)。在步态分析中,世界坐标系的优势在于:重力方向始终沿Z轴,因此可以通过加速度在Z轴的分量判断步态的垂直冲击;水平方向的加速度分量则反映了前后和侧向的运动。
| 对比维度 | 载体坐标系 | 世界坐标系 |
|---|---|---|
| 原点位置 | IMU芯片测量中心 | 测试起点或参考点 |
| 轴定义 | 由芯片封装决定 | Z轴与重力反向,X/Y在水平面 |
| 是否随设备转动 | 是 | 否 |
| 典型用途 | 读取原始传感器数据 | 步态特征提取、位移积分 |
| 转换需求 | — | 需通过姿态矩阵转换 |
3.2 欧拉角:直观但存在万向节死锁
3.2.1 欧拉角的定义与旋转顺序
欧拉角通过三次绕不同坐标轴的旋转来描述姿态,常见的定义顺序为Z-Y-X(即先偏航Yaw,再俯仰Pitch,最后横滚Roll)。设世界坐标系为W,载体坐标系为B,则从W到B的旋转可表示为:
R = Rz(Yaw) * Ry(Pitch) * Rx(Roll)
其中,Yaw(偏航角)绕Z轴旋转,范围通常为[-π, π];Pitch(俯仰角)绕Y轴旋转,范围[-π/2, π/2];Roll(横滚角)绕X轴旋转,范围[-π, π]。在步态检测中,Pitch角反映了躯干的前倾程度,Roll角反映了侧倾,Yaw角则对应行走方向的变化。
3.2.2 万向节死锁问题
欧拉角最致命的缺陷是万向节死锁(Gimbal Lock)。当Pitch角接近±90°时,第一次旋转和第三次旋转的轴会重合,导致系统丢失一个旋转自由度。例如,当人弯腰捡东西(Pitch接近90°)时,Yaw和Roll的旋转效果变得不可区分,姿态解算会出现奇异值。在步态检测中,虽然日常行走很少达到Pitch=90°,但在跌倒检测、上下坡、跑步等场景中,Pitch角可能短暂接近临界值,导致姿态跳变。
3.3 四元数:无奇异性的优雅表示
3.3.1 四元数的数学定义
四元数是由一个实部和三个虚部组成的超复数,形式为 q = q0 + q1·i + q2·j + q3·k,其中满足 i² = j² = k² = ijk = -1。单位四元数(模长为1)可以唯一表示三维空间中的旋转。其与旋转轴(ux, uy, uz)和旋转角θ的关系为:
q0 = cos(θ/2)
q1 = ux * sin(θ/2)
q2 = uy * sin(θ/2)
q3 = uz * sin(θ/2)
四元数避免了欧拉角的奇异性,且只需4个参数(相比方向余弦矩阵的9个参数),计算效率更高。在步态检测中,四元数被广泛用于姿态融合算法(如Mahony、Madgwick滤波)的核心表示。
3.3.2 四元数与欧拉角的转换
在实际工程中,我们经常需要将四元数转换为欧拉角以便直观理解姿态,或将欧拉角转换为四元数以进行姿态更新。以下给出从四元数到欧拉角的转换公式(Z-Y-X顺序):
Roll = atan2(2*(q0*q1 + q2*q3), 1 - 2*(q1² + q2²))
Pitch = asin(2*(q0*q2 - q3*q1))
Yaw = atan2(2*(q0*q3 + q1*q2), 1 - 2*(q2² + q3²))
注意,当Pitch接近±90°时,asin函数的输入可能超出[-1,1]范围,需要做截断处理。在步态算法中,建议直接使用四元数进行积分和滤波,仅在输出可视化或调试时转换为欧拉角。
3.4 坐标系转换在步态检测中的实战应用
3.4.1 从原始数据到世界坐标系的转换流程
在步态检测系统中,坐标系转换的典型流程如下:
- 初始化姿态:利用加速度计在静止时的输出估计初始Roll和Pitch(通过atan2(ay, az)和atan2(-ax, sqrt(ay²+az²))),利用磁力计估计初始Yaw。
- 姿态更新:使用陀螺仪的角速度数据,通过四元数微分方程
q_dot = 0.5 * q ⊗ ω进行积分,其中ω为角速度四元数(实部为0)。 - 数据转换:将载体坐标系下的加速度
a_body通过旋转矩阵R(q)转换到世界坐标系:a_world = R(q) * a_body。 - 重力补偿:从世界坐标系的加速度中减去重力分量(0, 0, g),得到线性加速度,用于步态特征提取。
3.4.2 案例:手机放在裤兜中的步态检测
场景背景:某计步APP需要检测用户将手机放在前裤兜时的步数。手机屏幕朝向人体,顶部朝上,此时载体坐标系的X轴指向人体前方,Y轴指向左侧,Z轴指向天空。
初始现象:直接使用载体坐标系的Z轴加速度进行步频检测,发现波形幅值很小且噪声大,无法准确识别步态周期。
分析过程:由于手机在裤兜中并非完全固定,行走时手机会随腿部运动产生旋转,导致载体坐标系的Z轴并不始终与重力方向对齐。直接使用Z轴数据会丢失垂直方向的冲击信息。
操作步骤:
- 第一步:采集静止时的加速度数据,计算初始Roll和Pitch,假设Yaw=0(忽略初始朝向)。
- 第二步:使用Madgwick滤波融合陀螺仪和加速度计数据,实时更新四元数。
- 第三步:将每个采样点的加速度转换到世界坐标系,提取Z轴(垂直方向)的线性加速度。
- 第四步:对垂直加速度进行带通滤波(0.5-3Hz),检测波峰作为步态事件。
结果对比:转换前,Z轴加速度的峰峰值约为0.8g,信噪比低;转换后,垂直方向线性加速度的峰峰值达到1.5g,步态周期清晰可辨,计步准确率从82%提升至96%。
3.5 常见误区与总结复盘
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 忽略载体坐标系与设备佩戴方向的关系 | 特征提取方向错误 | 明确设备佩戴方向,必要时进行轴重映射 |
| 直接使用欧拉角进行姿态积分 | 万向节死锁导致姿态发散 | 使用四元数进行积分,欧拉角仅用于显示 |
| 未进行重力补偿 | 加速度数据包含重力分量,步态特征失真 | 转换到世界坐标系后减去重力 |
| 四元数未归一化 | 累积误差导致旋转矩阵非正交 | 每次更新后对四元数进行归一化 |
| 忽略磁力计校准 | Yaw角漂移 | 在无磁干扰环境下校准,或使用GPS辅助 |
本章总结:坐标系与姿态表示是IMU步态检测的数学基础。载体坐标系是传感器的"母语",世界坐标系是算法的"通用语言",而欧拉角和四元数则是两种翻译工具。在实际工程中,推荐使用四元数作为姿态解算的核心表示,仅在需要直观理解姿态时转换为欧拉角。掌握坐标系转换的完整流程,能够显著提升步态检测算法的鲁棒性和准确性。在下一阶段的课程中,我们将基于本章的姿态表示方法,深入讲解加速度与角速度的预处理技术。