VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
roadMovementUpdater.h
Go to the documentation of this file.
1 
4 
5 #pragma once
6 
7 //#include "railPSR.h"
8 #include <vector>
9 #include <matrix/vlVector.h>
10 #include <matrix/vlTaitBryan.h>
11 #include <matrix/coordTransform.h>
12 
15 #include "vrfmodel/roadSegment.h"
16 
19 class DtRailSegment;
20 class DtAttachedTerrain;
22 
25 #define DT_ROAD_MOVE_COAST_DECEL_FRACTION 0.5
26 
29 #define DT_ROAD_MOVE_DESTROYED_DECELERATION -5.0
30 
41 {
42 
43 public:
44 
47  bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain);
48 
50  virtual ~DtRoadMovementUpdater();
51 
54 
55  virtual bool init();
56 
57  virtual void clear();
58 
59  virtual void setEntityState(DtVrfMovingObjectStateRepository* state);
60  virtual void setPSR(DtRailMovementControllerPSR* psr);
62  virtual void movementComplete();
63 
65 
74  virtual void updateRailAndWorldPosition(DtRoadSegment* currentSeg, double newAccel,
75  double dT, double simTime = 0.0);
76 
79  virtual void updateNoMovement();
80 
84  virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg);
85 
86 protected:
87 
92  virtual void kinematicUpdate(const double oldSpeed, const double accel,
93  const double dt, double& deltaPosition, double& newSpeed,
94  double &actualAccel);
95 
111  virtual void doKinematicUpdateAlongRail(
112  const double dt,
113  DtRoadSegment* currentSeg,
114  const int roadLaneNum,
115  const double oldPositionInLane,
116  const double oldSpeed,
117  double & accel,
118  double & newPositionInLane,
119  double & newLateralOffset,
120  double & laneChangeHeadingOffset,
121  double & newSpeed,
122  double & newRotationRate);
123 
139  virtual void computePositionInDownstreamSegment(
140  DtRoadSegment* & currentSeg,
141  int & roadLaneNum,
142  double & newPositionInLane,
143  const double newLateralOffset,
144  double &segmentCurveHeadingOffset,
145  DtVector& localPosition,
146  int & segmentIndex);
147 
167  virtual void updateLateralOffset(const double currentOffset,
168  const double distanceBetweenLanes, const double speed,
169  const double xMove,
170  double & newLateralOffset, double& newHeadingOffset,
171  double &headingChangeRate);
172 
180  virtual void updatePsrWithNewState(
181  const int roadLaneNum,
182  const bool isSwitchingLanes,
183  const int roadSegmentIndex,
184  const double positionInLane,
185  double lateralOffset,
186  const double newSpeed,
187  const double newAccel,
188  DtRoadSegment* currentSegment);
189 
198  virtual void computeBodyMotionVectors(const double speed,
199  const double accel, const double turnRate, const double dt,
200  DtVector & bodyVelocity, DtVector & bodyAcceleration);
201 
207  virtual void computeRepositoryUpdateVariables(
208  const DtVector & newLocalPosition,
209  const DtVector & newBodyVelocity,
210  const DtVector & newBodyAcceleration,
211  const DtDcm & newLocalOrientation,
212  const double newRotationRate,
213  DtVector & newRelativeVelocity,
214  DtVector & newRelativeAcceleration,
215  DtTaitBryan & newLocalOrientationTb,
216  DtVector & newBodyRotationalVelocity
217  );
218 
225  virtual void useFuel(double fuelUsed);
226 
227  virtual bool isEntityImmobilized();
228 
234  virtual double fuelLeft() const;
235 
253  virtual void updateRepository(const DtVector & localPosition,
254  const DtVector & localVelocity, const DtVector & localAcceleration,
255  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
256  double newHeading);
257 
283  virtual void calculateOrientationAndPosition(
284  const DtVector& newLocalProjectedLocation, const double newHeading,
285  DtDcm& newLocalOrientation, DtVector& newLocalPosition);
286 
290  virtual void calculateOriginLocation(
291  const DtVector & turnCenterLocation,
292  const double heading,
293  DtVector & originLocation);
294 
306  bool groundClamp(const double heading, const DtVector& location,
307  DtAttachedTerrain& terrain, DtVector& newNormal);
308 
313  void groundClampHighFidelity(const double heading, const DtVector& location,
314  DtAttachedTerrain& terrain, DtVector& newNormal);
315 
321  void groundClampLowFidelity(const double heading, const DtVector& location,
322  DtAttachedTerrain& terrain, DtVector& newNormal);
323 
324 private:
327 
330 
332  const DtRoadMovementUpdater & operator=(const
333  DtRoadMovementUpdater & orig);
334 
335 protected:
339 
346 
350 
353 
354 };
355 
356 
357 
DtRoadMovementController * myController
Definition: roadMovementUpdater.h:336
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
Definition: attachedTerrain.h:42
Description: This repository holds all information that is common to all the forms of all objects wit...
Definition: vrfMovingObjectStateRepository.h:26
DtRailSegment are segments entities can follow when using the rail movement system.
Definition: railSegment.h:23
Instances of DtRailMovementControllerPSR are used to hold the shared/checkpointable data for a rail m...
Definition: railMovementControllerPSR.h:47
DtRailMovementControllerPSR * myRailMovementPSR
Definition: roadMovementUpdater.h:338
DtRoadMovementController is a movement controller that models an entity&#39;s movement along a road path...
Definition: roadMovementController.h:66
DtVrfMovingObjectStateRepository * myMovingStateRep
Definition: roadMovementUpdater.h:337
Models an entity moving along a generated road path.
Definition: roadMovementUpdater.h:40
const DtAttachedTerrain * myAttachedTerrain
Used to ground clamp the entity– TODO how we ground clamp, ie get access to terrain may change...
Definition: roadMovementUpdater.h:343
DtUpdateRepositoryOutputPortGroup * myUpdateRepositoryOutputPortGroup
Port group used to set what values should be set into the VRF state repository.
Definition: roadMovementUpdater.h:349
bool myUseHighFidelityGroundClamping
Definition: roadMovementUpdater.h:344
bool myWarnedAboutImmobilizedOnce
To warn user about new immobilization just once.
Definition: roadMovementUpdater.h:352
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
Description of one segment of a road.
Definition: roadSegment.h:390
bool myDrivingOnLeft
Definition: roadMovementUpdater.h:345
DtUpdateRepositoryOutputPortGroup is a data port group of a data consumer that contains methods and p...
Definition: updateRepositoryOutputPortGroup.h:28

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)