Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
icarus::Simulator Class Reference

Top-level simulation coordinator. More...

#include <Simulator.hpp>

Public Types

using InputSourceCallback = std::function<double(const std::string &)>
 Input source callback: (signal_name) -> value.
using OutputObserverCallback = std::function<void(const std::string &, double)>
 Output observer callback: (signal_name, value) -> void.

Public Member Functions

 Simulator ()
 Default constructor for programmatic setup.
 ~Simulator ()
 Destructor.
 Simulator (const Simulator &)=delete
Simulatoroperator= (const Simulator &)=delete
 Simulator (Simulator &&)=delete
Simulatoroperator= (Simulator &&)=delete
void Stage ()
 Stage the simulation.
void Stage (const StageConfig &config)
void Step (double dt)
 Execute one simulation step.
void Step ()
const std::string & Name () const
 Get simulation name (from config).
double Dt () const
 Get configured timestep.
double EndTime () const
 Get configured end time.
double Time () const
 Get current simulation time (MET - derived from epoch).
const vulcan::time::NumericEpoch & Epoch () const
 Get current epoch (single source of truth for time).
double JD_UTC () const
 Get Julian Date in UTC scale.
double JD_TAI () const
 Get Julian Date in TAI scale.
double JD_TT () const
 Get Julian Date in TT scale.
double JD_GPS () const
 Get Julian Date in GPS scale.
int GPSWeek () const
 Get GPS week number.
double GPSSecondsOfWeek () const
 Get GPS seconds of week.
std::string ISO8601 () const
 Get current time as ISO 8601 string.
Lifecycle GetLifecycle () const
 Get current simulation lifecycle state.
int32_t GetFlightPhase () const
 Get current flight phase value (from PhaseManager).
std::string GetFlightPhaseName () const
 Get current flight phase name (from PhaseManager).
bool IsInitialized () const
 Check if simulation is initialized (Staged or later).
double Peek (const std::string &name) const
 Read a signal value by name.
DataDictionary GetDataDictionary () const
 Get data dictionary for the simulation.
IntrospectionGraph GetIntrospectionGraph () const
 Get introspection graph (data dictionary + topology edges).
const SignalRegistry< double > & Registry () const
 Get signal registry (for recording, introspection).
void Poke (const std::string &name, double value)
 Write a signal value by name.
MissionLoggerGetLogger ()
 Get the mission logger.
const MissionLoggerGetLogger () const
void Reset ()
 Reset simulation to initial state Re-applies ICs, resets time to 0.
void SetTime (double met)
 Set simulation time (MET).
void SetInputSource (const std::string &signal_name, InputSourceCallback callback)
 Register an external input source for a signal.
void SetOutputObserver (const std::string &signal_name, OutputObserverCallback callback)
 Register an output observer for a signal.
void ClearInputSource (const std::string &signal_name)
 Remove an input source.
void ClearOutputObserver (const std::string &signal_name)
 Remove an output observer.
Eigen::VectorXd GetState () const
 Get current state vector.
void SetState (const Eigen::VectorXd &X)
 Set state vector.
Eigen::VectorXd ComputeDerivatives (double t)
 Compute derivatives for current state at time t.
AdaptiveStepResult< double > AdaptiveStep (double dt_request)
 Execute adaptive step (requires RK45 integrator).
std::optional< janus::Function > GetDynamicsGraph () const
 Get symbolic dynamics graph Available after Stage() if symbolics.enabled = true.
std::optional< janus::Function > GetJacobian () const
 Get symbolic Jacobian Available after Stage() if symbolics.generate_jacobian = true.
const std::optional< staging::TrimResult > & GetTrimResult () const
 Get trim result Available after Stage() if trim.enabled = true.
const std::optional< staging::LinearModel > & GetLinearModel () const
 Get linear model Available after Stage() if linearization.enabled = true.
const SimulatorConfigGetConfig () const
 Get simulator configuration.
void AddComponent (std::unique_ptr< Component< double > > component)
 Add a component to the simulation.
void AddComponent (const ComponentConfig &config)
 Add a component from config (requires ComponentFactory).
void Configure (const SimulatorConfig &config)
 Configure simulator with full config struct.
void AddRoutes (const std::vector< signal::SignalRoute > &routes)
 Add signal routes.
std::size_t NumComponents () const
 Get number of components.
Backplane< double > & GetBackplane ()
 Get backplane for signal introspection (expert).
const Backplane< double > & GetBackplane () const

Static Public Member Functions

static std::unique_ptr< SimulatorFromConfig (const std::string &config_path)
 Create simulator from configuration file.
static std::unique_ptr< SimulatorFromConfig (const SimulatorConfig &config)
 Create simulator from configuration struct.

Detailed Description

Top-level simulation coordinator.

NOT templated on Scalar - user sees one class. Provides clean 4-operation external interface:

