Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
icarus::Component< Scalar > Class Template Referenceabstract

Base class for all simulation components. More...

#include <Component.hpp>

Inheritance diagram for icarus::Component< Scalar >:

Public Member Functions

virtual ~Component ()=default
virtual void Provision (Backplane< Scalar > &bp)=0
 Provision phase - called once at application launch.
virtual void Stage (Backplane< Scalar > &bp)=0
 Stage phase - called at start of each run/episode.
virtual void Step (Scalar t, Scalar dt)=0
 Step phase - called every time step (hot path!).
virtual void PreStep (Scalar, Scalar)
 Called before any component Steps (for pre-processing).
virtual void PostStep (Scalar, Scalar)
 Called after all component Steps (for post-processing).
virtual void OnError (const SimulationError &)
 Called when simulation encounters an error.
virtual void Shutdown ()
 Called during shutdown (cleanup, flush buffers).
virtual std::string Name () const =0
 Component instance name (e.g., "MainEngine").
virtual std::string Entity () const
 Entity namespace (e.g., "X15").
virtual std::string TypeName () const
 Component type name for data dictionary (e.g., "JetEngine").
std::string FullName () const
 Full qualified name: entity.component (or just component).
virtual std::vector< SignalDeclDeclareInputs () const
 Declared inputs (for documentation/dependency graph).
virtual std::vector< SignalDeclDeclareOutputs () const
 Declared outputs (for documentation/dependency graph).
std::vector< std::string > GetOutputNames () const
 Get list of output signal names.
std::vector< std::string > GetInputNames () const
 Get list of input signal names.
virtual bool HasBodyAttachment () const
 Whether this component has a body attachment (position/orientation).
virtual Vec3< Scalar > GetBodyPosition () const
 Get the component's mounting position in vehicle body frame.
virtual janus::Quaternion< Scalar > GetBodyOrientation () const
 Get the component's mounting orientation (body-to-component rotation).
bool IsProvisioned () const
 Check if Provision has been called.
bool IsStaged () const
 Check if Stage has been called.
void SetConfig (ComponentConfig config)
 Set component configuration (called by factory after construction).
const ComponentConfigGetConfig () const
 Get component configuration.
const vulcan::time::Epoch< Scalar > * GetEpoch () const
 Get simulation epoch (read-only).

Protected Member Functions

template<typename T>
read_param (const std::string &key, const T &default_val) const
 Read a scalar config parameter with default.
template<typename T>
require_param (const std::string &key) const
 Read a required scalar config parameter (throws if missing).
Vec3< Scalar > read_param_vec3 (const std::string &key, const Vec3< Scalar > &default_val) const
 Read a Vec3 config parameter with automatic double→Scalar conversion.
Vec3< Scalar > require_param_vec3 (const std::string &key) const
 Read a required Vec3 config parameter (throws if missing).
Vec4< Scalar > read_param_vec4 (const std::string &key, const Vec4< Scalar > &default_val) const
 Read a Vec4 config parameter with automatic double→Scalar conversion.
Vec4< Scalar > require_param_vec4 (const std::string &key) const
 Read a required Vec4 config parameter (throws if missing).
void MarkProvisioned ()
void MarkStaged ()
void ResetStaged ()
void BindEpoch (const vulcan::time::Epoch< Scalar > *epoch)

Friends

template<typename S>
class Simulator
template<typename S>
class Backplane

Detailed Description

template<typename Scalar>
class icarus::Component< Scalar >

Base class for all simulation components.

Components are the fundamental unit of execution in Icarus. They own state and implement the Provision/Stage/Step lifecycle.

Lifecycle:

  1. Provision (once) - Register outputs, allocate memory, load params
  2. Stage (per run) - Wire inputs, apply ICs
  3. Step (per dt) - Compute dynamics (hot path!)
Template Parameters
ScalarThe numeric type (double or casadi::MX)

Constructor & Destructor Documentation

◆ ~Component()

template<typename Scalar>
virtual icarus::Component< Scalar >::~Component ( )
virtualdefault

Member Function Documentation

◆ BindEpoch()

template<typename Scalar>
void icarus::Component< Scalar >::BindEpoch ( const vulcan::time::Epoch< Scalar > * epoch)
inlineprotected

