VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
radarCoverageMonitor.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2018 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
9 #include "vrfobjcore/simObject.h"
10 #include <matrix/vlMath.h>
11 #include <tbb/spin_mutex.h>
12 #include <atomic>
15 #include <tbb/spin_mutex.h>
16 
25 class DtUUID;
26 class DtSimMessage;
29 
31 {
32 private:
34 
35 protected:
36  struct RadarCoverage;
38  struct RadarCoverageRequest;
39  struct RadarCoverageData;
40 
41 public:
44 
46  virtual ~DtRadarCoverageMonitor();
47 
49  virtual bool init();
50 
53  virtual void tick();
54 
57  virtual void startMonitoring(const DtUUID&, bool radarCoverage2D = true, bool radarCoverage3D = true, int responseId = 0);
58 
60  virtual void stopMonitoring(const DtUUID&);
61 
63  virtual void terrainClosed();
64 
65  virtual void setSliceMonitorTimeout(double d);
66  double sliceMonitorTimeout() const
67  {
68  return mySliceMonitorTimeout;
69  }
70 
71 protected:
73  virtual DtSensorFanWalker::IntersectionInformation intersectionTest(
74  const DtVector& start, const DtVector& end, bool altitudeMSL, double highResRadius);
75 
77  virtual void processSimObjectDeleted(const DtSimObject* msg);
78 
82  static void radarCoverageInformationCallback(DtSimMessage* msg, void* usr);
83  virtual void processRadarCoverageInformation(DtSimInterfaceMessage* msg);
85 
87  virtual void getRadarGeometry(DtObjectSensorDescriptor* desc, RadarCoverage& radar) const;
88 
90  virtual void processRadarCoverage();
91 
92  virtual void sendInitialRadarCoverage(RadarCoverage& coverage, int coverageType, int responseId = 0) const;
93 
94  virtual void sendRadarCoverageResults(const RadarCoverageData&, const DtSensorFanWalker*, int coverageType, int responseId = 0) const;
95  virtual DtVector offsetPoint(const DtVector& point, const DtVector& offset) const;
96 
97  virtual bool processRadarCoverage(RadarCoverage& radar, DtSimObjectReference);
98  virtual void cancelRadarCoverage(RadarCoverage& radar, int coverageType, bool reset = true);
99  virtual void startRadarCoverageCalculations(RadarCoverage& radar, int coverageType);
100  virtual bool radarCoverageNeedsUpdate(RadarCoverage& radar, DtSimObjectReference) const;
101 
102  static void settingConsumerCallback(const DtSettingsObject* settingsObject, void* usr);
103  virtual void processSettingsConsumer(const DtSettingsObject* settingsObject);
104 
105  virtual PendingRadarCoverageRequest initializeRadarCoverageCalculation2D(const RadarCoverageRequest&);
106  virtual PendingRadarCoverageRequest initializeRadarCoverageCalculation3D(const RadarCoverageRequest&);
107  virtual void removeRadarCoverageCalculation(const DtUUID& uuid, const DtString& radarName, int coverageType);
108  virtual bool processPendingIntersection(PendingRadarCoverageRequest& pending);
109  virtual void clearAllCalculations();
110  virtual void initializeAzimuthAndElevation(const RadarCoverageData& coverage,
111  double& azimuthStart, double& azimuthEnd, double& elevationStart, double& elevationEnd) const;
112 
113  virtual bool coverageCancelled(const DtUUID&, int flag);
114 
115 private:
118 
120  const DtRadarCoverageMonitor & operator=(const DtRadarCoverageMonitor & orig);
121 
122 protected:
124 
126  {
128  : azimuthSweepMinimum(0)
129  , azimuthSweepMaximum(M_2PI)
130  , elevationSweepMinimum(0.)
131  , elevationSweepMaximum(M_PI_2)
132  , azimuthSampleRate(M_DEG2RAD)
133  , elevationSampleRate(M_DEG2RAD)
134  , postSpacing(1000.)
135  , highResRadius(1000)
136  , radarRange(0.)
137  , uuid(DtUUID::nullUUID())
138  {
139  }
140 
142  : azimuthSweepMinimum(orig.azimuthSweepMinimum)
143  , azimuthSweepMaximum(orig.azimuthSweepMaximum)
144  , elevationSweepMinimum(orig.elevationSweepMinimum)
145  , elevationSweepMaximum(orig.elevationSweepMaximum)
146  , radarName(orig.radarName)
147  , azimuthSampleRate(orig.azimuthSampleRate)
148  , elevationSampleRate(orig.elevationSampleRate)
149  , postSpacing(orig.postSpacing)
150  , highResRadius(orig.highResRadius)
151  , radarRange(orig.radarRange)
152  , uuid(orig.uuid)
153  , offset(orig.offset)
154  , currentPosition(orig.currentPosition)
155  , currentOrientation(orig.currentOrientation)
156  {
157  }
158 
159  double radarRange;
166  double postSpacing;
168  DtVector currentPosition;
169  DtTaitBryan currentOrientation;
172  DtVector offset;
173  };
174 
176  {
179  , movementDelta(1000.)
180  , orientationDelta(M_DEG2RAD)
181  , radarCoverageWaitTime(2.0)
182  , requestTime(0.)
183  {
184  }
185 
187 
188  : RadarCoverageData(orig)
189  , movementDelta(orig.movementDelta)
190  , orientationDelta(orig.orientationDelta)
191  , radarCoverage2D(orig.radarCoverage2D)
192  , radarCoverage3D(orig.radarCoverage3D)
193  , radarCoverageWaitTime(orig.radarCoverageWaitTime)
194  , requestTime(orig.requestTime)
195  {
196  }
197 
201  double requestTime;
202  std::shared_ptr<DtSensorFanWalker> radarCoverage2D;
203  std::shared_ptr<DtSensorFanWalker> radarCoverage3D;
204  };
205 
206  struct Monitoring
207  {
209  : referenceCount(1)
210  , removeOnNextRefresh(false)
211  {};
212 
213  Monitoring(const Monitoring& orig)
214  : referenceCount(orig.referenceCount)
215  , vrfObject(orig.vrfObject)
216  , removeOnNextRefresh(orig.removeOnNextRefresh)
217  , radars(orig.radars)
218  {};
219 
220  DtSimObjectReference vrfObject;
222 
224  boost::signals2::connection simObjectDeletedConnection;
225 
226  std::vector<RadarCoverage> radars;
227  };
228 
229  typedef std::map<DtUUID, Monitoring> MonitoringMap;
231 
233  std::unique_ptr<std::thread> myRadarCoverageThread;
234  typedef std::condition_variable Condition;
235  typedef std::mutex ConditionMutex;
236  typedef std::unique_lock<ConditionMutex> ConditionLock;
240  std::atomic<bool> myClearPendingIntersections;
241 
243 
245  {
249  };
250 
251  std::vector<RadarCoverageResult> myRadarCoverageResults;
252 
254  {
257  bool cancel;
258  };
259 
260  typedef std::vector<RadarCoverageRequest> RadarCoverageRequests;
262 
265 
266  bool myReset2D;
267  bool myReset3D;
268 
270  {
274  };
275 
276  typedef std::map<DtString, std::vector<PendingRadarCoverageRequest> > PendingRadarCoverageRequests;
277  typedef std::map<DtUUID, PendingRadarCoverageRequests> PendingRadarCoverageRequestsMap;
280 
281  tbb::spin_mutex myMonitoringMapMutex;
282 };
283 
UUID is a unique ID wrapper class.
Definition: uuid.h:59
double radarCoverageWaitTime
Definition: radarCoverageMonitor.h:200
double elevationSweepMinimum
Definition: radarCoverageMonitor.h:162
Condition myRadarCoverageCondition
Definition: radarCoverageMonitor.h:237
std::atomic< bool > myShutdownRadarCoverageThreadFlag
Definition: radarCoverageMonitor.h:239
bool myAltitudeMSL
Definition: radarCoverageMonitor.h:263
int coverageType
Definition: radarCoverageMonitor.h:271
bool myReset3D
Definition: radarCoverageMonitor.h:267
bool cancel
Definition: radarCoverageMonitor.h:257
DtTaitBryan currentOrientation
Definition: radarCoverageMonitor.h:169
double radarRange
Definition: radarCoverageMonitor.h:159
boost::signals2::connection simObjectDeletedConnection
Definition: radarCoverageMonitor.h:224
std::map< DtUUID, PendingRadarCoverageRequests > PendingRadarCoverageRequestsMap
Definition: radarCoverageMonitor.h:277
DtRadarCoverageAltitudeSettings myRadarCoverageAltitudeSettings
Definition: radarCoverageMonitor.h:264
double azimuthSweepMaximum
Definition: radarCoverageMonitor.h:161
DtVector currentPosition
Definition: radarCoverageMonitor.h:168
RadarCoverageRequests myRadarCoverageRequests
Definition: radarCoverageMonitor.h:261
Definition: radarCoverageMonitor.h:125
Definition: radarCoverageMonitor.h:30
DtObjectSensorDescriptor; descriptor for the DtObjectSensor component.
Definition: objectSensorDescriptor.h:27
DtSimInterfaceMessage is used to send a message to the front end or the back end. It derives from a s...
Definition: simInterfaceMessage.h:23
int referenceCount
Definition: radarCoverageMonitor.h:221
DtString radarName
Definition: radarCoverageMonitor.h:170
RadarCoverageData radarData
Definition: radarCoverageMonitor.h:272
std::vector< RadarCoverageResult > myRadarCoverageResults
Definition: radarCoverageMonitor.h:251
double highResRadius
Definition: radarCoverageMonitor.h:167
std::vector< RadarCoverage > radars
Definition: radarCoverageMonitor.h:226
Monitoring(const Monitoring &orig)
Definition: radarCoverageMonitor.h:213
MonitoringMap myMonitoringMap
Definition: radarCoverageMonitor.h:230
Definition: settingsObject.h:27
std::unique_lock< ConditionMutex > ConditionLock
Definition: radarCoverageMonitor.h:236
Definition: radarCoverageAltitudeSettings.h:35
std::condition_variable Condition
Definition: radarCoverageMonitor.h:234
tbb::spin_mutex myRadarCoverageAdditionMutex
Definition: radarCoverageMonitor.h:242
double postSpacing
Definition: radarCoverageMonitor.h:166
RadarCoverageData(const RadarCoverageData &orig)
Definition: radarCoverageMonitor.h:141
double azimuthSweepMinimum
Definition: radarCoverageMonitor.h:160
DtSensorFanWalker * walker
Definition: radarCoverageMonitor.h:273
RadarCoverage(const RadarCoverage &orig)
Definition: radarCoverageMonitor.h:186
double mySliceMonitorTimeout
Definition: radarCoverageMonitor.h:279
int coverageType
Definition: radarCoverageMonitor.h:247
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
DtSimulationServices * mySimulationServices
Definition: radarCoverageMonitor.h:123
int coverageType
Definition: radarCoverageMonitor.h:256
RadarCoverageData()
Definition: radarCoverageMonitor.h:127
File: simMsg.h.
Definition: simMessage.h:35
double elevationSweepMaximum
Definition: radarCoverageMonitor.h:163
DtUUID uuid
Definition: radarCoverageMonitor.h:171
tbb::spin_mutex myMonitoringMapMutex
Definition: radarCoverageMonitor.h:281
std::map< DtString, std::vector< PendingRadarCoverageRequest > > PendingRadarCoverageRequests
Definition: radarCoverageMonitor.h:276
double sliceMonitorTimeout() const
Definition: radarCoverageMonitor.h:66
double elevationSampleRate
Definition: radarCoverageMonitor.h:165
Definition: radarCoverageMonitor.h:175
std::unique_ptr< std::thread > myRadarCoverageThread
Member variables used to interact with the radar coverage thread.
Definition: radarCoverageMonitor.h:233
std::atomic< bool > myClearPendingIntersections
Definition: radarCoverageMonitor.h:240
Definition: radarCoverageMonitor.h:244
DtSensorFanWalker * walker
Definition: radarCoverageMonitor.h:248
RadarCoverageData radar
Definition: radarCoverageMonitor.h:255
RadarCoverageData radarData
Definition: radarCoverageMonitor.h:246
double orientationDelta
Definition: radarCoverageMonitor.h:199
RadarCoverage()
Definition: radarCoverageMonitor.h:177
double azimuthSampleRate
Definition: radarCoverageMonitor.h:164
std::vector< RadarCoverageRequest > RadarCoverageRequests
Definition: radarCoverageMonitor.h:260
PendingRadarCoverageRequestsMap myPendingRadarCoverageRequests
Definition: radarCoverageMonitor.h:278
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
ConditionMutex myRadarCoverageConditionMutex
Definition: radarCoverageMonitor.h:238
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:80
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
Definition: radarCoverageMonitor.h:269
Definition: sensorFanWalker.h:29
Definition: radarCoverageMonitor.h:253
bool myReset2D
Definition: radarCoverageMonitor.h:266
std::shared_ptr< DtSensorFanWalker > radarCoverage3D
Definition: radarCoverageMonitor.h:203
std::shared_ptr< DtSensorFanWalker > radarCoverage2D
Definition: radarCoverageMonitor.h:202
double movementDelta
Definition: radarCoverageMonitor.h:198
Definition: radarCoverageMonitor.h:206
Monitoring()
Definition: radarCoverageMonitor.h:208
voidpf uLong offset
Definition: ioapi.h:42
DtVector offset
Definition: radarCoverageMonitor.h:172
double requestTime
Definition: radarCoverageMonitor.h:201
std::mutex ConditionMutex
Definition: radarCoverageMonitor.h:235
bool removeOnNextRefresh
Definition: radarCoverageMonitor.h:223
Definition: sensorFanWalker.h:32
std::map< DtUUID, Monitoring > MonitoringMap
Definition: radarCoverageMonitor.h:229

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)