Module: facetDragDynamicEffector
Executive Summary
Drag dynamics class used to compute drag effects on spacecraft bodies
This class is used to implement drag dynamic effects on spacecraft using a variety of simple or complex models, which will include
cannonball (attitude-independent) drag, single flat-plate drag, faceted drag models, and an interface to full-CAD GPU-accellerated
drag models.
For more information see the
PDF Description.
Wind Velocity Input
When windVelInMsg is linked to a Module: windBase-derived module (e.g. Module: zeroWindModel),
the drag model subtracts the air velocity v_air_N from the spacecraft inertial velocity before
computing drag, yielding the atmosphere-relative velocity:
If windVelInMsg is not linked, the inertial spacecraft velocity is used directly.
Example setup:
drag = facetDragDynamicEffector.FacetDragDynamicEffector()
drag.addFacet(10.0, 2.2, [1, 0, 0], [0, 0, 0])
drag.atmoDensInMsg.subscribeTo(atmo.envOutMsgs[0])
# Optional: link a wind model for atmosphere-relative velocity
drag.windVelInMsg.subscribeTo(windModel.envOutMsgs[0])
scObject.addDynamicEffector(drag)
Input Message Timing
Both atmoDensInMsg and windVelInMsg are refreshed only during UpdateState().
Because Spacecraft::computeForceTorque() calls dynamic effectors before the atmosphere
and wind models receive their next UpdateState(), the drag computation always uses
the values from the previous time step (zero-initialized on the first step).
Both inputs are therefore treated as piecewise-constant over each integration step.
Message Connection Descriptions
The following table lists all the module input and output messages. The module msg variable name is set by the user from python. The msg type contains a link to the message structure definition, while the description provides information on what this message is used for.
Msg Variable Name |
Msg Type |
Description |
|---|---|---|
atmoDensInMsg |
input message for atmospheric density information |
|
windVelInMsg |
(optional) wind velocity input message; when linked, |
-
struct SpacecraftGeometryData
- #include <facetDragDynamicEffector.h>
spacecraft geometry data
-
class FacetDragDynamicEffector : public SysModel, public DynamicEffector
- #include <facetDragDynamicEffector.h>
faceted atmospheric drag dynamic effector
Public Functions
-
FacetDragDynamicEffector()
-
~FacetDragDynamicEffector()
The destructor.
-
void linkInStates(DynParamManager &states)
This method is used to link the dragEffector to the hub attitude and velocity, which are required for calculating drag forces and torques.
- Parameters:
states – dynamic parameter states
-
void computeForceTorque(double integTime, double timeStep)
This method computes the body forces and torques for the dragEffector in a simulation loop, selecting the model type based on the settable attribute “modelType.”
-
void Reset(uint64_t CurrentSimNanos)
class method
-
void UpdateState(uint64_t CurrentSimNanos)
This method is called to update the local atmospheric conditions at each timestep. Naturally, this means that conditions are held piecewise-constant over an integration step.
- Parameters:
CurrentSimNanos – The current simulation time in nanoseconds
-
void WriteOutputMessages(uint64_t CurrentClock)
The DragEffector does not write output messages to the rest of the sim.
-
bool ReadInputs()
This method is used to read the incoming density message and wind velocity message (if linked) and update the internal density/atmospheric data.
Public Members
-
uint64_t numFacets
number of facets
-
ReadFunctor<AtmoPropsMsgPayload> atmoDensInMsg
atmospheric density input message
-
ReadFunctor<WindMsgPayload> windVelInMsg
wind velocity input message
-
Eigen::Vector3d v_B
m/s spacecraft velocity expressed in body frame B (relative to air if windVelInMsg is linked, else relative to inertial frame N)
-
BSKLogger bskLogger
— BSK Logging
Private Functions
-
void plateDrag()
This method WILL implement a more complex flat-plate aerodynamics model with attitude dependence and lift forces.
-
void updateDragDir()
This method updates the internal drag direction based on the spacecraft velocity vector. It accounts for wind velocity if the wind message is linked.
-
double getDensity()
This method obtains the density from the input data
Private Members
-
AtmoPropsMsgPayload atmoInData
-
WindMsgPayload windInData
-
SpacecraftGeometryData scGeometry
— Struct to hold spacecraft facet data
-
FacetDragDynamicEffector()