AntennaRadiationPressure#
- class AntennaRadiationPressure(origin: CelestialBody, spacecraft: Spacecraft, base_frame: Frame, emitters: list, t0: float = None, tf: float = None)#
Bases:
DynamicModelRecoil acceleration from power the spacecraft transmits: radio antennas and active instruments such as a LIDAR.
An emitter of radiated power \(P\) whose beam is a cone of half-power beamwidth \(\alpha_0\) around the boresight \(\hat{\mathbf{a}}_z\) pushes the spacecraft with
\[\mathbf{a}_k = -\frac{P_k}{m\,c}\, \cos^2\!\left(\frac{\alpha_{0,k}}{4}\right)\hat{\mathbf{a}}_{z,k}\]where \(m\) is the spacecraft mass and \(c\) the speed of light. The factor \(\cos^2(\alpha_0/4)\) is the boresight share of the momentum of a beam spread uniformly over the cone; it is close to one for a high-gain antenna and about 0.91 for a 70 degree low-gain antenna. The total acceleration is
\[\mathbf{a}_\text{ant} = \eta_\text{ant} \sum_{k\,\text{on}} \mathbf{a}_k\]with \(\eta_\text{ant}\) an estimable scale factor (default 1), read from the state under
("eta_antenna", spice_id).Emitters.
emittersis a list of dicts, each holding"name": label;"power":ArrayWUnitsradiated power;"hpbw":ArrayWUnitshalf-power beamwidth, within [0, 360) degrees;"boresight": beam direction in the spacecraft frame;"on_intervals"(optional): list of(start, end)pairs, in TDB seconds past J2000 or asEpochArray, when the emitter transmits (start <= t < end). Omitted orNonemeans always on; an empty list means never on.
Quantities with units may also be given in their serialized form (
{"values", "units"}), which is whatemitters_to_dict()writes.Attitude. Boresights are fixed in the spacecraft frame and reach the inertial frame through the spacecraft-fixed to inertial rotation \(C\) of
DynamicalUtils, for the"CK","inertialFixedAttitude"and"nadirPointingSun"values ofSpacecraft.attitudeMode. Only in the last one, where the spacecraft \(-X\) axis points at the Sun and the Y axis follows the heliocentric velocity, does the acceleration depend on the state, through the rotation of the boresights, and the model reportsdepends_on_velocity.- Parameters:
- originCelestialBody
Propagation origin. Used for the Sun-relative geometry of the
nadirPointingSunattitude.- spacecraftSpacecraft
The emitting spacecraft. Its mass and attitude are read at evaluation time.
- base_frameFrame
Inertial frame of the propagated state.
- emitterslist of dict
The emitters, as described above.
- t0, tffloat, optional
Propagation span in TDB seconds past J2000. When both are given and the frame is J2000, the Sun position is read from a Chebyshev ephemeris cache instead of SPICE.
- Attributes:
depends_on_velocityWhether the acceleration depends on the spacecraft velocity.
emitter_namesEmitter names, in the order of
active_emitters().emittersThe validated emitters.
frameThe inertial frame of the propagated state.
originThe propagation origin.
origin_nameThe name of the propagation origin.
param_nameState key of the estimable scale factor.
spacecraftThe emitting spacecraft.
Methods
active_emitters(epoch)Which emitters transmit at
epoch.compute_acceleration(position, ...)Antenna and instrument recoil acceleration.
emitters_from_dict(emitters)Validate emitters and return them with live quantities.
emitters_to_dict(emitters)Serialize emitters to plain JSON types.
to_dict()Serialize this model's emitters; see
emitters_to_dict().- Raises:
- InvalidEmitterError
If an emitter is malformed.
- DynamicalUtils.InvalidAttitudeModeError
If the spacecraft attitude mode is not one of the three above.
- DynamicalUtils.InvalidFixedAttitudeError
If an
inertialFixedAttitudespacecraft has no 3x3 attitude.- DynamicalUtils.MissingVelocityError
If a
nadirPointingSunspacecraft has no velocity in the state.
See also
scarabaeus.ThermalRadiationThermal re-radiation recoil.
scarabaeus.nPlateSRPSolar radiation pressure on a plate model.
scarabaeus.DynamicalUtilsSpacecraft attitude modes.
Notes
Switching an emitter on or off is a step in the acceleration; the partials take the emitters on at the evaluation epoch. The scale-factor partial is the acceleration with \(\eta_\text{ant} = 1\).
References
J. L. Geeraert, J. M. Leonard, P. W. Kenneally, P. G. Antreasian, M. C. Moreau, and D. S. Lauretta, “OSIRIS-REx Navigation Small Force Models,” in AAS/AIAA Astrodynamics Specialist Conference, 2019, Advances in the Astronautical Sciences, Vol. 171, Univelt, 2020, pp. 931-946.
- classmethod emitters_from_dict(emitters) list#
Validate emitters and return them with live quantities.
- Parameters:
- emitterslist of dict
The emitters, live or as written by
emitters_to_dict(); see the class docstring.
- Returns:
- list of dict
Each emitter with
powerandhpbwasArrayWUnits, a unitboresight, andon_intervalsasNoneor a list of(start, end)floats in TDB seconds past J2000.
- Raises:
- InvalidEmitterError
If
emittersis not a non-empty list or an emitter is malformed.
- classmethod emitters_to_dict(emitters) list#
Serialize emitters to plain JSON types.
- Parameters:
- emitterslist of dict
The emitters in any form
emitters_from_dict()accepts.
- Returns:
- list of dict
The emitters with quantities as
{"values", "units"}dicts;emitters_from_dict()reads them back.
- active_emitters(epoch: float) ndarray#
Which emitters transmit at
epoch.- Parameters:
- epochfloat
TDB epoch (seconds past J2000).
- Returns:
- numpy.ndarray
Boolean flag per emitter, in the order of
emitter_names.
- compute_acceleration(position: ndarray, current_state: dict, epoch: float, body: Spacecraft) ndarray#
Antenna and instrument recoil acceleration.
- Parameters:
- positionnumpy.ndarray
(3,)spacecraft position relative to the origin, km.- current_statedict
The propagated state, holding
("eta_antenna", spice_id)when the scale factor is estimated.- epochfloat
TDB epoch (seconds past J2000).
- bodySpacecraft
The emitting spacecraft.
- Returns:
- numpy.ndarray
(3,)acceleration in km/s^2.
- to_dict() list#
Serialize this model’s emitters; see
emitters_to_dict().- Returns:
- list of dict
The serialized emitters.
- PARAMETER_NAME = 'eta_antenna'#
State key of the estimable scale factor.
- property depends_on_velocity: bool#
Whether the acceleration depends on the spacecraft velocity.
True only for the
nadirPointingSunattitude, where the spacecraft Y axis follows the heliocentric velocity.
- property emitter_names: list#
Emitter names, in the order of
active_emitters().
- property origin: CelestialBody#
The propagation origin.
- property spacecraft: Spacecraft#
The emitting spacecraft.
- exception InvalidEmitterError#
Bases:
ExceptionAn emitter is malformed.
An emitter needs a name, a non-negative power quantity, a half-power beamwidth angle within [0, 360) degrees, a nonzero spacecraft-fixed boresight, and
on_intervalsthat areNoneor a list of(start, end)pairs withstart < end.