◆ DeclareInputs()

template<typename Scalar>
virtual std::vector< SignalDecl > icarus::Component< Scalar >::DeclareInputs ( ) const
inlinenodiscardvirtual

Declared inputs (for documentation/dependency graph).

Override to declare expected inputs for tooling.

◆ DeclareOutputs()

template<typename Scalar>
virtual std::vector< SignalDecl > icarus::Component< Scalar >::DeclareOutputs ( ) const
inlinenodiscardvirtual

Declared outputs (for documentation/dependency graph).

Override to declare outputs for tooling.

◆ Entity()

template<typename Scalar>
virtual std::string icarus::Component< Scalar >::Entity ( ) const
inlinenodiscardvirtual

Entity namespace (e.g., "X15").

Return empty string for singleton components (e.g., Environment).

◆ FullName()

template<typename Scalar>
std::string icarus::Component< Scalar >::FullName ( ) const
inlinenodiscard

Full qualified name: entity.component (or just component).

◆ GetBodyOrientation()

template<typename Scalar>
virtual janus::Quaternion< Scalar > icarus::Component< Scalar >::GetBodyOrientation ( ) const
inlinenodiscardvirtual

Get the component's mounting orientation (body-to-component rotation).

Convention: Transforms vectors FROM body frame TO component local frame. To transform component outputs TO body frame, use conjugate().

Returns
Identity quaternion for components without attachment

Reimplemented in icarus::PhysicalComponent< Scalar >.

◆ GetBodyPosition()

template<typename Scalar>
virtual Vec3< Scalar > icarus::Component< Scalar >::GetBodyPosition ( ) const
inlinenodiscardvirtual

Get the component's mounting position in vehicle body frame.

Returns
Zero vector for components without attachment

Reimplemented in icarus::PhysicalComponent< Scalar >.

◆ GetConfig()

template<typename Scalar>
const ComponentConfig & icarus::Component< Scalar >::GetConfig ( ) const
inlinenodiscard

Get component configuration.

Use in Stage() to read parameters, initial conditions, etc.

◆ GetEpoch()

template<typename Scalar>
const vulcan::time::Epoch< Scalar > * icarus::Component< Scalar >::GetEpoch ( ) const
inlinenodiscard

Get simulation epoch (read-only).

Provides access to the simulator's authoritative time. Available after Stage(). Use for time-dependent calculations (e.g., lunar ephemeris via jd_tt()).

Returns
Pointer to current epoch, or nullptr if not yet staged

◆ GetInputNames()

template<typename Scalar>
std::vector< std::string > icarus::Component< Scalar >::GetInputNames ( ) const
inlinenodiscard

Get list of input signal names.

◆ GetOutputNames()

template<typename Scalar>
std::vector< std::string > icarus::Component< Scalar >::GetOutputNames ( ) const
inlinenodiscard

Get list of output signal names.

◆ HasBodyAttachment()

template<typename Scalar>
virtual bool icarus::Component< Scalar >::HasBodyAttachment ( ) const
inlinenodiscardvirtual

Whether this component has a body attachment (position/orientation).

Returns
false for base Component; overridden in PhysicalComponent

Reimplemented in icarus::PhysicalComponent< Scalar >.

◆ IsProvisioned()

template<typename Scalar>
bool icarus::Component< Scalar >::IsProvisioned ( ) const
inlinenodiscard

Check if Provision has been called.

◆ IsStaged()

template<typename Scalar>
bool icarus::Component< Scalar >::IsStaged ( ) const
inlinenodiscard

Check if Stage has been called.

◆ MarkProvisioned()

template<typename Scalar>
void icarus::Component< Scalar >::MarkProvisioned ( )
inlineprotected

◆ MarkStaged()

template<typename Scalar>
void icarus::Component< Scalar >::MarkStaged ( )
inlineprotected

◆ Name()

template<typename Scalar>
virtual std::string icarus::Component< Scalar >::Name ( ) const
nodiscardpure virtual

Component instance name (e.g., "MainEngine").

◆ OnError()

template<typename Scalar>
virtual void icarus::Component< Scalar >::OnError ( const SimulationError & )
inlinevirtual

