WSF
WsfSixDOF_KinematicState.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 2020 Infoscitex, a DCS 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#ifndef WSFSIXDOFKINEMATICSTATE_HPP
13#define WSFSIXDOFKINEMATICSTATE_HPP
14
15#include "wsf_six_dof_export.h"
16
17#include <cstdint>
18
19#include "UtCentralBody.hpp"
20#include "UtDCM.hpp"
21#include "UtEntity.hpp"
22#include "UtLLAPos.hpp"
23#include "UtVec3dX.hpp"
24#include "WsfSixDOF_Utils.hpp"
25
26namespace wsf
27{
28namespace six_dof
29{
30class Environment;
31
32// KinematicState provides a collection of state data for Objects.
33class WSF_SIX_DOF_EXPORT KinematicState
34{
35public:
36 explicit KinematicState(const Environment* aEnvironmentPtr);
37
38 // Call this to save the current values as the "last values"
39 // for later reference/recall
40 void SetTheLastValues();
41
42 // This calculates the aero state, updating internal values
43 void UpdateAeroState(const int64_t aSimTime_nanosec);
44
45 // These are the last delta angles calculated during a state update.
46 // They are needed by the PilotController object and the Mover
47 // will call this function to get them to pass the PilotController.
48 void GetAngleDeltas(double& aDeltaYaw_rad, double& aDeltaPitch_rad, double& aDeltaRoll_rad) const;
49 void SetAngleDeltas(double aDeltaYaw_rad, double aDeltaPitch_rad, double aDeltaRoll_rad);
50
51 // This is used (in testing) to remove any alpha. It is used for tests
52 // involving ballistic motion with automatic/perfect "weather-vane" effect.
54
55 // This returns the current angle of attack (alpha) in degrees
56 double GetAlpha_deg() const;
57
58 // This returns the current angle of attack (alpha) in radians
59 double GetAlpha_rad() const;
60
61 // This returns the current angle of sideslip (beta) in degrees
62 double GetBeta_deg() const;
63
64 // This returns the current angle of sideslip (beta) in radians
65 double GetBeta_rad() const;
66
67 // This returns the current angle of attack rate (alpha-dot) in degrees/sec
68 double GetAlphaDot_dps() const;
69
70 // This returns the current angle of attack rate (alpha-dot) in radians/sec
71 double GetAlphaDot_rps() const;
72
73 // This returns the current angle of sideslip rate (beta-dot) in degrees/sec
74 double GetBetaDot_dps() const;
75
76 // This returns the current angle of sideslip rate (beta-dot) in radians/sec
77 double GetBetaDot_rps() const;
78
79 // This sets alpha-dot and beta-dot value to zero (used in testing)
81
82 // This returns the current DCM (direction cosine matrix)
83 UtDCM GetDCM() const { return mDCM; }
84
85 // This sets the current DCM
86 void SetDCM(const UtDCM& aDCM) { mDCM = aDCM; }
87
88 // This returns the current LLA (lat, lon, altitude) in degrees, degrees, and meters, respectively
89 UtLLAPos GetCurrentPositionLLA() const;
90
91 // This returns the current speed in m/sec
92 double GetSpeed_mps() const;
93
94 // This returns the current speed in ft/sec
95 double GetSpeed_fps() const;
96
97 // This returns the current speed in KTAS (knots true airspeed)
98 double GetSpeed_ktas() const;
99
100 // This returns the current speed in KIAS/KCAS (knots indicated/calibrated airspeed)
101 double GetSpeed_kias() const;
102
103 // This returns the current speed in Mach
104 double GetSpeed_Mach() const;
105
106 // This returns the current velocity (in m/sec) in the NED frame
107 UtVec3dX GetVelocityNED_mps() const;
108
109 // This returns the current local heading in degrees
110 double GetLocalHeading_deg() const { return GetLocalHeading_rad() * UtMath::cDEG_PER_RAD; }
111
112 // This returns the current local heading in radians
113 double GetLocalHeading_rad() const;
114
115 // This returns the current local pitch angle in degrees
116 double GetLocalPitch_deg() const { return GetLocalPitch_rad() * UtMath::cDEG_PER_RAD; }
117
118 // This returns the current local pitch angle in radians
119 double GetLocalPitch_rad() const;
120
121 // This returns the current local roll angle in degrees
122 double GetLocalRoll_deg() const { return GetLocalRoll_rad() * UtMath::cDEG_PER_RAD; }
123
124 // This returns the current local roll angle in radians
125 double GetLocalRoll_rad() const;
126
127 // This returns the current flight path angle in degrees
128 double GetFlightPathAngle_rad() const;
129
130 // This returns the current flight path angle in radians
131 double GetFlightPathAngle_deg() const { return GetFlightPathAngle_rad() * UtMath::cDEG_PER_RAD; }
132
133 // This returns the current flight path angle in degrees
134 double GetBearing_rad() const;
135
136 // This returns the current flight path angle in radians
137 double GetBearing_deg() const { return GetBearing_rad() * UtMath::cDEG_PER_RAD; }
138
139 // This returns the current dynamic pressure in lbs/sq-ft
141
142 // This returns the current static pressure in lbs/sq-ft
144
145 // This returns the current air density in slugs/cubic-foot
147
148 // This returns the current latitude in degrees
149 double GetLat() const;
150
151 // This returns the current longitude in degrees
152 double GetLon() const;
153
154 // This returns the current altitude in meters
155 double GetAlt_m() const;
156
157 // This returns the current altitude in feet
158 double GetAlt_ft() const;
159
160 // This sets the altitude in meters
161 void SetAlt(double aAlt_m) { mUtEntity.SetLocationLLA(GetLat(), GetLon(), aAlt_m); }
162
163 // This returns the body-relative acceleration (in gees) in the x (forward) direction
164 double GetNx_g() const;
165
166 // This returns the body-relative acceleration (in gees) in the y (right) direction
167 double GetNy_g() const;
168
169 // This returns the body-relative acceleration (in gees) in the z (down) direction
170 double GetNz_g() const;
171
172 // This returns the pitch angle (in radians) in the WCS frame
173 double GetPitchWCS() const
174 {
175 double psi;
176 double theta;
177 double phi;
178 mUtEntity.GetOrientationWCS(psi, theta, phi);
179
180 return theta;
181 }
182
183 // This returns the roll angle (in radians) in the WCS frame
184 double GetRollWCS() const
185 {
186 double psi;
187 double theta;
188 double phi;
189 mUtEntity.GetOrientationWCS(psi, theta, phi);
190
191 return phi;
192 }
193
194 // This returns the yaw angle (in radians) in the WCS frame
195 double GetYawWCS() const
196 {
197 double psi;
198 double theta;
199 double phi;
200 mUtEntity.GetOrientationWCS(psi, theta, phi);
201
202 return psi;
203 }
204
205 // This sets the yaw, pitch, and roll angles (in radians) in the WCS frame
206 void SetOrientationWCS(double aYaw_rad, double aPitch_rad, double aRoll_rad);
207
208 // This returns the yaw rate in radians/sec
209 double GetYawRate_rps() const;
210
211 // This returns the pitch rate in radians/sec
212 double GetPitchRate_rps() const;
213
214 // This returns the roll rate in radians/sec
215 double GetRollRate_rps() const;
216
217 // This returns the yaw rate in degrees/sec
218 double GetYawRate_dps() const;
219
220 // This returns the pitch rate in degrees/sec
221 double GetPitchRate_dps() const;
222
223 // This returns the roll rate in degrees/sec
224 double GetRollRate_dps() const;
225
226 // This sets the yaw rate in degrees/sec
227 void SetYawRate(double aYawRate_dps);
228
229 // This sets the pitch rate in degrees/sec
230 void SetPitchRate(double aPitchRate_dps);
231
232 // This sets the roll rate in degrees/sec
233 void SetRollRate(double aRollRate_dps);
234
235 // This returns the vertical speed in ft/minute
236 double GetVerticalSpeed_fpm() const
237 {
238 UtVec3dX velocityNED;
239 mUtEntity.GetVelocityNED(velocityNED.GetData());
240
241 // Set vertical speed
242 return -velocityNED.Z() * UtMath::cFT_PER_M * 60.0;
243 }
244
245 // This returns the last dynamic pressure in lbs/sq-ft
246 double GetLastDynamicPressure_psf() const;
247
248 // This returns the last static pressure in lbs/sq-ft
249 double GetLastStaticPressure_psf() const;
250
251 // This returns the last altitude in feet
252 double GetLastAltitudeMSL_ft() const;
253
254
255 // This provides the lift, drag, and side force vectors in body coordinates
256 void GetBodyAeroVectors(const UtDCM& aDCM,
257 const UtVec3dX& aInertialVelVector,
258 UtVec3dX& aLiftBodyVector,
259 UtVec3dX& aDragBodyVector,
260 UtVec3dX& aSideForceBodyVector) const;
261
262 // This returns true if a spherical earth model is being used
263 bool UseSphericalEarth() const { return mUseSphericalEarth; }
264
265 // This returns true if a rotating earth model is being used
266 bool UseRotatingEarth() const { return mUseRotatingEarth; }
267
268 // This returns true if the ignore jettisoned objects flag is active
270
271 // This sets the earth model to spherical
272 void SetUseSphericalEarth(bool aValue);
273
274 // This sets the earth model to rotating
275 void SetUseRotatingEarth(bool aValue) { mUseRotatingEarth = aValue; }
276
277 // This sets the state of the ignore jettisoned objects flag
278 void SetIgnoreJettisonObjects(bool aValue) { mIgnoreJettisonObjects = aValue; }
279
280 // This sets the current LLA (lat, lon, altitude) in degrees, degrees, and meters, respectively
281 void SetPositionLLA(double aLat, double aLon, double aAlt_m);
282
283 // This sets the current attitude (heading, pitch, and roll) using radians
284 void SetAttitude_rad(double aHeading_rad, double aPitch_rad, double aRoll_rad);
285
286 // This sets the current speed in feet/sec
287 void SetSpeed_fps(double aSpeed_fps, double aBearing_deg, double aFlightPathAngle_deg);
288
289 // This sets the current speed in meters/sec
290 void SetSpeed_mps(double aSpeed_mps, double aBearing_deg, double aFlightPathAngle_deg);
291
292 // This sets the current speed in mph
293 void SetSpeed_mph(double aSpeed_mph, double aBearing_deg, double aFlightPathAngle_deg);
294
295 // This sets the current speed in KTAS (knots true airspeed)
296 void SetSpeed_ktas(double aSpeed_ktas, double aBearing_deg, double aFlightPathAngle_deg);
297
298 // This sets the current speed in KIAS/KCAS (knots indicated/calibrated airspeed)
299 void SetSpeed_kias(double aSpeed_kias, double aBearing_deg, double aFlightPathAngle_deg);
300
301 // This sets the current speed in Mach
302 void SetSpeed_Mach(double aSpeed_Mach, double aBearing_deg, double aFlightPathAngle_deg);
303
304 // This sets the body-relative accelerations in gees
305 void SetBodyAccel(double aNx_g, double aNy_g, double aNz_g);
306
307 // This sets the lift, drag, side force, thrust, and weight
308 void SetLiftDragSideForceThrustWeight(double aLift_lbs,
309 double aDrag_lbs,
310 double aSideForce_lbs,
311 double aThrust_lbs,
312 double aWgt_lbs);
313
314 // This sets the moment at the CG
315 void SetMomentAtCG(UtVec3dX aMoment_ftlbs);
316
317 // This sets the velocity in the NED frame using meters/sec
318 void SetVelocityNED(double aVelNorth_mps, double aVelEast_mps, double aVelDown_mps);
319
320 // CalculateSecondaryParameters uses WGS/spherical data
321 //
322 // mWGS84_pos, mWGS84_vel,
323 // mDCM,
324 // mOmega,
325 // mNx/mNy/mNz
326 //
327 // to calculate:
328 //
329 // mLat,mLon,mAlt_m,mRadarAlt_m
330 // mVelNorth_mps,mVelEast_mps,mVelDown_mps,
331 // mVertSpeed_fpm,
332 // mLocalHeading_deg,mLocalPitch_deg,mLocalRoll_deg,
333 // mWcsYaw_rad,mWcsPitch_rad,mWcsRoll_rad
334 // mRollRate_dps,mPitchRate_dps,mYawRate_dps
335 // mAlpha_deg,mBeta_deg
336 // mRho,mDynamicPressure_psf,mStaticPressure_psf,mMach
337 // mSpeed_ktas,mSpeed_kias
338 void CalculateSecondaryParameters();
339
340 // This calculates the great circle distance from the point at which the object was created
341 void CalcRangeSinceStart();
342
343 // This returns the last body-relative acceleration (in gees) in the x-direction
344 double GetLastNx_g() const;
345
346 // This returns the last body-relative acceleration (in gees) in the y-direction
347 double GetLastNy_g() const;
348
349 // This returns the last body-relative acceleration (in gees) in the z-direction
350 double GetLastNz_g() const;
351
352 // -------------------------------------------------------------------------
353
354 // The CalculateLLAofRelativePoint calculates the LLA of a relative point. It is
355 // typically used for ground reaction points. It uses the location and attitude of
356 // the Mover (parent) along with the relative position of the point (which
357 // is defined in body coordinates) to calculate the lat/lon/alt of the point.
358 // It also calculates the compression and rolling vectors in NED coords and returns
359 // terrain data at the point, including the normal of the terrain (in NED) and the
360 // friction multiplier. It also provides the compression of the point "into" the terrain.
361 // It returns true if data is valid.
362 static bool CalculateLLAofRelativePoint(double aTerrainElevation_m,
363 const KinematicState* aKinematicState,
364 const UtVec3dX& aBodyRelPos_m,
365 const UtVec3dX& aBodyRelCompressionVector,
366 const UtVec3dX& aBodyRelRollingVector,
367 UtVec3dX& aGearVelNED_mps,
368 double& aLat,
369 double& aLon,
370 double& aAlt_m,
371 double& aHeightAboveTerrain_m,
372 UtVec3dX& aCompressionVectorNED,
373 UtVec3dX& aRollingVectorInSurfaceNED,
374 UtVec3dX& aNormalVectorNED,
375 UtVec3dX& aSurfaceSpeedVectorNED_mps,
376 double& aFrictionMultiplier,
377 double& aCompression_m);
378
380
381 // This collection of six functions utilize the current state of the object
382
383 // Get NED vector from other reference frames
384
385 // This returns a NED vector based on a vector in body coords
386 UtVec3dX CalcNEDVecFromBodyVec(const UtVec3dX& aVecBody) const;
387
388 // This returns a NED vector based on a vector in body coords
389 UtVec3dX CalcNEDVecFromWCSVec(const UtVec3dX& aVecInertial) const;
390
391 // Get inertial vector from other reference frames
392
393 // This returns an inertial vector based on a vector in body coords
394 UtVec3dX CalcWCSVecFromBodyVec(const UtVec3dX& aVecBody) const;
395
396 // This returns an inertial vector based on a vector in NED coords
397 UtVec3dX CalcWCSVecFromNEDVec(const UtVec3dX& aVecNED) const;
398
399 // Get body vector from other reference frames
400
401 // This returns a body vector based on a vector in NED coords
402 UtVec3dX CalcBodyVecFromNEDVec(const UtVec3dX& aVecNED) const;
403
404 // This returns a body vector based on a vector in inertial coords
405 UtVec3dX CalcBodyVecFromWCSVec(const UtVec3dX& aVecInertial) const;
406
408
409 UtVec3dX GetVelocityECI() const
410 {
411 UtVec3dX vel;
412 mUtEntity.GetVelocityECI(vel.GetData());
413 return vel;
414 }
415
416 // Returns rotational rate in radians/sec
417 UtVec3dX GetOmegaBody() const { return mOmega; }
418
419 // Sets rotational rate in radians/sec
420 void SetOmegaBody(const UtVec3dX& aOmega) { mOmega = aOmega; }
421
422 // Returns rotational acceleration (omega-dot) in radians/sec^2
423 UtVec3dX GetOmegaBodyDot() const { return mOmegaDot; }
424
425 // Sets rotational acceleration (omega-dot) in radians/sec^2
426 void SetOmegaBodyDot(const UtVec3dX& aOmegaDot) { mOmegaDot = aOmegaDot; }
427
428 UtVec3dX GetLocationWCS() const
429 {
430 UtVec3dX pos;
431 mUtEntity.GetLocationWCS(pos.GetData());
432 return pos;
433 }
434 void SetLocationWCS(const UtVec3dX& aPosWCS) { mUtEntity.SetLocationWCS(aPosWCS.GetData()); }
435
436 UtVec3dX GetVelocityWCS() const
437 {
438 UtVec3dX vel;
439 mUtEntity.GetVelocityWCS(vel.GetData());
440 return vel;
441 }
442 void SetVelocityWCS(const UtVec3dX& aVelWCS) { mUtEntity.SetVelocityWCS(aVelWCS.GetData()); }
443
444 void ZeroVelocity();
445
446 // Returns rotational rate in deg/sec
447 UtVec3dX GetOmegaBodyDPS() const;
448
450 void SetStartingLatLon(double aLat, double aLon);
451 void GetStartingLatLon(double& aLat, double& aLon) const;
452
454 double GetApogee_km() const { return mApogee_km; }
455
456 void SetAccelerationWCS(const UtVec3dX& aAccelerationWCS) { mAccelerationWCS = aAccelerationWCS; }
457 UtVec3dX GetAccelerationWCS() const { return mAccelerationWCS; }
458
459 UtEntity& GetUtEntity() { return mUtEntity; }
460
461 // Returns an acceleration vector normalized to the mean radius magnitude
462 UtVec3dX NormalizedGravitationalAccelVec() const;
463
464 double GetLift() const { return mLift_lbs; } // Returns the lift in lbs
465 double GetDrag() const { return mDrag_lbs; } // Returns the drag in lbs
466 double GetSideForce() const { return mSideForce_lbs; } // Returns the side force in lbs
467 UtVec3dX GetMoment() const { return mMoment_ftlbs; } // Returns the moment vector in ft*lbs
468 double GetYawMoment() const { return mMoment_ftlbs.Z(); } // Returns the yaw moment in ft*lbs
469 double GetPitchMoment() const { return mMoment_ftlbs.Y(); } // Returns the pitch moment in ft*lbs
470 double GetRollMoment() const { return mMoment_ftlbs.X(); } // Returns the roll moment in ft*lbs
471 double GetThrust() const { return mThrust_lbs; } // Returns the thrust in lbs
472 double GetWeight() const { return mWgt_lbs; } // Returns the weight/mass in lbs
473
474 void SetLastUpdateTime(int64_t aLastUpdate_nanosec) { mLastUpdate_nanosec = aLastUpdate_nanosec; }
475
476 // This sets kinematic state parameters to a zero condition during testing
477 void ZeroKinematicsDuringTesting();
478
479protected:
480 // This flag is used to denote that a spherical earth (rather than elliptical
481 // earth) model should be used in calculations. This is often done for simple
482 // ballistic missile models.
483 bool mUseSphericalEarth = false;
484
485 // This flag is used to denote that a earth rotation should be considered in
486 // calculations. This is often done for high-fidelity ballistic missile models.
487 bool mUseRotatingEarth = false;
488
489 // This flag is used to ignore any jettisoned objects. This prevents the
490 // subobjects from becoming free -- they will be removed instead. This flag
491 // is typically used for multi-stage rockets/missile where the trajectory
492 // of spent stages is not needed.
494
496
497 UtDCM mDCM;
498 UtEntity mUtEntity;
499 UtVec3dX mOmega; // Body rates
500 UtVec3dX mOmegaDot; // Body acceleration
501
502 double mNx_g = 0.0;
503 double mNy_g = 0.0;
504 double mNz_g = 0.0;
505 double mLift_lbs = 0.0;
506 double mThrust_lbs = 0.0;
507 double mDrag_lbs = 0.0;
508 double mSideForce_lbs = 0.0;
509 double mWgt_lbs = 0.0;
511
512 double mRho_slugs_per_ft3 = 0.0; // [ ((lbf*sec^2)/ft^4) or slugs/ft^3 ]
515
516 double mRadarAlt_m = 0.0;
517
518 double mAlpha_deg = 0.0;
519 double mBeta_deg = 0.0;
520 double mAlphaDot_dps = 0.0;
521 double mBetaDot_dps = 0.0;
522
523 double mYawRate_dps = 0.0;
524 double mPitchRate_dps = 0.0;
525 double mRollRate_dps = 0.0;
526
527 double mApogee_km = 0.0;
528
530 double mStartingLat = 0.0;
531 double mStartingLon = 0.0;
533
534 double mLastNx = 0.0;
535 double mLastNy = 0.0;
536 double mLastNz = 0.0;
539 double mLastAlt_m = 0.0;
540
541 const Environment* mEnvironment = nullptr;
542
543 // These are the last delta angles calculated during an update. They
544 // are needed by the PilotController object and the Mover object will
545 // call the GetAngleDeltas() function above to get them.
546 double mDeltaYaw_rad = 0.0;
547 double mDeltaPitch_rad = 0.0;
548 double mDeltaRoll_rad = 0.0;
549
551 double mLastAlpha_deg = 0.0;
552 double mLastBeta_deg = 0.0;
553};
554
556class WSF_SIX_DOF_EXPORT SixDOF_EarthSphere : public ut::EarthEllipsoidWGS84
557{
558public:
559 static constexpr const char* GetNameId() { return "earth_sixdofsphere"; }
560 const char* GetName() const override { return GetNameId(); }
561 CentralBodyEllipsoid* Clone() const override { return new SixDOF_EarthSphere(*this); }
562 double GetSemiMajorAxis() const override { return GetMeanRadius(); }
563 double GetSemiMinorAxis() const override { return GetMeanRadius(); }
564 double GetFlatteningReciprocal() const override { return ut::CentralBodyEllipsoid::GetFlatteningReciprocal(); }
565 double GetFirstEccentricitySquared() const override { return 0.0; }
566 double GetSecondEccentricitySquared() const override { return 0.0; }
567};
568
569class WSF_SIX_DOF_EXPORT SixDOF_SphericalEarth : public ut::EarthCentralBody
570{
571public:
573 : EarthCentralBody(SixDOF_EarthSphere())
574 {
575 }
576
577 CentralBody* Clone() const override { return new SixDOF_SphericalEarth(*this); }
578 static constexpr const char* GetNameId() { return SixDOF_EarthSphere::GetNameId(); }
579};
580} // namespace six_dof
581} // namespace wsf
582
583#endif
UtVec3d pos
Definition WsfScriptTrackClass.cpp:1881
UtVec3d vel
Definition WsfScriptTrackClass.cpp:1881
Definition WsfSixDOF_Environment.hpp:30
Definition WsfSixDOF_KinematicState.hpp:34
double GetLat() const
Definition WsfSixDOF_KinematicState.cpp:454
void SetAlphaBetaDotToZero()
Definition WsfSixDOF_KinematicState.cpp:339
UtEntity mUtEntity
Definition WsfSixDOF_KinematicState.hpp:498
double mAlphaDot_dps
Definition WsfSixDOF_KinematicState.hpp:520
double mThrust_lbs
Definition WsfSixDOF_KinematicState.hpp:506
double mWgt_lbs
Definition WsfSixDOF_KinematicState.hpp:509
UtEntity & GetUtEntity()
Definition WsfSixDOF_KinematicState.hpp:459
double GetThrust() const
Definition WsfSixDOF_KinematicState.hpp:471
double mLastNy
Definition WsfSixDOF_KinematicState.hpp:535
double GetLocalRoll_deg() const
Definition WsfSixDOF_KinematicState.hpp:122
double GetLocalRoll_rad() const
Definition WsfSixDOF_KinematicState.cpp:381
UtVec3dX mAccelerationWCS
Definition WsfSixDOF_KinematicState.hpp:495
double mRadarAlt_m
Definition WsfSixDOF_KinematicState.hpp:516
double mSideForce_lbs
Definition WsfSixDOF_KinematicState.hpp:508
double mLift_lbs
Definition WsfSixDOF_KinematicState.hpp:505
void SetOmegaBodyDot(const UtVec3dX &aOmegaDot)
Definition WsfSixDOF_KinematicState.hpp:426
bool mIgnoreJettisonObjects
Definition WsfSixDOF_KinematicState.hpp:493
UtVec3dX GetAccelerationWCS() const
Definition WsfSixDOF_KinematicState.hpp:457
double mDeltaYaw_rad
Definition WsfSixDOF_KinematicState.hpp:546
void SetIgnoreJettisonObjects(bool aValue)
Definition WsfSixDOF_KinematicState.hpp:278
double mYawRate_dps
Definition WsfSixDOF_KinematicState.hpp:523
double GetRangeSinceStart_km() const
Definition WsfSixDOF_KinematicState.hpp:453
double GetApogee_km() const
Definition WsfSixDOF_KinematicState.hpp:454
double mAlpha_deg
Definition WsfSixDOF_KinematicState.hpp:518
double mBetaDot_dps
Definition WsfSixDOF_KinematicState.hpp:521
UtVec3dX mMoment_ftlbs
Definition WsfSixDOF_KinematicState.hpp:510
bool UseSphericalEarth() const
Definition WsfSixDOF_KinematicState.hpp:263
double GetLocalHeading_rad() const
Definition WsfSixDOF_KinematicState.cpp:359
int64_t mLastUpdate_nanosec
Definition WsfSixDOF_KinematicState.hpp:550
const Environment * mEnvironment
Definition WsfSixDOF_KinematicState.hpp:541
double GetRollWCS() const
Definition WsfSixDOF_KinematicState.hpp:184
double GetAlpha_rad() const
Definition WsfSixDOF_KinematicState.cpp:304
double GetAlphaDot_dps() const
Definition WsfSixDOF_KinematicState.cpp:319
double GetAlphaDot_rps() const
Definition WsfSixDOF_KinematicState.cpp:324
bool IgnoreJettisonObjects() const
Definition WsfSixDOF_KinematicState.hpp:269
double GetLift() const
Definition WsfSixDOF_KinematicState.hpp:464
double GetVerticalSpeed_fpm() const
Definition WsfSixDOF_KinematicState.hpp:236
double GetFlightPathAngle_rad() const
Definition WsfSixDOF_KinematicState.cpp:392
double mLastAlpha_deg
Definition WsfSixDOF_KinematicState.hpp:551
void SetAngleDeltas(double aDeltaYaw_rad, double aDeltaPitch_rad, double aDeltaRoll_rad)
Definition WsfSixDOF_KinematicState.cpp:724
UtDCM mDCM
Definition WsfSixDOF_KinematicState.hpp:497
double mNy_g
Definition WsfSixDOF_KinematicState.hpp:503
double GetLocalPitch_rad() const
Definition WsfSixDOF_KinematicState.cpp:370
double mNz_g
Definition WsfSixDOF_KinematicState.hpp:504
double GetBearing_rad() const
Definition WsfSixDOF_KinematicState.cpp:428
UtVec3dX mOmega
Definition WsfSixDOF_KinematicState.hpp:499
void SetDCM(const UtDCM &aDCM)
Definition WsfSixDOF_KinematicState.hpp:86
void RemoveAlphaForTesting()
Definition WsfSixDOF_KinematicState.cpp:731
double mLastBeta_deg
Definition WsfSixDOF_KinematicState.hpp:552
double mApogee_km
Definition WsfSixDOF_KinematicState.hpp:527
UtDCM GetDCM() const
Definition WsfSixDOF_KinematicState.hpp:83
double GetAlpha_deg() const
Definition WsfSixDOF_KinematicState.cpp:299
double mLastNx
Definition WsfSixDOF_KinematicState.hpp:534
double mBeta_deg
Definition WsfSixDOF_KinematicState.hpp:519
double GetBetaDot_dps() const
Definition WsfSixDOF_KinematicState.cpp:329
bool UseRotatingEarth() const
Definition WsfSixDOF_KinematicState.hpp:266
double GetYawMoment() const
Definition WsfSixDOF_KinematicState.hpp:468
double GetDrag() const
Definition WsfSixDOF_KinematicState.hpp:465
double GetBeta_rad() const
Definition WsfSixDOF_KinematicState.cpp:309
double GetDynamicPressure_psf() const
Definition WsfSixDOF_KinematicState.hpp:140
void UpdateAeroState(const int64_t aSimTime_nanosec)
Definition WsfSixDOF_KinematicState.cpp:664
double GetStaticPressure_psf() const
Definition WsfSixDOF_KinematicState.hpp:143
double GetPitchWCS() const
Definition WsfSixDOF_KinematicState.hpp:173
double GetBeta_deg() const
Definition WsfSixDOF_KinematicState.cpp:314
UtVec3dX GetVelocityWCS() const
Definition WsfSixDOF_KinematicState.hpp:436
double mStaticPressure_psf
Definition WsfSixDOF_KinematicState.hpp:514
UtVec3dX GetOmegaBodyDot() const
Definition WsfSixDOF_KinematicState.hpp:423
double mPitchRate_dps
Definition WsfSixDOF_KinematicState.hpp:524
double mLastStaticPressure_psf
Definition WsfSixDOF_KinematicState.hpp:538
double mLastNz
Definition WsfSixDOF_KinematicState.hpp:536
UtVec3dX GetVelocityECI() const
Definition WsfSixDOF_KinematicState.hpp:409
UtVec3dX mOmegaDot
Definition WsfSixDOF_KinematicState.hpp:500
bool mUseRotatingEarth
Definition WsfSixDOF_KinematicState.hpp:487
double GetLocalPitch_deg() const
Definition WsfSixDOF_KinematicState.hpp:116
double GetLocalHeading_deg() const
Definition WsfSixDOF_KinematicState.hpp:110
UtVec3dX GetLocationWCS() const
Definition WsfSixDOF_KinematicState.hpp:428
void SetAccelerationWCS(const UtVec3dX &aAccelerationWCS)
Definition WsfSixDOF_KinematicState.hpp:456
void SetTheLastValues()
Definition WsfSixDOF_KinematicState.cpp:244
double GetFlightPathAngle_deg() const
Definition WsfSixDOF_KinematicState.hpp:131
double GetWeight() const
Definition WsfSixDOF_KinematicState.hpp:472
double mDynamicPressure_psf
Definition WsfSixDOF_KinematicState.hpp:513
void SetLastUpdateTime(int64_t aLastUpdate_nanosec)
Definition WsfSixDOF_KinematicState.hpp:474
void GetAngleDeltas(double &aDeltaYaw_rad, double &aDeltaPitch_rad, double &aDeltaRoll_rad) const
Definition WsfSixDOF_KinematicState.cpp:717
UtVec3dX GetMoment() const
Definition WsfSixDOF_KinematicState.hpp:467
void SetVelocityWCS(const UtVec3dX &aVelWCS)
Definition WsfSixDOF_KinematicState.hpp:442
double mDrag_lbs
Definition WsfSixDOF_KinematicState.hpp:507
double mDeltaRoll_rad
Definition WsfSixDOF_KinematicState.hpp:548
bool mUseSphericalEarth
Definition WsfSixDOF_KinematicState.hpp:483
double GetRollMoment() const
Definition WsfSixDOF_KinematicState.hpp:470
void SetAlt(double aAlt_m)
Definition WsfSixDOF_KinematicState.hpp:161
double GetLon() const
Definition WsfSixDOF_KinematicState.cpp:464
double mNx_g
Definition WsfSixDOF_KinematicState.hpp:502
double GetSideForce() const
Definition WsfSixDOF_KinematicState.hpp:466
double GetBearing_deg() const
Definition WsfSixDOF_KinematicState.hpp:137
double GetBetaDot_rps() const
Definition WsfSixDOF_KinematicState.cpp:334
bool StartingLocationInitialized() const
Definition WsfSixDOF_KinematicState.hpp:449
double GetPitchMoment() const
Definition WsfSixDOF_KinematicState.hpp:469
void SetUseRotatingEarth(bool aValue)
Definition WsfSixDOF_KinematicState.hpp:275
double mStartingLon
Definition WsfSixDOF_KinematicState.hpp:531
double mLastAlt_m
Definition WsfSixDOF_KinematicState.hpp:539
double mRangeSinceStart_km
Definition WsfSixDOF_KinematicState.hpp:529
double mRho_slugs_per_ft3
Definition WsfSixDOF_KinematicState.hpp:512
UtVec3dX GetOmegaBody() const
Definition WsfSixDOF_KinematicState.hpp:417
KinematicState(const Environment *aEnvironmentPtr)
Definition WsfSixDOF_KinematicState.cpp:20
double mLastDynamicPressure_psf
Definition WsfSixDOF_KinematicState.hpp:537
double mRollRate_dps
Definition WsfSixDOF_KinematicState.hpp:525
void SetOmegaBody(const UtVec3dX &aOmega)
Definition WsfSixDOF_KinematicState.hpp:420
double mStartingLat
Definition WsfSixDOF_KinematicState.hpp:530
void SetLocationWCS(const UtVec3dX &aPosWCS)
Definition WsfSixDOF_KinematicState.hpp:434
double GetYawWCS() const
Definition WsfSixDOF_KinematicState.hpp:195
double GetAirDensity_slugs_per_ft3() const
Definition WsfSixDOF_KinematicState.hpp:146
double mDeltaPitch_rad
Definition WsfSixDOF_KinematicState.hpp:547
bool mStartingLocationInitialized
Definition WsfSixDOF_KinematicState.hpp:532
Definition for spherical Earth, based on WGS-84 ellipsoid.
Definition WsfSixDOF_KinematicState.hpp:557
double GetFirstEccentricitySquared() const override
Definition WsfSixDOF_KinematicState.hpp:565
double GetSemiMinorAxis() const override
Definition WsfSixDOF_KinematicState.hpp:563
const char * GetName() const override
Definition WsfSixDOF_KinematicState.hpp:560
double GetSecondEccentricitySquared() const override
Definition WsfSixDOF_KinematicState.hpp:566
CentralBodyEllipsoid * Clone() const override
Definition WsfSixDOF_KinematicState.hpp:561
double GetFlatteningReciprocal() const override
Definition WsfSixDOF_KinematicState.hpp:564
static constexpr const char * GetNameId()
Definition WsfSixDOF_KinematicState.hpp:559
double GetSemiMajorAxis() const override
Definition WsfSixDOF_KinematicState.hpp:562
SixDOF_SphericalEarth()
Definition WsfSixDOF_KinematicState.hpp:572
CentralBody * Clone() const override
Definition WsfSixDOF_KinematicState.hpp:577
static constexpr const char * GetNameId()
Definition WsfSixDOF_KinematicState.hpp:578
Definition WsfSA_Processor.hpp:35
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved