|
🛰️航天仿真算法库 SpaceAST 0.3.1
|
#include <AccelerationTransform.hpp>
Public 成员函数 | |
| AccelerationTransform ()=default | |
| AccelerationTransform (const Vector3d &translation, const Vector3d &velocity, const Vector3d &acceleration, const AccelerationRotation &rot) | |
| AccelerationTransform (const KinematicTransform &transform, const Vector3d &acceleration, const Vector3d &angvelDot) | |
| _AST_DEF_ACCELERATIONTRANSFORM_PROPERTIES _AST_DEF_ACCELERATIONROTATION_PROPERTIES AccelerationTransform & | compose (const AccelerationTransform &next) |
| AccelerationTransform | composed (const AccelerationTransform &next) const |
| AccelerationTransform | operator* (const AccelerationTransform &next) const |
| AccelerationTransform & | operator*= (const AccelerationTransform &next) |
| void | getInverse (AccelerationTransform &inversed) const |
| AccelerationTransform | inverse () const |
| void | setIdentity () |
| void | transformPosVelAcc (const Vector3d &position, const Vector3d &velocity, const Vector3d &acceleration, Vector3d &positionOut, Vector3d &velocityOut, Vector3d &accelerationOut) const |
| void | transformPosVelAccInv (const Vector3d &position, const Vector3d &velocity, const Vector3d &acceleration, Vector3d &positionOut, Vector3d &velocityOut, Vector3d &accelerationOut) const |
静态 Public 成员函数 | |
| static AccelerationTransform | Identity () |
Protected 属性 | |
| Vector3d | acceleration_ {} |
| Vector3d | velocity_ {} |
| Vector3d | translation_ {} |
| Rotation | rotation_ {} |
| Vector3d | angvel_ {} |
| Vector3d | angvelDot_ {} |
加速度(二阶运动学)坐标系变换
在运动学坐标系变换的基础上,增加了坐标系旋转的角加速度和平移的加速度, 因此可以变换由位置、速度和加速度组成的二阶状态量,而不只是位置和速度。
| A_ALWAYS_INLINE ast::AccelerationTransform::AccelerationTransform | ( | const Vector3d & | translation, |
| const Vector3d & | velocity, | ||
| const Vector3d & | acceleration, | ||
| const AccelerationRotation & | rot ) |
加速度变换构造函数
| translation | 平移(源坐标系分量) |
| velocity | 平移速度(源坐标系分量) |
| acceleration | 平移加速度(源坐标系分量) |
| rot | 加速度旋转 |
| A_ALWAYS_INLINE ast::AccelerationTransform::AccelerationTransform | ( | const KinematicTransform & | transform, |
| const Vector3d & | acceleration, | ||
| const Vector3d & | angvelDot ) |
由一阶变换与二阶增量构造加速度变换
| transform | 运动学变换 |
| acceleration | 平移加速度(源坐标系分量) |
| angvelDot | 旋转角加速度 |
| A_ALWAYS_INLINE AccelerationTransform & ast::AccelerationTransform::compose | ( | const AccelerationTransform & | next | ) |
组合下一个坐标系变换
| next | 下一个坐标系变换 |
| A_ALWAYS_INLINE AccelerationTransform ast::AccelerationTransform::composed | ( | const AccelerationTransform & | next | ) | const |
组合下一个坐标系变换
| next | 下一个坐标系变换 |
记 τ = M₁ᵀ t₂,则平移与速度的合成与 KinematicTransform 一致, 加速度在此基础上多出三项:τ 与 M₁ᵀV₂ 都随中间系一起转动,其方向随时间变化,故求二阶导时不消去。 A = A₁ + M₁ᵀA₂ + 2ω₁×(M₁ᵀV₂) + ω₁×(ω₁×τ) + α₁×τ
| A_ALWAYS_INLINE void ast::AccelerationTransform::getInverse | ( | AccelerationTransform & | inversed | ) | const |
获取逆变换
| inversed | 逆变换 |
与 KinematicTransform::getInverse 一致:把平移、速度、加速度取负后走正向变换。 也可参考 Transform::getInverse 用的 rotation_.transformVector()
|
static |
获取单位加速度变换
| A_ALWAYS_INLINE AccelerationTransform ast::AccelerationTransform::inverse | ( | ) | const |
获取逆变换
| A_ALWAYS_INLINE AccelerationTransform ast::AccelerationTransform::operator* | ( | const AccelerationTransform & | next | ) | const |
组合下一个坐标系变换
| next | 下一个坐标系变换 |
| A_ALWAYS_INLINE AccelerationTransform & ast::AccelerationTransform::operator*= | ( | const AccelerationTransform & | next | ) |
组合下一个坐标系变换
| next | 下一个坐标系变换 |
| A_ALWAYS_INLINE void ast::AccelerationTransform::transformPosVelAcc | ( | const Vector3d & | position, |
| const Vector3d & | velocity, | ||
| const Vector3d & | acceleration, | ||
| Vector3d & | positionOut, | ||
| Vector3d & | velocityOut, | ||
| Vector3d & | accelerationOut ) const |
变换位置、速度和加速度
设 ρ = p − t 为点相对目标坐标系原点的位置,ρ̇、ρ̈ 分别为其在源坐标系下的 坐标导数和坐标二阶导数,则 positionOut = M ρ velocityOut = M ( ρ̇ − ω×ρ ) accelerationOut = M ( ρ̈ − 2ω×ρ̇ − ω̇×ρ + ω×(ω×ρ) )
| position | 位置(源坐标系分量) |
| velocity | 速度(源坐标系分量) |
| acceleration | 加速度(源坐标系分量) |
| positionOut | 变换后的位置 |
| velocityOut | 变换后的速度 |
| accelerationOut | 变换后的加速度 |
先进行坐标系平移(含速度和加速度),再进行加速度旋转。
| A_ALWAYS_INLINE void ast::AccelerationTransform::transformPosVelAccInv | ( | const Vector3d & | position, |
| const Vector3d & | velocity, | ||
| const Vector3d & | acceleration, | ||
| Vector3d & | positionOut, | ||
| Vector3d & | velocityOut, | ||
| Vector3d & | accelerationOut ) const |
变换位置、速度和加速度(逆变换)
inverse().transformPosVelAcc(...); | position | 位置(目标坐标系分量) |
| velocity | 速度(目标坐标系分量) |
| acceleration | 加速度(目标坐标系分量) |
| positionOut | 变换后的位置 |
| velocityOut | 变换后的速度 |
| accelerationOut | 变换后的加速度 |
逆变换是"先逆旋转,再把平移加回去",与正向的"先减平移,再旋转"次序相反