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.

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.

Module I/O Messages

Msg Variable Name

Msg Type




input message for atmospheric density information

struct SpacecraftGeometryData
#include <facetDragDynamicEffector.h>

spacecraft geometry data

Public Members

std::vector<double> facetAreas

vector of facet areas

std::vector<double> facetCoeffs

vector of facet coefficients

std::vector<Eigen::Vector3d> facetNormals_B

vector of facet normals

std::vector<Eigen::Vector3d> facetLocations_B

vector of facet locations

class FacetDragDynamicEffector : public SysModel, public DynamicEffector
#include <facetDragDynamicEffector.h>

faceted atmospheric drag dynamic effector

Public Functions


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.


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.


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 update the internal density/ atmospheric data.



void addFacet(double area, double dragCoeff, Eigen::Vector3d B_normal_hat, Eigen::Vector3d B_location)

add a facet

  • area

  • dragCoeff

  • B_normal_hat

  • B_location

Public Members

uint64_t numFacets

number of facets

ReadFunctor<AtmoPropsMsgPayload> atmoDensInMsg

atmospheric density input message

StateData *hubSigma

Hub/Inertial attitude represented by MRP

StateData *hubVelocity

m/s Hub inertial velocity vector

Eigen::Vector3d v_B

m/s local variable to hold the inertial velocity

Eigen::Vector3d v_hat_B

class variable

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.

Private Members

AtmoPropsMsgPayload atmoInData
SpacecraftGeometryData scGeometry

Struct to hold spacecraft facet data