14#include <janus/math/Quaternion.hpp>
17#include <vulcan/time/Epoch.hpp>
22template <
typename Scalar>
class Backplane;
83 virtual void Step(Scalar t, Scalar dt) = 0;
116 [[nodiscard]]
virtual std::string
Name()
const = 0;
123 [[nodiscard]]
virtual std::string
Entity()
const {
return ""; }
140 [[nodiscard]]
virtual std::vector<SignalDecl>
DeclareInputs()
const {
return {}; }
147 [[nodiscard]]
virtual std::vector<SignalDecl>
DeclareOutputs()
const {
return {}; }
153 std::vector<std::string> names;
155 names.push_back(decl.name);
164 std::vector<std::string> names;
166 names.push_back(decl.name);
185 [[nodiscard]]
virtual Vec3<Scalar>
GetBodyPosition()
const {
return Vec3<Scalar>::Zero(); }
196 return janus::Quaternion<Scalar>();
211 [[nodiscard]]
bool IsStaged()
const {
return staged_; }
238 [[nodiscard]]
const vulcan::time::Epoch<Scalar> *
GetEpoch()
const {
return epoch_; }
254 template <
typename T> T
read_param(
const std::string &key,
const T &default_val)
const {
255 return config_.template Get<T>(key, default_val);
264 return config_.template Require<T>(key);
272 Vec3<Scalar>
read_param_vec3(
const std::string &key,
const Vec3<Scalar> &default_val)
const {
273 if (!config_.template Has<Vec3<double>>(key)) {
276 auto v = config_.template Get<Vec3<double>>(key, Vec3<double>::Zero());
277 return Vec3<Scalar>{
static_cast<Scalar
>(v(0)),
static_cast<Scalar
>(v(1)),
278 static_cast<Scalar
>(v(2))};
287 auto v = config_.template Require<Vec3<double>>(key);
288 return Vec3<Scalar>{
static_cast<Scalar
>(v(0)),
static_cast<Scalar
>(v(1)),
289 static_cast<Scalar
>(v(2))};
297 Vec4<Scalar>
read_param_vec4(
const std::string &key,
const Vec4<Scalar> &default_val)
const {
298 if (!config_.template Has<Vec4<double>>(key)) {
301 auto v = config_.template Get<Vec4<double>>(key, Vec4<double>::Zero());
302 return Vec4<Scalar>{
static_cast<Scalar
>(v(0)),
static_cast<Scalar
>(v(1)),
303 static_cast<Scalar
>(v(2)),
static_cast<Scalar
>(v(3))};
312 auto v = config_.template Require<Vec4<double>>(key);
313 return Vec4<Scalar>{
static_cast<Scalar
>(v(0)),
static_cast<Scalar
>(v(1)),
314 static_cast<Scalar
>(v(2)),
static_cast<Scalar
>(v(3))};
327 void BindEpoch(
const vulcan::time::Epoch<Scalar> *epoch) { epoch_ = epoch; }
336 const vulcan::time::Epoch<Scalar> *epoch_ =
nullptr;
337 bool provisioned_ =
false;
338 bool staged_ =
false;
Configuration container for components with typed accessors.
Core type definitions, concepts, and configuration for Icarus.
Consolidated error handling for Icarus.
Component-facing facade for signal registration and resolution.
Definition Backplane.hpp:32
Base class for all simulation components.
Definition Component.hpp:47
virtual ~Component()=default
void MarkStaged()
Definition Component.hpp:323
virtual std::vector< SignalDecl > DeclareInputs() const
Declared inputs (for documentation/dependency graph).
Definition Component.hpp:140
const ComponentConfig & GetConfig() const
Get component configuration.
Definition Component.hpp:227
virtual std::string TypeName() const
Component type name for data dictionary (e.g., "JetEngine").
Definition Component.hpp:128
const vulcan::time::Epoch< Scalar > * GetEpoch() const
Get simulation epoch (read-only).
Definition Component.hpp:238
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.
Definition Component.hpp:272
std::vector< std::string > GetInputNames() const
Get list of input signal names.
Definition Component.hpp:163
void ResetStaged()
Definition Component.hpp:324
virtual bool HasBodyAttachment() const
Whether this component has a body attachment (position/orientation).
Definition Component.hpp:179
virtual void Shutdown()
Called during shutdown (cleanup, flush buffers).
Definition Component.hpp:107
Vec4< Scalar > require_param_vec4(const std::string &key) const
Read a required Vec4 config parameter (throws if missing).
Definition Component.hpp:311
virtual void Stage(Backplane< Scalar > &bp)=0
Stage phase - called at start of each run/episode.
virtual janus::Quaternion< Scalar > GetBodyOrientation() const
Get the component's mounting orientation (body-to-component rotation).
Definition Component.hpp:195
virtual Vec3< Scalar > GetBodyPosition() const
Get the component's mounting position in vehicle body frame.
Definition Component.hpp:185
T read_param(const std::string &key, const T &default_val) const
Read a scalar config parameter with default.
Definition Component.hpp:254
virtual void PostStep(Scalar, Scalar)
Called after all component Steps (for post-processing).
Definition Component.hpp:97
std::string FullName() const
Full qualified name: entity.component (or just component).
Definition Component.hpp:133
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.
Definition Component.hpp:297
bool IsProvisioned() const
Check if Provision has been called.
Definition Component.hpp:206
virtual std::vector< SignalDecl > DeclareOutputs() const
Declared outputs (for documentation/dependency graph).
Definition Component.hpp:147
virtual void Provision(Backplane< Scalar > &bp)=0
Provision phase - called once at application launch.
friend class Backplane
Definition Component.hpp:332
virtual std::string Name() const =0
Component instance name (e.g., "MainEngine").
void MarkProvisioned()
Definition Component.hpp:322
Vec3< Scalar > require_param_vec3(const std::string &key) const
Read a required Vec3 config parameter (throws if missing).
Definition Component.hpp:286
void BindEpoch(const vulcan::time::Epoch< Scalar > *epoch)
Definition Component.hpp:327
void SetConfig(ComponentConfig config)
Set component configuration (called by factory after construction).
Definition Component.hpp:220
friend class Simulator
Definition Component.hpp:330
T require_param(const std::string &key) const
Read a required scalar config parameter (throws if missing).
Definition Component.hpp:263
virtual void OnError(const SimulationError &)
Called when simulation encounters an error.
Definition Component.hpp:102
bool IsStaged() const
Check if Stage has been called.
Definition Component.hpp:211
virtual std::string Entity() const
Entity namespace (e.g., "X15").
Definition Component.hpp:123
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).
Definition Component.hpp:92
std::vector< std::string > GetOutputNames() const
Get list of output signal names.
Definition Component.hpp:152
Definition AggregationTypes.hpp:13
std::string MakeFullPath(const std::string &entity, const std::string &name)
Build a full path from entity and name.
Definition CoreTypes.hpp:166
Configuration container for components.
Definition ComponentConfig.hpp:37
Signal declaration for introspection.
Definition Component.hpp:27
std::string description
Human-readable description.
Definition Component.hpp:30
std::string name
Local signal name.
Definition Component.hpp:28
std::string unit
Physical unit.
Definition Component.hpp:29
bool is_input
True if input, false if output.
Definition Component.hpp:31