# 欧拉角俯仰接近90°时万向节锁如何避免

> 原文链接：https://robotics.hellobike.com/pitfalls/2022-04-01-robotics-se-22349
> 频道：pitfalls | 更新日期：2022-04-01 | 标签：auto, stackexchange, imu, rotation
> 核心摘要：LSM6DSO32 姿态解算用欧拉角在俯仰接近90°时异常，采纳答案建议用单位四元数直接表示和更新姿态。

# 欧拉角俯仰接近90°时万向节锁如何避免

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[How to avoid gimbal with Quaternions](https://robotics.stackexchange.com/questions/22349/how-to-avoid-gimbal-with-quaternions)（Robotics Stack Exchange #22349）

**状态**：已解决

## 问题

使用 Kalman filter 时欧拉角出现疑似万向节锁：pitch 接近 90° 时 roll 跳变，pitch 像被限制在 90° 附近；`computeAngles` 转回欧拉角后仍有问题。

## 环境

状态估计 / EKF 滤波器

## 解决办法

1. 不再依赖欧拉角存储姿态，用单位四元数表示旋转；采纳答案给出四元数定义、归一化、逆、连乘等公式。
2. 需要旋转向量时，直接用四元数变换公式 `p' = p + 2s(v×p) + 2(v×(v×p))`，或用其对应的 Rodrigues 旋转矩阵。
3. 有角速度 `ω` 时，用四元数时间导数公式 `qdot = 1/2(sω + ω×v, -ω·v)` 更新姿态，并保持四元数归一化。

原问题作者：simon；采纳答案作者：John Alexiou。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #22349：How to avoid gimbal with Quaternions](https://robotics.stackexchange.com/questions/22349/how-to-avoid-gimbal-with-quaternions)