WSF
WsfEM_Antenna.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 WSFEM_ANTENNA_HPP
16#define WSFEM_ANTENNA_HPP
17
18#include "wsf_export.h"
19
20#include <memory>
21
22#include "UtCloneablePtr.hpp"
23
24class UtInput;
25#include "UtScriptAccessible.hpp"
27class WsfEM_XmtrRcvr;
28class WsfFieldOfView;
29class WsfPlatform;
31
48class WSF_EXPORT WsfEM_Antenna : public UtScriptAccessible, public WsfSinglePlatformObserver
49{
50public:
53 {
54 cSCAN_FIXED = 0, //<! The beam is fixed
55 cSCAN_AZ = 1, //<! The beam scans only is azimuth
56 cSCAN_EL = 2, //<! The beam scans only in elevation
57 cSCAN_AZ_EL = 3 //<! The beam can scan in both azimuth and elevation
58 };
59
68
77
78
80 WsfEM_Antenna(const WsfEM_Antenna& aSrc);
81 WsfEM_Antenna& operator=(const WsfEM_Antenna& aRhs);
82 ~WsfEM_Antenna() override;
83
85
86 WsfPlatform* GetPlatform() const;
87
88 virtual bool Initialize(WsfArticulatedPart* aArticulatedPartPtr);
89
90 virtual bool ProcessInput(UtInput& aInput);
91
92 virtual void UpdatePosition(double aSimTime);
93
94 const char* GetScriptClassName() const override { return "WsfEM_Antenna"; }
95
97
98
106 double GetHeight() const { return -mOffset[2]; }
107
108 void SetHeight(double aHeight);
109
115 double GetPitch() const { return mPitch; }
116
117 void SetPitch(double aPitch);
118
119 void SetFieldOfView(std::unique_ptr<WsfFieldOfView> aFieldOfViewPtr);
120
122 void GetAzimuthFieldOfView(double& aMinAzFOV, double& aMaxAzFOV) const;
123
124 void SetAzimuthFieldOfView(double aMinAzFOV, double aMaxAzFOV);
125
127 void GetElevationFieldOfView(double& aMinElFOV, double& aMaxElFOV) const;
128
129 void SetElevationFieldOfView(double aMinElFOV, double aMaxElFOV);
130
132 void GetRangeLimits(double& aMinRange, double& aMaxRange) const
133 {
134 aMinRange = mMinRange;
135 aMaxRange = mMaxRange;
136 }
137
139 double GetMaximumRange() const { return mMaxRange; }
140
142 double GetMinimumRange() const { return mMinRange; }
143
144 void SetRangeLimits(double aMinRange, double aMaxRange);
145
146 void SetMaximumRange(double aMaxRange) { mMaxRange = aMaxRange; }
147
148 void SetMinimumRange(double aMinRange) { mMinRange = aMinRange; }
149
151 void GetAltitudeLimits(double& aMinAlt, double& aMaxAlt) const
152 {
153 aMinAlt = mMinAlt;
154 aMaxAlt = mMaxAlt;
155 }
156
158 double GetMaximumAltitude() const { return mMaxAlt; }
159
161 double GetMinimumAltitude() const { return mMinAlt; }
162
163 void SetAltitudeLimits(double aMinAlt, double aMaxAlt);
164
165 void SetMaximumAltitude(double aMaxAltitude) { mMaxAlt = aMaxAltitude; }
166
167 void SetMinimumAltitude(double aMinAltitude) { mMinAlt = aMinAltitude; }
168
170 EBS_Mode GetEBS_Mode() const { return mEBS_Mode; }
171
173 void SetEBS_Mode(EBS_Mode aEBS_Mode) { mEBS_Mode = aEBS_Mode; }
174
177
180
182 void SetEBS_AzLossExponent(double aEBS_LossExponentAz) { mEBS_AzLossExponent = aEBS_LossExponentAz; }
183
185 void SetEBS_ElLossExponent(double aEBS_LossExponentEl) { mEBS_ElLossExponent = aEBS_LossExponentEl; }
186
193
195 void SetEBS_AzCosSteeringLimit(double aEBS_AzCosSteeringLimit) { mEBS_AzCosSteeringLimit = aEBS_AzCosSteeringLimit; }
197 void SetEBS_ElCosSteeringLimit(double aEBS_ElCosSteeringLimit) { mEBS_ElCosSteeringLimit = aEBS_ElCosSteeringLimit; }
198
200 ScanMode GetScanMode() const { return mScanMode; }
201
203 void SetScanMode(ScanMode aScanMode) { mScanMode = aScanMode; }
204
207
209 void SetScanStabilization(ScanStabilization aScanStabilization) { mScanStabilization = aScanStabilization; }
210
212 void GetAzimuthScanLimits(double& aMinAzScan, double& aMaxAzScan) const
213 {
214 aMinAzScan = mMinAzScan;
215 aMaxAzScan = mMaxAzScan;
216 }
217
219 double GetMinimumAzimuthScanLimit() const { return mMinAzScan; }
220
222 double GetMaximumAzimuthScanLimit() const { return mMaxAzScan; }
223
224 void SetAzimuthScanLimits(double aMinAzScan, double aMaxAzScan);
225
226 void SetMaximumAzimuthScanLimit(double aMaxAzScan) { mMaxAzScan = aMaxAzScan; }
227 void SetMinimumAzimuthScanLimit(double aMinAzScan) { mMinAzScan = aMinAzScan; }
228
230 void GetElevationScanLimits(double& aMinElScan, double& aMaxElScan) const
231 {
232 aMinElScan = mMinElScan;
233 aMaxElScan = mMaxElScan;
234 }
235
237 double GetMinimumElevationScanLimit() const { return mMinElScan; }
238
240 double GetMaximumElevationScanLimit() const { return mMaxElScan; }
241
242 void SetElevationScanLimits(double aMinElScan, double aMaxElScan);
243
244 void SetMaximumElevationScanLimit(double aMaxElScan) { mMaxElScan = aMaxElScan; }
245 void SetMinimumElevationScanLimit(double aMinElScan) { mMinElScan = aMinElScan; }
246
248
251
252
253 void ComputeAspect(const double aThisToTgtLocWCS[3], double& aThisToTgtAz, double& aThisToTgtEl);
254
255 void ComputeBeamAspect(const double aWCS_ToBeamTransform[3][3],
256 const double aThisToTgtWCS[3],
257 double& aBeamToTgtAz,
258 double& aBeamToTgtEl) const;
259
260 void ComputeBeamPosition(WsfEM_XmtrRcvr* aXmtrRcvrPtr,
261 double aThisToTgtAz,
262 double aThisToTgtEl,
263 double aWCS_ToBeamTransform[3][3],
264 double& aEBS_Az,
265 double& aEBS_El);
266
267 double ComputeBeamSteeringLoss(double aEBS_Az, double aEBS_El);
268
269 void ConvertWCS_ToACS(const double aLocationWCS[3], double aLocationACS[3]);
270
271 void ConvertWCS_ToNED(const double aLocationWCS[3], double aLocationNED[3]);
272
273 void ConvertNED_ToWCS(const double aLocationNED[3], double aLocationWCS[3]);
274
275 void ConvertWCS_VectorToACS(const double aVectorWCS[3], double aVectorACS[3]);
276
277 void ConvertWCS_VectorToNED(const double aVectorWCS[3], double aVectorNED[3]);
278
279 void ConvertNED_VectorToWCS(const double aVectorNED[3], double aVectorWCS[3]);
280
281 void GetLocationLLA(double& aLat, double& aLon, double& aAlt);
282
283 void GetLocationWCS(double aLocationWCS[3]);
284
285 void GetLocationWCS(const double aThisToTgtLocWCS[3], double aTgtLocWCS[3]);
286
287 void GetRelativeLocationNED(WsfPlatform* aTargetPtr, double aLocationNED[3]);
288
289 void GetRelativeLocationNED(const double aTgtLocWCS[3], double aLocationNED[3]);
290
291 void GetRelativeLocationWCS(double aThisToTgtAz, double aThisToTgtEl, double aThisToTgtRange, double aThisToTgtLocWCS[3]);
292
293 void GetRelativeLocationWCS(const double aTgtLocWCS[3], double aThisToTgtLocWCS[3]);
294
295 void GetRelativeLocationWCS(WsfPlatform* aTargetPtr, double aThisToTgtLocWCS[3]);
296
298
300
301
302 bool WithinAltitude(double aTgtAlt);
303
304 bool WithinFieldOfView(double aThisToTgtAz, double aThisToTgtEl);
305
306 bool WithinFieldOfView(WsfPlatform* aTargetPtr,
307 double aEarthRadiusMultiplier,
308 double& aTrueThisToTgtAz,
309 double& aTrueThisToTgtEl,
310 double aApparentThisToTgtLocWCS[3],
311 double& aApparentThisToTgtAz,
312 double& aApparentThisToTgtEl,
313 double aApparentTgtToThisLocWCS[3]);
314
315 bool WithinFieldOfView(WsfArticulatedPart* aTargetPtr,
316 double aEarthRadiusMultiplier,
317 double& aTrueThisToTgtAz,
318 double& aTrueThisToTgtEl,
319 double aApparentThisToTgtLocWCS[3],
320 double& aApparentThisToTgtAz,
321 double& aApparentThisToTgtEl,
322 double aApparentTgtToThisLocWCS[3]);
323
324 bool WithinFieldOfView(double aTgtLocWCS[3],
325 double aEarthRadiusMultiplier,
326 double& aTrueThisToTgtAz,
327 double& aTrueThisToTgtEl,
328 double aApparentThisToTgtLocWCS[3],
329 double& aApparentThisToTgtAz,
330 double& aApparentThisToTgtEl,
331 double aApparentTgtToThisLocWCS[3]);
332
335
338 // during simulation.
340
344 bool WithinRange(double aTgtRange) const { return ((aTgtRange >= mMinRange) && (aTgtRange <= mMaxRange)); }
346
347protected:
348 void ConvertAnglesFromPCS_ToSSCS(double& aAz, double& aEl);
349 void ConvertAnglesFromSSCS_ToPCS(double& aAz, double& aEl);
350 void OnPlatformUpdated(double aSimTime, WsfPlatform* aPlatformPtr) override;
351 void UpdateLocationLLA();
352 void UpdateLocationWCS();
353 void UpdateWCS_ToACS_Transform();
354 void UpdateWCS_ToNED_Transform();
355 void UpdateWCS_ToSSCS_Transform();
356
358
360 double mOffset[3];
361
363 double mPitch;
364
367
370
374
378
381
383
384
388 double mMinAzScan; // radians
389 double mMaxAzScan; // radians
390 double mMinElScan; // radians
391 double mMaxElScan; // radians
393
397
398 ut::CloneablePtr<WsfFieldOfView> mFieldOfViewPtr;
399
402
403 double mMinRange; // meters
404 double mMaxRange; // meters
405 double mMinAlt; // meters
406 double mMaxAlt; // meters
408
411
412
413 double mLocationWCS[3];
414
416 double mOffsetWCS[3];
417 double mLat;
418 double mLon;
419 double mAlt;
420
422 double mPartYaw;
424 double mPartRoll;
425
434
439
445};
446
447#endif
aObjectPtr GetLocationLLA(lla[0], lla[1], lla[2])
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfArticulatedPart.hpp:36
Definition WsfEM_Antenna.hpp:49
void IndicateNondefaultFieldOfView()
Definition WsfEM_Antenna.hpp:339
WsfArticulatedPart * GetArticulatedPart() const
Definition WsfEM_Antenna.hpp:84
void GetRangeLimits(double &aMinRange, double &aMaxRange) const
Get the range limits.
Definition WsfEM_Antenna.hpp:132
double mMinAlt
Definition WsfEM_Antenna.hpp:405
double GetEBS_ElCosSteeringLimit() const
Definition WsfEM_Antenna.hpp:192
const WsfFieldOfView * GetFieldOfView() const
Definition WsfEM_Antenna.hpp:333
double mEBS_ElLossExponent
Definition WsfEM_Antenna.hpp:377
bool mWCS_ToACS_TransformIsValid
Definition WsfEM_Antenna.hpp:441
ScanStabilization mScanStabilization
The degrees-of-freedom for scan-stabilization.
Definition WsfEM_Antenna.hpp:387
void GetElevationScanLimits(double &aMinElScan, double &aMaxElScan) const
Get the elevation scan limits.
Definition WsfEM_Antenna.hpp:230
void SetScanMode(ScanMode aScanMode)
Set the beam scanning mode.
Definition WsfEM_Antenna.hpp:203
double mMaxAlt
Definition WsfEM_Antenna.hpp:406
double mPartPitch
Definition WsfEM_Antenna.hpp:423
void SetEBS_Mode(EBS_Mode aEBS_Mode)
Set the electronic beam steering capabilities.
Definition WsfEM_Antenna.hpp:173
double GetHeight() const
Definition WsfEM_Antenna.hpp:106
double mMaxElScan
Definition WsfEM_Antenna.hpp:391
double GetEBS_AzLossExponent() const
Get the azimuth specific steering loss exponent.
Definition WsfEM_Antenna.hpp:176
EBS_Mode mEBS_Mode
The degrees-of-freedom for electronic beam steering.
Definition WsfEM_Antenna.hpp:380
double mPartYaw
Used to determine if the uncued articulated part orientation has changed.
Definition WsfEM_Antenna.hpp:422
double GetMinimumAzimuthScanLimit() const
Return the minimum azimuth scan limit.
Definition WsfEM_Antenna.hpp:219
double mEBS_AzCosSteeringLimit
the cosine of the maximum electronic beam steering angle in azimuth.
Definition WsfEM_Antenna.hpp:366
double mLat
Definition WsfEM_Antenna.hpp:417
double GetEBS_AzCosSteeringLimit() const
Definition WsfEM_Antenna.hpp:189
double mMinElScan
Definition WsfEM_Antenna.hpp:390
double mEBS_ElCosSteeringLimit
the cosine of the maximum electronic beam steering angle in elevation.
Definition WsfEM_Antenna.hpp:369
double GetEBS_ElLossExponent() const
Get the elevation specific steering loss exponent.
Definition WsfEM_Antenna.hpp:179
ScanMode GetScanMode() const
Get the beam scanning mode.
Definition WsfEM_Antenna.hpp:200
double mOffsetWCS[3]
The WCS vector from the articulated part to the antenna.
Definition WsfEM_Antenna.hpp:416
double mMaxAzScan
Definition WsfEM_Antenna.hpp:389
bool mWCS_ToSSCS_TransformIsValid
Definition WsfEM_Antenna.hpp:443
double mPartRoll
Definition WsfEM_Antenna.hpp:424
ut::CloneablePtr< WsfFieldOfView > mFieldOfViewPtr
Definition WsfEM_Antenna.hpp:398
ScanStabilization
The scan stabilization indicates in which axes scan stabilization is performed.
Definition WsfEM_Antenna.hpp:71
@ cSS_ROLL
Scan is stabilized in roll.
Definition WsfEM_Antenna.hpp:74
@ cSS_PITCH
Scan is stabilized in pitch.
Definition WsfEM_Antenna.hpp:73
@ cSS_NONE
Scan is not stabilization.
Definition WsfEM_Antenna.hpp:72
@ cSS_BOTH
Scan is stabilized in pitch and roll.
Definition WsfEM_Antenna.hpp:75
EBS_Mode
Electronic beam steering capabilities.
Definition WsfEM_Antenna.hpp:62
@ cEBS_NONE
No electronic beam steering.
Definition WsfEM_Antenna.hpp:63
@ cEBS_ELEVATION
Electronic beam steering in elevation.
Definition WsfEM_Antenna.hpp:65
@ cEBS_BOTH
Electronic beam steering in azimuth and elevation.
Definition WsfEM_Antenna.hpp:66
@ cEBS_AZIMUTH
Electronic beam steering in azimuth.
Definition WsfEM_Antenna.hpp:64
double GetMaximumAzimuthScanLimit() const
Return the maximum azimuth scan limit.
Definition WsfEM_Antenna.hpp:222
ScanMode
The scan mode indicates how the beam scans within the field of view.
Definition WsfEM_Antenna.hpp:53
@ cSCAN_AZ
Definition WsfEM_Antenna.hpp:55
@ cSCAN_AZ_EL
Definition WsfEM_Antenna.hpp:57
@ cSCAN_EL
Definition WsfEM_Antenna.hpp:56
@ cSCAN_FIXED
Definition WsfEM_Antenna.hpp:54
double mEBS_AzLossExponent
Definition WsfEM_Antenna.hpp:373
bool WithinRange(double aTgtRange) const
Definition WsfEM_Antenna.hpp:344
void SetMinimumRange(double aMinRange)
Definition WsfEM_Antenna.hpp:148
double GetPitch() const
Definition WsfEM_Antenna.hpp:115
void SetMinimumAzimuthScanLimit(double aMinAzScan)
Definition WsfEM_Antenna.hpp:227
bool mLocationLLA_IsValid
'true' if the antenna LLA values are valid.
Definition WsfEM_Antenna.hpp:438
void GetAzimuthScanLimits(double &aMinAzScan, double &aMaxAzScan) const
Get the azimuth scan limits.
Definition WsfEM_Antenna.hpp:212
double mMinAzScan
Definition WsfEM_Antenna.hpp:388
bool mLocationWCS_IsValid
'true' if the antenna WCS location/offset values are valid.
Definition WsfEM_Antenna.hpp:436
double GetMinimumRange() const
Return the minimum range.
Definition WsfEM_Antenna.hpp:142
double mLon
Definition WsfEM_Antenna.hpp:418
void SetMaximumAltitude(double aMaxAltitude)
Definition WsfEM_Antenna.hpp:165
WsfEM_Antenna()
Definition WsfEM_Antenna.cpp:36
void SetMaximumRange(double aMaxRange)
Definition WsfEM_Antenna.hpp:146
bool DefaultFieldOfView() const
Definition WsfEM_Antenna.hpp:334
double mMaxRange
Definition WsfEM_Antenna.hpp:404
double mAlt
Definition WsfEM_Antenna.hpp:419
double GetMaximumRange() const
Return the maximum range.
Definition WsfEM_Antenna.hpp:139
bool mECS_ToACS_TransformIsValid
Definition WsfEM_Antenna.hpp:440
double mWCS_ToSSCS_Transform[3][3]
The transformation from WCS to the stabilized-scan coordinate system (SSCS).
Definition WsfEM_Antenna.hpp:433
WsfArticulatedPart * mArticulatedPartPtr
Definition WsfEM_Antenna.hpp:357
void SetEBS_ElLossExponent(double aEBS_LossExponentEl)
Set the electronic beam steering exponent specific to elevation dropoff.
Definition WsfEM_Antenna.hpp:185
double GetMinimumAltitude() const
Return the minimum altitude.
Definition WsfEM_Antenna.hpp:161
double mMinRange
Definition WsfEM_Antenna.hpp:403
void SetMinimumElevationScanLimit(double aMinElScan)
Definition WsfEM_Antenna.hpp:245
bool mDefaultFieldOfView
Indicates that the used field of view is unaltered from the default state (360 az x 180 el).
Definition WsfEM_Antenna.hpp:401
ScanMode mScanMode
The degrees-of-freedom for scanning.
Definition WsfEM_Antenna.hpp:385
double GetMinimumElevationScanLimit() const
Return the minimum elevation scan limit.
Definition WsfEM_Antenna.hpp:237
EBS_Mode GetEBS_Mode() const
Get the electronic beam steering capabilities.
Definition WsfEM_Antenna.hpp:170
void SetEBS_ElCosSteeringLimit(double aEBS_ElCosSteeringLimit)
Set the electronic beam steering cosine steering limit in elevation.
Definition WsfEM_Antenna.hpp:197
void SetMaximumElevationScanLimit(double aMaxElScan)
Definition WsfEM_Antenna.hpp:244
ScanStabilization GetScanStabilization() const
Get the scan stabilization mode.
Definition WsfEM_Antenna.hpp:206
double mPitch
The pitch (tilt) angle of the antenna relative to the articulated part.
Definition WsfEM_Antenna.hpp:363
double GetMaximumAltitude() const
Return the maximum altitude.
Definition WsfEM_Antenna.hpp:158
void GetAltitudeLimits(double &aMinAlt, double &aMaxAlt) const
Get the altitude limits.
Definition WsfEM_Antenna.hpp:151
double GetMaximumElevationScanLimit() const
Return the maximum elevation scan limit.
Definition WsfEM_Antenna.hpp:240
const char * GetScriptClassName() const override
Definition WsfEM_Antenna.hpp:94
void SetMinimumAltitude(double aMinAltitude)
Definition WsfEM_Antenna.hpp:167
void SetMaximumAzimuthScanLimit(double aMaxAzScan)
Definition WsfEM_Antenna.hpp:226
double mECS_ToACS_Transform[3][3]
The transformation from the ECS to the antenna coordinate system (ACS).
Definition WsfEM_Antenna.hpp:427
bool mWCS_ToNED_TransformIsValid
Definition WsfEM_Antenna.hpp:442
void SetScanStabilization(ScanStabilization aScanStabilization)
Set the scan stabilization mode.
Definition WsfEM_Antenna.hpp:209
double mOffset[3]
The offset of the antenna relative to the articulated part.
Definition WsfEM_Antenna.hpp:360
double mWCS_ToNED_Transform[3][3]
The transformation from WCS to NED.
Definition WsfEM_Antenna.hpp:431
double mWCS_ToACS_Transform[3][3]
The transformation from WCS to ACS.
Definition WsfEM_Antenna.hpp:429
void SetEBS_AzLossExponent(double aEBS_LossExponentAz)
Set the electronic beam steering exponent specific to azimuth dropoff.
Definition WsfEM_Antenna.hpp:182
void SetEBS_AzCosSteeringLimit(double aEBS_AzCosSteeringLimit)
Set the electronic beam steering cosine steering limit in azimuth.
Definition WsfEM_Antenna.hpp:195
double mLocationWCS[3]
The WCS location of the antenna (includes the antenna_height contribution).
Definition WsfEM_Antenna.hpp:413
Definition WsfEM_XmtrRcvr.hpp:42
Definition WsfFieldOfView.hpp:36
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfSinglePlatformObserver.hpp:30
virtual void OnPlatformUpdated(double aSimTime, WsfPlatform *aPlatformPtr)
Called after each mover update.
Definition WsfSinglePlatformObserver.hpp:41
Copyrights Multiple, All Rights Reserved