CannonballSRP#

class CannonballSRP(state_array: StateArray, spacecraft: Spacecraft, base_frame: Frame)#

Bases: DynamicModel

Models the acceleration due to Solar Radiation Pressure (SRP) using the cannonball model.

The spacecraft is treated as a perfect sphere that reflects solar radiation isotropically. The SRP acceleration is:

\[\mathbf{a}_\text{SRP} = -\frac{\nu\,\eta_\text{SRP}\, C_R\, A}{m} \left(\frac{r_0}{r}\right)^2 P_0\, \hat{\mathbf{r}}_\odot\]

where \(\nu\) is the shadow factor (0 in eclipse, 1 in full Sun), \(\eta_\text{SRP}\) is an estimable scale factor (default 1), \(C_R = 1 + \rho_s\) is the reflectivity coefficient, \(A\) is the spacecraft cross-sectional area, \(m\) is the spacecraft mass, \(r_0\) is the reference distance (1 AU), \(r\) is the Sun–spacecraft distance, \(P_0\) is the solar radiation pressure at 1 AU, and \(\hat{\mathbf{r}}_\odot\) is the unit vector from the spacecraft to the Sun (direction of incoming radiation; the leading minus sign means the acceleration is directed away from the Sun). \(\eta_\text{SRP}\) is retrieved from the state vector via a ("eta_srp", spice_id) entry and can be solved for in the OD process.

Parameters:
  • state_array (StateArray) – The state vector of the spacecraft containing position, velocity, and other estimated parameters.

  • spacecraft (Spacecraft) – The spacecraft object with defined mass, cross-sectional area, and reflectivity coefficient.

  • base_frame (Frame) – Frame of the propagator.

See also

scarabaeus.StateArray

Represents state vectors with origins and reference frames.

scarabaeus.Spacecraft

Defines spacecraft properties including mass and area.

scarabaeus.Propagator

Uses this model when cannonball_SRP=True.

Notes

  • The model assumes uniform reflection across the entire spacecraft surface.

  • The Sun’s position is retrieved dynamically from SPICE data.

  • The acceleration follows an inverse-square law based on Sun-spacecraft distance.

References

Montenbruck, O., & Gill, E. (2000). Satellite Orbits: Models, Methods, and Applications.

Examples

# intial setup
import scarabaeus as scb

# Define spacecraft properties
mass         = scb.ArrayWUnits(500, "kg")  # Spacecraft mass
area         = scb.ArrayWUnits(20, "m^2")  # Cross-sectional area
reflectivity = 1.3                         # Reflectivity coefficient

# Create spacecraft object
sc = scb.Spacecraft("Test_Sat", -1000, mass, area, reflectivity)

# Define state vector with position, velocity, and SRP coefficient
state = [
    (
        "position",
        3,
        "estimated",
        "dynamic",
        sc,
        scb.ArrayWUnits([7000, 0, 0], "km"),
    ),
    (
        "velocity",
        3,
        "estimated",
        "dynamic",
        sc,
        scb.ArrayWUnits([0, 7.5, 0], "km/s"),
    ),
    ("eta_srp", 1, "estimated", "static", sc, scb.ArrayWUnits(1, None)),
]

# Create state vector
state_vector = scb.StateArray(epoch = epochs[0], frame = 'J2000', origin = scb.CelestialBody('Earth'), state = state)

# Initialize propagator with Cannonball SRP enabled
prop = scb.Propagator(sc, state_vector, epochs, cannonball_SRP = True)
prop.propagate()
Attributes:
area

The cross-sectional area of the spacecraft.

eta_srp

The SRP scale factor.

mass

The mass of the spacecraft, typically expressed in units of kilograms.

origin

The celestial body that serves as the origin for the state vector.

origin_name

The name of the origin body.

p_srp

Solar radiation pressure constant at 1 AU, in units of kg·km·s⁻².

ref_coeff

The reflectivity coefficient of the spacecraft.

ref_frame

The reference frame in which SRP calculations are performed.

Methods

compute_acceleration(position, ...)

Computes the acceleration due to solar radiation pressure (SRP).

compute_acceleration(position: ndarray, current_state: dict, epoch: float, body: Body) ndarray#

Computes the acceleration due to solar radiation pressure (SRP).

This method calculates the SRP acceleration experienced by the spacecraft based on its distance from the Sun and its physical properties.

Parameters:
  • position (np.ndarray) – Spacecraft position vector in the reference frame (size: 3x1, units: km).

  • current_state (dict) – Dictionary containing the current state parameters, including eta_srp.

  • epoch (float) – The current simulation epoch.

  • body (Body) – The spacecraft for which SRP acceleration is computed.

Returns:

srp_vec – The SRP acceleration vector (size: 3x1, units: km/s^2).

Return type:

np.ndarray

property area: float#

The cross-sectional area of the spacecraft.

Base:

CannonballSRP

Type:

float

property eta_srp: float#

The SRP scale factor. Unitless.

property mass: float#

The mass of the spacecraft, typically expressed in units of kilograms.

Base:

CannonballSRP

Type:

float

property origin: Body#

The celestial body that serves as the origin for the state vector.

Base:

CannonballSRP

Type:

Body

property origin_name: str#

The name of the origin body.

Base:

CannonballSRP

Type:

str

property p_srp: float#

Solar radiation pressure constant at 1 AU, in units of kg·km·s⁻².

Converted at construction time from the "srpP_constant" entry in scarabaeus.Constants.CONSTANTS.

Base:

CannonballSRP

Type:

float

property ref_coeff: float#

The reflectivity coefficient of the spacecraft.

Base:

CannonballSRP

Type:

float

property ref_frame: str#

The reference frame in which SRP calculations are performed.

Base:

CannonballSRP

Type:

str