Called when simulation encounters an error.

◆ PostStep()

template<typename Scalar>
virtual void icarus::Component< Scalar >::PostStep ( Scalar ,
Scalar  )
inlinevirtual

Called after all component Steps (for post-processing).

◆ PreStep()

template<typename Scalar>
virtual void icarus::Component< Scalar >::PreStep ( Scalar ,
Scalar  )
inlinevirtual

Called before any component Steps (for pre-processing).

◆ Provision()

template<typename Scalar>
virtual void icarus::Component< Scalar >::Provision ( Backplane< Scalar > & bp)
pure virtual

Provision phase - called once at application launch.

Heavy lifting: allocate memory, register signals.

Parameters
bpBackplane for registering outputs

◆ read_param()

template<typename Scalar>
template<typename T>
T icarus::Component< Scalar >::read_param ( const std::string & key,
const T & default_val ) const
inlineprotected

Read a scalar config parameter with default.

Usage: mass_ = read_param("mass", 100.0);

◆ read_param_vec3()

template<typename Scalar>
Vec3< Scalar > icarus::Component< Scalar >::read_param_vec3 ( const std::string & key,
const Vec3< Scalar > & default_val ) const
inlineprotected

Read a Vec3 config parameter with automatic double→Scalar conversion.

Usage: position_ = read_param_vec3("initial_position", Vec3<Scalar>::Zero());

◆ read_param_vec4()

template<typename Scalar>
Vec4< Scalar > icarus::Component< Scalar >::read_param_vec4 ( const std::string & key,
const Vec4< Scalar > & default_val ) const
inlineprotected

Read a Vec4 config parameter with automatic double→Scalar conversion.

Usage: attitude_ = read_param_vec4("initial_attitude", Vec4<Scalar>{1, 0, 0, 0});

◆ require_param()

template<typename Scalar>
template<typename T>
T icarus::Component< Scalar >::require_param ( const std::string & key) const
inlineprotected

Read a required scalar config parameter (throws if missing).

Usage: mass_ = require_param<double>("mass");

◆ require_param_vec3()

template<typename Scalar>
Vec3< Scalar > icarus::Component< Scalar >::require_param_vec3 ( const std::string & key) const
inlineprotected

Read a required Vec3 config parameter (throws if missing).

Usage: position_ = require_param_vec3("initial_position");

◆ require_param_vec4()

template<typename Scalar>
Vec4< Scalar > icarus::Component< Scalar >::require_param_vec4 ( const std::string & key) const
inlineprotected

Read a required Vec4 config parameter (throws if missing).

Usage: attitude_ = require_param_vec4("initial_attitude");

◆ ResetStaged()

template<typename Scalar>
void icarus::Component< Scalar >::ResetStaged ( )
inlineprotected

◆ SetConfig()

template<typename Scalar>
void icarus::Component< Scalar >::SetConfig ( ComponentConfig config)
inline

Set component configuration (called by factory after construction).

◆ Shutdown()

template<typename Scalar>
virtual void icarus::Component< Scalar >::Shutdown ( )
inlinevirtual

Called during shutdown (cleanup, flush buffers).

◆ Stage()

template<typename Scalar>
virtual void icarus::Component< Scalar >::Stage ( Backplane< Scalar > & bp)
pure virtual

Stage phase - called at start of each run/episode.

Load parameters from config (via GetConfig()), apply initial conditions, prepare for t=0. This is where default values and config loading happens.

Parameters
bpBackplane for resolving inputs

◆ Step()

template<typename Scalar>
virtual void icarus::Component< Scalar >::Step ( Scalar t,
Scalar dt )
pure virtual

Step phase - called every time step (hot path!).

Read inputs, compute derivatives, write outputs. NO allocation, NO string lookups.

Parameters
tCurrent simulation time
dtTime step size

◆ TypeName()

template<typename Scalar>
virtual std::string icarus::Component< Scalar >::TypeName ( ) const
inlinenodiscardvirtual

Component type name for data dictionary (e.g., "JetEngine").

◆ Backplane

template<typename Scalar>
template<typename S>
friend class Backplane
friend

◆ Simulator

template<typename Scalar>
template<typename S>
Simulator
friend

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