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

为何Scipy旋转矩阵转四元数得到初始四元数的共轭?

问题解答

为什么得到的是初始四元数的共轭?

核心原因是旋转矩阵(DCM)的定义方向与四元数旋转方向不匹配:

  • SciPy的Rotation.from_quat([q1, q2, q3, q_c])创建的实例,as_matrix()返回的是从原点坐标系到体坐标系的主动旋转矩阵——即把原坐标系中的点通过旋转变换到体坐标系。
  • 你编写的convert_dcm_to_quaternion函数,使用的公式基于DCM表示体坐标系到原点坐标系的旋转(被动旋转,等价于原→体旋转的逆矩阵)。这种情况下,转换得到的四元数自然是原四元数的共轭(共轭四元数对应逆旋转)。

修正方案

有两种方式让结果匹配:

  1. 对输入的DCM取转置(旋转矩阵的转置等于其逆矩阵,对应逆旋转):
    # 调用时传入转置后的矩阵
    convert_dcm_to_quaternion(rotation.as_matrix().T)
    
  2. 修改函数中q_vec的符号,调整旋转方向:
    # 将原q_vec的表达式取反
    q_vec = np.array([[C_32 - C_23], [C_13 - C_31], [C_21 - C_12]]) / (4*q_c)
    

为什么文献中q1的表达式有时符号相反?

这源于四元数表示旋转的几个常见约定差异:

  • 旋转方向约定:部分文献定义四元数表示绕轴逆时针旋转,另一部分定义为顺时针旋转,两者对应的四元数矢量部分符号相反。
  • 乘法顺序约定:四元数分为左乘(用四元数左乘点矢量)和右乘两种模式,不同模式下旋转对应的四元数表达式会有符号差异。
  • 符号等价性:整个四元数乘以-1(包括标量和矢量部分)表示同一个旋转。如果文献计算q_c时选择负平方根分支,也会导致矢量部分符号相反。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 22:45:58