Eigen备忘录之四元数

    技术2025-10-04  11

    Eigen备忘录之四元数

    1. 矩阵转置与数据存储2. 旋转矩阵乘法顺序3.四元数与旋转矩阵关系4.旋转矩阵性质5.在载体系沿着X轴旋转举例6. 四元数,欧拉角与旋转矩阵关系7. Eigen四元数特点

    1. 矩阵转置与数据存储

    matrix().transpose() transpose转置函数只能在运算中按照转置计算,并不改变内部数据存储结构。 通过使用matrix(x,y)获取矩阵元素时能够按转置获取,但是使用matrix().data()获取数据时,并未发生数据顺序变化(提取元素时需要注意)。

    2. 旋转矩阵乘法顺序

    以X-Y-Z北天东坐标系为例,Cbn(载体-地理系旋转矩阵)= Ryaw(Y轴)*Rpitch(Z轴)*Rroll(X轴),即 1-2-0顺序。 四元数Q = Cbn = YawAngle*PitchAngle*RollAngle(定义见下) AngleAxisd YawAngle(persi0_d/CON57,Vector3d::UnitY()) ; AngleAxisd PitchAngle(sita0_d/CON57,Vector3d::UnitZ()); AngleAxisd RollAngle(gama0_d/CON57,Vector3d::UnitX());

    3.四元数与旋转矩阵关系

    Q.matrix() = Cbn 对于姿态四元数而言Q.matrix() 为载体系->导航系矩阵

    4.旋转矩阵性质

    Cnb = Cbn^(-1) =Cbn.transpose() 正交矩阵每一列都是单位矩阵,并且两两正交。最简单的正交矩阵就是单位阵。 正交矩阵的逆(inverse)等于正交矩阵的转置(transpose)。 同时可以推论出正交矩阵的行列式的值肯定为正负1的。

    5.在载体系沿着X轴旋转举例

    C = (Cbn*RollAngle(45/CON57,Vector3d::UnitX())).transpose() = (RollAngle( - 45/CON57,Vector3d::UnitX())*Cnb)

    6. 四元数,欧拉角与旋转矩阵关系

    Eigen获取欧拉角需使用Cbn矩阵 [yaw,pitch,roll]= Cbn.toEuler(1,2,0) 但是Eigen Euler角范围为 [0:pi](yaw)x[-pi:pi](pitch)x[-pi:pi](roll).

    该范围方位角限制0-180度,而俯仰角可以为±180度,与常用方位为±180度,俯仰±90度范围的用法不同,需要转换或自行实现。

    7. Eigen四元数特点

    Eigen 四元数构造顺序为 w,x,y,z ,但是实际data数据顺序为x y z w。 数据提取需要注意,或使用q.w(),q.x()....成员函数提取。
    Processed: 0.011, SQL: 10