You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MPU6050四元数转XYZ欧拉角漂移,ZYX无漂移原因咨询

问题根源:XYZ欧拉角转换代码存在多处公式错误

你遇到的“漂移”并非四元数本身的问题,而是XYZ顺序的欧拉角转换代码存在明显笔误和公式错误,导致计算出的角度偏离真实值,表现为类似漂移的现象。逐一拆解错误:

1. Roll计算的笔误

在XYZ的roll计算式中,分母的q2*2是低级错误,应为q2*q2(平方运算),正确的分母表达式是q0*q0 - q1*q1 - q2*q2 + q3*q3。

2. Yaw计算的公式错误

XYZ的yaw计算分子完全写错,你当前写的-2*(q1*q3 - q0*q1)属于复制粘贴失误,正确的XYZ顺序欧拉角(X-Y-Z旋转)的yaw计算分子应为2*(q1*q2 - q0*q3)。

3. Pitch计算的符号错误

XYZ顺序的pitch计算式符号有误,你写的2*(q1*q3 + q0*q2)和正确公式符号相反,正确的pitch计算应为asin(2*(q0*q2 - q1*q3)) * 57.3f。

修正后的XYZ欧拉角转换代码

匹配X-Y-Z intrinsic旋转顺序(先绕X转roll,再绕Y转pitch,最后绕Z转yaw)的正确转换代码如下:

// 四元数转XYZ顺序欧拉角(X:roll, Y:pitch, Z:yaw)
*pitch = asin(2 * (q0*q2 - q1*q3)) * 57.3f;
*roll = atan2(2 * (q0*q1 + q2*q3), q0*q0 - q1*q1 - q2*q2 + q3*q3) * 57.3f;
*yaw = atan2(2 * (q1*q2 - q0*q3), q0*q0 + q1*q1 - q2*q2 - q3*q3) * 57.3f;

为什么ZYX转换正常?

你提供的ZYX顺序转换代码是正确的,完全匹配MPU6050 DMP输出四元数对应的旋转逻辑,因此计算出的pitch、roll稳定无漂移。

内容的提问来源于stack exchange,提问作者xuanzhuang chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:23:33