VR-Forces Developer's Guide
 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 
16 #include "vrfmodel/roadSegment.h"
17 
18 class DtLocalObject;
20 class DtRailSegment;
21 class DtAttachedTerrain;
28 class DtOutputPortGroup;
29 
30 
33 #define DT_ROAD_MOVE_COAST_DECEL_FRACTION 0.5
34 
37 #define DT_ROAD_MOVE_DESTROYED_DECELERATION -5.0
38 
49 {
50 
51 public:
52 
55  bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain);
56 
58  virtual ~DtRoadMovementUpdater();
59 
62 
63  virtual bool init();
64 
65  virtual void clear();
66 
67  virtual void setPSR(DtRailMovementControllerPSR* psr);
69  virtual void movementComplete();
70 
72 
75 
86  virtual void updateRailAndWorldPosition(DtRoadSegment* currentSeg, double newAccel,
87  double dT, double simTime = 0.0);
88 
93  virtual void updateNoMovement();
94 
98  virtual double offLaneDistanceThreshold() const;
99 
102  virtual DtVector steeringTargetPosition() const;
103 
106  virtual DtVector closestPositionInLane() const;
107 
111  virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg);
112 
114 
115 protected:
120  virtual void updateLaneAcquisitionStatus(const DtRoadSegment* segment);
121 
123  virtual double fuelUsed(double speed) const;
124 
129  virtual void kinematicUpdate(const double oldSpeed, const double accel,
130  const double dt, double& deltaPosition, double& newSpeed,
131  double &actualAccel);
132 
148  virtual void doKinematicUpdateAlongRail(
149  const double dt,
150  DtRoadSegment* currentSeg,
151  const int roadLaneNum,
152  const double oldPositionInLane,
153  const double oldSpeed,
154  double & accel,
155  double & newPositionInLane,
156  double & newLateralOffset,
157  double & laneChangeHeadingOffset,
158  double & newSpeed,
159  double & newRotationRate);
160 
176  virtual void computePositionInDownstreamSegment(
177  DtRoadSegment* & currentSeg,
178  int & roadLaneNum,
179  double & newPositionInLane,
180  const double newLateralOffset,
181  double &segmentCurveHeadingOffset,
182  DtVector& localPosition,
183  int & segmentIndex);
184 
204  virtual void updateLateralOffset(const double currentOffset,
205  const double distanceBetweenLanes, const double speed,
206  const double xMove,
207  double & newLateralOffset, double& newHeadingOffset,
208  double &headingChangeRate);
209 
217  virtual void updatePsrWithNewState(
218  const int roadLaneNum,
219  const bool isSwitchingLanes,
220  const int roadSegmentIndex,
221  const double positionInLane,
222  double lateralOffset,
223  const double heading,
224  const double newSpeed,
225  const double newAccel,
226  DtRoadSegment* currentSegment);
227 
236  virtual void computeBodyMotionVectors(const double speed,
237  const double accel, const double turnRate, const double dt,
238  DtVector & bodyVelocity, DtVector & bodyAcceleration);
239 
245  virtual void computeRepositoryUpdateVariables(
246  const DtVector & newLocalPosition,
247  const DtVector & newBodyVelocity,
248  const DtVector & newBodyAcceleration,
249  const DtDcm & newLocalOrientation,
250  const double newRotationRate,
251  DtVector & newRelativeVelocity,
252  DtVector & newRelativeAcceleration,
253  DtTaitBryan & newLocalOrientationTb,
254  DtVector & newBodyRotationalVelocity
255  );
256 
263  virtual void useFuel(double fuelUsed);
264 
265  virtual bool isEntityImmobilized();
266 
272  virtual double fuelLeft() const;
273 
291  virtual void updateRepository(const DtVector & localPosition,
292  const DtVector & localVelocity, const DtVector & localAcceleration,
293  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
294  double newHeading);
295 
321  virtual void calculateOrientationAndPosition(
322  const DtVector& newLocalProjectedLocation, const double newHeading,
323  DtDcm& newLocalOrientation, DtVector& newLocalPosition);
324 
328  virtual void calculateOriginLocation(
329  const DtVector & turnCenterLocation,
330  const double heading,
331  DtVector & originLocation);
332 
344  bool groundClamp(const double heading, const DtVector& location,
345  DtAttachedTerrain& terrain, DtVector& newNormal);
346 
351  void groundClampHighFidelity(const double heading, const DtVector& location,
352  DtAttachedTerrain& terrain, DtVector& newNormal);
353 
359  void groundClampLowFidelity(const double heading, const DtVector& location,
360  DtAttachedTerrain& terrain, DtVector& newNormal);
361 
362  DtLocalObject* entity() const;
364 
369 
378  virtual void steerTowardLane(DtRoadSegment* segment, const double desiredAcceleration);
379 
383  //virtual double distanceOfActualPositionBehindLanePosition(
385 
388  virtual double lookAheadDistance() const;
389 
391  virtual bool createAutoActuatorPorts();
392 
396  virtual bool createThrottlePort();
397  virtual bool createSteeringPort();
398  virtual bool createBrakePort();
399  virtual bool createGearPort();
400  virtual bool createParkingBrakePort();
401 
402  virtual DtConstrainedAnalogOutputPort* throttlePort();
403  virtual DtConstrainedAnalogOutputPort* steeringPort();
404  virtual DtConstrainedAnalogOutputPort* brakePort();
405  virtual DtConstrainedIntegerOutputPort* gearPort();
406  virtual DtBooleanOutputPort* parkingBrakePort();
407 
409 
410 private:
413 
416 
418  const DtRoadMovementUpdater & operator=(const
419  DtRoadMovementUpdater & orig);
420 
421 protected:
424 
431 
433 
437 
440 
444 
447  const DtRoadMovementDescriptor* myRoadMovementDescriptor = nullptr;
448 
451 
458 
465 
472 
479 
485 
490 
492 
493 };
494 
495 
496 
DtConstrainedIntegerOutputPort is a version of DtIntegerOutputPort which will constrain any outgoing ...
Definition: constrainedIntegerIOPort.h:53
DtRoadMovementController * myController
Definition: roadMovementUpdater.h:422
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
This class is used to interface with the terrain a particular entity is &quot;attached&quot; to...
Definition: attachedTerrain.h:57
Description: This repository holds all information that is common to all the forms of all objects wit...
Definition: vrfMovingObjectStateRepository.h:31
DtOutputPortGroup * myAutomotiveControlPortGroup
Output Port Group Name: automotive-control Output Port Group Description: Collection of control outpu...
Definition: roadMovementUpdater.h:489
Instances of DtBooleanOutputPort are output ports through which data producers can send boolean data...
Definition: boolIOPort.h:45
DtRailSegment are segments entities can follow when using the rail movement system.
Definition: railSegment.h:20
Instances of DtRailMovementControllerPSR are used to hold the shared/checkpointable data for a rail m...
Definition: railMovementControllerPSR.h:48
DtConstrainedIntegerOutputPort * myGearPort
Output Port Name: gear Output Port Description: Output Port Range: Output Port Default Value: Outp...
Definition: roadMovementUpdater.h:478
DtRailMovementControllerPSR * myRailMovementPSR
Definition: roadMovementUpdater.h:423
DtRoadMovementController is a movement controller that models an entity&#39;s movement along a road path...
Definition: roadMovementController.h:65
DtOutputPortGroup is a data port group of a data provider. It may contain any number of DtOutputPorts...
Definition: outputPortGroup.h:34
DtConstrainedAnalogOutputPort is a version of DtAnalogOutputPort which will constrain any outgoing va...
Definition: constrainedAnalogIOPort.h:57
Models an entity moving along a generated road path. Provides a kinematics-based model of an entity m...
Definition: roadMovementUpdater.h:48
const DtAttachedTerrain * myAttachedTerrain
Used to ground clamp the entity– TODO how we ground clamp, ie get access to terrain may change...
Definition: roadMovementUpdater.h:428
DtVector myLocalNewTargetPosition
For visualization, when acquiring lane.
Definition: roadMovementUpdater.h:442
DtUpdateRepositoryOutputPortGroup * myUpdateRepositoryOutputPortGroup
When in acquiring-lane.
Definition: roadMovementUpdater.h:436
DtVector myLocalEquivalentInLanePosition
Definition: roadMovementUpdater.h:443
bool myUseHighFidelityGroundClamping
Definition: roadMovementUpdater.h:429
DtConstrainedAnalogOutputPort * myBrakePort
Output Port Name: brake Output Port Description: Output Port Range: 0. to 1. Output Port Default Val...
Definition: roadMovementUpdater.h:471
bool myWarnedAboutImmobilizedOnce
To warn user about new immobilization just once.
Definition: roadMovementUpdater.h:439
DtBooleanOutputPort * myParkingBrakePort
Output Port Name: parking-brake Output Port Description: Output Port Default Value: True Output Grou...
Definition: roadMovementUpdater.h:484
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
Description of one segment of a road.
Definition: roadSegment.h:406
bool myDrivingOnLeft
Definition: roadMovementUpdater.h:430
DtUpdateRepositoryOutputPortGroup is a data port group of a data consumer that contains methods and p...
Definition: updateRepositoryOutputPortGroup.h:31
DtConstrainedAnalogOutputPort * mySteeringPort
Output Port Name: steering Output Port Description: Output Port Range: -1.0 to 1.0 Output Port Default Value: Output Group Parent: automotive-control.
Definition: roadMovementUpdater.h:464
DtPlatformLocalObjectFacade myPlatformLocalObjectFacade
Member to allow for access to platform specific data.
Definition: roadMovementUpdater.h:446
DtConstrainedAnalogOutputPort * myThrottlePort
Output Port Name: throttle Output Port Description: Output Port Range: 0. to 1. Output Port Default ...
Definition: roadMovementUpdater.h:457
A locally simulated VRF object.
Definition: localObject.h:98
A DtComponentDescriptor that has parameters that indicate how an entity should move along a rail segm...
Definition: roadMovementDescriptor.h:25

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)