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 <tbb/tbb_thread.h>
13 #include <tbb/atomic.h>
14 #include <tbb/compat/condition_variable>
17 #include <tbb/spin_mutex.h>
18 
27 class DtUUID;
28 class DtSimMessage;
31 
33 {
34 private:
36 
37 protected:
38  struct RadarCoverage;
40  struct RadarCoverageRequest;
41  struct RadarCoverageData;
42 
43 public:
46 
48  virtual ~DtRadarCoverageMonitor();
49 
51  virtual bool init();
52 
55  virtual void tick();
56 
59  virtual void startMonitoring(const DtUUID&, bool radarCoverage2D = true, bool radarCoverage3D = true, int responseId = 0);
60 
62  virtual void stopMonitoring(const DtUUID&);
63 
65  virtual void terrainClosed();
66 
67  virtual void setSliceMonitorTimeout(double d);
68  double sliceMonitorTimeout() const
69  {
70  return mySliceMonitorTimeout;
71  }
72 
73 protected:
75  virtual DtSensorFanWalker::IntersectionInformation intersectionTest(
76  const DtVector& start, const DtVector& end, bool altitudeMSL, double highResRadius);
77 
79  virtual void processSimObjectDeleted(const DtSimObject* msg);
80 
84  static void radarCoverageInformationCallback(DtSimMessage* msg, void* usr);
85  virtual void processRadarCoverageInformation(DtSimInterfaceMessage* msg);
87 
89  virtual void getRadarGeometry(DtObjectSensorDescriptor* desc, RadarCoverage& radar) const;
90 
92  virtual void processRadarCoverage();
93 
94  virtual void sendInitialRadarCoverage(RadarCoverage& coverage, int coverageType, int responseId = 0) const;
95 
96  virtual void sendRadarCoverageResults(const RadarCoverageData&, const DtSensorFanWalker*, int coverageType, int responseId = 0) const;
97  virtual DtVector offsetPoint(const DtVector& point, const DtVector& offset) const;
98 
99  virtual bool processRadarCoverage(RadarCoverage& radar, DtSimObjectReference);
100  virtual void cancelRadarCoverage(RadarCoverage& radar, int coverageType, bool reset = true);
101  virtual void startRadarCoverageCalculations(RadarCoverage& radar, int coverageType);
102  virtual bool radarCoverageNeedsUpdate(RadarCoverage& radar, DtSimObjectReference) const;
103 
104  static void settingConsumerCallback(const DtSettingsObject* settingsObject, void* usr);
105  virtual void processSettingsConsumer(const DtSettingsObject* settingsObject);
106 
107  virtual PendingRadarCoverageRequest initializeRadarCoverageCalculation2D(const RadarCoverageRequest&);
108  virtual PendingRadarCoverageRequest initializeRadarCoverageCalculation3D(const RadarCoverageRequest&);
109  virtual void removeRadarCoverageCalculation(const DtUUID& uuid, const DtString& radarName, int coverageType);
110  virtual bool processPendingIntersection(PendingRadarCoverageRequest& pending);
111  virtual void clearAllCalculations();
112  virtual void initializeAzimuthAndElevation(const RadarCoverageData& coverage,
113  double& azimuthStart, double& azimuthEnd, double& elevationStart, double& elevationEnd) const;
114 
115  virtual bool coverageCancelled(const DtUUID&, int flag);
116 
117 private:
120 
122  const DtRadarCoverageMonitor & operator=(const DtRadarCoverageMonitor & orig);
123 
124 protected:
126 
128  {
130  : azimuthSweepMinimum(0)
131  , azimuthSweepMaximum(M_2PI)
132  , elevationSweepMinimum(0.)
133  , elevationSweepMaximum(M_PI_2)
134  , azimuthSampleRate(M_DEG2RAD)
135  , elevationSampleRate(M_DEG2RAD)
136  , postSpacing(1000.)
137  , highResRadius(1000)
138  , radarRange(0.)
139  , uuid(DtUUID::nullUUID())
140  {
141  }
142 
144  : azimuthSweepMinimum(orig.azimuthSweepMinimum)
145  , azimuthSweepMaximum(orig.azimuthSweepMaximum)
146  , elevationSweepMinimum(orig.elevationSweepMinimum)
147  , elevationSweepMaximum(orig.elevationSweepMaximum)
148  , radarName(orig.radarName)
149  , azimuthSampleRate(orig.azimuthSampleRate)
150  , elevationSampleRate(orig.elevationSampleRate)
151  , postSpacing(orig.postSpacing)
152  , highResRadius(orig.highResRadius)
153  , radarRange(orig.radarRange)
154  , uuid(orig.uuid)
155  , offset(orig.offset)
156  , currentPosition(orig.currentPosition)
157  , currentOrientation(orig.currentOrientation)
158  {
159  }
160 
161  double radarRange;
168  double postSpacing;
171  DtTaitBryan currentOrientation;
175  };
176 
178  {
181  , movementDelta(1000.)
182  , orientationDelta(M_DEG2RAD)
183  , radarCoverageWaitTime(2.0)
184  , requestTime(0.)
185  {
186  }
187 
189 
190  : RadarCoverageData(orig)
191  , movementDelta(orig.movementDelta)
192  , orientationDelta(orig.orientationDelta)
193  , radarCoverage2D(orig.radarCoverage2D)
194  , radarCoverage3D(orig.radarCoverage3D)
195  , radarCoverageWaitTime(orig.radarCoverageWaitTime)
196  , requestTime(orig.requestTime)
197  {
198  }
199 
203  double requestTime;
204  boost::shared_ptr<DtSensorFanWalker> radarCoverage2D;
205  boost::shared_ptr<DtSensorFanWalker> radarCoverage3D;
206  };
207 
208  struct Monitoring
209  {
211  : referenceCount(1)
212  , removeOnNextRefresh(false)
213  {};
214 
215  Monitoring(const Monitoring& orig)
216  : referenceCount(orig.referenceCount)
217  , vrfObject(orig.vrfObject)
218  , removeOnNextRefresh(orig.removeOnNextRefresh)
219  , radars(orig.radars)
220  {};
221 
222  DtSimObjectReference vrfObject;
224 
226  boost::signals2::connection simObjectDeletedConnection;
227 
228  std::vector<RadarCoverage> radars;
229  };
230 
231  typedef std::map<DtUUID, Monitoring> MonitoringMap;
233 
235  std::auto_ptr<tbb::tbb_thread> myRadarCoverageThread;
236  typedef tbb::interface5::condition_variable Condition;
237  typedef tbb::mutex ConditionMutex;
238  typedef tbb::interface5::unique_lock<ConditionMutex> ConditionLock;
242  tbb::atomic<bool> myClearPendingIntersections;
243 
245 
247  {
251  };
252 
253  std::vector<RadarCoverageResult> myRadarCoverageResults;
254 
256  {
259  bool cancel;
260  };
261 
262  typedef std::vector<RadarCoverageRequest> RadarCoverageRequests;
264 
267 
268  bool myReset2D;
269  bool myReset3D;
270 
272  {
276  };
277 
278  typedef std::map<DtString, std::vector<PendingRadarCoverageRequest> > PendingRadarCoverageRequests;
279  typedef std::map<DtUUID, PendingRadarCoverageRequests> PendingRadarCoverageRequestsMap;
282 
283  tbb::spin_mutex myMonitoringMapMutex;
284 };
285 
UUID is a unique ID wrapper class.
Definition: uuid.h:59
double radarCoverageWaitTime
Definition: radarCoverageMonitor.h:202
tbb::mutex ConditionMutex
Definition: radarCoverageMonitor.h:237
double elevationSweepMinimum
Definition: radarCoverageMonitor.h:164
Condition myRadarCoverageCondition
Definition: radarCoverageMonitor.h:239
bool myAltitudeMSL
Definition: radarCoverageMonitor.h:265
int coverageType
Definition: radarCoverageMonitor.h:273
bool myReset3D
Definition: radarCoverageMonitor.h:269
bool cancel
Definition: radarCoverageMonitor.h:259
DtTaitBryan currentOrientation
Definition: radarCoverageMonitor.h:171
double radarRange
Definition: radarCoverageMonitor.h:161
boost::signals2::connection simObjectDeletedConnection
Definition: radarCoverageMonitor.h:226
std::map< DtUUID, PendingRadarCoverageRequests > PendingRadarCoverageRequestsMap
Definition: radarCoverageMonitor.h:279
DtRadarCoverageAltitudeSettings myRadarCoverageAltitudeSettings
Definition: radarCoverageMonitor.h:266
double azimuthSweepMaximum
Definition: radarCoverageMonitor.h:163
DtVector currentPosition
Definition: radarCoverageMonitor.h:170
RadarCoverageRequests myRadarCoverageRequests
Definition: radarCoverageMonitor.h:263
boost::shared_ptr< DtSensorFanWalker > radarCoverage2D
Definition: radarCoverageMonitor.h:204
tbb::interface5::condition_variable Condition
Definition: radarCoverageMonitor.h:236
Definition: radarCoverageMonitor.h:127
The DtSimObjectReference is a shared pointer that can be used amongst many object for access to the u...
Definition: simObjectReference.h:26
Definition: radarCoverageMonitor.h:32
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:223
DtString radarName
Definition: radarCoverageMonitor.h:172
RadarCoverageData radarData
Definition: radarCoverageMonitor.h:274
std::vector< RadarCoverageResult > myRadarCoverageResults
Definition: radarCoverageMonitor.h:253
double highResRadius
Definition: radarCoverageMonitor.h:169
std::vector< RadarCoverage > radars
Definition: radarCoverageMonitor.h:228
Monitoring(const Monitoring &orig)
Definition: radarCoverageMonitor.h:215
MonitoringMap myMonitoringMap
Definition: radarCoverageMonitor.h:232
Definition: settingsObject.h:27
Definition: radarCoverageAltitudeSettings.h:35
tbb::spin_mutex myRadarCoverageAdditionMutex
Definition: radarCoverageMonitor.h:244
double postSpacing
Definition: radarCoverageMonitor.h:168
RadarCoverageData(const RadarCoverageData &orig)
Definition: radarCoverageMonitor.h:143
double azimuthSweepMinimum
Definition: radarCoverageMonitor.h:162
DtSensorFanWalker * walker
Definition: radarCoverageMonitor.h:275
tbb::interface5::unique_lock< ConditionMutex > ConditionLock
Definition: radarCoverageMonitor.h:238
RadarCoverage(const RadarCoverage &orig)
Definition: radarCoverageMonitor.h:188
double mySliceMonitorTimeout
Definition: radarCoverageMonitor.h:281
int coverageType
Definition: radarCoverageMonitor.h:249
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
DtSimulationServices * mySimulationServices
Definition: radarCoverageMonitor.h:125
int coverageType
Definition: radarCoverageMonitor.h:258
RadarCoverageData()
Definition: radarCoverageMonitor.h:129
File: simMsg.h.
Definition: simMessage.h:35
double elevationSweepMaximum
Definition: radarCoverageMonitor.h:165
DtUUID uuid
Definition: radarCoverageMonitor.h:173
tbb::spin_mutex myMonitoringMapMutex
Definition: radarCoverageMonitor.h:283
std::map< DtString, std::vector< PendingRadarCoverageRequest > > PendingRadarCoverageRequests
Definition: radarCoverageMonitor.h:278
double sliceMonitorTimeout() const
Definition: radarCoverageMonitor.h:68
double elevationSampleRate
Definition: radarCoverageMonitor.h:167
Definition: radarCoverageMonitor.h:177
tbb::atomic< bool > myShutdownRadarCoverageThreadFlag
Definition: radarCoverageMonitor.h:241
Definition: radarCoverageMonitor.h:246
DtSensorFanWalker * walker
Definition: radarCoverageMonitor.h:250
RadarCoverageData radar
Definition: radarCoverageMonitor.h:257
RadarCoverageData radarData
Definition: radarCoverageMonitor.h:248
double orientationDelta
Definition: radarCoverageMonitor.h:201
RadarCoverage()
Definition: radarCoverageMonitor.h:179
double azimuthSampleRate
Definition: radarCoverageMonitor.h:166
std::vector< RadarCoverageRequest > RadarCoverageRequests
Definition: radarCoverageMonitor.h:262
PendingRadarCoverageRequestsMap myPendingRadarCoverageRequests
Definition: radarCoverageMonitor.h:280
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:94
ConditionMutex myRadarCoverageConditionMutex
Definition: radarCoverageMonitor.h:240
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:88
std::auto_ptr< tbb::tbb_thread > myRadarCoverageThread
Member variables used to interact with the radar coverage thread.
Definition: radarCoverageMonitor.h:235
boost::shared_ptr< DtSensorFanWalker > radarCoverage3D
Definition: radarCoverageMonitor.h:205
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
Definition: radarCoverageMonitor.h:271
Definition: sensorFanWalker.h:29
Definition: radarCoverageMonitor.h:255
bool myReset2D
Definition: radarCoverageMonitor.h:268
double movementDelta
Definition: radarCoverageMonitor.h:200
Definition: radarCoverageMonitor.h:208
Monitoring()
Definition: radarCoverageMonitor.h:210
voidpf uLong offset
Definition: ioapi.h:42
tbb::atomic< bool > myClearPendingIntersections
Definition: radarCoverageMonitor.h:242
DtVector offset
Definition: radarCoverageMonitor.h:174
double requestTime
Definition: radarCoverageMonitor.h:203
bool removeOnNextRefresh
Definition: radarCoverageMonitor.h:225
Definition: sensorFanWalker.h:32
std::map< DtUUID, Monitoring > MonitoringMap
Definition: radarCoverageMonitor.h:231

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)