dragDynamicEffector#

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-accelerated drag models.

Message Connection Descriptions#

The following table lists all the module input and output messages. The module msg connection 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.

Module I/O Messages#

Msg Variable Name

Msg Type

Description

atmoDensInMsg

AtmoPropsMsgPayload

atmospheric density input message

Class DragDynamicEffector#

class DragDynamicEffector : public SysModel, public DynamicEffector#

drag dynamic effector

Public Functions

void linkInStates(DynParamManager &states) override#

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 – simulation states

Returns:

void

void computeForceTorque(double integTime, double timeStep) override#

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) override#

This method is used to reset the module.

Returns:

void

void updateState(uint64_t currentSimNanos) override#

This method is called to update the local atmospheric conditions at each timestep. Naturally, this means that atmospheric conditions are held piecewise-constant over an integration step.

Parameters:

currentSimNanos – The current simulation time in nanoseconds

Returns:

void

void readMessages()#

This method is used to read the incoming density message and update the internal density/ atmospheric data.

Returns:

void

void cannonballDrag()#

This method implements a simple “cannnonball” (attitude-independent) drag model.

void updateDragDir()#

This method updates the internal drag direction based on the spacecraft velocity vector.

Public Members

DragBaseData coreParams = {}#

— Struct used to hold drag parameters

ReadFunctor<AtmoPropsMsgPayload> atmoDensInMsg#

&#8212; message used to read density inputs

std::string modelType = "cannonball"#

&#8212; String used to set the type of model used to compute drag

StateData *hubSigma#

&#8212; Hub/Inertial attitude represented by MRP

StateData *hubVelocity#

m/s Hub inertial velocity vector

Eigen::Vector3d v_B = Eigen::Vector3d::Zero()#

m/s local variable to hold the inertial velocity

Eigen::Vector3d v_hat_B = Eigen::Vector3d::Zero()#

&#8212; Drag force direction in the inertial frame