Class AttitudeDynamics

Inheritance Relationships

Base Type

Derived Types

Class Documentation

class AttitudeDynamics : public lupnt::Dynamics

Base class for attitude (quaternion + angular velocity) propagation models.

AttitudeDynamics subclasses advance an Attitude state (Attitude::TYPE: quaternion q0..q3 plus body angular velocity wx,wy,wz) from t0 to tf. Used by agents/ to maintain a satellite’s/rover’s orientation (e.g. for pointing-dependent device models in devices/ such as cameras and antennas). The two-argument Propagate(qw, t0, tf, rv) overload additionally takes the object’s translational (position/velocity) state when the attitude solution depends on it (e.g. nadir/sun pointing).

Subclassed by lupnt::FixedAttitudeDynamics, lupnt::FixedPointingDynamics

Public Functions

AttitudeDynamics() = default
AttitudeDynamics(Config &config)

Construct from a YAML configuration node (forwards to Dynamics(config)).

inline virtual StateType GetStateType() const override

Return Attitude::TYPE, the quaternion + angular-velocity state type propagated by attitude dynamics.

virtual State Propagate(const State &qw, Real t0, Real tf, const State &rv)

Propagate the attitude state, given the object’s translational state.

Default implementation ignores rv and forwards to Propagate(qw, t0, tf, nullptr); pointing-dependent subclasses (e.g. FixedPointingDynamics) override this to compute the attitude from rv.

Parameters:
  • qw – Initial attitude state (Attitude: quaternion + angular velocity) at time t0.

  • t0 – Initial epoch [s, TDB since J2000].

  • tf – Final epoch [s, TDB since J2000].

  • rvObject’s Cartesian position/velocity state (Cart6), used by pointing laws that depend on the object’s location (e.g. nadir, sun, or target pointing).

Returns:

Propagated attitude state at time tf.

virtual State Propagate(const State &x0, Real t0, Real tf, const State *u = nullptr) = 0

Propagate the state from t0 to tf without computing a state transition matrix.

This is the core propagation entry point implemented by every concrete dynamics class (e.g. NumericalDynamics::Propagate, AnalyticalDynamics::Propagate, ClockDynamics::Propagate). It is called once per integration/measurement step by simulation drivers in applications/ and by agents/ to advance an object’s true or estimated state.

Parameters:
  • x0 – Initial state at time t0 (layout/units defined by the subclass).

  • t0 – Initial epoch [s, TDB since J2000 for orbit/attitude dynamics].

  • tf – Final epoch [s, TDB since J2000 for orbit/attitude dynamics].

  • u – Optional control/forcing input (e.g. thrust, RTN reference state); nullptr if unused.

Returns:

Propagated state at time tf.

virtual State Propagate(const State &x0, Real t0, Real tf, const State *u, MatXd *stm)

Propagate the state and compute the state transition matrix (STM) d(xf)/d(x0) via automatic differentiation.

Default implementation: if stm == nullptr, forwards to the no-STM Propagate overload; otherwise wraps Propagate(x0, t0, tf, u) in an autodiff Jacobian (jacobian(...)) with respect to x0. Used by filters (filters/) that need the linearized state transition for covariance propagation (e.g. EKF/UKF time updates).

Parameters:
  • x0 – Initial state at time t0.

  • t0 – Initial epoch [s, TDB since J2000].

  • tf – Final epoch [s, TDB since J2000].

  • u – Optional control/forcing input; nullptr if unused.

  • stm – Output: state transition matrix d(xf)/d(x0); left unmodified if nullptr.

Returns:

Propagated state at time tf.

virtual MatX Propagate(const State &x0, const VecX &tfs, const State *u = nullptr)

Propagate the state to a sequence of output epochs.

Repeatedly calls Propagate(x0, t0, tf, u) between consecutive entries of tfs, accumulating each result as a row of the returned matrix. Used by applications/ and analysis scripts to generate a full trajectory time history in one call, with optional progress-bar output (see SetPrintProgress).

Parameters:
  • x0 – Initial state at tfs(0).

  • tfs – Vector of output epochs [s, TDB since J2000], including the initial epoch as tfs(0).

  • u – Optional control/forcing input applied at every step; nullptr if unused.

Returns:

Matrix whose i-th row is the propagated state at tfs(i).