WSF
WsfWaypointMover.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 WSFWAYPOINTMOVER_HPP
16#define WSFWAYPOINTMOVER_HPP
17
18#include "wsf_export.h"
19
21#include "WsfEvent.hpp"
22#include "WsfMover.hpp"
23#include "WsfPathComputer.hpp"
24#include "WsfPathList.hpp"
25#include "WsfRoute.hpp"
26#include "WsfRouteMover.hpp"
27#include "WsfWaypoint.hpp"
28
37{
38public:
39 WsfWaypointMover() = delete;
40 WsfWaypointMover(const WsfScenario& aScenario);
43 ~WsfWaypointMover() override;
44 WsfMover* Clone() const override;
45
46 bool Initialize(double aSimTime) override;
47 bool ProcessInput(UtInput& aInput) override;
48
49 void SetPlatform(WsfPlatform* aPlatformPtr) override;
50
51 bool GoToAltitude(double aSimTime, double aAltitude, double aClimbDiveRate, bool aKeepRoute) override;
52
53 bool GoToSpeed(double aSimTime, double aSpeed, double aLinearAccel, bool aKeepRoute) override;
54
55 bool TurnToRelativeHeading(double aSimTime,
56 double aHeadingChange,
57 double aRadialAccel,
58 WsfPath::TurnDirection aTurnDirection) override;
59
60 bool TurnToHeading(double aSimTime, double aHeading, double aRadialAccel, WsfPath::TurnDirection aTurnDirection) override;
61
62 bool GetFutureLocationWCS(double aSimTime, double aLocationWCS[3]) override;
63
65
66 bool IsOnGround() const { return mIsOnGround; }
67
68 void SetIsOnRoad(bool aIsOnRoad) { mIsOnRoad = aIsOnRoad; }
69 bool IsOnRoad() const { return mIsOnRoad; }
70
71 const WsfPathConstraints* GetMoverConstraints() const override;
73 const WsfPathTarget& GetTarget() const { return mTarget; }
76
77 bool GetPropertyDouble(const std::string& aPropertyName, double& aProperty) override;
78
79 virtual double MaximumRadialAcceleration(); // returns meters/second^2
80 double TurnRadius(); // TODO //returns meters; assumed current speed
81 double TurnRadius(double atSpeed) override; // TODO //returns meters
82 virtual double MaximumTurnRate(); // returns radians/second
83 virtual double CornerVelocity(WsfGeoPoint* aTarget); // returns meters/second
84
85 void Pause(double aSimTime, double aUnpauseTime) override;
86
87 bool Unpause(double aSimTime, bool aInterrupt) override;
88
90 // * Used in SetRoute or to move platform
91 void ResetPosition(double aSimTime) override;
92
93 bool IsExtrapolating() const override;
94
95 class BaseEvent : public WsfEvent
96 {
97 public:
99 : mMoverPtr(nullptr)
100 , mEnabled()
101 {
102 }
104 : mMoverPtr(aMoverPtr)
105 , mEnabled(true)
106 {
107 }
108 ~BaseEvent() override
109 {
110 if (mEnabled)
111 {
112 mMoverPtr->mHitEventPtr = nullptr;
113 }
114 }
115 void Disable() { mEnabled = false; }
116
117 protected:
120 };
121
123 {
124 public:
125 HitPointEvent() = default;
127 : BaseEvent(aMoverPtr)
128 {
129 }
130 ~HitPointEvent() override = default;
132 {
133 if (mEnabled)
134 {
135 mEnabled = false;
136 mMoverPtr->HitWaypoint(GetTime());
137 }
138 return cDELETE;
139 }
140 };
141
142protected:
143 void SetGuidanceFrom(const WsfWaypoint& aPreviousWaypoint) override;
144
145 void SetGuidanceTo(const WsfWaypoint& aNextWaypoint) override;
146
148 void AdvanceToNextWaypoint(double aSimTime, const WsfWaypoint& aTarget, const WsfWaypoint* aNextPointPtr) override;
149
150 double GetHeightOfTerrain() const { return mHeightOfTerrain; }
151
152 void UpdateHeightOfTerrain();
153
154 void SetIsOnGround(bool aIsOnGround) { mIsOnGround = aIsOnGround; }
155
156 virtual void PostMoveUpdate(double aSimTime) {}
157
158 void EnableTerrain(bool aUseTerrain);
159
160 void ExecutePath(double aSimTime);
161
162 void UpdatePosition(double aSimTime) override;
163
164 void HitWaypoint(double aSimTime);
165
166 friend class HitPointEvent;
167
168 void ResetPath(double aSimTime);
169
170 void SetCompleteTime(double aSimTime);
171 void SetComplete();
172
173 void UpdateConstraints(const WsfWaypoint& aWaypoint);
174
175 void CreatePath(const WsfWaypoint& aTargetPoint, const WsfWaypoint* aNextPointPtr = nullptr);
176
177 void CreatePath(bool aResetDefaults = true);
178
179 void Extrapolate(double aSimTime);
180
181 void MoveToGround();
182
183 void SetGroundAttitude(double aLatitude, double aLongitude);
184
198 // UnpauseEvent* mUnpauseEventPtr;
203
211
214
216
217 unsigned int mTargetTypeFlags;
218
230};
231
232#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfAngleOfAttack uses a table to compute a platform's pitch given the altitude and speed.
Definition WsfAngleOfAttack.hpp:27
double GetTime() const
Definition WsfEvent.hpp:71
WsfEvent()=default
EventDisposition
Definition WsfEvent.hpp:37
@ cDELETE
Delete the event from the event queue.
Definition WsfEvent.hpp:38
Definition WsfGeoPoint.hpp:29
virtual bool TurnToHeading(double aSimTime, double aHeading, double aRadialAccel, WsfPath::TurnDirection aTurnDirection)
Definition WsfMover.cpp:454
virtual bool GoToAltitude(double aSimTime, double aAltitude, double aClimbDiveRate, bool aKeepRoute)
Definition WsfMover.cpp:383
WsfMover * Clone() const override=0
WsfMover()=delete
virtual bool IsExtrapolating() const
Definition WsfMover.cpp:576
virtual void ResetPosition(double aSimTime)
Informs the mover to use the current platform state.
Definition WsfMover.hpp:94
virtual bool GetPropertyDouble(const std::string &aPropertyName, double &aProperty)
Definition WsfMover.cpp:178
virtual bool TurnToRelativeHeading(double aSimTime, double aHeadingChange, double aRadialAccel, WsfPath::TurnDirection aTurnDirection)
Definition WsfMover.cpp:467
virtual bool GetFutureLocationWCS(double aSimTime, double aLocationWCS[3])
Definition WsfMover.cpp:531
virtual double TurnRadius(double atSpeed)
Definition WsfMover.hpp:274
WsfPathComputer computes a WsfPathList for a platform to reach a target state.
Definition WsfPathComputer.hpp:98
Defines a list of motions a platform could take.
Definition WsfPathList.hpp:30
virtual void SetPlatform(WsfPlatform *aPlatformPtr)
Definition WsfPlatformPart.hpp:113
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
virtual bool Unpause(double aSimTime, bool aInterrupt)
Definition WsfRouteMover.cpp:1451
bool ProcessInput(UtInput &aInput) override
Definition WsfRouteMover.cpp:308
bool GoToSpeed(double aSimTime, double aSpeed, double aLinearAccel, bool aKeepRoute) override
Definition WsfRouteMover.cpp:557
WsfRouteMover()=delete
virtual void UpdatePosition(double aSimTime)=0
virtual void SetGuidanceFrom(const WsfWaypoint &aPreviousWaypoint)=0
virtual const WsfPathConstraints * GetMoverConstraints() const
Definition WsfRouteMover.cpp:1563
virtual void AdvanceToNextWaypoint(double aSimTime, const WsfWaypoint &aTarget, const WsfWaypoint *aNextPointPtr)=0
virtual void SetGuidanceTo(const WsfWaypoint &aNextWaypoint)=0
virtual void Pause(double aSimTime, double aUnpauseTime)=0
Sets the mover to a paused state.
bool Initialize(double aSimTime) override
Definition WsfRouteMover.cpp:136
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfWaypointMover.hpp:96
bool mEnabled
Definition WsfWaypointMover.hpp:119
~BaseEvent() override
Definition WsfWaypointMover.hpp:108
BaseEvent()
Definition WsfWaypointMover.hpp:98
void Disable()
Definition WsfWaypointMover.hpp:115
BaseEvent(WsfWaypointMover *aMoverPtr)
Definition WsfWaypointMover.hpp:103
WsfWaypointMover * mMoverPtr
Definition WsfWaypointMover.hpp:118
Definition WsfWaypointMover.hpp:123
EventDisposition Execute() override
Definition WsfWaypointMover.hpp:131
~HitPointEvent() override=default
HitPointEvent(WsfWaypointMover *aMoverPtr)
Definition WsfWaypointMover.hpp:126
bool mDebugKeepPath
Definition WsfWaypointMover.hpp:224
bool mDebugPathComputation
Definition WsfWaypointMover.hpp:225
WsfWaypointMover()=delete
WsfWaypointMover & operator=(const WsfWaypointMover &)=delete
WsfPathConstraints & GetConstraints()
Definition WsfWaypointMover.hpp:64
double mPathComputeTimestep
Mover will optionally recompute path on a regular interval if this is non-zero.
Definition WsfWaypointMover.hpp:228
double mHeightOfTerrain
Definition WsfWaypointMover.hpp:215
WsfPathList mPath
The current path being traversed by the platform.
Definition WsfWaypointMover.hpp:190
HitPointEvent * mHitEventPtr
Event triggered when mover reaches waypoint.
Definition WsfWaypointMover.hpp:196
double mDefaultLinearAcceleration
Definition WsfWaypointMover.hpp:208
double mDefaultClimbRate
Definition WsfWaypointMover.hpp:209
bool IsOnRoad() const
Definition WsfWaypointMover.hpp:69
WsfPathComputer & GetPathComputer()
Definition WsfWaypointMover.hpp:74
void ResetPath(double aSimTime)
Definition WsfWaypointMover.cpp:1157
WsfPathComputer mPathComputer
Computes the mover's path.
Definition WsfWaypointMover.hpp:186
WsfPathList mTotalPath
If mDebugKeepPath is set, this contains entire path traversed by platform.
Definition WsfWaypointMover.hpp:192
double mPathStartTime
The sim-time at which mPath was begun.
Definition WsfWaypointMover.hpp:188
const WsfPathTarget & GetTarget() const
Definition WsfWaypointMover.hpp:73
void SetIsOnGround(bool aIsOnGround)
Definition WsfWaypointMover.hpp:154
void SetComplete()
Disables any pending HitPointEvent.
Definition WsfWaypointMover.cpp:660
const WsfAngleOfAttack * GetAngleOfAttackTable()
Definition WsfWaypointMover.hpp:75
const WsfPathConstraints & GetCurrentConstraints() const
Definition WsfWaypointMover.hpp:72
double GetHeightOfTerrain() const
Definition WsfWaypointMover.hpp:150
void UpdateConstraints(const WsfWaypoint &aWaypoint)
Definition WsfWaypointMover.cpp:202
double mPrePauseVelocity[3]
}
Definition WsfWaypointMover.hpp:213
void CreatePath(const WsfWaypoint &aTargetPoint, const WsfWaypoint *aNextPointPtr=nullptr)
Definition WsfWaypointMover.cpp:514
WsfPathTarget mTarget
Current 'goal' parameters.
Definition WsfWaypointMover.hpp:194
bool mPitchEnable
Definition WsfWaypointMover.hpp:223
double mDefaultRadialAcceleration
Definition WsfWaypointMover.hpp:207
WsfPathConstraints mMoverConstraints
Constraints of the mover.
Definition WsfWaypointMover.hpp:200
bool mIsOnGround
Is the platform moving along the ground.
Definition WsfWaypointMover.hpp:220
WsfAngleOfAttack * mAngleOfAttackPtr
Definition WsfWaypointMover.hpp:229
unsigned int mTargetTypeFlags
Definition WsfWaypointMover.hpp:217
WsfPathConstraints mCurrentConstraints
Currently used constraints.
Definition WsfWaypointMover.hpp:202
void MoveToGround()
Definition WsfWaypointMover.cpp:1040
virtual void PostMoveUpdate(double aSimTime)
Definition WsfWaypointMover.hpp:156
void SetGroundAttitude(double aLatitude, double aLongitude)
Definition WsfWaypointMover.cpp:1072
bool mIsOnRoad
Is the platform moving along roads.
Definition WsfWaypointMover.hpp:222
void SetCompleteTime(double aSimTime)
Schedules the HitPointEvent to execute at aSimTime.
Definition WsfWaypointMover.cpp:646
void SetIsOnRoad(bool aIsOnRoad)
Definition WsfWaypointMover.hpp:68
bool mUseTerrain
Definition WsfWaypointMover.hpp:226
bool IsOnGround() const
Definition WsfWaypointMover.hpp:66
void Extrapolate(double aSimTime)
Definition WsfWaypointMover.cpp:498
Definition WsfWaypoint.hpp:57
TurnDirection
Turn direction for TurnToHeading and TurnToRelativeHeading.
Definition WsfPath.hpp:88
Contains constraints used for computing a path in WsfPathComputer.
Definition WsfPathConstraints.hpp:24
Definition WsfPathComputer.hpp:27
Copyrights Multiple, All Rights Reserved