Member Typedef Documentation

◆ InputSourceCallback

using icarus::Simulator::InputSourceCallback = std::function<double(const std::string &)>

Input source callback: (signal_name) -> value.

◆ OutputObserverCallback

using icarus::Simulator::OutputObserverCallback = std::function<void(const std::string &, double)>

Output observer callback: (signal_name, value) -> void.

Constructor & Destructor Documentation

◆ Simulator() [1/3]

icarus::Simulator::Simulator ( )
inline

Default constructor for programmatic setup.

◆ ~Simulator()

icarus::Simulator::~Simulator ( )
inline

Destructor.

◆ Simulator() [2/3]

icarus::Simulator::Simulator ( const Simulator & )
delete

◆ Simulator() [3/3]

icarus::Simulator::Simulator ( Simulator && )
delete

Member Function Documentation

◆ AdaptiveStep()

AdaptiveStepResult< double > icarus::Simulator::AdaptiveStep ( double dt_request)
inline

Execute adaptive step (requires RK45 integrator).

◆ AddComponent() [1/2]

void icarus::Simulator::AddComponent ( const ComponentConfig & config)
inline

Add a component from config (requires ComponentFactory).

◆ AddComponent() [2/2]

void icarus::Simulator::AddComponent ( std::unique_ptr< Component< double > > component)
inline

Add a component to the simulation.

◆ AddRoutes()

void icarus::Simulator::AddRoutes ( const std::vector< signal::SignalRoute > & routes)
inline

Add signal routes.

◆ ClearInputSource()

void icarus::Simulator::ClearInputSource ( const std::string & signal_name)
inline

Remove an input source.

◆ ClearOutputObserver()

void icarus::Simulator::ClearOutputObserver ( const std::string & signal_name)
inline

Remove an output observer.

◆ ComputeDerivatives()

Eigen::VectorXd icarus::Simulator::ComputeDerivatives ( double t)
inline

Compute derivatives for current state at time t.

◆ Configure()

void icarus::Simulator::Configure ( const SimulatorConfig & config)
inline

Configure simulator with full config struct.

◆ Dt()

double icarus::Simulator::Dt ( ) const
inlinenodiscard

Get configured timestep.

◆ EndTime()

double icarus::Simulator::EndTime ( ) const
inlinenodiscard

Get configured end time.

◆ Epoch()

const vulcan::time::NumericEpoch & icarus::Simulator::Epoch ( ) const
inlinenodiscard

Get current epoch (single source of truth for time).

◆ FromConfig() [1/2]

std::unique_ptr< Simulator > icarus::Simulator::FromConfig ( const SimulatorConfig & config)
inlinestaticnodiscard

Create simulator from configuration struct.

◆ FromConfig() [2/2]

std::unique_ptr< Simulator > icarus::Simulator::FromConfig ( const std::string & config_path)
inlinestaticnodiscard

Create simulator from configuration file.

Loads component configs and routes from YAML, creates components, provisions them. Ready for Stage() after this.

Parameters
config_pathPath to simulation YAML configuration
Returns
Configured Simulator ready for Stage()

◆ GetBackplane() [1/2]

Backplane< double > & icarus::Simulator::GetBackplane ( )
inlinenodiscard

Get backplane for signal introspection (expert).

◆ GetBackplane() [2/2]

const Backplane< double > & icarus::Simulator::GetBackplane ( ) const
inlinenodiscard

◆ GetConfig()

const SimulatorConfig & icarus::Simulator::GetConfig ( ) const
inlinenodiscard

Get simulator configuration.

◆ GetDataDictionary()

DataDictionary icarus::Simulator::GetDataDictionary ( ) const
inlinenodiscard

Get data dictionary for the simulation.

◆ GetDynamicsGraph()

std::optional< janus::Function > icarus::Simulator::GetDynamicsGraph ( ) const
inlinenodiscard

Get symbolic dynamics graph Available after Stage() if symbolics.enabled = true.

◆ GetFlightPhase()

int32_t icarus::Simulator::GetFlightPhase ( ) const
inlinenodiscard

Get current flight phase value (from PhaseManager).

◆ GetFlightPhaseName()

std::string icarus::Simulator::GetFlightPhaseName ( ) const
inlinenodiscard

Get current flight phase name (from PhaseManager).

◆ GetIntrospectionGraph()

IntrospectionGraph icarus::Simulator::GetIntrospectionGraph ( ) const
inlinenodiscard

Get introspection graph (data dictionary + topology edges).

◆ GetJacobian()

std::optional< janus::Function > icarus::Simulator::GetJacobian ( ) const
inlinenodiscard

Get symbolic Jacobian Available after Stage() if symbolics.generate_jacobian = true.

◆ GetLifecycle()

Lifecycle icarus::Simulator::GetLifecycle ( ) const
inlinenodiscard

