VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
moveAlongRouteTimeEstimator.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrfutil/vertexList.h>
16 
18 
19 class DtSimTask;
20 class DtSetDataRequest;
21 class Coordinate_System;
22 class DtRouteAction;
23 
51 {
52 public:
53 
54  typedef void(*TaskCallbackFcn)(DtSimTask* task, const DtVertexList& vertices, double position, void* usr);
55  typedef void(*SetCallbackFcn)(DtSetDataRequest* set, const DtVertexList& vertices, double position, void* usr);
56 
57  static const double NoTimeSpecified;
58  static const double NoRoutePositionSpecified;
59 
62  struct InputRoute
63  {
64  InputRoute() : vertices(), actions("actions"), targetPosition(NoRoutePositionSpecified),
65  desiredTargetTime(NoTimeSpecified), holdPosition(NoRoutePositionSpecified), startPosition(0.0) {};
66  virtual ~InputRoute()
67  {
68  vertices.emptyList();
69  };
70 
72  DtVertexList vertices;
73 
76 
81  double targetPosition;
82 
86 
92  double holdPosition;
93 
98  double startPosition;
99  };
100 
102  {
103  OutputEstimates() : vertexTimes(), actionTimes(), targetTime(NoTimeSpecified),
104  holdUntilTime(NoTimeSpecified) {};
105  virtual ~OutputEstimates() {};
106 
108  std::vector<double> vertexTimes;
109 
111  std::vector<double> actionTimes;
112 
114  double targetTime;
115 
117  double holdUntilTime;
118 
121  };
122 
124  {
126  : startPosition(-1.0)
127  , endPosition(-1.0)
128  , speed(-1.0)
129  , isRequired(false) {};
130 
131  double startPosition;
132  double endPosition;
133  double speed;
135  };
136  typedef std::vector<PlannedSpeed> PlannedSpeedList;
137 
140 
142  virtual void initialize();
143 
147  virtual void estimateTimes(const InputRoute& routeInput, OutputEstimates& estimates);
148 
150 
151 
154  virtual void setInitialGeocentricLocation(const DtVector& geocLoc);
155 
159  virtual void setInitialTime(double t);
160 
162  virtual void setInitialSpeed(double s);
163 
165 
167 
168 
171  virtual void setEntityMaxSpeed(double speed);
172 
174  virtual double entityMaxSpeed() const;
175 
178  virtual void setEntityMinSpeed(double speed);
179 
181  virtual double entityMinSpeed() const;
182 
185  virtual void setEntityDefaultSpeed(double speed);
186 
188  virtual double entityDefaultSpeed() const;
189 
192  virtual void setEntityMaxAcceleration(double accel);
193 
195  virtual double entityMaxAcceleration() const;
196 
199  virtual void setEntityMaxDeceleration(double decel);
200 
202  virtual double entityMaxDeceleration() const;
203 
205 
207 
208 
211  virtual void setCurrentGeocentricLocation(const DtVector& geocLoc);
212 
214  virtual DtVector currentGeocentricLocation() const;
215 
218  virtual void setCurrentTime(double t);
219 
221  virtual double currentTime() const;
222 
225  virtual void setCurrentMinSpeed(double speed);
226 
228  virtual double currentMinSpeed() const;
229 
232  virtual void setCurrentMaxSpeed(double speed);
233 
235  virtual double currentMaxSpeed() const;
236 
239  virtual void setCurrentPreferredSpeed(double speed);
240 
242  virtual double currentPreferredSpeed() const;
243 
246  virtual void setCurrentSpeed(double speed);
247 
249  virtual double currentSpeed() const;
250 
253  virtual void setCurrentAcceleration(double speed);
254 
256  virtual double currentAcceleration() const;
257 
259  virtual double targetPosition() const;
260 
262  virtual double targetTime() const;
263 
265  virtual double holdPosition() const;
266 
268  virtual void addPlannedSpeed(double routePosition, double speed, bool required);
269 
271  virtual PlannedSpeedList plannedSpeeds() const;
272 
274 
276  virtual void addTaskPreprocessor(DtSimTaskMessageType t, TaskCallbackFcn fcn, void* usr);
277 
279  virtual void addTaskProcessor(DtSimTaskMessageType t, TaskCallbackFcn fcn, void* usr);
280 
282  virtual void addSetPreprocessor(DtSetMessageType t, SetCallbackFcn fcn, void* usr);
283 
285  virtual void addSetProcessor(DtSetMessageType t, SetCallbackFcn fcn, void* usr);
286 
288  static DtMoveAlongRouteTimeEstimator* createAndInitialize();
289 
291  virtual void printState(std::ostream& strm) const;
292 
293 protected:
294 
302  virtual DtVector calculateLocationOfPositionOnRoute(double pos, const DtVertexList& vertices) const;
303 
313  virtual double calculateTravelTime(const DtVector& currLoc, const DtVector& nextLoc,
314  double currentSpeed, double preferredSpeed,
315  double& newSpeed, double& newAcceleration) const;
316 
324  virtual double calculateDistanceToTarget(const DtVector& currLoc, double currPos,
325  const DtVertexList& vertices, double targetPos) const;
326 
340  virtual double calculateTimeAndDistanceAtRequiredSpeeds(double currPos,
341  const DtVertexList& vertices, double targetPos, const PlannedSpeedList& plannedSpeeds,
342  double& distanceAtRequiredSpeeds) const;
343 
346  virtual void sanityCheckCurrentSettings();
347 
350  virtual void processHold(const DtVertexList& vertices, double position);
351 
353  void preprocessAction(const DtRouteAction& action, const DtVertexList& vertices, double position);
354 
356  void processAction(const DtRouteAction& action, const DtVertexList& vertices, double position);
357 
362  void preprocessTask(DtSimTask* task, const DtVertexList& vertices, double position);
363 
368  void preprocessSet(DtSetDataRequest* set, const DtVertexList& vertices, double position);
369 
372  void processTask(DtSimTask* task, const DtVertexList& vertices, double position);
373 
376  void processSet(DtSetDataRequest* set, const DtVertexList& vertices, double position);
377 
378 protected:
379 
385 
389  double myTargetTime;
391 
394 
400 
403 
406 
413 
419 
420  typedef std::pair<TaskCallbackFcn, void*> TaskCallbackPair;
421  typedef std::map<DtSimTaskMessageType, TaskCallbackPair> TaskCallbackMap;
422  typedef std::pair<SetCallbackFcn, void*> SetCallbackPair;
423  typedef std::map<DtSetMessageType, SetCallbackPair> SetCallbackMap;
424 
429 
431 
433 };
434 
437 void preprocessSetRequiredSpeed(DtSetDataRequest* set, const DtVertexList& vertices, double position, DtMoveAlongRouteTimeEstimator* est);
438 void preprocessSetOrderedSpeed(DtSetDataRequest* set, const DtVertexList& vertices, double position, DtMoveAlongRouteTimeEstimator* est);
440 
441 
445 
448 void processSetLocation(DtSetDataRequest* set, const DtVertexList& vertices, double position, DtMoveAlongRouteTimeEstimator* est);
449 void processSetOrderedSpeed(DtSetDataRequest* set, const DtVertexList& vertices, double position, DtMoveAlongRouteTimeEstimator* est);
450 void processSetCurrentSpeed(DtSetDataRequest* set, const DtVertexList& vertices, double position, DtMoveAlongRouteTimeEstimator* est);
451 void processSetRequiredSpeed(DtSetDataRequest* set, const DtVertexList& vertices, double position, DtMoveAlongRouteTimeEstimator* est);
453 
454 
455 DT_DLL_vrftasks std::ostream& operator<<(std::ostream&, const DtMoveAlongRouteTimeEstimator::InputRoute&);
456 
double startPosition
Indicates the starting position along the route if estimates are being made from somewhere other than...
Definition: moveAlongRouteTimeEstimator.h:98
double holdUntilTime
Estimated time at which hold will complete.
Definition: moveAlongRouteTimeEstimator.h:117
double myCurrentMinSpeed
Temporary preferences, updated by some actions during calculations.
Definition: moveAlongRouteTimeEstimator.h:409
Coordinate_System * myCoordSys
Definition: moveAlongRouteTimeEstimator.h:432
std::map< DtSetMessageType, SetCallbackPair > SetCallbackMap
Definition: moveAlongRouteTimeEstimator.h:423
virtual ~InputRoute()
Definition: moveAlongRouteTimeEstimator.h:66
bool myEntityRequiredSpeed
Entity characteristics, initialized by user.
Definition: moveAlongRouteTimeEstimator.h:404
SetCallbackMap mySetProcessors
Definition: moveAlongRouteTimeEstimator.h:428
Definition: moveAlongRouteTimeEstimator.h:123
Performs time estimates for move along route with actions tasks. Based on settings for the entity&#39;s s...
Definition: moveAlongRouteTimeEstimator.h:50
double targetPosition
The target position on the route defined as a floating point value based on the vertices of the route...
Definition: moveAlongRouteTimeEstimator.h:81
Structure for storing inputs describing the route to be followed and any actions to be taken while mo...
Definition: moveAlongRouteTimeEstimator.h:62
SetCallbackMap mySetPreprocessors
Definition: moveAlongRouteTimeEstimator.h:427
Definition: rwRouteActionList.h:19
virtual ~OutputEstimates()
Definition: moveAlongRouteTimeEstimator.h:105
double myTargetTime
Target position and the time at which we need to arrive there.
Definition: moveAlongRouteTimeEstimator.h:389
DT_DLL_features std::ostream & operator<<(std::ostream &, const DtFeatureTransform &)
std::ostream output.
std::vector< double > actionTimes
Estimated completion times of each of the specified actions.
Definition: moveAlongRouteTimeEstimator.h:111
std::pair< TaskCallbackFcn, void * > TaskCallbackPair
Definition: moveAlongRouteTimeEstimator.h:420
TaskCallbackMap myTaskPreprocessors
Definition: moveAlongRouteTimeEstimator.h:425
double desiredTargetTime
Desired target time, in seconds relative to the initial time set in setCurrentTime. Defaults to NoTimeSpecified if no target time is required.
Definition: moveAlongRouteTimeEstimator.h:85
double myEntityMaxDeceleration
Entity characteristics, initialized by user.
Definition: moveAlongRouteTimeEstimator.h:402
double myEntityMaxSpeed
Entity characteristics, initialized by user.
Definition: moveAlongRouteTimeEstimator.h:398
double myCurrentPreferredSpeed
Temporary preferences, updated by some actions during calculations.
Definition: moveAlongRouteTimeEstimator.h:411
double myEntityMaxAcceleration
Entity characteristics, initialized by user.
Definition: moveAlongRouteTimeEstimator.h:401
double myEntityMinSpeed
Entity characteristics, initialized by user.
Definition: moveAlongRouteTimeEstimator.h:397
DtSetDataRequest is an abstract base class from which real setDataRequests can derive. It manages the read/write capability; derived classes need only use and register read/writatble data types for derived information.
Definition: setDataRequest.h:41
Definition: coordSystem.h:54
Definition: moveAlongRouteTimeEstimator.h:101
std::pair< SetCallbackFcn, void * > SetCallbackPair
Definition: moveAlongRouteTimeEstimator.h:422
bool isRequired
Definition: moveAlongRouteTimeEstimator.h:134
void preprocessSetRequiredSpeed(DtSetDataRequest *set, const DtVertexList &vertices, double position, DtMoveAlongRouteTimeEstimator *est)
These functions do preprocessing for standard sets that can affect the time estimates.
double holdPosition
The hold position on the route defined as a floating point value based on the vertices of the route: ...
Definition: moveAlongRouteTimeEstimator.h:92
OutputEstimates()
Definition: moveAlongRouteTimeEstimator.h:103
class DtVertexList:
Definition: vertexList.h:22
void preprocessSetOrderedSpeed(DtSetDataRequest *set, const DtVertexList &vertices, double position, DtMoveAlongRouteTimeEstimator *est)
These functions do preprocessing for standard sets that can affect the time estimates.
std::vector< PlannedSpeed > PlannedSpeedList
Definition: moveAlongRouteTimeEstimator.h:136
double speedRequired
Speed required to make time on target.
Definition: moveAlongRouteTimeEstimator.h:120
InputRoute()
Definition: moveAlongRouteTimeEstimator.h:64
double myHoldPosition
Position at which to hold.
Definition: moveAlongRouteTimeEstimator.h:393
double speed
Definition: moveAlongRouteTimeEstimator.h:133
static const double NoRoutePositionSpecified
Definition: moveAlongRouteTimeEstimator.h:58
double myCurrentAcceleration
Current state, updated by calculations.
Definition: moveAlongRouteTimeEstimator.h:417
static const double NoTimeSpecified
Definition: moveAlongRouteTimeEstimator.h:57
double myCurrentTime
Current state, initialized by user and updated by calculations.
Definition: moveAlongRouteTimeEstimator.h:382
#define DT_DLL_vrftasks
This file is used to determine how to build.
Definition: vrftasksDefines.h:26
PlannedSpeedList myPlannedSpeeds
Definition: moveAlongRouteTimeEstimator.h:430
double targetTime
Estimated time to arrive on target.
Definition: moveAlongRouteTimeEstimator.h:114
double myCurrentSpeed
Current state, updated by calculations.
Definition: moveAlongRouteTimeEstimator.h:416
DtSimTask is an abstract base class from which real tasks can derive. It manages the read/write capab...
Definition: simTask.h:30
Definition: routeAction.h:35
DtRwRouteActionList actions
The list of actions to take along the route.
Definition: moveAlongRouteTimeEstimator.h:75
double myTargetPosition
Target position and the time at which we need to arrive there.
Definition: moveAlongRouteTimeEstimator.h:388
double myEntityDefaultSpeed
Entity characteristics, initialized by user.
Definition: moveAlongRouteTimeEstimator.h:399
void processSetLocation(DtSetDataRequest *set, const DtVertexList &vertices, double position, DtMoveAlongRouteTimeEstimator *est)
PlannedSpeed()
Definition: moveAlongRouteTimeEstimator.h:125
void processSetRequiredSpeed(DtSetDataRequest *set, const DtVertexList &vertices, double position, DtMoveAlongRouteTimeEstimator *est)
void processSetCurrentSpeed(DtSetDataRequest *set, const DtVertexList &vertices, double position, DtMoveAlongRouteTimeEstimator *est)
DtVector myCurrentLocation
Current state, initialized by user and updated by calculations.
Definition: moveAlongRouteTimeEstimator.h:383
double myCurrentMaxSpeed
Temporary preferences, updated by some actions during calculations.
Definition: moveAlongRouteTimeEstimator.h:410
double endPosition
Definition: moveAlongRouteTimeEstimator.h:132
std::map< DtSimTaskMessageType, TaskCallbackPair > TaskCallbackMap
Definition: moveAlongRouteTimeEstimator.h:421
void processSetOrderedSpeed(DtSetDataRequest *set, const DtVertexList &vertices, double position, DtMoveAlongRouteTimeEstimator *est)
TaskCallbackMap myTaskProcessors
Definition: moveAlongRouteTimeEstimator.h:426

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)