Skip to content

Equations of Motion

Astrea provides a flexible framework for implementing equations of motion in various orbital element representations. The system supports both Cartesian and classical orbital element formulations, enabling users to choose the most appropriate representation for their specific applications.

Base Interface

All equations of motion inherit from the EquationsOfMotion base class:

#include <astro/propagation/equations_of_motion/EquationsOfMotion.hpp>

class EquationsOfMotion {
public:
    virtual OrbitalElementPartials operator()(const State& state, const Vehicle& vehicle) const = 0;
    virtual StateTransitionMatrix compute_stm(const State& state, const Vehicle& vehicle) const = 0;
    virtual constexpr std::size_t get_expected_set_id() const = 0;
};

Available Formulations

Cowell's Method (Cartesian)

Direct integration of Cartesian position and velocity:

#include <astro/propagation/equations_of_motion/CowellsMethod.hpp>

// Cartesian equations of motion
CowellsMethod cartesianEOM;

// Initial Cartesian state
Cartesian cartesianElements(
    7000.0 * km, 0.0 * km, 0.0 * km,     // Position
    0.0 * km/s, 7.5 * km/s, 1.0 * km/s   // Velocity
);

State state(cartesianElements, epoch, system);
Vehicle spacecraft(satelliteParams);

// Compute state derivatives
CartesianPartials derivatives = cartesianEOM(state, spacecraft);

Advantages: - Direct physical interpretation - No singularities for any orbit type - Simple force model application

Disadvantages: - Accumulates numerical errors for long-term integration - Less efficient for nearly circular orbits

Keplerian Variation of Parameters

Integration using classical orbital elements:

#include <astro/propagation/equations_of_motion/KeplerianVop.hpp>

// Keplerian variation of parameters
KeplerianVop keplerianEOM;

// Initial Keplerian state
Keplerian keplerianElements(
    7000.0 * km,    // Semi-major axis
    0.1,            // Eccentricity  
    45.0 * deg,     // Inclination
    0.0 * deg,      // RAAN
    0.0 * deg,      // Argument of perigee
    0.0 * deg       // True anomaly
);

State state(keplerianElements, epoch, system);

// Compute element rate derivatives
KeplerianPartials derivatives = keplerianEOM(state, spacecraft);

Advantages: - Excellent for nearly circular orbits - Physical meaningful parameters - Reduced numerical error growth

Disadvantages: - Singularities at zero eccentricity and inclination - Complex force transformation required

Equinoctial Variation of Parameters

Singularity-free orbital element representation:

#include <astro/propagation/equations_of_motion/EquinoctialVop.hpp>

// Modified Equinoctial elements (singularity-free)
EquinoctialVop equinoctialEOM;

// Equinoctial elements automatically avoid singularities
Equinoctial equinoctialElements(
    7000.0 * km,    // Semi-parameter
    0.05,           // f component (e*cos(w))
    0.05,           // g component (e*sin(w))  
    0.1,            // h component (tan(i/2)*cos(Ω))
    0.1,            // k component (tan(i/2)*sin(Ω))
    0.0 * deg       // True longitude
);

State state(equinoctialElements, epoch, system);
EquinoctialPartials derivatives = equinoctialEOM(state, spacecraft);

Advantages: - No singularities for any orbit type - Efficient for all eccentricities and inclinations - Reduced numerical errors compared to Cartesian

Disadvantages: - Less intuitive physical interpretation - Complex element-to-Cartesian conversions

Specialized Formulations

J2 Mean Elements

Analytical solution for J2 perturbations:

#include <astro/propagation/equations_of_motion/J2MeanVop.hpp>

// J2-averaged equations of motion
J2MeanVop j2meanEOM;

// Suitable for mean element propagation with J2 effects
Keplerian meanElements = /* initial elements */;
State meanState(meanElements, epoch, system);

// Propagates mean elements with J2 secular effects
KeplerianPartials meanDerivatives = j2meanEOM(meanState, spacecraft);

Two-Body Problem

Pure Keplerian motion (no perturbations):

#include <astro/propagation/equations_of_motion/TwoBody.hpp>

// Unperturbed two-body motion
TwoBody twoBodyEOM;

// For baseline comparison or initial orbit design
CartesianPartials keplerianDerivatives = twoBodyEOM(state, spacecraft);

Force Model Integration

Equations of motion work seamlessly with force models:

// Create comprehensive force model
ForceModel forces;
forces.add<AtmosphericForce>(densityModel);
forces.add<OblatenessForce>(system, 10, 10);  // J2 through J10
forces.add<SolarRadiationPressure>(spacecraft.get_ram_area());
forces.add<NBodyForce>(system.get_secondary_bodies());

// Force model automatically integrates with any EOM formulation
CowellsMethod eom(forces);
CartesianPartials derivatives = eom(state, spacecraft);

State Transition Matrix

All formulations support state transition matrix computation:

// Compute state transition matrix for uncertainty propagation
StateTransitionMatrix stm = eom.compute_stm(state, spacecraft);

// Use for covariance propagation
CovarianceMatrix propagatedCovariance = stm * initialCovariance * stm.transpose();

Numerical Integration

Equations of motion interface with numerical integrators:

#include <astro/propagation/numerical/RungeKutta.hpp>

// Set up integration
RungeKutta4 integrator;
TimeSpan propagationTime = 24.0 * hour;

// Propagate using chosen equations of motion
State finalState = integrator.propagate(initialState, spacecraft, eom, propagationTime);

Choosing the Right Formulation

Orbit Type Considerations

Orbit Type Recommended EOM Reason
Circular Equinoctial VOP No eccentricity singularities
Elliptical Keplerian VOP Physical element interpretation
Highly Eccentric Cartesian Avoids VOP numerical issues
Inclined Equinoctial VOP No inclination singularities
Equatorial Equinoctial VOP No RAAN singularities
Transfer Orbits Cartesian Handles large eccentricity changes

Application-Specific Recommendations

  • Mission Design: Keplerian VOP for intuitive element changes
  • Precise Propagation: Cartesian for highest accuracy
  • Long-Term Analysis: Equinoctial VOP for numerical stability
  • Mean Element Propagation: J2 Mean VOP for averaged motion
  • Orbit Determination: Cartesian for observation modeling

This flexible equations of motion framework enables users to select the most appropriate formulation for their specific astrodynamics applications while maintaining consistent interfaces and type safety throughout the system.