VR-Forces 4.10 Class Documentation
 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 DtVrfObject* 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 DtVrfObject* 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.
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
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
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:66
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.
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.
Definition: movingObjectParameters.h:33
virtual double desiredFixedHeadway()
The desired fixed gap between cars when one is following the other (very slowly, or stopped)...
Definition: roadDrivingLogic.h:52
Description of one segment of a road.
Definition: roadSegment.h:390
An object containing functions to find obstructions in road segments in a road path; part of a DtRoad...
Definition: roadObstructionFinder.h:31
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 Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)