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

Module contents