nPlateSRP#

class nPlateSRP(state_vector: StateArray, spacecraft: Spacecraft, base_frame: Frame)#

Bases: DynamicModel

Models the acceleration due to Solar Radiation Pressure (SRP) using an N-plate model.

The spacecraft is decomposed into \(N\) flat plates, each with its own area, surface normal, specular reflectivity \(\rho_s\), and diffuse reflectivity \(\rho_d\). For each illuminated plate \(i\) (i.e., \(\hat{\mathbf{n}}_i \cdot \hat{\mathbf{s}} > 0\)), the SRP acceleration contribution is:

\[\mathbf{a}_i = -\frac{\nu\, P_\odot}{m} \left(\frac{r_\odot}{r}\right)^2 A_i \left(\hat{\mathbf{n}}_i \cdot \hat{\mathbf{r}}_\odot\right) \left[ (1 - \rho_s)\,\hat{\mathbf{r}}_\odot + 2\rho_s \left(\hat{\mathbf{n}}_i \cdot \hat{\mathbf{r}}_\odot\right) \hat{\mathbf{n}}_i + \tfrac{2}{3}\rho_d\,\hat{\mathbf{n}}_i \right]\]

where \(\nu\) is the shadow factor (0 in eclipse, 1 in full Sun), \(P_\odot\) is the solar radiation pressure at 1 AU, \(r_\odot / r\) is the inverse-square scaling with heliocentric distance, and \(\hat{\mathbf{r}}_\odot\) is the unit vector from the spacecraft to the Sun (direction of incoming radiation); the dot product \(\hat{\mathbf{n}}_i \cdot \hat{\mathbf{r}}_\odot > 0\) selects illuminated plates, and the leading minus sign yields acceleration directed away from the Sun. The total acceleration is:

\[\mathbf{a}_\text{SRP} = \eta_\text{SRP} \sum_{i=1}^{N} \mathbf{a}_i\]

where \(\eta_\text{SRP}\) is an estimable scale factor (default 1) retrieved from the state vector via a ("eta_srp", spice_id) entry and can be solved for in the OD process.

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

  • spacecraft (Spacecraft) – The spacecraft containing physical and plate model properties.

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 nPlate_SRP = True.

scarabaeus.CannonballSRP

Lower fidelity model for calculating SRP. Raises —— ValueError If any plate area in the n-plate model is not expressed in km². Notes —– The Sun’s position is retrieved dynamically from SPICE data.

References

P. W. Kenneally, “High geometric fidelity solar radiation pressure modeling via graphics processing unit,” Master’s thesis, Colorado Boulder, 2016.

Attributes:
P_SRP

The precomputed SRP constant for scaling factors.

area

The total surface area of the spacecraft.

eta_srp

The SRP scale factor.

frame

The reference frame in which SRP calculations are performed.

origin

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

origin_name

The name of the origin body.

plate_model

The associated nPlateModel used to calculate SRP.

ref_coeff

The reflectivity coefficient of the spacecraft.

spacecraft

The spacecraft associated with the SRP model.

Methods

compute_acceleration(position, ...)

Computes the acceleration due to solar radiation pressure (SRP) based on the n-plate model.

inertial_to_body_DCM(epoch[, tol])

Computes the Direction Cosine Matrix (DCM) to transform vectors from the inertial frame to the spacecraft-fixed frame.

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

Computes the acceleration due to solar radiation pressure (SRP) based on the n-plate model.

Calculates the contribution of each spacecraft plate to the total acceleration, considering reflection, absorption, and the relative orientation of the spacecraft with respect to the Sun.

Parameters:
  • position (np.ndarray) – 3x1 vector describing the spacecraft’s position. Assumed in units of kilometers.

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

  • epoch (float) – Current simulation epoch in seconds.

  • body (Spacecraft) – The spacecraft for which SRP acceleration is calculated.

Returns:

total_srp_acc – 3x1 vector describing the total SRP acceleration. Assumed in units of \(\frac{km}{s^2}\).

Return type:

np.ndarrays

inertial_to_body_DCM(epoch: EpochArray, tol: int = 50) float#

Computes the Direction Cosine Matrix (DCM) to transform vectors from the inertial frame to the spacecraft-fixed frame.

Parameters:
  • epoch (EpochArray) – The current epoch given in ephemeris time (seconds past J2000).

  • tol (int, optional) – The time tolerance for retrieving attitude and angular velocity from the specified spacecraft clock time. Defaults to 50.

Returns:

dcm – The DCM for transforming inertial vectors to spacecraft-fixed coordinates.

Return type:

np.ndarray

Notes

The epoch parameter is converted from ephemeris time to continuous encoded spacecraft clock “ticks”. Due to this, the time tolerance should be given as sclock ticks and not seconds.

property P_SRP: float#

The precomputed SRP constant for scaling factors. Expressed in units of \(\frac{N}{m^2}\).

property area: float#

The total surface area of the spacecraft. Expressed in units of square meters.

property eta_srp: float#

The SRP scale factor. Unitless.

property frame: str#

The reference frame in which SRP calculations are performed.

property origin: Body#

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

property origin_name: str#

The name of the origin body.

property plate_model: nPlateModel#

The associated nPlateModel used to calculate SRP.

property ref_coeff: float#

The reflectivity coefficient of the spacecraft. Unitless.

property spacecraft: Spacecraft#

The spacecraft associated with the SRP model.