WSF
WsfSpaceMoverBase.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11// ****************************************************************************
12// Updated by Infoscitex, a DCS Company
13// ****************************************************************************
14
15#ifndef WSFSPACEMOVERBASE_HPP
16#define WSFSPACEMOVERBASE_HPP
17
18#include "wsf_space_export.h"
19
20#include <memory>
21
22class UtCalendar;
23#include "UtCentralBody.hpp"
24#include "UtCloneablePtr.hpp"
25#include "UtColor.hpp"
26#include "UtOptional.hpp"
27class UtOrbitalElements;
28#include "UtOrbitalPropagatorBase.hpp"
29namespace ut
30{
31class OrbitalState;
32}
35class WsfDraw;
36#include "WsfGeoPoint.hpp"
37#include "WsfMover.hpp"
38class WsfOrbitalEvent;
46#include "WsfStringId.hpp"
47
69class WSF_SPACE_EXPORT WsfSpaceMoverBase : public WsfMover
70{
71public:
73 WsfSpaceMoverBase(const WsfScenario& aScenario,
74 std::unique_ptr<UtOrbitalPropagatorBase> aPropagatorPtr,
75 const std::string& aScriptClassName = "WsfSpaceMover");
78 ~WsfSpaceMoverBase() override;
79
81
82 WsfMover* Clone() const override;
83 const int* GetComponentRoles() const override;
84 void* QueryInterface(int aRole) override;
85 bool PreInitialize(double aSimTime) override;
86 bool Initialize(double aSimTime) override;
87 bool Initialize2(double aSimTime) override;
88 bool ProcessInput(UtInput& aInput) override;
89 void Update(double aSimTime) override;
91
93
94 const ut::OrbitalState& GetOrbitalState() const;
95 double GetAvailableDeltaV() const;
96 double GetRequiredDuration(double aDeltaV) const;
97 double GetRequiredDeltaV(double aDuration) const;
98 double GetManeuverDuration(const UtCalendar& aEpoch, const WsfOrbitalManeuver& aManeuver, double aDeltaV) const;
100 const ut::CentralBody& GetCentralBody() const;
101 const ut::CentralPoint& GetCentralPoint() const;
102 bool Maneuver(const UtCalendar& aEpoch, const UtVec3d& aCommandedDeltaV, UtVec3d& aActualDeltaV);
104
105 virtual bool SetInitialPoint(double aLat, double aLon, double aAlt, double aSpeed, double aHeading);
106
108
109 WSF_SPACE_DEPRECATED WsfGeoPoint GetInitialPositionLLA() const;
110 UtVec3d GetInitialPositionECI() const;
111 UtVec3d GetInitialPositionWCS() const;
112 UtVec3d GetInitialVelocityECI() const;
113 UtVec3d GetInitialVelocityWCS() const;
115 const char* GetScriptClassName() const override;
116
118
119 // IsExtrapolating here means that no propulsive forces are occurring.
120 // While it is true that during Delta-V maneuver this isn't true, it is predominately so.
121 bool IsExtrapolating() const override { return true; }
122
124 const UtOrbitalPropagatorBase& GetPropagator() const { return *mPropagatorPtr; }
125
127 UtOrbitalPropagatorBase& GetPropagator() { return *mPropagatorPtr; }
128
130 const WsfOrbitalManeuvering& GetOrbitalManeuvering() const;
131
133 bool InitializeOrbitalManeuvering(const UtCalendar& aEpoch);
134
136 const WsfOrbitalEvent* GetCurrentMissionEvent() const;
137
142 const WsfOrbitalMissionSequence& GetMissionEvents() const;
143
149 void ScheduleMission(const UtCalendar& aEpoch, std::unique_ptr<WsfOrbitalMissionSequence> aMissionEventsPtr);
150
154 void CancelMission();
155
167 bool VerifyMission(const UtCalendar& aEpoch,
168 const WsfOrbitalMissionSequence& aSequence,
171
180 bool VerifyMission(const UtCalendar& aEpoch) const;
181
183 WsfAttitudeController& GetAttitudeController() { return *mAttitudePtr; }
184
187 double GetSimTimeOfEpoch() const { return mSimTimeOfEpoch; }
188
190 WsfScriptContext& GetScriptContext() { return *mContextPtr; }
191
192 void UpdatePropagation(const UtCalendar& aEpoch);
193
195 const UtCalendar& GetCurrentTime() const { return mPropagatorPtr->GetCurrentTime(); }
196
198 double GetElementOutputUpdateInterval() const { return 600.0; }
199
201 const std::string& GetDescriptor() const { return mPropagatorPtr->GetDescriptor(); }
202
204 const std::string& GetDesignator() const { return mPropagatorPtr->GetDesignator(); }
205
206 const ut::OrbitalState& GetInitialOrbitalState() const;
207
208 double GetInitialHeading() const;
209
211 void SetInitialOrbitalState(const ut::OrbitalState& aState) { mPropagatorPtr->SetInitialOrbitalState(aState); }
212
213 bool GetFutureLocationWCS(double aSimTime, double aLocationWCS[3]) final;
214
218 {
219 public:
220 SpaceModel(double aSimTime,
221 WsfStringId aModelTypeId,
222 std::unique_ptr<UtOrbitalPropagatorBase> aPropagatorPtr,
223 WsfDraw* aDrawPtr = nullptr); // If we want to draw the trajectory.
224
225 bool GetLocationXYZ(double aTime, double aLocXYZ[3]) const override;
226
227 bool GetVelocityXYZ(double aTime, double aVelXYZ[3]) const override;
228
229 protected:
230 bool Update(double aSimTime) const;
231
232 std::unique_ptr<UtOrbitalPropagatorBase> mPropagatorPtr;
233 mutable UtCalendar mUpdateTime;
234 mutable double mLastUpdateTime;
235 mutable UtVec3d mLastLocXYZ;
236 mutable UtVec3d mLastLocWCS;
237 mutable UtVec3d mLastVelWCS;
238 };
239
241 WsfStringId aModelTypeId,
242 const double aLocationWCS[3],
243 const double aVelocityWCS[3],
244 WsfMover* aMoverPtr,
245 WsfDraw* aDrawPtr) const override;
246
248 void SetTargetOrientationECI(double aPsi, double aTheta, double aPhi);
249
250 ut::optional<UtColor> GetOrbitColor() const { return mOrbitColor; }
251 UtColor GetOrbitColorValue() const { return mOrbitColor.value_or(UtColor(1, 1, 1)); }
252 bool OrbitColorSet() const { return mOrbitColor.has_value(); }
253 void UpdateColor(double aSimTime, const UtColor& aColor);
254 void SetOrbitColor(const std::string& aOrbitColor) { SetOrbitColor(UtColor::GetColorMapping(aOrbitColor)); }
255 void SetOrbitColor(const UtColor& aOrbitColor);
256
257 bool IsTLEInputAllowed() const noexcept { return mTLE_InputAllowed; }
258 void SetTLEInputAllowed(bool aTLE_InputAllowed) noexcept { mTLE_InputAllowed = aTLE_InputAllowed; }
259
265 double GetLookAngleTo(const UtVec3d& aLocationWCS) const;
266
272 double GetIncidenceAngle(const UtVec3d& aLocationWCS) const;
273
279 double GetTargetElevationAngle(const UtVec3d& aLocationWCS) const;
280
287 double GetSquintAngleTo(const UtVec3d& aLocationWCS) const;
288
292 double GetDistanceToHorizon() const;
293
297 double GetLookAngleToHorizon() const;
298
299private:
300 bool AddDeltaV(const UtVec3d& aDeltaV_ECI);
301
302 ut::CloneablePtr<UtOrbitalPropagatorBase> mPropagatorPtr;
303 ut::CloneablePtr<WsfOrbitalManeuvering> mManeuveringPtr;
304 ut::CloneablePtr<WsfAttitudeController> mAttitudePtr;
305 ut::CloneablePtr<WsfConjunctionInput> mConjunctionInputPtr;
307 double mSimTimeOfEpoch{0.0};
308 WsfScriptContext* mContextPtr;
309 ut::OrbitalState mOrbitalState;
310 ut::optional<UtColor> mOrbitColor;
311
312 bool mTLE_InputAllowed{false};
313};
314
316
317#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
aObjectPtr Update(simTime)
@ cWSF_COMPONENT_SPACE_MOVER
Space-based movers.
Definition WsfSpaceComponentRoles.hpp:18
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfSpatialDomain
A collection of enumerations and type definitions that are used across a number of components.
Definition WsfTypes.hpp:32
@ WSF_SPATIAL_DOMAIN_SPACE
Submarines.
Definition WsfTypes.hpp:38
Definition WsfAttitudeController.hpp:31
virtual bool PreInitialize(double aSimTime)
Definition WsfComponent.cpp:24
A class to setup a satellite so that it will suffer a conjunction at a given time with a given target...
Definition WsfConjunctionInput.hpp:30
Provides the capability to draw shapes into the WSF replay file.
Definition WsfDraw.hpp:35
Definition WsfGeoPoint.hpp:29
Definition WsfMover.hpp:286
bool ProcessInput(UtInput &aInput) override
Definition WsfMover.cpp:138
void * QueryInterface(int aRole) override
Definition WsfMover.cpp:633
const int * GetComponentRoles() const override
Definition WsfMover.cpp:626
bool Initialize(double aSimTime) override
Definition WsfMover.cpp:108
bool Initialize2(double aSimTime) override
Definition WsfPlatformPart.cpp:291
WsfMover * Clone() const override=0
virtual KinematicModel * CreateKinematicModel(double aSimTime, WsfStringId aPlatformTypeId, const double aLocationWCS[3], const double aVelocityWCS[3], WsfMover *aMoverPtr, WsfDraw *aDrawPtr) const
Definition WsfMover.hpp:335
WsfMover()=delete
const char * GetScriptClassName() const override
Definition WsfMover.cpp:616
void Update(double aSimTime) override
Definition WsfMover.cpp:310
virtual bool GetFutureLocationWCS(double aSimTime, double aLocationWCS[3])
Definition WsfMover.cpp:531
Definition WsfOrbitalEvent.hpp:50
Definition WsfOrbitalManeuver.hpp:34
Definition WsfOrbitalManeuvering.hpp:30
Definition WsfOrbitalMissionSequence.hpp:32
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfScriptContext.hpp:71
bool GetVelocityXYZ(double aTime, double aVelXYZ[3]) const override
Definition WsfSpaceMoverBase.cpp:752
UtVec3d mLastVelWCS
Definition WsfSpaceMoverBase.hpp:237
SpaceModel(double aSimTime, WsfStringId aModelTypeId, std::unique_ptr< UtOrbitalPropagatorBase > aPropagatorPtr, WsfDraw *aDrawPtr=nullptr)
Definition WsfSpaceMoverBase.cpp:705
UtVec3d mLastLocXYZ
Definition WsfSpaceMoverBase.hpp:235
UtCalendar mUpdateTime
Definition WsfSpaceMoverBase.hpp:233
double mLastUpdateTime
Definition WsfSpaceMoverBase.hpp:234
UtVec3d mLastLocWCS
Definition WsfSpaceMoverBase.hpp:236
bool GetLocationXYZ(double aTime, double aLocXYZ[3]) const override
Definition WsfSpaceMoverBase.cpp:740
std::unique_ptr< UtOrbitalPropagatorBase > mPropagatorPtr
Definition WsfSpaceMoverBase.hpp:232
Definition WsfSpaceMoverBase.hpp:70
bool PerformStagingOperation()
Definition WsfSpaceMoverBase.cpp:419
double GetRequiredDuration(double aDeltaV) const
Definition WsfSpaceMoverBase.cpp:404
const ut::CentralPoint & GetCentralPoint() const
Definition WsfSpaceMoverBase.cpp:438
double GetAvailableDeltaV() const
Definition WsfSpaceMoverBase.cpp:399
bool IsExtrapolating() const override
Definition WsfSpaceMoverBase.hpp:121
const std::string & GetDescriptor() const
Return the descriptor associated with this mover.
Definition WsfSpaceMoverBase.hpp:201
bool IsTLEInputAllowed() const noexcept
Definition WsfSpaceMoverBase.hpp:257
const ut::OrbitalState & GetOrbitalState() const
Return the current propagated orbital state.
Definition WsfSpaceMoverBase.cpp:596
WsfSpaceMoverBase & operator=(const WsfSpaceMoverBase &)=delete
void SetOrbitColor(const std::string &aOrbitColor)
Definition WsfSpaceMoverBase.hpp:254
UtOrbitalPropagatorBase & GetPropagator()
Return a reference to the orbital propagator associated with this space mover (non-const version).
Definition WsfSpaceMoverBase.hpp:127
WsfSpatialDomain GetSpatialDomain() const override
Definition WsfSpaceMoverBase.hpp:117
const ut::CentralBody & GetCentralBody() const
Definition WsfSpaceMoverBase.cpp:433
ut::optional< UtColor > GetOrbitColor() const
Definition WsfSpaceMoverBase.hpp:250
UtVec3d GetInitialVelocityECI() const
Definition WsfSpaceMoverBase.cpp:490
double GetManeuverDuration(const UtCalendar &aEpoch, const WsfOrbitalManeuver &aManeuver, double aDeltaV) const
Definition WsfSpaceMoverBase.cpp:414
double GetElementOutputUpdateInterval() const
Get the interval between entries in an event pipe of this mover's elements.
Definition WsfSpaceMoverBase.hpp:198
double GetRequiredDeltaV(double aDuration) const
Definition WsfSpaceMoverBase.cpp:409
WsfAttitudeController & GetAttitudeController()
Return a reference to the attitude controller associated with this space mover.
Definition WsfSpaceMoverBase.hpp:183
bool Maneuver(const UtCalendar &aEpoch, const UtVec3d &aCommandedDeltaV, UtVec3d &aActualDeltaV)
Definition WsfSpaceMoverBase.cpp:443
WSF_SPACE_DEPRECATED WsfGeoPoint GetInitialPositionLLA() const
Definition WsfSpaceMoverBase.cpp:464
WsfSpaceMoverBase()=delete
UtVec3d GetInitialPositionWCS() const
Definition WsfSpaceMoverBase.cpp:482
void SetTLEInputAllowed(bool aTLE_InputAllowed) noexcept
Definition WsfSpaceMoverBase.hpp:258
void SetTargetOrientationECI(double aPsi, double aTheta, double aPhi)
Set the mover's target ECI orientation.
Definition WsfSpaceMoverBase.cpp:797
double GetSimTimeOfEpoch() const
Definition WsfSpaceMoverBase.hpp:187
const UtCalendar & GetCurrentTime() const
Get the current propagation time.
Definition WsfSpaceMoverBase.hpp:195
const std::string & GetDesignator() const
Return the designator associated with this mover.
Definition WsfSpaceMoverBase.hpp:204
virtual bool SetInitialPoint(double aLat, double aLon, double aAlt, double aSpeed, double aHeading)
Definition WsfSpaceMoverBase.cpp:456
UtVec3d GetInitialPositionECI() const
Definition WsfSpaceMoverBase.cpp:474
WsfScriptContext & GetScriptContext()
Return a reference to the script context.
Definition WsfSpaceMoverBase.hpp:190
UtColor GetOrbitColorValue() const
Definition WsfSpaceMoverBase.hpp:251
const UtOrbitalPropagatorBase & GetPropagator() const
Return a reference to the orbital propagator associated with this space mover.
Definition WsfSpaceMoverBase.hpp:124
void SetInitialOrbitalState(const ut::OrbitalState &aState)
A pass-through method to set the initial orbital state.
Definition WsfSpaceMoverBase.hpp:211
UtVec3d GetInitialVelocityWCS() const
Definition WsfSpaceMoverBase.cpp:498
bool OrbitColorSet() const
Definition WsfSpaceMoverBase.hpp:252
Definition WsfSpaceOrbitalMissionSimulationContext.hpp:34
Definition WsfSensorErrorModel.hpp:21
std::function< void(int, const WsfOrbitalEvent *, const UtCalendar &, const UtOrbitalElements &, double, Status)> PostOperation
Definition WsfSpaceVerifyTypes.hpp:39
std::function< void(int, const WsfOrbitalEvent *, const UtCalendar &, const UtOrbitalElements &, double)> PreOperation
Definition WsfSpaceVerifyTypes.hpp:37
Copyrights Multiple, All Rights Reserved