VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
roadDrivingLogic.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2017 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
12 #include "vrfmodel/roadSegment.h"
13 
17 
19 {
20 public:
21  DtRoadDrivingLogic(DtRoadMovementController * parentController);
23 
29 
33  virtual double maxDesignDriverLateralAcceleration_G(){ return 0.15; }
34 
38  virtual double desiredDecelerationFractionOfMax(){ return 0.3; }
42  virtual double desiredAccelerationFractionOfMax(){ return 0.5; }
46  virtual double desiredLateralAccelerationFractionOfMax(){ return 0.4; }
47 
52  virtual double desiredFixedHeadway(){ return 1.0; }
53 
60  virtual double minimumCurveSpeed(){ return 1.0; }
61 
66  virtual double maximumLaneChangeTurnAngle(){ return 0.8; }
67 
72  virtual double laneChangeFractionToClearLane(){ return 0.4; }
73 
79  virtual double laneEndCheckLookaheadTime(){ return 15.0; }
80 
85  virtual double laneSwitchDecisionAccelThreshold(){ return 2.0; }
86 
93  virtual double maxForcedDecelForGapAcceptance(){ return -4.0; }
94 
96 
103 
124  virtual double combinedAcceleration(
125  DtRoadSegment* currentRoadSegment,
126  const double desiredDecelToUse,
127  const double tickPeriod,
128  const double currentSpeed,
129  const double orderedSpeed,
130  const int laneNumber,
131  const double positionInLane,
132  const double laneSpaceRequired,
133  const double laneChangeWidth,
134  const double maxAcceleration,
135  const double maxLateralAccel,
136  bool &laneContinues,
137  bool & pathContinues,
138  double & distanceToLaneEnd,
139  double & freeFlowAccel,
140  double &orderedSpeedAccel,
141  bool debug = false);
142 
195  virtual int selectedLane(
196  DtRoadSegment* currentRoadSegment,
197  const int roadLaneN,
198  const bool currentLaneContinues,
199  const double distanceToLaneEnd,
200  const double positionInLane,
201  const double currentSpeed,
202  const double currentLaneAcceleration,
203  const double freeFlowAcceleration,
204  const double tickPeriod,
205  const double desiredDecelToUse,
206  const double maxLateralAccel,
207  const DtSimObject* convoyTgt,
208  int& desiredFutureLane,
209  bool debug = false
210  );
211 
217  virtual double oldLaneObstacleConstraint(
218  DtRoadSegment* currentSegment, const DtMovingObjectParameters* params,
219  const double currentPosition, const double currentOffset,
220  const DtRoadObstructionFinder* obstructionFinder,
221  const double desiredDecelToUse, const double dt,
222  const double accelForNoObstacle, const double currentSpeed,
223  const int currentLaneN, std::vector<DtVector>& obstacleLocations,
224  std::vector<std::vector<DtVector> >& debugBoxes, bool debug = false);
225 
230  virtual double distanceNeededToChangeLanes(
231  const double minTurnRadius,
232  const double distanceBetweenLanes,
233  const double speed,
234  bool debug = false);
235 
237 
238 protected:
239 
244 
245  double followConvoyAcceleration(
246  const double currentSpeed, const double tickPeriod,
247  const double deceleration,
248  const double convoyGap,
249  const DtSimObject* leadVehicle, bool debug = false);
250 
254  virtual double orderedSpeedAcceleration(const double currentSpeed,
255  const double orderedSpeed,
256  const double dt,
257  bool debug = false);
258 
270  virtual double extraAccelConstraint(const double currentSpeed,
271  const double dt, bool debug = false)
272  { return 1e8; }
273 
283  double downstreamTcdAccelConstraint(
284  DtRoadSegment* startSegment,
285  const double desiredDecelToUse,
286  const double dt, const double currentSpeed, const int roadLaneN,
287  const double positionAlongLane,
288  const double maxAccel, const double maxLateralAccel,
289  bool debug = false);
290 
291 
312  virtual double downstreamCurveAccelConstraint(
313  DtRoadSegment* startSegment,
314  const double desiredDecelToUse,
315  const double dt, const double currentSpeed, const int roadLaneN,
316  const double positionAlongLane,
317  const double maxAccel, const double maxLateralAccel, bool debug = false);
318 
329  virtual double downstreamSpeedLimitAccelConstraint(DtRoadSegment* currentSegment,
330  const double desiredDecelToUse,
331  const double dt, const double currentSpeed, bool debug = false);
332 
364  virtual double laneEndAccelConstraint(
365  DtRoadSegment* currentSegment, const double orderedSpeed,
366  const double desiredDecelToUse,
367  const double dt, const double currentSpeed, const int roadLaneN,
368  const double positionAlongLane,
369  const double extraSpaceRequired,
370  const double maxAccel,
371  bool & laneContinues,
372  double & distanceToLaneEnd, bool & pathContinues, bool debug = false);
373 
395  virtual double obstacleAccelConstraint(
396  DtRoadSegment* currentSegment,
397  const DtRoadObstructionFinder* obstructionFinder,
398  const double maxAcceleration,
399  const double desiredDecelToUse, const double dt, const double currentSpeed,
400  const int roadLaneN, const double positionAlongLane,
401  const double spaceNeeded,
402  double& obstacleDistanceAhead,
403  double& obstacleSpeed, std::vector<std::vector<DtVector> > & debugBoxes, std::vector<DtVector>& obstacleLocations, bool debug = false);
404 
433  virtual double completeLaneChangeMnvrAccelConstraint(
434  DtRoadSegment* currentSegment, const double currentOffset,
435  const double desiredDecelToUse, const DtMovingObjectParameters* params,
436  const double dt,
437  const double accelForNoObstacle, const double currentSpeed,
438  const double completionFraction,
439  const double completionDistance, bool debug = false);
440 
442 
443 
449  virtual bool laneConstrainedBelowFreeFlow(const double currentLaneAcceleration,
450  const double otherLaneAcceleration,
451  const double tickPeriod,
452  const double currentSpeed);
453 
462  virtual bool mergeGapAvailableBehind(const DtRoadSegment* currentRoadSegment,
463  const int roadLaneNum, const double positionInLane,
464  const double nominalDecel, const double tickPeriod,
465  const double ownSpeed, bool debug = false);
466 
467 
468 protected:
470 };
virtual double maxDesignDriverLateralAcceleration_G()
Typical value (see AASHTO Green Book), civilian driver comfort level. In Gs. This is used as an assum...
Definition: roadDrivingLogic.h:33
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
virtual double maximumLaneChangeTurnAngle()
The maximum angle a vehicle makes with the lane direction when it is changing lanes (slowly)...
Definition: roadDrivingLogic.h:66
virtual double maxForcedDecelForGapAcceptance()
When the vehicle is considering merging into an adjacent lane, the deceleration required of a vehicle...
Definition: roadDrivingLogic.h:93
virtual double desiredDecelerationFractionOfMax()
This could be overridden to use an entity-specific &quot;aggressiveness&quot; parameter.
Definition: roadDrivingLogic.h:38
DtRoadMovementController * myParentController
Definition: roadDrivingLogic.h:469
virtual double desiredAccelerationFractionOfMax()
This could be overridden to use an entity-specific &quot;aggressiveness&quot; parameter.
Definition: roadDrivingLogic.h:42
DtRoadMovementController is a movement controller that models an entity&#39;s movement along a road path...
Definition: roadMovementController.h:65
virtual double minimumCurveSpeed()
A minimum speed to go around curves, especially artificially sharp curves generated by awkwardly form...
Definition: roadDrivingLogic.h:60
virtual double laneEndCheckLookaheadTime()
The time before reaching the end of a lane that the entity starts to prefer to be in a lane that cont...
Definition: roadDrivingLogic.h:79
virtual double laneSwitchDecisionAccelThreshold()
The difference in acceleration between an adjacent lane and the current lane that will trigger a lane...
Definition: roadDrivingLogic.h:85
virtual double extraAccelConstraint(const double currentSpeed, const double dt, bool debug=false)
A placeholder for user extension. This function is called whether the entity is following a convoy ve...
Definition: roadDrivingLogic.h:270
The moving-object-param parameter type is used for objects that are capable of movement, such as individual entities and aggregates. DtMovingObjectParameters; holds all of the configurable parameters for the DtVrfMovingObjectStateRepository class. Parameters include support points, maximum speed, maximum reverse speed, turning radius, maximum slope, ordered speed, maximum acceleration, maximum deceleration, and fuel efficiency. Aggregates are moving objects and have this parameter type. All of the platform-specific parameter types derive from this one. .
Definition: movingObjectParameters.h:32
virtual double desiredFixedHeadway()
The desired fixed gap between cars when one is following the other (very slowly, or stopped)...
Definition: roadDrivingLogic.h:52
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
Description of one segment of a road.
Definition: roadSegment.h:406
An object containing functions to find obstructions in road segments in a road path; part of a DtRoad...
Definition: roadObstructionFinder.h:30
virtual double laneChangeFractionToClearLane()
The fraction of a lane change maneuver that a vehicle has to complete before it can ignore obstacles ...
Definition: roadDrivingLogic.h:72
Definition: roadDrivingLogic.h:18
virtual double desiredLateralAccelerationFractionOfMax()
This could be overridden to use an entity-specific &quot;aggressiveness&quot; parameter.
Definition: roadDrivingLogic.h:46

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)