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

理解四元数轴角:Madgwick算法输出四元数如何提取各轴旋转角度

四元数无欧拉角获取单轴旋转角解决方案

问题核心误区澄清

你之前使用的q1/sin(angle/2)计算得到的不是绕x轴的旋转角度,而是等效旋转轴的x方向分量,等效旋转轴是总旋转对应的旋转动作围绕的空间单位轴,和绕固定单轴的旋转角度没有直接对应关系,这是结果不符合预期的根本原因。

无欧拉角单轴角度计算方案

该方案通过向量旋转投影实现,完全不涉及欧拉角计算,规避了万向锁、旋转顺序依赖的问题:

计算逻辑

  1. 定义静止参考系下的基准轴单位向量:
    • x轴基准:[1, 0, 0]
    • y轴基准:[0, 1, 0]
    • z轴基准:[0, 0, 1]
  2. 用四元数对对应基准轴做旋转变换,旋转公式为v' = q * v * q⁻¹(q⁻¹为四元数的共轭,单位四元数的共轭等于逆)
  3. 对旋转后的向量做平面投影,通过反正切计算对应轴的旋转角:
    • 计算绕x轴旋转角:旋转y轴基准向量,将结果投影到y-z平面(忽略x分量),角度为atan2(v_proj.z, v_proj.y),结果转为角度单位即可
    • 计算绕y轴旋转角:旋转x轴基准向量,将结果投影到x-z平面(忽略y分量),角度为atan2(v_proj.x, v_proj.z)
    • 计算绕z轴旋转角:旋转x轴基准向量,将结果投影到x-y平面(忽略z分量),角度为atan2(v_proj.y, v_proj.x)

示例计算(基于你提供的四元数q = [0.71, 0.18, -0.65, 0.30])

  1. 总旋转角:2 * acos(0.71) ≈ 90°,和你的实测结果一致
  2. 绕x轴旋转角:按上述方法计算约为21°
  3. 绕y轴旋转角:按上述方法计算约为82°

注意事项

  • 上述计算得到的是绕静止参考系固定轴的旋转角,若需要获取绕机体坐标系的单轴旋转角,将基准轴替换为机体初始坐标系的对应轴即可
  • 计算得到的角度默认范围为[-180°, 180°],如果需要0°~360°的输出范围,可对负角度值加360°做转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:06:03