WSF
WsfRotorcraftMover.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 WSFROTORCRAFTMOVER_HPP
16#define WSFROTORCRAFTMOVER_HPP
17
18#include "UtControl.hpp"
19#include "UtDCM.hpp"
20class UtInput;
21class UtInputBlock;
22#include "wsf_export.h"
23
24#include "UtPID_Controller.hpp"
25#include "UtVec3dX.hpp"
27#include "WsfMoverMode.hpp"
29
52
54{
55public:
60 ~WsfRotorcraftMover() override;
61
62 WsfMover* Clone() const override;
63 bool Initialize(double aSimTime) override;
64
65 // This is needed only for Data Logging infrastructure.
66 // May be removed later as the algorithm becomes more mature.
67 bool Initialize2(double aSimTime) override;
68
69 bool ProcessInput(UtInput& aInput) override;
70
72
73 void SetMode(WsfStringId aModeId) override;
74
75 void SetHeading(double aHeading) override;
76
77 bool TurnToHeading(double aSimTime, double aHeading, double aRadialAccel, WsfPath::TurnDirection aTurnDirection) override;
78
79 void SetOrientationNED(double aHeading, double aPitch, double aRoll) override;
80
81 bool GoToLocation(double aSimTime, double aLatitude, double aLongitude, double aAltitude) override;
82
83 bool GoToAltitude(double aSimTime, double aAltitude, double aClimbDiveRate, bool aKeepRoute) override;
84
85 bool GoToSpeed(double aSimTime, double aSpeed, double aLinearAccel, bool aKeepRoute) override;
86
87 bool Unpause(double aSimTime, bool aInterrupt) override;
88
89 // ============= Begin Mode ===================
92 {
93 public:
94 static const double cNOT_SET;
95
97 RotorcraftMode(const RotorcraftMode& aSrc);
99 ~RotorcraftMode() override = default;
100
101 WsfMode* Clone() const override;
102 bool ProcessInput(UtInput& aInput) override;
103
104 void Deselect(double aSimTime) override;
105 void Select(double aSimTime) override;
106
109 double mMinimumUpwardAccel; // "mast bumping" constraint m/s2
111 double mMaximumGroundSpeed; // m/s
112 double mMaximumRateOfClimb; // m/s
114 double mMaximumTotalAccel; // m/s2
115 };
116 // ============= End Mode ===================
117
118 // This struct is filled in directly purely
119 // from WsfWaypointPathGuidance or Script-Provided values:
121 {
123
126
129
131 double mTargetHeadingRad; // (Persistent.)
132
135 };
136
137protected:
138 void SetModeId_P(WsfStringId aModeId);
139
140 bool SetLocalGuidance(double aSimTime);
141
142 void SetSwitches(double aSimTime);
143
144 void SetPositionHold(double aSimTime, bool aValue);
145 void SetAltitudeHold(double aSimTime, bool aValue);
146
147 void LocalUpdate(double aSimTime, bool& aMoved, bool& aAdvanceToNextWaypoint) override;
148
149 bool ComputeAccel(double aCurrentRate, double aCurrentValue, double aTargetValue, double aCriticalAccel, double& aCriticalTime);
150
151 void ExportMotionState();
152
153 double MaximumGroundSpeed() const;
154 double MaximumAcceleration() const;
155 double MaximumClimbRate() const;
156 double MaximumDescentRate() const;
157 double MinimumUpwardAccel() const;
158 double BodyRatesGain() const;
159 double WeathercockSpeed() const;
160 double MaximumBodyRate() const;
161
162 unsigned int mFlightIndex;
163
165
170
172 std::vector<RotorcraftMode*> mRotorcraftModeList;
173
175
185
188
189 UtVec3dX mVelNED; // Reference value (WCS is actual)
190 UtVec3dX mAccelNED; // Reference Value (WCS is actual)
191
192 UtVec3dX mNetAccelNED; // Does not include gravity
193
194 UtVec3dX mNetAccelWCS; // *** Integrated Value (no gravity incl)
196
197 UtVec3dX mVelWCS; // *** Integrated Value
198 UtVec3dX mPrevVelWCS;
199 UtVec3dX mLocWCS; // *** Integrated Value
200 UtVec3dX mPrevLocWCS;
201
202 UtVec3dX mNED_Error;
204
205 // All lateral acceleration commands get sent through
206 // a first order filter after coming from the PID.
207 UtControl::TF_1V mSouthTipFilter;
208 UtControl::TF_1V mEastTipFilter;
209
214
215 UtPID_Controller mNorthAccelValuePID;
216 UtPID_Controller mEastAccelValuePID;
217 UtPID_Controller mVerticalAccelValuePID;
218 UtPID_Controller mNorthAccelRatePID;
219 UtPID_Controller mEastAccelRatePID;
220 UtPID_Controller mVerticalAccelRatePID;
221
223
225
228 double mAltitude;
237};
238
239#endif
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_AIR
Cars, trucks, buildings, etc.
Definition WsfTypes.hpp:35
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
bool ProcessInput(UtInput &aInput) override
Definition WsfIterativeRouteMover.cpp:97
virtual void LocalUpdate(double aSimTime, bool &aMoved, bool &aAdvanceToNextWaypoint)=0
bool GoToAltitude(double aSimTime, double aAltitude, double aClimbDiveRate, bool aKeepRoute) override
Definition WsfIterativeRouteMover.cpp:675
bool GoToLocation(double aSimTime, double aLatitude, double aLongitude, double aAltitude) override
Definition WsfIterativeRouteMover.cpp:697
bool TurnToHeading(double aSimTime, double aHeading, double aRadialAccel, WsfPath::TurnDirection aTurnDirection) override
Definition WsfIterativeRouteMover.cpp:737
WsfIterativeRouteMover()=delete
bool Initialize(double aSimTime) override
Definition WsfIterativeRouteMover.cpp:82
bool GoToSpeed(double aSimTime, double aSpeed, double aLinearAccel, bool aKeepRoute) override
Definition WsfIterativeRouteMover.cpp:718
WsfMode()
Definition WsfMode.cpp:15
WsfMoverMode()
Definition WsfMoverMode.cpp:30
WsfMover * Clone() const override=0
virtual void SetOrientationNED(double aHeading, double aPitch, double aRoll)
Definition WsfMover.cpp:240
WsfMover()=delete
virtual void SetMode(WsfStringId aModeName)
Definition WsfMover.cpp:543
virtual void SetHeading(double aHeading)
Definition WsfMover.cpp:207
A 'mode' of the Rotorcraft Mover.
Definition WsfRotorcraftMover.hpp:92
void Deselect(double aSimTime) override
Definition WsfRotorcraftMover.cpp:1142
double mMinimumUpwardAccel
Definition WsfRotorcraftMover.hpp:109
double mMaximumRateOfDescent
Definition WsfRotorcraftMover.hpp:113
double mWeathercockSpeed
Definition WsfRotorcraftMover.hpp:107
WsfMode * Clone() const override
Create an exact duplicate of this mode.
Definition WsfRotorcraftMover.cpp:1080
double mBodyRatesGain
Definition WsfRotorcraftMover.hpp:110
double mMaximumTotalAccel
Definition WsfRotorcraftMover.hpp:114
double mMaximumGroundSpeed
Definition WsfRotorcraftMover.hpp:111
bool ProcessInput(UtInput &aInput) override
Definition WsfRotorcraftMover.cpp:1087
static const double cNOT_SET
Definition WsfRotorcraftMover.hpp:94
double mMaximumRateOfClimb
Definition WsfRotorcraftMover.hpp:112
double mMaximumAttitudeRate
Definition WsfRotorcraftMover.hpp:108
~RotorcraftMode() override=default
RotorcraftMode()
Definition WsfRotorcraftMover.cpp:1051
RotorcraftMode & operator=(const RotorcraftMode &)=delete
void Select(double aSimTime) override
Definition WsfRotorcraftMover.cpp:1149
double BodyRatesGain() const
Definition WsfRotorcraftMover.cpp:267
void SetAltitudeHold(double aSimTime, bool aValue)
Definition WsfRotorcraftMover.cpp:360
UtVec3dX mPrevLocWCS
Definition WsfRotorcraftMover.hpp:200
double mAltitude
Definition WsfRotorcraftMover.hpp:228
UtVec3dX mAccelNED
Definition WsfRotorcraftMover.hpp:190
void SetModeId_P(WsfStringId aModeId)
Definition WsfRotorcraftMover.cpp:437
double mAltitudeError
Definition WsfRotorcraftMover.hpp:231
WsfWaypointPathGuidance * mWPP_GuidancePtr
Definition WsfRotorcraftMover.hpp:222
UtDCM mDcmNEDtoECS
Definition WsfRotorcraftMover.hpp:213
void SetPositionHold(double aSimTime, bool aValue)
Definition WsfRotorcraftMover.cpp:345
WsfStringId mStartModeId
Definition WsfRotorcraftMover.hpp:164
UtVec3dX mVelNED_Error
Definition WsfRotorcraftMover.hpp:203
UtPID_Controller mEastAccelRatePID
Definition WsfRotorcraftMover.hpp:219
UtPID_Controller mEastAccelValuePID
Definition WsfRotorcraftMover.hpp:216
double mGroundSpeed
Definition WsfRotorcraftMover.hpp:230
UtPID_Controller mVerticalAccelRatePID
Definition WsfRotorcraftMover.hpp:220
UtVec3dX mNED_Error
Definition WsfRotorcraftMover.hpp:202
UtVec3dX mLocWCS
Definition WsfRotorcraftMover.hpp:199
bool mIsWeatherCocking
Definition WsfRotorcraftMover.hpp:166
double mReductionRatio
Definition WsfRotorcraftMover.hpp:234
bool mIsAltitudeHold
Definition WsfRotorcraftMover.hpp:168
unsigned int mFlightIndex
Definition WsfRotorcraftMover.hpp:162
double mHeadingRad
Definition WsfRotorcraftMover.hpp:180
double WeathercockSpeed() const
Definition WsfRotorcraftMover.cpp:280
WsfRotorcraftMover & operator=(const WsfRotorcraftMover &)=delete
double mCourseRad
Definition WsfRotorcraftMover.hpp:177
UtVec3dX mDesiredVelNED
Definition WsfRotorcraftMover.hpp:187
double mAltErrToROC_Gain
Definition WsfRotorcraftMover.hpp:178
UtPID_Controller mVerticalAccelValuePID
Definition WsfRotorcraftMover.hpp:217
double mPosHoldCaptureRadius
Definition WsfRotorcraftMover.hpp:183
UtControl::TF_1V mEastTipFilter
Definition WsfRotorcraftMover.hpp:208
bool mNeedToClimb
Definition WsfRotorcraftMover.hpp:167
double mAltitudeRate
Definition WsfRotorcraftMover.hpp:229
WsfRotorcraftMover()=delete
WsfSpatialDomain GetSpatialDomain() const override
Definition WsfRotorcraftMover.hpp:71
UtVec3dX mVelWCS
Definition WsfRotorcraftMover.hpp:197
double mLocalUpdateTime
Definition WsfRotorcraftMover.hpp:176
bool ComputeAccel(double aCurrentRate, double aCurrentValue, double aTargetValue, double aCriticalAccel, double &aCriticalTime)
Definition WsfRotorcraftMover.cpp:634
double mDesiredROC
Definition WsfRotorcraftMover.hpp:233
UtPID_Controller mNorthAccelValuePID
Definition WsfRotorcraftMover.hpp:215
double mSouthAndEastTipTimeConstant
Definition WsfRotorcraftMover.hpp:182
void ExportMotionState()
Definition WsfRotorcraftMover.cpp:960
double MaximumBodyRate() const
Definition WsfRotorcraftMover.cpp:293
double mHeadingErrorRad
Definition WsfRotorcraftMover.hpp:181
UtVec3dX mPrevNetAccelWCS
Definition WsfRotorcraftMover.hpp:195
double MaximumClimbRate() const
Definition WsfRotorcraftMover.cpp:228
UtDCM mDcmDiskToECS
Definition WsfRotorcraftMover.hpp:212
double mTimeToTargetAlt
Definition WsfRotorcraftMover.hpp:232
double mDistToTgtLL
Definition WsfRotorcraftMover.hpp:235
double MaximumDescentRate() const
Definition WsfRotorcraftMover.cpp:241
UtVec3dX mVelNED
Definition WsfRotorcraftMover.hpp:189
void SetSwitches(double aSimTime)
Definition WsfRotorcraftMover.cpp:916
double mLatitudeDeg
Definition WsfRotorcraftMover.hpp:226
double mFabsROC_Limit
Definition WsfRotorcraftMover.hpp:179
RotorcraftMode * mModePtr
Definition WsfRotorcraftMover.hpp:224
LocalGuidance mLocalGuidance
Definition WsfRotorcraftMover.hpp:174
UtDCM mDcmNEDtoDisk
Definition WsfRotorcraftMover.hpp:211
double MaximumAcceleration() const
Definition WsfRotorcraftMover.cpp:215
std::vector< RotorcraftMode * > mRotorcraftModeList
The mover-specific list of modes (not valid until Initialize is called).
Definition WsfRotorcraftMover.hpp:172
UtPID_Controller mNorthAccelRatePID
Definition WsfRotorcraftMover.hpp:218
bool SetLocalGuidance(double aSimTime)
Definition WsfRotorcraftMover.cpp:536
bool mIsPositionHold
Definition WsfRotorcraftMover.hpp:169
UtVec3dX mPrevVelWCS
Definition WsfRotorcraftMover.hpp:198
UtVec3dX mNetAccelNED
Definition WsfRotorcraftMover.hpp:192
double MinimumUpwardAccel() const
Definition WsfRotorcraftMover.cpp:254
double mLongitudeDeg
Definition WsfRotorcraftMover.hpp:227
UtControl::TF_1V mSouthTipFilter
Definition WsfRotorcraftMover.hpp:207
double mTimeToTgtLL
Definition WsfRotorcraftMover.hpp:236
UtVec3dX mNetAccelWCS
Definition WsfRotorcraftMover.hpp:194
UtVec3dX mDesiredAccelNED
Definition WsfRotorcraftMover.hpp:186
double mDesiredAccelUp
Definition WsfRotorcraftMover.hpp:184
double MaximumGroundSpeed() const
Definition WsfRotorcraftMover.cpp:202
UtDCM mDcmWCStoNED
Definition WsfRotorcraftMover.hpp:210
virtual bool Unpause(double aSimTime, bool aInterrupt)
Definition WsfRouteMover.cpp:1451
bool Initialize2(double aSimTime) override
Definition WsfRouteMover.cpp:227
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
A derived guidance class used by WsfMovers that follow WsfWaypoints.
Definition WsfWaypointPathGuidance.hpp:25
TurnDirection
Turn direction for TurnToHeading and TurnToRelativeHeading.
Definition WsfPath.hpp:88
Definition WsfRotorcraftMover.hpp:121
double mTargetLatitude
Definition WsfRotorcraftMover.hpp:127
bool mLatLonIsValid
Definition WsfRotorcraftMover.hpp:133
double mTargetAltitude
Definition WsfRotorcraftMover.hpp:130
double mTargetCourseRad
Definition WsfRotorcraftMover.hpp:125
bool mCmdSpeedIsZero
Definition WsfRotorcraftMover.hpp:134
double mTargetGroundSpeed
Definition WsfRotorcraftMover.hpp:124
double mTargetLongitude
Definition WsfRotorcraftMover.hpp:128
LocalGuidance()
Definition WsfRotorcraftMover.cpp:1034
double mTargetHeadingRad
Definition WsfRotorcraftMover.hpp:131
Copyrights Multiple, All Rights Reserved