opengnc.attitude_dynamics package
Submodules
opengnc.attitude_dynamics.flexible_body module
Flexible body dynamics propagation and coupling models.
- opengnc.attitude_dynamics.flexible_body.coupled_flexible_rigid_dynamics(J_rigid: ndarray, omega: ndarray, torque: ndarray, eta: ndarray, eta_dot: ndarray, natural_freqs: ndarray, damping_ratios: ndarray, modal_influence: ndarray) tuple[ndarray, ndarray][source]
Compute coupled rigid-flexible body dynamics.
Augmented System Projection: $begin{bmatrix} mathbf{J} & mathbf{Phi}^T \ mathbf{Phi} & mathbf{I} end{bmatrix} begin{bmatrix} dot{omega} \ ddot{eta} end{bmatrix} = begin{bmatrix} tau - omega times (mathbf{J} omega) \ -2zetaomega_ndot{eta} - omega_n^2eta end{bmatrix}$
- Parameters:
J_rigid (np.ndarray) – Rigid inertia tensor (3, 3) ($kg cdot m^2$).
omega (np.ndarray) – Angular velocity (3,) (rad/s).
torque (np.ndarray) – External torque (3,) (Nm).
eta (np.ndarray) – Modal displacements (n_modes,).
eta_dot (np.ndarray) – Modal velocities (n_modes,).
natural_freqs (np.ndarray) – Natural frequencies (n_modes,) (rad/s).
damping_ratios (np.ndarray) – Damping ratios (n_modes,).
modal_influence (np.ndarray) – Influence matrix (n_modes, 3).
- Returns:
(omega_dot, eta_ddot).
- Return type:
tuple[np.ndarray, np.ndarray]
- opengnc.attitude_dynamics.flexible_body.flexible_body_dynamics(eta: ndarray, eta_dot: ndarray, omega_dot: ndarray, natural_freqs: ndarray, damping_ratios: ndarray, modal_influence: ndarray) ndarray[source]
Compute modal acceleration $ddot{eta}$.
Modal Equation: $ddot{eta}_i + 2zeta_iomega_{n,i}dot{eta}_i + omega_{n,i}^2eta_i = mathbf{Phi}_i cdot dot{omega}$
- Parameters:
eta (np.ndarray) – Modal displacements (n_modes,).
eta_dot (np.ndarray) – Modal velocities (n_modes,).
omega_dot (np.ndarray) – Rigid body angular acceleration (3,) (rad/s$^2$).
natural_freqs (np.ndarray) – Natural frequencies $omega_{n,i}$ (n_modes,) (rad/s).
damping_ratios (np.ndarray) – Damping ratios $zeta_i$ (n_modes,).
modal_influence (np.ndarray) – Influence matrix $mathbf{Phi}$ (n_modes, 3).
- Returns:
Modal acceleration $ddot{eta}$ (n_modes,) (rad/s$^2$).
- Return type:
np.ndarray
opengnc.attitude_dynamics.fuel_slosh module
Fuel slosh dynamics using equivalent pendulum models.
- opengnc.attitude_dynamics.fuel_slosh.fuel_slosh_dynamics(theta: float, theta_dot: float, omega: ndarray, omega_dot: ndarray, L: float, r_base: ndarray, g_equiv: ndarray) float[source]
Compute slosh pendulum angular acceleration $ddot{theta}$.
The pendulum is subject to base acceleration: $mathbf{a}_{base} = mathbf{g}_{eq} - dot{omega} times mathbf{r}_b - omega times (omega times mathbf{r}_b)$
- Parameters:
theta (float) – Pendulum angle (rad).
theta_dot (float) – Pendulum rate (rad/s).
omega (np.ndarray) – Spacecraft angular velocity (3,) (rad/s).
omega_dot (np.ndarray) – Spacecraft angular acceleration (3,) (rad/s$^2$).
L (float) – Pendulum length (m).
r_base (np.ndarray) – Pivot location relative to spacecraft CM (3,) (m).
g_equiv (np.ndarray) – Effective gravity/acceleration vector (3,) (m/s$^2$).
- Returns:
Pendulum acceleration $ddot{theta}$ (rad/s$^2$).
- Return type:
float
- opengnc.attitude_dynamics.fuel_slosh.fuel_slosh_torque(m_p: float, L: float, theta: float, theta_dot: float, theta_ddot: float, r_base: ndarray) ndarray[source]
Compute reaction torque from slosh bob.
- Parameters:
m_p (float) – Slosh mass (kg).
L (float) – Pendulum length (m).
theta (float) – Pendulum angle (rad).
theta_dot (float) – Pendulum rate (rad/s).
theta_ddot (float) – Pendulum acceleration (rad/s$^2$).
r_base (np.ndarray) – Pivot location (3,) (m).
- Returns:
Reaction torque vector (3,) (Nm).
- Return type:
np.ndarray
opengnc.attitude_dynamics.rigid_body module
Rigid body Attitude dynamics based on Euler’s equations of motion.
- opengnc.attitude_dynamics.rigid_body.euler_equations(J: ndarray, omega: ndarray, torque: ndarray) ndarray[source]
Compute rigid body angular acceleration via Euler’s equations.
Equation of Motion: $mathbf{J} dot{omega} + mathbf{omega} times (mathbf{J} omega) = mathbf{tau}$
- Parameters:
J (np.ndarray) – Inertia tensor ($3 times 3$) ($kg cdot m^2$).
omega (np.ndarray) – Angular velocity vector (3,) (rad/s).
torque (np.ndarray) – Net external torque vector (3,) (Nm).
- Returns:
Angular acceleration $dot{omega}$ (3,) (rad/s$^2$).
- Return type:
np.ndarray
- Raises:
ValueError – If input dimensions are invalid.
opengnc.attitude_dynamics.variable_inertia module
Attitude dynamics with time-varying inertia tensors.
- opengnc.attitude_dynamics.variable_inertia.mass_depletion_J_dot(J_nominal: ndarray, m_initial: float, dm_dt: float, r_point: ndarray) ndarray[source]
Model $dot{mathbf{J}}$ due to point-mass depletion.
$dot{mathbf{J}} = dot{m} [ (mathbf{r}^T mathbf{r}) mathbf{I} - mathbf{r} mathbf{r}^T ]$
- Parameters:
J_nominal (np.ndarray) – Nominal system inertia (3, 3).
m_initial (float) – Initial segment mass (kg).
dm_dt (float) – Mass flow rate (kg/s). Negative for depletion.
r_point (np.ndarray) – Position of mass segment relative to system CM (3,) (m).
- Returns:
Inertia derivative $dot{mathbf{J}}$ (3, 3) ($kg cdot m^2 / s$).
- Return type:
np.ndarray
- opengnc.attitude_dynamics.variable_inertia.variable_inertia_euler_equations(J: ndarray, J_dot: ndarray, omega: ndarray, torque: ndarray) ndarray[source]
Compute $dot{omega}$ for a body with time-varying inertia.
Equation of Motion: $mathbf{J} dot{omega} + dot{mathbf{J}} omega + omega times (mathbf{J} omega) = mathbf{tau}$
- Parameters:
J (np.ndarray) – Current inertia tensor ($3 times 3$) ($kg cdot m^2$).
J_dot (np.ndarray) – Inertia derivative ($3 times 3$) ($kg cdot m^2 / s$).
omega (np.ndarray) – Angular velocity (3,) (rad/s).
torque (np.ndarray) – External torque (3,) (Nm).
- Returns:
Angular acceleration $dot{omega}$ (3,) (rad/s$^2$).
- Return type:
np.ndarray