Get current simulation lifecycle state.

◆ GetLinearModel()

const std::optional< staging::LinearModel > & icarus::Simulator::GetLinearModel ( ) const
inlinenodiscard

Get linear model Available after Stage() if linearization.enabled = true.

◆ GetLogger() [1/2]

MissionLogger & icarus::Simulator::GetLogger ( )
inlinenodiscard

Get the mission logger.

◆ GetLogger() [2/2]

const MissionLogger & icarus::Simulator::GetLogger ( ) const
inlinenodiscard

◆ GetState()

Eigen::VectorXd icarus::Simulator::GetState ( ) const
inlinenodiscard

Get current state vector.

◆ GetTrimResult()

const std::optional< staging::TrimResult > & icarus::Simulator::GetTrimResult ( ) const
inlinenodiscard

Get trim result Available after Stage() if trim.enabled = true.

◆ GPSSecondsOfWeek()

double icarus::Simulator::GPSSecondsOfWeek ( ) const
inlinenodiscard

Get GPS seconds of week.

◆ GPSWeek()

int icarus::Simulator::GPSWeek ( ) const
inlinenodiscard

Get GPS week number.

◆ IsInitialized()

bool icarus::Simulator::IsInitialized ( ) const
inlinenodiscard

Check if simulation is initialized (Staged or later).

◆ ISO8601()

std::string icarus::Simulator::ISO8601 ( ) const
inlinenodiscard

Get current time as ISO 8601 string.

◆ JD_GPS()

double icarus::Simulator::JD_GPS ( ) const
inlinenodiscard

Get Julian Date in GPS scale.

◆ JD_TAI()

double icarus::Simulator::JD_TAI ( ) const
inlinenodiscard

Get Julian Date in TAI scale.

◆ JD_TT()

double icarus::Simulator::JD_TT ( ) const
inlinenodiscard

Get Julian Date in TT scale.

◆ JD_UTC()

double icarus::Simulator::JD_UTC ( ) const
inlinenodiscard

Get Julian Date in UTC scale.

◆ Name()

const std::string & icarus::Simulator::Name ( ) const
inlinenodiscard

Get simulation name (from config).

◆ NumComponents()

std::size_t icarus::Simulator::NumComponents ( ) const
inlinenodiscard

Get number of components.

◆ operator=() [1/2]

Simulator & icarus::Simulator::operator= ( const Simulator & )
delete

◆ operator=() [2/2]

Simulator & icarus::Simulator::operator= ( Simulator && )
delete

◆ Peek()

double icarus::Simulator::Peek ( const std::string & name) const
inlinenodiscard

Read a signal value by name.

Parameters
nameFull signal path: "Entity.Component.signal"

Read a scalar signal value by name

◆ Poke()

void icarus::Simulator::Poke ( const std::string & name,
double value )
inline

Write a signal value by name.

Write a scalar signal value by name

◆ Registry()

const SignalRegistry< double > & icarus::Simulator::Registry ( ) const
inlinenodiscard

Get signal registry (for recording, introspection).

◆ Reset()

void icarus::Simulator::Reset ( )
inline

Reset simulation to initial state Re-applies ICs, resets time to 0.

◆ SetInputSource()

void icarus::Simulator::SetInputSource ( const std::string & signal_name,
InputSourceCallback callback )
inline

Register an external input source for a signal.

◆ SetOutputObserver()

void icarus::Simulator::SetOutputObserver ( const std::string & signal_name,
OutputObserverCallback callback )
inline

Register an output observer for a signal.

◆ SetState()

void icarus::Simulator::SetState ( const Eigen::VectorXd & X)
inline

Set state vector.

◆ SetTime()

void icarus::Simulator::SetTime ( double met)
inline

Set simulation time (MET).

Used by warmstart to restore time from recording. Sets epoch_ = epoch_start_ + met.

Parameters
metMission Elapsed Time to set

◆ Stage() [1/2]

void icarus::Simulator::Stage ( )
inline

Stage the simulation.

Prepares the vehicle for launch:

  • Calls Stage() on all components (input wiring)
  • Validates all signal wiring
  • Generates symbolic graphs (if configured)
  • Runs trim optimization (if configured)

◆ Stage() [2/2]

void icarus::Simulator::Stage ( const StageConfig & config)
inline

◆ Step() [1/2]

void icarus::Simulator::Step ( )
inline

◆ Step() [2/2]

void icarus::Simulator::Step ( double dt)
inline

Execute one simulation step.

Uses scheduler for multi-rate execution. Advances time by dt using configured integrator.

Parameters
dtTimestep (uses nominal dt if not specified)

◆ Time()

double icarus::Simulator::Time ( ) const
inlinenodiscard

Get current simulation time (MET - derived from epoch).


The documentation for this class was generated from the following file: