WarpTwin
Documentation for WarpTwin models and classes.
Loading...
Searching...
No Matches
Spacecraft.h
Go to the documentation of this file.
1/******************************************************************************
2* Copyright (c) ATTX INC 2025. All Rights Reserved.
3*
4* This software and associated documentation (the "Software") are the
5* proprietary and confidential information of ATTX INC. The Software is
6* furnished under a license agreement between ATTX and the user organization
7* and may be used or copied only in accordance with the terms of the agreement.
8* Refer to 'license/attx_license.adoc' for standard license terms.
9*
10* EXPORT CONTROL NOTICE: THIS SOFTWARE MAY INCLUDE CONTENT CONTROLLED UNDER THE
11* INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) OR THE EXPORT ADMINISTRATION
12* REGULATIONS (EAR99). No part of the Software may be used, reproduced, or
13* transmitted in any form or by any means, for any purpose, without the express
14* written permission of ATTX INC.
15******************************************************************************/
16/*
17Spacecraft model header file
18
19Author: Alex Reynolds
20*/
21/*
22Metadata for MS GUI:
23imdata = {"displayname" : "Spacecraft",
24 "exclude" : False,
25 "category" : "Assemblies"
26}
27aliases = {"initial_position" : "Initial Position",
28 "initial_velocity" : "Initial Velocity",
29 "pos_vel_init_frame" : "EXCLUDE",
30 "initial_attitude" : "Initial Attitude",
31 "initial_ang_vel" : "Initial Ang. Vel.",
32 "att_init_frame" : "EXCLUDE",
33 "planet_configuration" : "Planet Information",
34 "planet_inertial_frame" : "Planet Inertial Frame",
35 "planet_rotating_frame" : "Planet Rotating Frame",
36 "body" : "Spacecraft Body",
37 "lvlh" : "Spacecraft LVLH Frame",
38 "pos_sc_pci" : "Position",
39 "vel_sc_pci" : "Velocity",
40 "quat_sc_pci" : "Attitude",
41 "ang_vel_sc_pci__body" : "Ang. Vel.",
42 "latitude_detic" : "Latitude",
43 "longitude" : "Longitude",
44 "altitude_detic" : "Altitude",
45 "planet_ptr" : "Planet",
46 "inertia" : "EXCLUDE",
47 "mass" : "Mass"
48}
49*/
50
51#ifndef MODELS_ASSEMBLIES_SPACECRAFT_H
52#define MODELS_ASSEMBLIES_SPACECRAFT_H
53
55#include "frames/Body.h"
56#include "frames/Node.h"
69
70namespace warptwin {
71
72 class Executive;
73
92 MODEL(Spacecraft)
93 public:
94 // Model params
95 // NAME TYPE DEFAULT VALUE
99 SIGNAL(mass, double, 1.0)
102 SIGNAL(inertia, Matrix3, Matrix3({{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}))
105 SIGNAL(initial_position, CartesianVector3, CartesianVector3({0.0,0.0,0.0}))
108 SIGNAL(initial_velocity, CartesianVector3, CartesianVector3({0.0,0.0,0.0}))
110 SIGNAL(pos_vel_init_frame, Frame*, nullptr)
112 SIGNAL(initial_attitude, clockwerk::Quaternion, clockwerk::Quaternion({1.0,0.0,0.0,0.0}))
115 SIGNAL(initial_ang_vel, CartesianVector3, CartesianVector3({0.0,0.0,0.0}))
117 SIGNAL(att_init_frame, Frame*, nullptr)
122 SIGNAL(planet_ptr, GraphTreeObject*, nullptr)
124
125 // Model inputs
126 // NAME TYPE DEFAULT VALUE
129
130 // Model outputs
131 // NAME TYPE DEFAULT VALUE
134 SIGNAL(body, Frame*, nullptr)
136 SIGNAL(lvlh, Frame*, nullptr)
138 SIGNAL(pos_sc_pci, CartesianVector3, CartesianVector3({0.0, 0.0, 0.0}))
140 SIGNAL(vel_sc_pci, CartesianVector3, CartesianVector3({0.0, 0.0, 0.0}))
142 SIGNAL(quat_sc_pci, clockwerk::Quaternion, clockwerk::Quaternion({1.0, 0.0, 0.0, 0.0}))
144 SIGNAL(ang_vel_sc_pci__body, CartesianVector3, CartesianVector3({0.0, 0.0, 0.0}))
146 SIGNAL(latitude_detic, double, 0.0)
148 SIGNAL(longitude, double, 0.0)
150 SIGNAL(altitude_detic, double, 0.0)
152 SIGNAL(total_power_in, double, 0.0)
154 SIGNAL(total_power_out, double, 0.0)
156
163 int initializePositionVelocity(CartesianVector3 position_sc_frame__frame,
164 CartesianVector3 velocity_sc_frame__frame,
165 Frame* frame_ptr=nullptr);
166
173 int initializePositionVelocity(CartesianVector3 position_sc_frame__frame,
174 CartesianVector3 velocity_sc_frame__frame,
175 const std::string &frame_name);
176
189 int initializeFromOrbitalElements(double a, double e, double i, double RAAN, double w, double f);
190
197 int initializeAttitude(clockwerk::Quaternion quat_sc_frame__frame,
198 CartesianVector3 ang_vel_sc_frame__sc,
199 Frame* frame_ptr=nullptr);
200
207 int initializeAttitude(clockwerk::Quaternion quat_sc_frame__frame,
208 CartesianVector3 ang_vel_sc_frame__sc,
209 const std::string &frame_name);
210
216 warptwin::TimedImpulsiveBurnModel* programManeuver(CartesianVector3 delta_v__f,
217 std::string time_string,
218 Frame* force_frame_ptr);
224 warptwin::TimedImpulsiveBurnModel* programManeuver(CartesianVector3 delta_v__f,
225 double sim_time,
226 Frame* force_frame_ptr);
227
232 int addPowerLoad(clockwerk::DataIO<double>* power_load_ptr);
233
236
241 int addPowerSource(clockwerk::DataIO<double>* power_source_ptr);
242
245
246 // Accessor for our spacecraft body
248
249 // Accessor for our spacecraft lvlh frame
251
254 warptwin::FrameStateSensorModel* planetInertialStateSensor() {return &_planet_inertial_state_sensor;}
257 warptwin::FrameStateSensorModel* planetRotatingStateSensor() {return &_planet_rotating_state_sensor;}
260 warptwin::LvlhFrameManagerModel* lvlhFrameManager() {return &_lvlh_frame_manager;}
264 warptwin::AsphericalGravityModel* asphericalGravityModel() {return _asp_ptr;}
268 warptwin::SphericalHarmonicsGravityModel* sphericalHarmGravityModel() {return _sph_ptr;}
271 warptwin::PlanetRelativeStatesModel* planetRelativeModel() {return &_planet_relative;}
274 warptwin::GravityGradientModel* gravityGradientModel() {return &_gravity_gradient;}
278 warptwin::MSISAtmosphereModel* msisModel() {return _msis_ptr;}
281 warptwin::FlatPlateDragModel* atmosDrag() {return &_atmos_drag;}
282 protected:
283 int16 start() override;
284 int16 execute() override;
285
289
291 void _mapInternal();
292
295
296 // Spacecraft body
300
301 // Models included within the Spacecraft class
302 FrameStateSensorModel _planet_inertial_state_sensor;
303 FrameStateSensorModel _planet_rotating_state_sensor;
304 LvlhFrameManagerModel _lvlh_frame_manager;
305 GravityGradientModel _gravity_gradient;
306 PlanetRelativeStatesModel _planet_relative;
307 FlatPlateDragModel _atmos_drag;
308
309 // Pointers to models which are declared on the basis of the spacecraft
310 // model type
311 AsphericalGravityModel* _asp_ptr = nullptr;
312 SphericalHarmonicsGravityModel* _sph_ptr = nullptr;
313 MSISAtmosphereModel* _msis_ptr = nullptr;
314
315 // Internal signals for the mapping of planet values to spacecraft
316 SIGNAL(_mu, double, warpos::earth_wgs84.mu);
317 SIGNAL(_eq_radius, double, warpos::earth_wgs84.eq_radius);
318 SIGNAL(_flattening, double, warpos::earth_wgs84.flattening);
319 SIGNAL(_J2, double, warpos::earth_wgs84.J2);
320 SIGNAL(_J3, double, warpos::earth_wgs84.J3);
321 std::string _planet_name = "earth";
322
323 // Vector of programmed burn models
324 std::vector<TimedImpulsiveBurnModel*> _planned_burn_ptrs;
325
326 // Vector of power loads from components (Watts)
327 std::vector<clockwerk::DataIO<double>*> _power_load_ptrs;
328
329 // Vector of power sources from components (Watts)
330 std::vector<clockwerk::DataIO<double>*> _power_source_ptrs;
331 };
332
333}
334
335#endif
#define SIGNAL(NAME, TYPE, INITIAL_VALUE)
Definition appmacros.h:27
#define START_PARAMS
Definition appmacros.h:42
#define END_OUTPUTS
Definition appmacros.h:33
#define END_PARAMS
Definition appmacros.h:47
#define START_OUTPUTS
Definition appmacros.h:28
#define END_INPUTS
Definition appmacros.h:40
#define START_INPUTS
Definition appmacros.h:35
Class for inter-object communication.
Definition DataIO.hpp:60
Class to define a body as a frame with mass and inertia.
Definition Body.h:44
Frame class definition.
Definition Frame.h:96
Node class to apply forces and moments to frames.
Definition Node.h:44
#define CartesianVector3
Definition mathmacros.h:43
#define Matrix3
Definition mathmacros.h:29
Definition CircularBuffer.hpp:28
Extensions to the C++ standard library.
Definition half.hpp:2325
PlanetDefaults earth_wgs84
Definition planetdefaults.cpp:22
Class to propagate CR3BP dynamics in characteristic units.
Definition statistics.hpp:22
int addPowerLoad(clockwerk::DataIO< double > *power_load_ptr)
Add a power load to the spacecraft.
Definition Spacecraft.cpp:463
warptwin::TimedImpulsiveBurnModel * programManeuver(CartesianVector3 delta_v__f, std::string time_string, Frame *force_frame_ptr)
Function to program a timed impulsive burn into the spacecraft.
int16 start() override
Class to execute logging.
SIGNAL(_mu, double, warpos::earth_wgs84.mu)
FlatPlateDragModel _atmos_drag
Definition Spacecraft.h:307
MODEL(Spacecraft) public int initializePositionVelocity(CartesianVector3 position_sc_frame__frame, CartesianVector3 velocity_sc_frame__frame, const std::string &frame_name)
Spacecraft Model.
void clearPowerSources()
Clear the list of power sources.
Definition Spacecraft.h:244
PlanetRelativeStatesModel _planet_relative
Definition Spacecraft.h:306
void clearPowerLoads()
Clear the list of power loads.
Definition Spacecraft.h:235
GravityGradientModel _gravity_gradient
Definition Spacecraft.h:305
int initializeAttitude(clockwerk::Quaternion quat_sc_frame__frame, CartesianVector3 ang_vel_sc_frame__sc, Frame *frame_ptr=nullptr)
Initialize attitude and angular velocity of the spacecraft body frame.
AsphericalGravityModel * _asp_ptr
Definition Spacecraft.h:311
FrameStateSensorModel _planet_rotating_state_sensor
Definition Spacecraft.h:303
LvlhFrameManagerModel _lvlh_frame_manager
Definition Spacecraft.h:304
Body _body
Definition Spacecraft.h:297
clockwerk::DataIO< Body * > lvlh
Definition Spacecraft.h:250
void _mapInternal()
Function to internally map relationships between sensors.
Definition Spacecraft.cpp:205
warptwin::GravityGradientModel * gravityGradientModel()
Function to get a handle to the gravity gradient model contained within this model.
Definition Spacecraft.h:274
clockwerk::DataIO< Body * > body
Definition Spacecraft.h:247
warptwin::AsphericalGravityModel * asphericalGravityModel()
Function to get a handle to the aspherical gravity model contained within this model.
Definition Spacecraft.h:264
std::vector< TimedImpulsiveBurnModel * > _planned_burn_ptrs
Definition Spacecraft.h:324
warptwin::LvlhFrameManagerModel * lvlhFrameManager()
Function to get a handle to the LVLH frame manager contained within this model.
Definition Spacecraft.h:260
int _configureFromPlanet()
Configure the spacecraft class to map to planet.
Definition Spacecraft.cpp:109
warptwin::MSISAtmosphereModel * msisModel()
Function to get a handle to the MSIS atmosphere model contained within this model.
Definition Spacecraft.h:278
SphericalHarmonicsGravityModel * _sph_ptr
Definition Spacecraft.h:312
void _calculatePowerAccumulation()
Sum the power loads and sources to calculate power accumulation.
Definition Spacecraft.cpp:515
std::vector< clockwerk::DataIO< double > * > _power_load_ptrs
Definition Spacecraft.h:327
int initializeFromOrbitalElements(double a, double e, double i, double RAAN, double w, double f)
Function to initialize the spacecraftrelative to planet from orbital elements.
Definition Spacecraft.cpp:338
@ MODEL
Simplified dynamics model representing motion in the circular restricted 3 body problem.
Definition ImNode.h:31
std::vector< clockwerk::DataIO< double > * > _power_source_ptrs
Definition Spacecraft.h:330
warptwin::SphericalHarmonicsGravityModel * sphericalHarmGravityModel()
Function to get a handle to the spherical harmonics gravity model contained within this model.
Definition Spacecraft.h:268
warptwin::PlanetRelativeStatesModel * planetRelativeModel()
Function to get a handle to the planet relative state model contained within this model.
Definition Spacecraft.h:271
FrameStateSensorModel _planet_inertial_state_sensor
Definition Spacecraft.h:302
warptwin::FlatPlateDragModel * atmosDrag()
Function to get a handle to the flat plate drag model contained within this model.
Definition Spacecraft.h:281
std::string _planet_name
Definition Spacecraft.h:321
int16 execute() override
Function to check monitor input conditions and set trigger flag accordingly. Should be implemented in...
Node _gravity_node
Definition Spacecraft.h:298
warptwin::FrameStateSensorModel * planetInertialStateSensor()
Function to get a handle to the frame state sensor relative to the planet inertial frame.
Definition Spacecraft.h:254
warptwin::FrameStateSensorModel * planetRotatingStateSensor()
Function to get a handle to the frame state sensor relative to the planet rotating frame.
Definition Spacecraft.h:257
Node _drag_node
Definition Spacecraft.h:299
int addPowerSource(clockwerk::DataIO< double > *power_source_ptr)
Add a power source to the spacecraft.
Definition Spacecraft.cpp:489
MSISAtmosphereModel * _msis_ptr
Definition Spacecraft.h:313