|
🛰️航天仿真算法库 SpaceAST 0.3.1
|
提供姿态计算相关功能
提供了姿态计算以及相互转换相关功能,包括:
类 | |
| class | ast::AttitudeAircraftZDown |
| class | ast::AttitudeAlignConstrain |
| class | ast::AttitudeCbiVelSun |
| class | ast::AttitudeECFVelRadial |
| class | ast::AttitudeECFVVLH |
| class | ast::AttitudeECIVVLH |
| class | ast::AttitudeFixed |
| class | ast::AttitudeMissile |
| class | ast::AttitudeNadirNormal |
| class | ast::AttitudeSpinning |
| class | ast::AttitudeSunPointing |
| class | ast::AttitudeSunPointingEclpNormal |
| class | ast::AttitudeYPRFixedECI |
| class | ast::AngleAxis |
| class | ast::Euler |
| class | ast::Quaternion |
类型定义 | |
| using | ast::AttitudeProfile = Axes |
函数 | |
| A_ALWAYS_INLINE Quaternion | ast::aMatrixToQuat (const Matrix3d &mtx) |
| A_ALWAYS_INLINE Matrix3d | ast::aEuler323ToMatrix (const Euler &euler) |
| A_ALWAYS_INLINE Matrix3d | ast::aEuler313ToMatrix (const Euler &euler) |
| A_ALWAYS_INLINE Matrix3d | ast::aRotationZMatrix (double angle) |
| A_ALWAYS_INLINE Matrix3d | ast::aRotationXMatrix (double angle) |
| errc_t | ast::aRotationMatrix (double angle, int axis, Matrix3d &mtx) |
| void | ast::aRotationXMatrix (double angle, Matrix3d &mtx) |
| void | ast::aRotationYMatrix (double angle, Matrix3d &mtx) |
| void | ast::aRotationZMatrix (double angle, Matrix3d &mtx) |
| void | ast::aQuatToMatrix (const Quaternion &quat, Matrix3d &mtx) |
| void | ast::aMatrixToQuat (const Matrix3d &mtx, Quaternion &quat) |
| errc_t | ast::aMatrixToEuler (const Matrix3d &mtx, int seq, Euler &euler) |
| errc_t | ast::aEulerToMatrix (const Euler &euler, int seq, Matrix3d &mtx) |
| errc_t | ast::_aEulerToMatrix (const Euler &euler, int seq, Matrix3d &mtx) |
| void | ast::aEuler32ToMatrix (const array2d &euler, Matrix3d &mtx) |
| void | ast::aEuler31ToMatrix (const array2d &euler, Matrix3d &mtx) |
| void | ast::aMatrixToEuler123 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler132 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler213 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler231 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler312 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler321 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler121 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler131 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler212 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler232 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler313 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aMatrixToEuler323 (const Matrix3d &mtx, Euler &euler) |
| void | ast::aEuler123ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler132ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler213ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler231ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler312ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler321ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler121ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler131ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler212ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler232ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler313ToMatrix (const Euler &euler, Matrix3d &mtx) |
| void | ast::aEuler323ToMatrix (const Euler &euler, Matrix3d &mtx) |
| errc_t | ast::aEulerToQuat (const Euler &euler, int seq, Quaternion &quat) |
| errc_t | ast::aQuatToEuler (const Quaternion &quat, int seq, Euler &euler) |
| void | ast::aQuatToAngleAxis (const Quaternion &quat, AngleAxis &aa) |
| void | ast::aAngleAxisToQuat (const AngleAxis &aa, Quaternion &quat) |
| void | ast::aAngleAxisToMatrix (const AngleAxis &aa, Matrix3d &mtx) |
| void | ast::aMatrixToAngleAxis (const Matrix3d &mtx, AngleAxis &aa) |
| void | ast::aQuatAverageAngularVelocity (const Quaternion &q1, const Quaternion &q2, double dt, Vector3d &angvel) |
| A_ALWAYS_INLINE Vector3d | ast::aQuatAverageAngularVelocity (const Quaternion &q1, const Quaternion &q2, double dt) |
| errc_t | ast::aAlignConstrainTransform (const Vector3d &axesVector1, const Vector3d &refVector1, const Vector3d &axesVector2, const Vector3d &refVector2, Rotation &rotation) |
| errc_t | ast::aAlignConstrainTransform (const Vector3d &axesVector1, const Vector3d &refVector1, const Vector3d &refRate1, const Vector3d &axesVector2, const Vector3d &refVector2, const Vector3d &refRate2, KinematicRotation &rotation) |
| Quaternion | ast::aQuatProduct (const Quaternion &q1, const Quaternion &q2) |
| AST_MATH_API errc_t ast::aAlignConstrainTransform | ( | const Vector3d & | axesVector1, |
| const Vector3d & | refVector1, | ||
| const Vector3d & | axesVector2, | ||
| const Vector3d & | refVector2, | ||
| Rotation & | rotation ) |
双矢量定姿(Aligned and Constrained)——只求姿态
两对向量确定一个姿态,即 Aligned and Constrained 姿态类型。 第一对为「对齐」对:本体系固定向量 axesVector1 与参考向量 refVector1 严格重合; 第二对为「约束」对:本体系固定向量 axesVector2 在垂直于 axesVector1 的方向上被约束到参考向量 refVector2, 即 axesVector2 落在 refVector1 与 refVector2 张成的平面内
| axesVector1 | 对齐向量,分量在本体系(待求轴系)下 |
| refVector1 | 对齐参考向量,分量在参考系下 |
| axesVector2 | 约束向量,分量在本体系(待求轴系)下 |
| refVector2 | 约束参考向量,分量在参考系下 |
| rotation | 输出:参考系分量到本体系分量的旋转,与 Axes::getTransform 的约定一致 |
| AST_MATH_API errc_t ast::aAlignConstrainTransform | ( | const Vector3d & | axesVector1, |
| const Vector3d & | refVector1, | ||
| const Vector3d & | refRate1, | ||
| const Vector3d & | axesVector2, | ||
| const Vector3d & | refVector2, | ||
| const Vector3d & | refRate2, | ||
| KinematicRotation & | rotation ) |
双矢量定姿(Aligned and Constrained)——姿态与角速度
与上方的重载相同,区别在于需要额外提供两个参考向量的时间变化率, 由参考向量对的三轴正交化过程解析地求出姿态角速度。
| axesVector1 | 对齐向量,分量在本体系(待求轴系)下 |
| refVector1 | 对齐参考向量,分量在参考系下 |
| refRate1 | 对齐参考向量的时间变化率,分量在参考系下 |
| axesVector2 | 约束向量,分量在本体系(待求轴系)下 |
| refVector2 | 约束参考向量,分量在参考系下 |
| refRate2 | 约束参考向量的时间变化率,分量在参考系下 |
| rotation | 输出:参考系到本体系的运动学旋转 |
轴角转矩阵
| aa | 轴角 |
| mtx | 矩阵 |
| AST_MATH_CAPI void ast::aAngleAxisToQuat | ( | const AngleAxis & | aa, |
| Quaternion & | quat ) |
轴角转四元数
| aa | 轴角 |
| quat | 四元数 |
欧拉角转矩阵
| euler | |
| seq | |
| mtx |
| AST_MATH_CAPI errc_t ast::aEulerToQuat | ( | const Euler & | euler, |
| int | seq, | ||
| Quaternion & | quat ) |
欧拉角转四元数
| euler | 欧拉角 |
| seq | 转序 |
| quat | 四元数 |
矩阵转轴角
| mtx | 矩阵 |
| aa | 轴角 |
矩阵转欧拉角
| mtx | 矩阵 |
| seq | 转序 |
| euler | 欧拉角 如果旋转顺序为ABC,angle2在区间[-PI/2, PI/2],其他两个角在区间[-PI,PI] 如果旋转顺序为ABA,angle2在区间[0, PI],其他两个角在区间[-PI,PI] |
| A_ALWAYS_INLINE Quaternion ast::aMatrixToQuat | ( | const Matrix3d & | mtx | ) |
矩阵转四元数
| mtx | 旋转矩阵 |
| AST_MATH_CAPI void ast::aMatrixToQuat | ( | const Matrix3d & | mtx, |
| Quaternion & | quat ) |
矩阵转四元数
| mtx | |
| quat |
| A_ALWAYS_INLINE Vector3d ast::aQuatAverageAngularVelocity | ( | const Quaternion & | q1, |
| const Quaternion & | q2, | ||
| double | dt ) |
由两个姿态四元数求平均角速度
| q1 | 起始时刻的姿态四元数(参考系 -> 本体系),假设已归一化 |
| q2 | 结束时刻的姿态四元数(参考系 -> 本体系),假设已归一化 |
| dt | 时间间隔,单位 s |
| AST_MATH_API void ast::aQuatAverageAngularVelocity | ( | const Quaternion & | q1, |
| const Quaternion & | q2, | ||
| double | dt, | ||
| Vector3d & | angvel ) |
由两个姿态四元数求平均角速度
已知参考系下两个时刻的姿态四元数 q1、q2(均为「参考系 -> 本体系」的旋转), 求本体系相对参考系在 dt 内的平均角速度。 记增量旋转为 dq,其轴角给出平均旋转轴与转角,转角除以 dt 即平均角速率。 dt 足够小时,结果收敛于瞬时角速度。
| q1 | 起始时刻的姿态四元数(参考系 -> 本体系),假设已归一化 |
| q2 | 结束时刻的姿态四元数(参考系 -> 本体系),假设已归一化 |
| dt | 时间间隔,单位 s |
| angvel | 输出:平均角速度,分量为参考系(父系)分量, 与 KinematicRotation::getRotationRate 的约定一致 |
Rotation(q1).transformVector(angvel)。
|
inline |
四元数乘积
| q1 | 四元数1 |
| q2 | 四元数2 |
| AST_MATH_CAPI void ast::aQuatToAngleAxis | ( | const Quaternion & | quat, |
| AngleAxis & | aa ) |
四元数转轴角
| quat | 四元数 |
| aa | 轴角 |
| AST_MATH_CAPI errc_t ast::aQuatToEuler | ( | const Quaternion & | quat, |
| int | seq, | ||
| Euler & | euler ) |
四元数转欧拉角
| quat | 四元数 |
| seq | 转序 |
| euler | 欧拉角 |
| AST_MATH_CAPI void ast::aQuatToMatrix | ( | const Quaternion & | quat, |
| Matrix3d & | mtx ) |
四元数转矩阵
| quat | |
| mtx |
| AST_MATH_CAPI errc_t ast::aRotationMatrix | ( | double | angle, |
| int | axis, | ||
| Matrix3d & | mtx ) |
坐标旋转矩阵
| angle | 旋转角度(弧度) |
| axis | 旋转轴(1:X轴, 2:Y轴, 3:Z轴) |
| mtx | 输出矩阵 |
| AST_MATH_CAPI void ast::aRotationXMatrix | ( | double | angle, |
| Matrix3d & | mtx ) |
绕X轴坐标旋转矩阵
| angle | 旋转角度(弧度) |
| mtx | 输出矩阵 |
| AST_MATH_CAPI void ast::aRotationYMatrix | ( | double | angle, |
| Matrix3d & | mtx ) |
绕Y轴坐标旋转矩阵
| angle | 旋转角度(弧度) |
| mtx | 输出矩阵 |
| AST_MATH_CAPI void ast::aRotationZMatrix | ( | double | angle, |
| Matrix3d & | mtx ) |
绕Z轴坐标旋转矩阵
| angle | 旋转角度(弧度) |
| mtx | 输出矩阵 |