public class BoxAndSolarArraySpacecraft extends Object implements RadiationSensitive, DragSensitive
The body can be either a simple parallelepipedic box aligned with spacecraft axes or a set of panels defined by their area and normal vector. Some panels may be moving to model solar arrays (or antennas that could point anywhere). This should handle accurately most spacecraft shapes. This model does not take cast shadows into account.
The lift component of the drag force can be optionally considered. It should probably only be used for reentry computation, with much denser atmosphere than in regular orbit propagation. The lift component is computed using a ratio of molecules that experience specular reflection instead of diffuse reflection (absorption followed by outgassing at negligible velocity). Without lift (i.e. when the lift ratio is set to 0), drag force is along atmosphere relative velocity. With lift (i.e. when the lift ratio is set to any value between 0 and 1), the drag force depends on both relative velocity direction and panels normal orientation. For a single panel, if the relative velocity is head-on (i.e. aligned with the panel normal), the force will be in the same direction with and without lift, but the magnitude with lift ratio set to 1.0 will be twice the magnitude with lift ratio set to 0.0 (because atmosphere molecules bounces backward at same velocity in case of specular reflection).
Each panel
has its own set of radiation and drag coefficients. In
orbit determination context, it would not be possible to estimate each panel
individually, therefore getDragParametersDrivers()
returns a single
parameter driver
representing a global drag multiplicative factor
that applies to all panels drag coefficients
and the getRadiationParametersDrivers()
returns a single
parameter driver
representing a
global radiation multiplicative factor
that applies to all panels radiation coefficients.
ABSORPTION_COEFFICIENT, GLOBAL_RADIATION_FACTOR, REFLECTION_COEFFICIENT
DRAG_COEFFICIENT, GLOBAL_DRAG_FACTOR, LIFT_RATIO
Constructor and Description |
---|
BoxAndSolarArraySpacecraft(double xLength,
double yLength,
double zLength,
ExtendedPVCoordinatesProvider sun,
double solarArrayArea,
org.hipparchus.geometry.euclidean.threed.Vector3D solarArrayAxis,
double dragCoeff,
double liftRatio,
double absorptionCoeff,
double reflectionCoeff)
Build a spacecraft model with best lighting of solar array.
|
BoxAndSolarArraySpacecraft(List<Panel> panels)
Build a spacecraft model.
|
Modifier and Type | Method and Description |
---|---|
static List<Panel> |
buildBox(double xLength,
double yLength,
double zLength,
double drag,
double liftRatio,
double absorption,
double reflection)
Build the panels of a simple parallelepipedic box.
|
static List<Panel> |
buildPanels(double xLength,
double yLength,
double zLength,
ExtendedPVCoordinatesProvider sun,
double solarArrayArea,
org.hipparchus.geometry.euclidean.threed.Vector3D solarArrayAxis,
double drag,
double liftRatio,
double absorption,
double reflection)
Build the panels of a simple parallelepiped box plus one solar array panel.
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
dragAcceleration(FieldSpacecraftState<T> state,
T density,
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> relativeVelocity,
T[] parameters)
Compute the acceleration due to drag.
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
dragAcceleration(SpacecraftState state,
double density,
org.hipparchus.geometry.euclidean.threed.Vector3D relativeVelocity,
double[] parameters)
Compute the acceleration due to drag.
|
List<ParameterDriver> |
getDragParametersDrivers()
Get the drivers for supported parameters.
|
List<Panel> |
getPanels()
Get the panels composing the body.
|
List<ParameterDriver> |
getRadiationParametersDrivers()
Get the drivers for supported parameters.
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
radiationPressureAcceleration(FieldSpacecraftState<T> state,
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> flux,
T[] parameters)
Compute the acceleration due to radiation pressure.
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
radiationPressureAcceleration(SpacecraftState state,
org.hipparchus.geometry.euclidean.threed.Vector3D flux,
double[] parameters)
Compute the acceleration due to radiation pressure.
|
public BoxAndSolarArraySpacecraft(List<Panel> panels)
panels
- panels composing the body, solar arrays and antennas
(only the panels with strictly positive area will be stored)public BoxAndSolarArraySpacecraft(double xLength, double yLength, double zLength, ExtendedPVCoordinatesProvider sun, double solarArrayArea, org.hipparchus.geometry.euclidean.threed.Vector3D solarArrayAxis, double dragCoeff, double liftRatio, double absorptionCoeff, double reflectionCoeff)
Solar arrays orientation will be such that at each time the Sun direction will always be in the solar array meridian plane defined by solar array rotation axis and solar array normal vector.
xLength
- length of the body along its X axis (m)yLength
- length of the body along its Y axis (m)zLength
- length of the body along its Z axis (m)sun
- sun modelsolarArrayArea
- area of the solar array (m²)solarArrayAxis
- solar array rotation axis in satellite framedragCoeff
- drag coefficient (used only for drag)liftRatio
- lift ratio (proportion between 0 and 1 of atmosphere modecules
that will experience specular reflection when hitting spacecraft instead
of experiencing diffuse reflection, hence producing lift)absorptionCoeff
- absorption coefficient between 0.0 an 1.0
(used only for radiation pressure)reflectionCoeff
- specular reflection coefficient between 0.0 an 1.0
(used only for radiation pressure)public List<Panel> getPanels()
public List<ParameterDriver> getDragParametersDrivers()
getDragParametersDrivers
in interface DragSensitive
public List<ParameterDriver> getRadiationParametersDrivers()
getRadiationParametersDrivers
in interface RadiationSensitive
public org.hipparchus.geometry.euclidean.threed.Vector3D dragAcceleration(SpacecraftState state, double density, org.hipparchus.geometry.euclidean.threed.Vector3D relativeVelocity, double[] parameters)
The computation includes all spacecraft specific characteristics like shape, area and coefficients.
dragAcceleration
in interface DragSensitive
state
- current statedensity
- atmospheric density at spacecraft positionrelativeVelocity
- relative velocity of atmosphere with respect to spacecraft,
in the same inertial frame as spacecraft orbit (m/s)parameters
- values of the force model parameterspublic <T extends org.hipparchus.CalculusFieldElement<T>> org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> dragAcceleration(FieldSpacecraftState<T> state, T density, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> relativeVelocity, T[] parameters)
The computation includes all spacecraft specific characteristics like shape, area and coefficients.
dragAcceleration
in interface DragSensitive
T
- instance of a CalculusFieldElementstate
- current statedensity
- atmospheric density at spacecraft positionrelativeVelocity
- relative velocity of atmosphere with respect to spacecraft,
in the same inertial frame as spacecraft orbit (m/s)parameters
- values of the force model parameterspublic org.hipparchus.geometry.euclidean.threed.Vector3D radiationPressureAcceleration(SpacecraftState state, org.hipparchus.geometry.euclidean.threed.Vector3D flux, double[] parameters)
radiationPressureAcceleration
in interface RadiationSensitive
state
- current stateflux
- radiation flux in the same inertial frame as spacecraft orbitparameters
- values of the force model parameterspublic <T extends org.hipparchus.CalculusFieldElement<T>> org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> radiationPressureAcceleration(FieldSpacecraftState<T> state, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> flux, T[] parameters)
This method implements equation 8-44 from David A. Vallado's Fundamentals of Astrodynamics and Applications, third edition, 2007, Microcosm Press.
radiationPressureAcceleration
in interface RadiationSensitive
T
- extends CalculusFieldElementstate
- current stateflux
- radiation flux in the same inertial frame as spacecraft orbitparameters
- values of the force model parameterspublic static List<Panel> buildBox(double xLength, double yLength, double zLength, double drag, double liftRatio, double absorption, double reflection)
xLength
- length of the body along its X axis (m)yLength
- length of the body along its Y axis (m)zLength
- length of the body along its Z axis (m)drag
- drag coefficientliftRatio
- drag lift ratio (proportion between 0 and 1 of atmosphere modecules
that will experience specular reflection when hitting spacecraft instead
of experiencing diffuse reflection, hence producing lift)absorption
- radiation pressure absorption coefficient (between 0 and 1)reflection
- radiation pressure specular reflection coefficient (between 0 and 1)public static List<Panel> buildPanels(double xLength, double yLength, double zLength, ExtendedPVCoordinatesProvider sun, double solarArrayArea, org.hipparchus.geometry.euclidean.threed.Vector3D solarArrayAxis, double drag, double liftRatio, double absorption, double reflection)
xLength
- length of the body along its X axis (m)yLength
- length of the body along its Y axis (m)zLength
- length of the body along its Z axis (m)sun
- sun modelsolarArrayArea
- area of the solar array (m²)solarArrayAxis
- solar array rotation axis in satellite framedrag
- drag coefficientliftRatio
- drag lift ratio (proportion between 0 and 1 of atmosphere modecules
that will experience specular reflection when hitting spacecraft instead
of experiencing diffuse reflection, hence producing lift)absorption
- radiation pressure absorption coefficient (between 0 and 1)reflection
- radiation pressure specular reflection coefficient (between 0 and 1)Copyright © 2002-2023 CS GROUP. All rights reserved.