opengnc.mission_design package
Submodules
opengnc.mission_design.budgeting module
Propellant budgeting and orbital lifetime prediction tools.
- class opengnc.mission_design.budgeting.ManeuverSequence(initial_mass: float, isp: float)[source]
Bases:
objectTracks a sequence of maneuvers and accurately budgets propellant consumption over time.
- add_maneuver(name: str, dv: float, description: str = '') None[source]
Adds a maneuver to the sequence and updates the current mass.
- Parameters:
name (str) – Name of the maneuver.
dv (float) – Delta-V of the maneuver (km/s).
description (str) – Optional description.
- opengnc.mission_design.budgeting.calculate_delta_v(initial_mass: float, propellant_mass: float, isp: float) float[source]
Calculate available Delta-V from propellant mass.
Equation: $Delta V = I_{sp} g_0 lnleft(frac{m_0}{m_f}right)$
- Parameters:
initial_mass (float) – Initial mass $m_0$ (kg).
propellant_mass (float) – Mass of propellant to burn (kg).
isp (float) – Specific impulse (s).
- Returns:
Available Delta-V (km/s).
- Return type:
float
- opengnc.mission_design.budgeting.calculate_propellant_mass(initial_mass: float, dv: float, isp: float) float[source]
Calculate required propellant mass via the Rocket Equation.
Equation: $m_p = m_0 left( 1 - expleft(-frac{Delta V}{I_{sp} g_0}right) right)$
- Parameters:
initial_mass (float) – Initial spacecraft mass $m_0$ (kg).
dv (float) – Required Delta-V (km/s).
isp (float) – Specific impulse (s).
- Returns:
Required propellant mass (kg).
- Return type:
float
- opengnc.mission_design.budgeting.calculate_staged_delta_v(stages: list[dict]) float[source]
Calculate total Delta-V for a multi-stage system.
Summation: $Delta V_{total} = sum_{i=1}^n I_{sp,i} g_0 lnleft(frac{m_{0,i}}{m_{f,i}}right)$
- Parameters:
stages (list[dict]) – List of stage definitions (ordered 1 to N). Each dict requires ‘m_dry’, ‘m_prop’, ‘isp’.
- Returns:
Total Delta-V (km/s).
- Return type:
float
- opengnc.mission_design.budgeting.predict_lifetime(r_eci: ndarray, v_eci: ndarray, mass: float, area: float, cd: float, density_model: Any, jd_epoch: float, max_days: float = 30, dt: float = 100.0) dict[source]
Predicts the orbital lifetime due to atmospheric drag using numerical integration. Saves and returns the time of reentry (altitude < 100km).
- Parameters:
r_eci (np.ndarray) – Initial position vector [km].
v_eci (np.ndarray) – Initial velocity vector [km/s].
mass (float) – Spacecraft mass [kg].
area (float) – Equivalent cross-sectional area [m^2].
cd (float) – Drag coefficient.
density_model – Object with get_density(r_eci, jd) method.
jd_epoch (float) – Julian Date epoch.
max_days (float) – Maximum prediction duration in days.
dt (float) – Approximate time step for solver output [s].
- Returns:
dict –
‘reentry_detected’ (bool)
’lifetime_days’ (float)
’final_altitude’ (float)
’trajectory’ (dict with ‘t’, ‘r’, ‘v’)
- Return type:
Breakdown of prediction results:
opengnc.mission_design.communications module
Link budget calculations and RF analysis tools.
- opengnc.mission_design.communications.calculate_atmospheric_attenuation(elevation_deg: float, frequency_hz: float) float[source]
Calculates atmospheric attenuation using a simplified cosecant model.
- Formula:
L_atm = A_zenith / sin(elevation) where A_zenith is a base attenuation dependent on frequency band.
- Parameters:
elevation_deg (float) – Elevation angle [deg].
frequency_hz (float) – Frequency [Hz].
- Returns:
float
- Return type:
Atmospheric attenuation [dB].
- opengnc.mission_design.communications.calculate_doppler_shift(f_tx_hz: float, r_ecef_rx: ndarray, v_ecef_rx: ndarray, r_ecef_tx: ndarray, v_ecef_tx: ndarray) dict[str, float][source]
Calculates the Doppler shift for a signal sent from TX to RX.
- Formula:
delta_f = - f_tx * (v_rel / c) where v_rel = dot(r_rel, v_rel_vec) / |r_rel| r_rel = r_rx - r_tx v_rel_vec = v_rx - v_tx
- Parameters:
f_tx_hz (float) – Transmitter frequency [Hz].
r_ecef_rx (np.ndarray) – Receiver position in ECEF [m], shape (3,).
v_ecef_rx (np.ndarray) – Receiver velocity in ECEF [m/s], shape (3,).
r_ecef_tx (np.ndarray) – Transmitter position in ECEF [m], shape (3,).
v_ecef_tx (np.ndarray) – Transmitter velocity in ECEF [m/s], shape (3,).
- Returns:
dict – ‘f_rx_hz’ (float): Received frequency [Hz]. ‘doppler_shift_hz’ (float): Doppler shift [Hz].
- Return type:
Containing:
- opengnc.mission_design.communications.calculate_friis_link_budget(p_tx_w: float, g_tx_db: float, g_rx_db: float, frequency_hz: float, distance_m: float, losses_misc_db: float = 0.0, l_atm_db: float = 0.0) dict[str, float][source]
Calculates the link budget using Friis transmission equation.
- Formula:
Pr (dBW) = Pt (dBW) + Gt (dB) + Gr (dB) - Lfs (dB) - Latm (dB) - Lmisc (dB) Lfs = 20 * log10(d) + 20 * log10(f) + 20 * log10(4*pi/c)
- Parameters:
p_tx_w (float) – Transmitter power [W].
g_tx_db (float) – Transmitter antenna gain [dB].
g_rx_db (float) – Receiver antenna gain [dB].
frequency_hz (float) – Carrier frequency [Hz].
distance_m (float) – Distance between Tx and Rx [m].
losses_misc_db (float, optional) – Miscellaneous losses (pointing, line, etc.) [dB]. Default 0.
l_atm_db (float, optional) – Atmospheric attenuation [dB]. Default 0.
- Returns:
dict – ‘p_rx_dbw’ (float): Received power [dBW]. ‘p_rx_w’ (float): Received power [W]. ‘l_fs_db’ (float): Free space path loss [dB].
- Return type:
Containing:
opengnc.mission_design.coverage module
Ground station access and lighting conditions analysis utilities.
- opengnc.mission_design.coverage.calculate_access_windows(t_array: ndarray, r_eci_array: ndarray, gs_lat_deg: float, gs_lon_deg: float, gs_alt_m: float, min_elevation_deg: float = 5.0, jdut1: float = 2451545.0) dict[str, Any][source]
Calculates access windows (visibility) from a Ground Station for a given trajectory.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array (np.ndarray) – Position history in ECI [m], shape (N, 3).
gs_lat_deg (float) – Ground Station Latitude [deg].
gs_lon_deg (float) – Ground Station Longitude [deg].
gs_alt_m (float) – Ground Station Altitude [m].
min_elevation_deg (float) – Minimum elevation for visibility [deg].
jdut1 (float) – Julian Date UT1 at t=0.
- Returns:
dict
- Return type:
Containing ‘visible_intervals’ (list of dicts), ‘elevation_history’ (degrees).
- opengnc.mission_design.coverage.calculate_constellation_coverage(t_array: ndarray, r_eci_array_list: list[ndarray], target_points_llh: ndarray, min_elevation_deg: float = 5.0, jdut1: float = 2451545.0) list[dict[str, float]][source]
Evaluates coverage statistics (gap, revisit time) for a constellation over a list of ground targets.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array_list (list of np.ndarray) – List of position histories in ECI [m], each shape (N, 3).
target_points_llh (np.ndarray) – Target locations as (M, 2) or (M, 3) matrix [Lat(deg), Lon(deg), Alt(m)]. Altitude defaults to 0 if only 2 columns provided.
min_elevation_deg (float) – Minimum elevation for visibility [deg]. Defaults to 5.0.
jdut1 (float) – Julian Date UT1 at t=0. Defaults to 2451545.0.
- Returns:
list of dict – ‘mean_revisit_time’, and ‘total_coverage_time’.
- Return type:
For each target point, statistics including ‘max_revisit_time_gap’,
- opengnc.mission_design.coverage.calculate_ground_track(t_array: ndarray, r_eci_array: ndarray, jdut1: float = 2451545.0) dict[str, ndarray][source]
Calculates ground track coordinates (Lat, Lon, Alt) over time.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array (np.ndarray) – Position history in ECI [m], shape (N, 3).
jdut1 (float) – Julian Date UT1 at t=0.
- Returns:
dict
- Return type:
Containing ‘lat_deg’, ‘lon_deg’, ‘alt_m’ arrays.
- opengnc.mission_design.coverage.calculate_lighting_conditions(t_array: ndarray, r_eci_array: ndarray, v_eci_array: ndarray, jdut1: float = 2451545.0) dict[str, ndarray][source]
Calculates Beta angle and Eclipse status over time.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array (np.ndarray) – Position history in ECI [m], shape (N, 3).
v_eci_array (np.ndarray) – Velocity history in ECI [m/s], shape (N, 3).
jdut1 (float) – Julian Date UT1 at t=0.
- Returns:
dict
- Return type:
Containing ‘beta_angle_deg’, ‘eclipse_state’ (1 for Sun, 0 for shade).
opengnc.mission_design.launch module
Launch window and injection state computation utilities.
- opengnc.mission_design.launch.calculate_deployment_sequence(planes: int, sats_per_plane: int, phasing_parameter_f: int, inc_deg: float, base_raan_deg: float = 0.0, base_ta_deg: float = 0.0) list[dict[str, Any]][source]
Computes target RAAN and True Anomaly for each satellite in a Walker-Delta Constellation (T/P/F).
- Parameters:
planes (int) – Number of orbital planes (P).
sats_per_plane (int) – Number of satellites per plane (S).
phasing_parameter_f (int) – Phasing parameter (F) between adjacent planes (0 <= F <= P-1).
inc_deg (float) – Inclination of all planes [deg] (not actively changing sequence logic, kept for reference).
base_raan_deg (float) – RAAN of Plane 0 [deg].
base_ta_deg (float) – True anomaly of Satellite 0 in Plane 0 [deg].
- Returns:
list of dict
- Return type:
Each satellite’s parameters including ‘plane_id’, ‘sat_id’, ‘global_id’, ‘raan_deg’, ‘ta_deg’
- opengnc.mission_design.launch.calculate_launch_windows(jd_start: float, jd_end: float, inc_deg: float, raan_deg: float, lat_deg: float, lon_deg: float, step_sec: float = 60) list[dict[str, Any]][source]
Calculates launch windows by finding times when the launch site intersects the target orbit plane.
- Parameters:
jd_start (float) – Start Julian Date.
jd_end (float) – End Julian Date.
inc_deg (float) – Target Inclination [deg].
raan_deg (float) – Target RAAN [deg].
lat_deg (float) – Launch site Latitude [deg].
lon_deg (float) – Launch site Longitude [deg].
step_sec (float) – Search step size [s].
- Returns:
dict
- Return type:
list of dicts with ‘jd’, ‘type’ (Ascending/Descending), and ‘azimuth_deg’.
- opengnc.mission_design.launch.compute_injection_state(lat_deg: float, lon_deg: float, alt_m: float, azimuth_deg: float, flight_path_angle_deg: float, speed_mps: float, jd: float) tuple[ndarray, ndarray][source]
Computes ECI state vector at insertion.
- Parameters:
lat_deg (float) – Latitude [deg].
lon_deg (float) – Longitude [deg].
alt_m (float) – Altitude [m].
azimuth_deg (float) – Azimuth from North [deg].
flight_path_angle_deg (float) – Flight Path Angle from horizontal [deg].
speed_mps (float) – Speed magnitude [m/s].
jd (float) – Julian Date at injection.
- Returns:
tuple
- Return type:
(r_eci [m], v_eci [m/s])
Module contents
- class opengnc.mission_design.ManeuverSequence(initial_mass: float, isp: float)[source]
Bases:
objectTracks a sequence of maneuvers and accurately budgets propellant consumption over time.
- add_maneuver(name: str, dv: float, description: str = '') None[source]
Adds a maneuver to the sequence and updates the current mass.
- Parameters:
name (str) – Name of the maneuver.
dv (float) – Delta-V of the maneuver (km/s).
description (str) – Optional description.
- opengnc.mission_design.calculate_access_windows(t_array: ndarray, r_eci_array: ndarray, gs_lat_deg: float, gs_lon_deg: float, gs_alt_m: float, min_elevation_deg: float = 5.0, jdut1: float = 2451545.0) dict[str, Any][source]
Calculates access windows (visibility) from a Ground Station for a given trajectory.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array (np.ndarray) – Position history in ECI [m], shape (N, 3).
gs_lat_deg (float) – Ground Station Latitude [deg].
gs_lon_deg (float) – Ground Station Longitude [deg].
gs_alt_m (float) – Ground Station Altitude [m].
min_elevation_deg (float) – Minimum elevation for visibility [deg].
jdut1 (float) – Julian Date UT1 at t=0.
- Returns:
dict
- Return type:
Containing ‘visible_intervals’ (list of dicts), ‘elevation_history’ (degrees).
- opengnc.mission_design.calculate_atmospheric_attenuation(elevation_deg: float, frequency_hz: float) float[source]
Calculates atmospheric attenuation using a simplified cosecant model.
- Formula:
L_atm = A_zenith / sin(elevation) where A_zenith is a base attenuation dependent on frequency band.
- Parameters:
elevation_deg (float) – Elevation angle [deg].
frequency_hz (float) – Frequency [Hz].
- Returns:
float
- Return type:
Atmospheric attenuation [dB].
- opengnc.mission_design.calculate_constellation_coverage(t_array: ndarray, r_eci_array_list: list[ndarray], target_points_llh: ndarray, min_elevation_deg: float = 5.0, jdut1: float = 2451545.0) list[dict[str, float]][source]
Evaluates coverage statistics (gap, revisit time) for a constellation over a list of ground targets.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array_list (list of np.ndarray) – List of position histories in ECI [m], each shape (N, 3).
target_points_llh (np.ndarray) – Target locations as (M, 2) or (M, 3) matrix [Lat(deg), Lon(deg), Alt(m)]. Altitude defaults to 0 if only 2 columns provided.
min_elevation_deg (float) – Minimum elevation for visibility [deg]. Defaults to 5.0.
jdut1 (float) – Julian Date UT1 at t=0. Defaults to 2451545.0.
- Returns:
list of dict – ‘mean_revisit_time’, and ‘total_coverage_time’.
- Return type:
For each target point, statistics including ‘max_revisit_time_gap’,
- opengnc.mission_design.calculate_delta_v(initial_mass: float, propellant_mass: float, isp: float) float[source]
Calculate available Delta-V from propellant mass.
Equation: $Delta V = I_{sp} g_0 lnleft(frac{m_0}{m_f}right)$
- Parameters:
initial_mass (float) – Initial mass $m_0$ (kg).
propellant_mass (float) – Mass of propellant to burn (kg).
isp (float) – Specific impulse (s).
- Returns:
Available Delta-V (km/s).
- Return type:
float
- opengnc.mission_design.calculate_deployment_sequence(planes: int, sats_per_plane: int, phasing_parameter_f: int, inc_deg: float, base_raan_deg: float = 0.0, base_ta_deg: float = 0.0) list[dict[str, Any]][source]
Computes target RAAN and True Anomaly for each satellite in a Walker-Delta Constellation (T/P/F).
- Parameters:
planes (int) – Number of orbital planes (P).
sats_per_plane (int) – Number of satellites per plane (S).
phasing_parameter_f (int) – Phasing parameter (F) between adjacent planes (0 <= F <= P-1).
inc_deg (float) – Inclination of all planes [deg] (not actively changing sequence logic, kept for reference).
base_raan_deg (float) – RAAN of Plane 0 [deg].
base_ta_deg (float) – True anomaly of Satellite 0 in Plane 0 [deg].
- Returns:
list of dict
- Return type:
Each satellite’s parameters including ‘plane_id’, ‘sat_id’, ‘global_id’, ‘raan_deg’, ‘ta_deg’
- opengnc.mission_design.calculate_doppler_shift(f_tx_hz: float, r_ecef_rx: ndarray, v_ecef_rx: ndarray, r_ecef_tx: ndarray, v_ecef_tx: ndarray) dict[str, float][source]
Calculates the Doppler shift for a signal sent from TX to RX.
- Formula:
delta_f = - f_tx * (v_rel / c) where v_rel = dot(r_rel, v_rel_vec) / |r_rel| r_rel = r_rx - r_tx v_rel_vec = v_rx - v_tx
- Parameters:
f_tx_hz (float) – Transmitter frequency [Hz].
r_ecef_rx (np.ndarray) – Receiver position in ECEF [m], shape (3,).
v_ecef_rx (np.ndarray) – Receiver velocity in ECEF [m/s], shape (3,).
r_ecef_tx (np.ndarray) – Transmitter position in ECEF [m], shape (3,).
v_ecef_tx (np.ndarray) – Transmitter velocity in ECEF [m/s], shape (3,).
- Returns:
dict – ‘f_rx_hz’ (float): Received frequency [Hz]. ‘doppler_shift_hz’ (float): Doppler shift [Hz].
- Return type:
Containing:
- opengnc.mission_design.calculate_friis_link_budget(p_tx_w: float, g_tx_db: float, g_rx_db: float, frequency_hz: float, distance_m: float, losses_misc_db: float = 0.0, l_atm_db: float = 0.0) dict[str, float][source]
Calculates the link budget using Friis transmission equation.
- Formula:
Pr (dBW) = Pt (dBW) + Gt (dB) + Gr (dB) - Lfs (dB) - Latm (dB) - Lmisc (dB) Lfs = 20 * log10(d) + 20 * log10(f) + 20 * log10(4*pi/c)
- Parameters:
p_tx_w (float) – Transmitter power [W].
g_tx_db (float) – Transmitter antenna gain [dB].
g_rx_db (float) – Receiver antenna gain [dB].
frequency_hz (float) – Carrier frequency [Hz].
distance_m (float) – Distance between Tx and Rx [m].
losses_misc_db (float, optional) – Miscellaneous losses (pointing, line, etc.) [dB]. Default 0.
l_atm_db (float, optional) – Atmospheric attenuation [dB]. Default 0.
- Returns:
dict – ‘p_rx_dbw’ (float): Received power [dBW]. ‘p_rx_w’ (float): Received power [W]. ‘l_fs_db’ (float): Free space path loss [dB].
- Return type:
Containing:
- opengnc.mission_design.calculate_ground_track(t_array: ndarray, r_eci_array: ndarray, jdut1: float = 2451545.0) dict[str, ndarray][source]
Calculates ground track coordinates (Lat, Lon, Alt) over time.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array (np.ndarray) – Position history in ECI [m], shape (N, 3).
jdut1 (float) – Julian Date UT1 at t=0.
- Returns:
dict
- Return type:
Containing ‘lat_deg’, ‘lon_deg’, ‘alt_m’ arrays.
- opengnc.mission_design.calculate_launch_windows(jd_start: float, jd_end: float, inc_deg: float, raan_deg: float, lat_deg: float, lon_deg: float, step_sec: float = 60) list[dict[str, Any]][source]
Calculates launch windows by finding times when the launch site intersects the target orbit plane.
- Parameters:
jd_start (float) – Start Julian Date.
jd_end (float) – End Julian Date.
inc_deg (float) – Target Inclination [deg].
raan_deg (float) – Target RAAN [deg].
lat_deg (float) – Launch site Latitude [deg].
lon_deg (float) – Launch site Longitude [deg].
step_sec (float) – Search step size [s].
- Returns:
dict
- Return type:
list of dicts with ‘jd’, ‘type’ (Ascending/Descending), and ‘azimuth_deg’.
- opengnc.mission_design.calculate_lighting_conditions(t_array: ndarray, r_eci_array: ndarray, v_eci_array: ndarray, jdut1: float = 2451545.0) dict[str, ndarray][source]
Calculates Beta angle and Eclipse status over time.
- Parameters:
t_array (np.ndarray) – Time array [s] from starting epoch.
r_eci_array (np.ndarray) – Position history in ECI [m], shape (N, 3).
v_eci_array (np.ndarray) – Velocity history in ECI [m/s], shape (N, 3).
jdut1 (float) – Julian Date UT1 at t=0.
- Returns:
dict
- Return type:
Containing ‘beta_angle_deg’, ‘eclipse_state’ (1 for Sun, 0 for shade).
- opengnc.mission_design.calculate_propellant_mass(initial_mass: float, dv: float, isp: float) float[source]
Calculate required propellant mass via the Rocket Equation.
Equation: $m_p = m_0 left( 1 - expleft(-frac{Delta V}{I_{sp} g_0}right) right)$
- Parameters:
initial_mass (float) – Initial spacecraft mass $m_0$ (kg).
dv (float) – Required Delta-V (km/s).
isp (float) – Specific impulse (s).
- Returns:
Required propellant mass (kg).
- Return type:
float
- opengnc.mission_design.calculate_staged_delta_v(stages: list[dict]) float[source]
Calculate total Delta-V for a multi-stage system.
Summation: $Delta V_{total} = sum_{i=1}^n I_{sp,i} g_0 lnleft(frac{m_{0,i}}{m_{f,i}}right)$
- Parameters:
stages (list[dict]) – List of stage definitions (ordered 1 to N). Each dict requires ‘m_dry’, ‘m_prop’, ‘isp’.
- Returns:
Total Delta-V (km/s).
- Return type:
float
- opengnc.mission_design.compute_injection_state(lat_deg: float, lon_deg: float, alt_m: float, azimuth_deg: float, flight_path_angle_deg: float, speed_mps: float, jd: float) tuple[ndarray, ndarray][source]
Computes ECI state vector at insertion.
- Parameters:
lat_deg (float) – Latitude [deg].
lon_deg (float) – Longitude [deg].
alt_m (float) – Altitude [m].
azimuth_deg (float) – Azimuth from North [deg].
flight_path_angle_deg (float) – Flight Path Angle from horizontal [deg].
speed_mps (float) – Speed magnitude [m/s].
jd (float) – Julian Date at injection.
- Returns:
tuple
- Return type:
(r_eci [m], v_eci [m/s])
- opengnc.mission_design.predict_lifetime(r_eci: ndarray, v_eci: ndarray, mass: float, area: float, cd: float, density_model: Any, jd_epoch: float, max_days: float = 30, dt: float = 100.0) dict[source]
Predicts the orbital lifetime due to atmospheric drag using numerical integration. Saves and returns the time of reentry (altitude < 100km).
- Parameters:
r_eci (np.ndarray) – Initial position vector [km].
v_eci (np.ndarray) – Initial velocity vector [km/s].
mass (float) – Spacecraft mass [kg].
area (float) – Equivalent cross-sectional area [m^2].
cd (float) – Drag coefficient.
density_model – Object with get_density(r_eci, jd) method.
jd_epoch (float) – Julian Date epoch.
max_days (float) – Maximum prediction duration in days.
dt (float) – Approximate time step for solver output [s].
- Returns:
dict –
‘reentry_detected’ (bool)
’lifetime_days’ (float)
’final_altitude’ (float)
’trajectory’ (dict with ‘t’, ‘r’, ‘v’)
- Return type:
Breakdown of prediction results: