🛰️航天仿真算法库 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)
 

函数说明

◆ aAlignConstrainTransform() [1/2]

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 的约定一致
返回
错误码;出现退化(零向量,或两向量平行)时返回 eErrorInvalidParam,并将 rotation 置为单位旋转
参见
aAlignConstrainTransform(const Vector3d&, const Vector3d&, const Vector3d&, const Vector3d&, const Vector3d&, const Vector3d&, KinematicRotation&)

◆ aAlignConstrainTransform() [2/2]

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输出:参考系到本体系的运动学旋转
参见
KinematicRotation
返回
错误码;出现退化(零向量,或两向量平行)时返回 eErrorInvalidParam,并将 rotation 置为单位旋转
注解
角速度只由参考向量对及其变化率决定,与本体系的固定向量 axesVector1、axesVector2 无关

◆ aAngleAxisToMatrix()

AST_MATH_CAPI void ast::aAngleAxisToMatrix ( const AngleAxis & aa,
Matrix3d & mtx )

轴角转矩阵

参数
aa轴角
mtx矩阵

◆ aAngleAxisToQuat()

AST_MATH_CAPI void ast::aAngleAxisToQuat ( const AngleAxis & aa,
Quaternion & quat )

轴角转四元数

参数
aa轴角
quat四元数

◆ aEulerToMatrix()

AST_MATH_CAPI errc_t ast::aEulerToMatrix ( const Euler & euler,
int seq,
Matrix3d & mtx )

欧拉角转矩阵

参数
euler
seq
mtx
返回

◆ aEulerToQuat()

AST_MATH_CAPI errc_t ast::aEulerToQuat ( const Euler & euler,
int seq,
Quaternion & quat )

欧拉角转四元数

参数
euler欧拉角
seq转序
quat四元数
返回

◆ aMatrixToAngleAxis()

AST_MATH_CAPI void ast::aMatrixToAngleAxis ( const Matrix3d & mtx,
AngleAxis & aa )

矩阵转轴角

参数
mtx矩阵
aa轴角

◆ aMatrixToEuler()

AST_MATH_CAPI errc_t ast::aMatrixToEuler ( const Matrix3d & mtx,
int seq,
Euler & euler )

矩阵转欧拉角

参数
mtx矩阵
seq转序
euler欧拉角
如果旋转顺序为ABC,angle2在区间[-PI/2, PI/2],其他两个角在区间[-PI,PI] 如果旋转顺序为ABA,angle2在区间[0, PI],其他两个角在区间[-PI,PI]
返回

◆ aMatrixToQuat() [1/2]

A_ALWAYS_INLINE Quaternion ast::aMatrixToQuat ( const Matrix3d & mtx)

矩阵转四元数

参数
mtx旋转矩阵
返回
四元数

◆ aMatrixToQuat() [2/2]

AST_MATH_CAPI void ast::aMatrixToQuat ( const Matrix3d & mtx,
Quaternion & quat )

矩阵转四元数

参数
mtx
quat

◆ aQuatAverageAngularVelocity() [1/2]

A_ALWAYS_INLINE Vector3d ast::aQuatAverageAngularVelocity ( const Quaternion & q1,
const Quaternion & q2,
double dt )

由两个姿态四元数求平均角速度

参数
q1起始时刻的姿态四元数(参考系 -> 本体系),假设已归一化
q2结束时刻的姿态四元数(参考系 -> 本体系),假设已归一化
dt时间间隔,单位 s
参见
aQuatAverageAngularVelocity(const Quaternion&, const Quaternion&, double, Vector3d&)

◆ aQuatAverageAngularVelocity() [2/2]

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 的约定一致
注解
只有两个采样点时无法分辨转角与其补角,转角一律取小于 180 度的短弧, 故单步转角接近或超过 180 度时结果不唯一(符号会反转)。
需要本体系分量时,对结果再做一次逆变换:Rotation(q1).transformVector(angvel)。

◆ aQuatProduct()

Quaternion ast::aQuatProduct ( const Quaternion & q1,
const Quaternion & q2 )
inline

四元数乘积

参数
q1四元数1
q2四元数2
返回
四元数乘积

◆ aQuatToAngleAxis()

AST_MATH_CAPI void ast::aQuatToAngleAxis ( const Quaternion & quat,
AngleAxis & aa )

四元数转轴角

参数
quat四元数
aa轴角

◆ aQuatToEuler()

AST_MATH_CAPI errc_t ast::aQuatToEuler ( const Quaternion & quat,
int seq,
Euler & euler )

四元数转欧拉角

参数
quat四元数
seq转序
euler欧拉角
返回

◆ aQuatToMatrix()

AST_MATH_CAPI void ast::aQuatToMatrix ( const Quaternion & quat,
Matrix3d & mtx )

四元数转矩阵

参数
quat
mtx

◆ aRotationMatrix()

AST_MATH_CAPI errc_t ast::aRotationMatrix ( double angle,
int axis,
Matrix3d & mtx )

坐标旋转矩阵

参数
angle旋转角度(弧度)
axis旋转轴(1:X轴, 2:Y轴, 3:Z轴)
mtx输出矩阵

◆ aRotationXMatrix()

AST_MATH_CAPI void ast::aRotationXMatrix ( double angle,
Matrix3d & mtx )

绕X轴坐标旋转矩阵

参数
angle旋转角度(弧度)
mtx输出矩阵

◆ aRotationYMatrix()

AST_MATH_CAPI void ast::aRotationYMatrix ( double angle,
Matrix3d & mtx )

绕Y轴坐标旋转矩阵

参数
angle旋转角度(弧度)
mtx输出矩阵

◆ aRotationZMatrix()

AST_MATH_CAPI void ast::aRotationZMatrix ( double angle,
Matrix3d & mtx )

绕Z轴坐标旋转矩阵

参数
angle旋转角度(弧度)
mtx输出矩阵