Eclipse SUMO - Simulation of Urban MObility
MSVehicle.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
27 // Representation of a vehicle in the micro simulation
28 /****************************************************************************/
29 #pragma once
30 #include <config.h>
31 
32 #include <list>
33 #include <deque>
34 #include <map>
35 #include <set>
36 #include <string>
37 #include <vector>
38 #include <memory>
39 #include "MSGlobals.h"
40 #include "MSBaseVehicle.h"
41 #include "MSNet.h"
42 
43 #define INVALID_SPEED 299792458 + 1 // nothing can go faster than the speed of light! Refs. #2577
44 
45 // ===========================================================================
46 // class declarations
47 // ===========================================================================
48 class SUMOSAXAttributes;
49 class MSMoveReminder;
50 class MSLaneChanger;
51 class MSVehicleTransfer;
53 class MSStoppingPlace;
54 class MSStop;
55 class MSChargingStation;
56 class MSOverheadWire;
57 class MSParkingArea;
58 class MSPerson;
59 class MSDevice;
60 class OutputDevice;
61 class Position;
62 class MSJunction;
63 class MSLeaderInfo;
67 class MSDevice_Friction;
68 
69 
70 // ===========================================================================
71 // class definitions
72 // ===========================================================================
77 class MSVehicle : public MSBaseVehicle {
78 public:
79 
81  friend class MSLaneChanger;
82  friend class MSLaneChangerSublane;
83 
87  class State {
89  friend class MSVehicle;
90  friend class MSLaneChanger;
91  friend class MSLaneChangerSublane;
92 
93  public:
95  State(double pos, double speed, double posLat, double backPos, double previousSpeed);
96 
98  State(const State& state);
99 
101  State& operator=(const State& state);
102 
104  bool operator!=(const State& state);
105 
107  double pos() const {
108  return myPos;
109  }
110 
112  double speed() const {
113  return mySpeed;
114  };
115 
117  double posLat() const {
118  return myPosLat;
119  }
120 
122  double backPos() const {
123  return myBackPos;
124  }
125 
127  double lastCoveredDist() const {
128  return myLastCoveredDist;
129  }
130 
131 
132  private:
134  double myPos;
135 
137  double mySpeed;
138 
140  double myPosLat;
141 
143  // if the vehicle occupies multiple lanes, this is the position relative
144  // to the lane occupied by its back
145  double myBackPos;
146 
149 
155 
156  };
157 
158 
163  public:
166 
167  // return the waiting time within the last memory millisecs
168  SUMOTime cumulatedWaitingTime(SUMOTime memory = -1) const;
169 
170  // process time passing for dt millisecs
171  void passTime(SUMOTime dt, bool waiting);
172 
173  const std::string getState() const;
174 
175  void setState(const std::string& state);
176 
177  private:
180 
184  std::deque<std::pair<SUMOTime, SUMOTime> > myWaitingIntervals;
185 
188  };
189 
190 
203  };
204 
213  MSVehicleType* type, const double speedFactor);
214 
216  virtual ~MSVehicle();
217 
218  void initDevices();
219 
221  bool hasValidRouteStart(std::string& msg);
222 
224 
225 
235 
236 
237 
239 
240 
244  bool hasArrived() const;
245 
256  bool replaceRoute(ConstMSRoutePtr route, const std::string& info, bool onInit = false, int offset = 0, bool addStops = true, bool removeStops = true, std::string* msgReturn = nullptr);
257 
259 
260 
262 
263 
281  void workOnMoveReminders(double oldPos, double newPos, double newSpeed);
283 
289  void workOnIdleReminders();
290 
296  bool checkActionStep(const SUMOTime t);
297 
303  void resetActionOffset(const SUMOTime timeUntilNextAction = 0);
304 
305 
315  void updateActionOffset(const SUMOTime oldActionStepLength, const SUMOTime newActionStepLength);
316 
317 
335  void planMove(const SUMOTime t, const MSLeaderInfo& ahead, const double lengthsInFront);
336 
339  void setApproachingForAllLinks(const SUMOTime t);
340 
342  void registerInsertionApproach(MSLink* link, double dist);
343 
344 
357  bool executeMove();
358 
360  void executeFractionalMove(double dist);
361 
368  double getDeltaPos(const double accel) const;
369 
370 
372 
373 
377  double getPositionOnLane() const {
378  return myState.myPos;
379  }
380 
384  double getLastStepDist() const {
385  return myState.lastCoveredDist();
386  }
387 
391  double getPositionOnLane(const MSLane* lane) const;
392 
401  inline double getBackPositionOnLane(const MSLane* lane) const {
402  return getBackPositionOnLane(lane, false);
403  }
404 
408  double getBackPositionOnLane() const {
410  }
411 
416  double getLateralPositionOnLane() const {
417  return myState.myPosLat;
418  }
419 
420  void setLateralPositionOnLane(double posLat) {
421  myState.myPosLat = posLat;
422  }
423 
426  }
427 
432  double getRightSideOnLane() const;
433 
438  double getLeftSideOnLane() const;
439 
444  double getRightSideOnLane(const MSLane* lane) const;
445 
450  double getLeftSideOnLane(const MSLane* lane) const;
451 
455  double lateralDistanceToLane(const int offset) const;
456 
458  double getLateralOverlap() const;
459  double getLateralOverlap(const MSLane* lane) const;
460  double getLateralOverlap(double posLat, const MSLane* lane) const;
461 
467  double getLeftSideOnEdge(const MSLane* lane = 0) const;
468 
474  double getRightSideOnEdge(const MSLane* lane = 0) const;
475 
481  double getCenterOnEdge(const MSLane* lane = 0) const;
482 
488  double getLatOffset(const MSLane* lane) const;
489 
493  double getSpeed() const {
494  return myState.mySpeed;
495  }
496 
497 
501  double getPreviousSpeed() const {
502  return myState.myPreviousSpeed;
503  }
504 
505 
510  void setPreviousSpeed(double prevSpeed, double prevAcceleration);
511 
512 
517  double getAcceleration() const {
518  return myAcceleration;
519  }
520 
522  double getCurrentApparentDecel() const;
523 
529  return myType->getActionStepLength();
530  }
531 
536  double getActionStepLengthSecs() const {
538  }
539 
540 
545  return myLastActionTime;
546  }
547 
549 
550 
551 
553 
554 
558  double getSlope() const;
559 
560 
568  Position getPosition(const double offset = 0) const;
569 
570 
578  Position getPositionAlongBestLanes(double offset) const;
579 
580 
584  const MSLane* getLane() const {
585  return myLane;
586  }
587 
593  return myLane;
594  }
595 
596  // @brief return the lane on which the back of this vehicle resides
597  const MSLane* getBackLane() const;
598 
603  double getMaxSpeedOnLane() const;
604 
608  inline bool isOnRoad() const {
609  return myAmOnNet;
610  }
611 
615  void
616  setIdling(bool amIdling) {
617  myAmIdling = amIdling;
618  }
619 
624  inline bool isIdling() const {
625  return myAmIdling;
626  }
627 
631  inline bool isActive() const {
632  return myActionStep;
633  }
634 
638  inline bool isActionStep(SUMOTime t) const {
639  return (t - myLastActionTime) % getActionStepLength() == 0;
640 // return t%getActionStepLength() == 0; // synchronized actions for all vehicles with identical actionsteplengths
641  }
642 
643 
647  bool isFrontOnLane(const MSLane* lane) const;
648 
652  const MSEdge* getCurrentEdge() const;
653 
655  const MSEdge* getNextEdgePtr() const;
656 
663  ConstMSEdgeVector::const_iterator getRerouteOrigin() const;
664 
665 
673  SUMOTime getWaitingTime(const bool accumulated = false) const {
674  if (!accumulated) {
675  return myWaitingTime;
676  }
678  }
679 
687  return myTimeSinceStartup;
688  }
689 
690  inline double getTimeSinceStartupSeconds() const {
692  }
693 
704  return TIME2STEPS(myTimeLoss);
705  }
706 
707 
714  return STEPS2TIME(getWaitingTime(true));
715  }
716 
719  double getTimeLossSeconds() const {
720  return myTimeLoss;
721  }
722 
725  double getStopDelay() const;
726 
729  double getStopArrivalDelay() const;
730 
734  double getAngle() const {
735  return myAngle;
736  }
737 
738 
743  return Position(std::cos(myAngle) * myState.speed(), std::sin(myAngle) * myState.speed());
744  }
746 
748  double computeAngle() const;
749 
751  void setAngle(double angle, bool straightenFurther = false);
752 
759  void setActionStepLength(double actionStepLength, bool resetActionOffset = true);
760 
762  static bool overlap(const MSVehicle* veh1, const MSVehicle* veh2) {
763  if (veh1->myState.myPos < veh2->myState.myPos) {
764  return veh2->myState.myPos - veh2->getVehicleType().getLengthWithGap() < veh1->myState.myPos;
765  }
766  return veh1->myState.myPos - veh1->getVehicleType().getLengthWithGap() < veh2->myState.myPos;
767  }
768 
771  bool congested() const;
772 
773 
785  void activateReminders(const MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
786 
793  void enterLaneAtMove(MSLane* enteredLane, bool onTeleporting = false);
794 
795 
796 
805  void enterLaneAtInsertion(MSLane* enteredLane, double pos, double speed, double posLat,
806  MSMoveReminder::Notification notification);
807 
812  void setTentativeLaneAndPosition(MSLane* lane, double pos, double posLat = 0);
813 
818  void enterLaneAtLaneChange(MSLane* enteredLane);
819 
820 
822  void leaveLane(const MSMoveReminder::Notification reason, const MSLane* approachedLane = 0);
823 
830  void updateDriveItems();
831 
835  const std::pair<double, const MSLink*>& getNextTurn() {
836  return myNextTurn;
837  }
838 
839 
842 
843  const std::vector<MSLane*>& getFurtherLanes() const {
844  return myFurtherLanes;
845  }
846 
847  const std::vector<double>& getFurtherLanesPosLat() const {
848  return myFurtherLanesPosLat;
849  }
850 
851 
853  bool onFurtherEdge(const MSEdge* edge) const;
854 
856  bool isBidiOn(const MSLane* lane) const;
857 
860 
861  //
865  struct LaneQ {
867  MSLane* lane = nullptr;
869  double length;
873  double occupation;
880  /* @brief Longest sequence of (normal-edge) lanes that can be followed without a lane change
881  * The 'length' attribute is the sum of these lane lengths
882  * (There may be alternative sequences that have equal length)
883  * It is the 'best' in the strategic sense of reducing required lane-changes
884  */
885  std::vector<MSLane*> bestContinuations;
886  };
887 
891  const std::vector<LaneQ>& getBestLanes() const;
892 
910  void updateBestLanes(bool forceRebuild = false, const MSLane* startLane = 0);
911 
914  void updateLaneBruttoSum();
915 
919  const std::vector<MSLane*>& getBestLanesContinuation() const;
920 
921 
925  const std::vector<MSLane*>& getBestLanesContinuation(const MSLane* const l) const;
926 
933  const std::vector<const MSLane*> getUpcomingLanesUntil(double distance) const;
934 
940  const std::vector<const MSLane*> getPastLanesUntil(double distance) const;
941 
946  const std::vector<MSLane*> getUpstreamOppositeLanes() const;
947 
948  /* @brief returns the current signed offset from the lane that is most
949  * suited for continuing the current route (in the strategic sense of reducing lane-changes)
950  * - 0 if the vehicle is on its best lane
951  * - negative if the vehicle should change to the right
952  * - positive if the vehicle should change to the left
953  */
954  int getBestLaneOffset() const;
955 
957  double getBestLaneDist() const;
958 
960  void adaptBestLanesOccupation(int laneIndex, double density);
961 
963 
965  void fixPosition();
966 
968  std::pair<const MSLane*, double> getLanePosAfterDist(double distance) const;
969 
977  inline const MSCFModel& getCarFollowModel() const {
978  return myType->getCarFollowModel();
979  }
980 
986  std::shared_ptr<MSSimpleDriverState> getDriverState() const;
987 
992  double getFriction() const;
993 
999  return myCFVariables;
1000  }
1001 
1004  inline bool hasDriverState() const {
1005  return myDriverState != nullptr;
1006  }
1008 
1009 
1012 
1015  bool willStop() const;
1016 
1018  bool isStoppedOnLane() const;
1019 
1021  bool keepStopping(bool afterProcessing = false) const;
1022 
1026  SUMOTime collisionStopTime() const;
1027 
1030  bool brokeDown() const;
1031 
1035  bool isRemoteControlled() const;
1036 
1040  bool wasRemoteControlled(SUMOTime lookBack = DELTA_T) const;
1041 
1043  double nextStopDist() const {
1044  return myStopDist;
1045  }
1047 
1048  int getLaneIndex() const;
1049 
1059  double getDistanceToPosition(double destPos, const MSLane* destLane) const;
1060 
1061 
1069  double processNextStop(double currentVelocity);
1070 
1071 
1079  std::pair<const MSVehicle* const, double> getLeader(double dist = 0) const;
1080 
1089  std::pair<const MSVehicle* const, double> getFollower(double dist = 0) const;
1090 
1097  double getTimeGapOnLane() const;
1098 
1099 
1104  void addTransportable(MSTransportable* transportable);
1105 
1108 
1112  enum Signalling {
1143  };
1144 
1145 
1151  LC_NEVER = 0, // lcModel shall never trigger changes at this level
1152  LC_NOCONFLICT = 1, // lcModel may trigger changes if not in conflict with TraCI request
1153  LC_ALWAYS = 2 // lcModel may always trigger changes of this level regardless of requests
1154  };
1155 
1156 
1159  LCP_ALWAYS = 0, // change regardless of blockers, adapt own speed and speed of blockers
1160  LCP_NOOVERLAP = 1, // change unless overlapping with blockers, adapt own speed and speed of blockers
1161  LCP_URGENT = 2, // change if not blocked, adapt own speed and speed of blockers
1162  LCP_OPPORTUNISTIC = 3 // change if not blocked
1163  };
1164 
1165 
1169  void switchOnSignal(int signal) {
1170  mySignals |= signal;
1171  }
1172 
1173 
1177  void switchOffSignal(int signal) {
1178  mySignals &= ~signal;
1179  }
1180 
1181 
1185  int getSignals() const {
1186  return mySignals;
1187  }
1188 
1189 
1194  bool signalSet(int which) const {
1195  return (mySignals & which) != 0;
1196  }
1198 
1199 
1201  bool unsafeLinkAhead(const MSLane* lane) const;
1202 
1204  bool passingMinor() const;
1205 
1206 
1207 
1215  double getSpeedWithoutTraciInfluence() const;
1216 
1221  bool rerouteParkingArea(const std::string& parkingAreaID, std::string& errorMsg);
1222 
1229  bool addTraciStop(SUMOVehicleParameter::Stop stop, std::string& errorMsg);
1230 
1231  bool handleCollisionStop(MSStop& stop, const double distToStop);
1232 
1237  bool resumeFromStopping();
1238 
1240  double updateFurtherLanes(std::vector<MSLane*>& furtherLanes,
1241  std::vector<double>& furtherLanesPosLat,
1242  const std::vector<MSLane*>& passedLanes);
1243 
1245  PositionVector getBoundingBox(double offset = 0) const;
1246 
1248  PositionVector getBoundingPoly(double offset = 0) const;
1249 
1260  };
1261 
1264  bool setExitManoeuvre();
1266  void setManoeuvreType(const MSVehicle::ManoeuvreType mType);
1267 
1269  bool manoeuvreIsComplete() const;
1272 
1273 
1280  class Manoeuvre {
1281 
1282  public:
1284  Manoeuvre();
1285 
1287  Manoeuvre(const Manoeuvre& manoeuvre);
1288 
1290  Manoeuvre& operator=(const Manoeuvre& manoeuvre);
1291 
1293  bool operator!=(const Manoeuvre& manoeuvre);
1294 
1297 
1299  bool configureExitManoeuvre(MSVehicle* veh);
1300 
1303 
1305  bool
1306  manoeuvreIsComplete(const ManoeuvreType checkType) const;
1307 
1309  bool
1310  manoeuvreIsComplete() const;
1311 
1313  double getGUIIncrement() const;
1314 
1317 
1319  void setManoeuvreType(const MSVehicle::ManoeuvreType mType);
1320 
1321  private:
1324 
1326  std::string myManoeuvreStop;
1327 
1330 
1333 
1336 
1337  // @brief Angle (radians) through which parking vehicle moves in each sim step
1339  };
1340 
1341  // Current or previous (completed) manoeuvre
1343 
1356  class Influencer : public BaseInfluencer {
1357  private:
1358 
1368  void vehicleStateChanged(const SUMOVehicle* const vehicle, MSNet::VehicleState to, const std::string& info = "");
1369  };
1370 
1371 
1374  GapControlState();
1375  virtual ~GapControlState();
1377  static void init();
1379  static void cleanup();
1381  void activate(double tauOriginal, double tauTarget, double additionalGap, double duration, double changeRate, double maxDecel, const MSVehicle* refVeh);
1383  void deactivate();
1385  double tauOriginal;
1387  double tauCurrent;
1389  double tauTarget;
1398  double changeRate;
1400  double maxDecel;
1404  bool active;
1413 
1415  static std::map<const MSVehicle*, GapControlState*> refVehMap;
1416 
1417  private:
1419  };
1420 
1421 
1422  public:
1424  Influencer();
1425 
1427  ~Influencer();
1428 
1430  static void init();
1432  static void cleanup();
1433 
1437  void setSpeedTimeLine(const std::vector<std::pair<SUMOTime, double> >& speedTimeLine);
1438 
1441  void activateGapController(double originalTau, double newTimeHeadway, double newSpaceHeadway, double duration, double changeRate, double maxDecel, MSVehicle* refVeh = nullptr);
1442 
1445  void deactivateGapController();
1446 
1450  void setLaneTimeLine(const std::vector<std::pair<SUMOTime, int> >& laneTimeLine);
1451 
1455  void adaptLaneTimeLine(int indexShift);
1456 
1460  void setSublaneChange(double latDist);
1461 
1463  int getSpeedMode() const;
1464 
1466  int getLaneChangeMode() const;
1467 
1469 
1471 
1483  double influenceSpeed(SUMOTime currentTime, double speed, double vSafe, double vMin, double vMax);
1484 
1497  double gapControlSpeed(SUMOTime currentTime, const SUMOVehicle* veh, double speed, double vSafe, double vMin, double vMax);
1498 
1506  int influenceChangeDecision(const SUMOTime currentTime, const MSEdge& currentEdge, const int currentLaneIndex, int state);
1507 
1508 
1514  double changeRequestRemainingSeconds(const SUMOTime currentTime) const;
1515 
1520  inline bool getRespectJunctionPriority() const {
1522  }
1523 
1524 
1528  inline bool getEmergencyBrakeRedLight() const {
1529  return myEmergencyBrakeRedLight;
1530  }
1531 
1536  inline bool getRespectJunctionLeaderPriority() const {
1538  }
1539 
1540 
1542  bool considerSafeVelocity() const {
1543  return myConsiderSafeVelocity;
1544  }
1545 
1549  void setSpeedMode(int speedMode);
1550 
1554  void setLaneChangeMode(int value);
1555 
1559  double getOriginalSpeed() const;
1560 
1562  void setOriginalSpeed(double speed);
1563 
1564  void setRemoteControlled(Position xyPos, MSLane* l, double pos, double posLat, double angle, int edgeOffset, const ConstMSEdgeVector& route, SUMOTime t);
1565 
1567  return myLastRemoteAccess;
1568  }
1569 
1572 
1575 
1577  double implicitSpeedRemote(const MSVehicle* veh, double oldSpeed);
1578 
1580  double implicitDeltaPosRemote(const MSVehicle* veh);
1581 
1582  bool isRemoteControlled() const;
1583 
1584  bool isRemoteAffected(SUMOTime t) const;
1585 
1586  void setSignals(int signals) {
1587  myTraCISignals = signals;
1588  }
1589 
1590  int getSignals() const {
1591  return myTraCISignals;
1592  }
1593 
1594  double getLatDist() const {
1595  return myLatDist;
1596  }
1597 
1598  void resetLatDist() {
1599  myLatDist = 0.;
1600  }
1601 
1602  bool ignoreOverlap() const {
1604  }
1605 
1606  private:
1608  std::vector<std::pair<SUMOTime, double> > mySpeedTimeLine;
1609 
1611  std::vector<std::pair<SUMOTime, int> > myLaneTimeLine;
1612 
1614  std::shared_ptr<GapControlState> myGapControlState;
1615 
1618 
1620  double myLatDist;
1621 
1624 
1627 
1630 
1633 
1636 
1639 
1642 
1645  double myRemotePos;
1651 
1653 
1667 
1668  // @brief the signals set via TraCI
1670 
1671  };
1672 
1673 
1681 
1682  const BaseInfluencer* getBaseInfluencer() const;
1683  const Influencer* getInfluencer() const;
1684 
1685  bool hasInfluencer() const {
1686  return myInfluencer != nullptr;
1687  }
1688 
1690  int influenceChangeDecision(int state);
1691 
1693  void setRemoteState(Position xyPos);
1694 
1696  static int nextLinkPriority(const std::vector<MSLane*>& conts);
1697 
1699  bool isLeader(const MSLink* link, const MSVehicle* veh, const double gap) const;
1700 
1701  // @brief get the position of the back bumper;
1702  const Position getBackPosition() const;
1703 
1705  bool ignoreCollision() const;
1706 
1708  void updateParkingState();
1709 
1714  void replaceVehicleType(MSVehicleType* type);
1715 
1717  double getBrakeGap(bool delayed = false) const;
1718 
1720 
1721 
1723  void saveState(OutputDevice& out);
1724 
1727  void loadState(const SUMOSAXAttributes& attrs, const SUMOTime offset);
1728 
1729  void loadPreviousApproaching(MSLink* link, bool setRequest,
1730  SUMOTime arrivalTime, double arrivalSpeed,
1731  double arrivalSpeedBraking,
1732  double dist, double leaveSpeed);
1734 
1735 protected:
1736 
1739 
1755  void adaptLaneEntering2MoveReminder(const MSLane& enteredLane);
1757 
1758 
1766  void processLinkApproaches(double& vSafe, double& vSafeMin, double& vSafeMinDist);
1767 
1768 
1776  void processLaneAdvances(std::vector<MSLane*>& passedLanes, std::string& emergencyReason);
1777 
1778 
1786  double processTraCISpeedControl(double vSafe, double vNext);
1787 
1788 
1795  void removePassedDriveItems();
1796 
1799  void updateWaitingTime(double vNext);
1800 
1803  void updateTimeLoss(double vNext);
1804 
1805  /* @brief Check whether the vehicle is a train that can reverse its direction at the current point in its route
1806  * and return the speed in preparation for reversal
1807  *
1808  * @param[out] canReverse
1809  * @param[in] speedThreshold
1810  * @return speed for reversal
1811  */
1812  double checkReversal(bool& canReverse, double speedThreshold = SUMO_const_haltingSpeed, double seen = 0) const;
1813 
1816  void setBrakingSignals(double vNext) ;
1817 
1820  void setBlinkerInformation();
1821 
1824  void setEmergencyBlueLight(SUMOTime currentTime);
1825 
1827  void computeFurtherLanes(MSLane* enteredLane, double pos, bool collision = false);
1828 
1830  void updateOccupancyAndCurrentBestLane(const MSLane* startLane);
1831 
1833  Position validatePosition(Position result, double offset = 0) const;
1834 
1836  virtual void drawOutsideNetwork(bool /*add*/) {};
1837 
1839  void boardTransportables(MSStop& stop);
1840 
1842  bool joinTrainPart(MSVehicle* veh);
1843 
1845  bool joinTrainPartFront(MSVehicle* veh);
1846 
1848  double slowDownForSchedule(double vMinComfortable) const;
1849 
1851  void interpolateLateralZ(Position& pos, double offset, double posLat) const;
1852 
1856  double getDistanceToLeaveJunction() const;
1857 
1858 protected:
1859 
1863 
1865  double myTimeLoss;
1866 
1869 
1872 
1875 
1881 
1882 
1883 
1886 
1888 
1891 
1892  /* @brief Complex data structure for keeping and updating LaneQ:
1893  * Each element of the outer vector corresponds to an upcoming edge on the vehicles route
1894  * The first element corresponds to the current edge and is returned in getBestLanes()
1895  * The other elements are only used as a temporary structure in updateBestLanes();
1896  */
1897  std::vector<std::vector<LaneQ> > myBestLanes;
1898 
1899  /* @brief iterator to speed up retrieval of the current lane's LaneQ in getBestLaneOffset() and getBestLanesContinuation()
1900  * This is updated in updateOccupancyAndCurrentBestLane()
1901  */
1902  std::vector<LaneQ>::iterator myCurrentLaneInBestLanes;
1903 
1904  static std::vector<MSLane*> myEmptyLaneVector;
1905 
1908 
1911  std::pair<double, const MSLink*> myNextTurn;
1912 
1914  std::vector<MSLane*> myFurtherLanes;
1916  std::vector<double> myFurtherLanesPosLat;
1917 
1920 
1923 
1926 
1928 
1930  double myAngle;
1931 
1933  double myStopDist;
1934 
1937 
1939 
1944 
1947 
1948 protected:
1949 
1955  double myVLinkPass;
1956  double myVLinkWait;
1961  double myDistance;
1962  double accelV;
1965 
1966  DriveProcessItem(MSLink* link, double vPass, double vWait, bool setRequest,
1967  SUMOTime arrivalTime, double arrivalSpeed,
1968  double arrivalSpeedBraking,
1969  double distance,
1970  double leaveSpeed) :
1971  myLink(link), myVLinkPass(vPass), myVLinkWait(vWait), mySetRequest(setRequest),
1972  myArrivalTime(arrivalTime), myArrivalSpeed(arrivalSpeed),
1973  myArrivalSpeedBraking(arrivalSpeedBraking),
1974  myDistance(distance),
1975  accelV(leaveSpeed), hadStoppedVehicle(false), availableSpace(0) {
1976  assert(vWait >= 0 || !MSGlobals::gSemiImplicitEulerUpdate);
1977  assert(vPass >= 0 || !MSGlobals::gSemiImplicitEulerUpdate);
1978  };
1979 
1980 
1982  DriveProcessItem(double vWait, double distance, double _availableSpace = 0) :
1983  myLink(0), myVLinkPass(vWait), myVLinkWait(vWait), mySetRequest(false),
1986  myDistance(distance),
1987  accelV(-1), hadStoppedVehicle(false), availableSpace(_availableSpace) {
1988  assert(vWait >= 0 || !MSGlobals::gSemiImplicitEulerUpdate);
1989  };
1990 
1991 
1992  inline void adaptLeaveSpeed(const double v) {
1993  if (accelV < 0) {
1994  accelV = v;
1995  } else {
1996  accelV = MIN2(accelV, v);
1997  }
1998  }
1999 
2000  inline void adaptStopSpeed(const double v) {
2002  }
2003 
2004  inline double getLeaveSpeed() const {
2005  return accelV < 0 ? myVLinkPass : accelV;
2006  }
2007  };
2008 
2010  // TODO: Consider making LFLinkLanes a std::deque for efficient front removal (needs refactoring in checkRewindLinkLanes()...)
2011  typedef std::vector< DriveProcessItem > DriveItemVector;
2012 
2015 
2018 
2024  DriveItemVector::iterator myNextDriveItem;
2025 
2027  void planMoveInternal(const SUMOTime t, MSLeaderInfo ahead, DriveItemVector& lfLinks, double& myStopDist, std::pair<double, const MSLink*>& myNextTurn) const;
2028 
2030  void checkRewindLinkLanes(const double lengthsInFront, DriveItemVector& lfLinks) const;
2031 
2033  void removeApproachingInformation(const DriveItemVector& lfLinks) const;
2034 
2035  /* @brief adapt safe velocity in accordance to a moving obstacle:
2036  * - a leader vehicle
2037  * - a vehicle or pedestrian that crosses this vehicles path on an upcoming intersection
2038  * @param[in] leaderInfo The leading vehicle and the (virtual) distance to it
2039  * @param[in] lastLink the lastLink index
2040  * @param[in,out] the safe velocity for driving
2041  * @param[in,out] the safe velocity for arriving at the next link
2042  */
2043  void adaptToLeader(const std::pair<const MSVehicle*, double> leaderInfo,
2044  double seen,
2045  DriveProcessItem* const lastLink,
2046  double& v, double& vLinkPass) const;
2047 
2049  bool brakeForOverlap(const MSLink* link, const MSLane* lane) const;
2050 
2051 public:
2052  void adaptToJunctionLeader(const std::pair<const MSVehicle*, double> leaderInfo,
2053  const double seen, DriveProcessItem* const lastLink,
2054  const MSLane* const lane, double& v, double& vLinkPass,
2055  double distToCrossing = -1) const;
2056 
2057  void adaptToOncomingLeader(const std::pair<const MSVehicle*, double> leaderInfo,
2058  DriveProcessItem* const lastLink,
2059  double& v, double& vLinkPass) const;
2060 
2062  bool ignoreRed(const MSLink* link, bool canBrake) const;
2063 
2065  bool ignoreFoe(const SUMOTrafficObject* foe) const;
2066 
2068  inline double accelThresholdForWaiting() const {
2069  return 0.5 * getCarFollowModel().getMaxAccel();
2070  }
2071 
2072  /* @brief return the previous lane in this vehicles route including internal lanes
2073  * @param[in] current The lane of which the predecessor should be returned
2074  * @param[in,out] routeIndex The index of the current or previous non-internal edge in the route
2075  */
2076  const MSLane* getPreviousLane(const MSLane* current, int& furtherIndex) const;
2077 
2079  void checkLinkLeader(const MSLink* link, const MSLane* lane, double seen,
2080  DriveProcessItem* const lastLink, double& v, double& vLinkPass, double& vLinkWait, bool& setRequest,
2081  bool isShadowLink = false) const;
2082 protected:
2083 
2084  /* @brief adapt safe velocity in accordance to multiple vehicles ahead:
2085  * @param[in] ahead The leader information according to the current lateral-resolution
2086  * @param[in] latOffset the lateral offset for locating the ego vehicle on the given lane
2087  * @param[in] seen the distance to the end of the current lane
2088  * @param[in] lastLink the lastLink index
2089  * @param[in] lane The current Lane the vehicle is on
2090  * @param[in,out] the safe velocity for driving
2091  * @param[in,out] the safe velocity for arriving at the next link
2092  */
2093  void adaptToLeaders(const MSLeaderInfo& ahead,
2094  double latOffset,
2095  const double seen, DriveProcessItem* const lastLink,
2096  const MSLane* const lane, double& v, double& vLinkPass) const;
2097 
2098  void adaptToLeaderDistance(const MSLeaderDistanceInfo& ahead, double latOffset,
2099  double seen,
2100  DriveProcessItem* const lastLink,
2101  double& v, double& vLinkPass) const;
2102 
2103 
2105  void checkLinkLeaderCurrentAndParallel(const MSLink* link, const MSLane* lane, double seen,
2106  DriveProcessItem* const lastLink, double& v, double& vLinkPass, double& vLinkWait, bool& setRequest) const;
2107 
2108 
2116  void updateState(double vNext);
2117 
2118 
2120  bool keepClear(const MSLink* link) const;
2121 
2123  std::pair<double, double> estimateTimeToNextStop() const;
2124 
2125  /* @brief special considerations for opposite direction driving so that the
2126  * result can be used directly by getPositionOnLane(...) */
2127  double getBackPositionOnLane(const MSLane* lane, bool calledByGetPosition) const;
2128 
2135  bool hasArrivedInternal(bool oppositeTransformed = true) const;
2136 
2137 
2138  SUMOTime getArrivalTime(SUMOTime t, double seen, double v, double arrivalSpeed) const;
2139 
2141  bool isOppositeLane(const MSLane* lane) const;
2142 
2144  void cleanupFurtherLanes();
2145 
2147  static bool betterContinuation(const LaneQ* bestConnectedNext, const LaneQ& m);
2148 
2149 private:
2152 
2155 
2156 
2157 private:
2160 
2163 
2166 
2167 };
long long int SUMOTime
Definition: GUI.h:35
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:74
std::shared_ptr< const MSRoute > ConstMSRoutePtr
Definition: Route.h:31
SUMOTime DELTA_T
Definition: SUMOTime.cpp:38
#define STEPS2TIME(x)
Definition: SUMOTime.h:55
#define TIME2STEPS(x)
Definition: SUMOTime.h:57
T MIN2(T a, T b)
Definition: StdDefs.h:76
const double SUMO_const_haltingSpeed
the speed threshold at which vehicles are considered as halting
Definition: StdDefs.h:58
Interface for lane-change models.
The base class for microscopic and mesoscopic vehicles.
Definition: MSBaseVehicle.h:55
MSVehicleType * myType
This vehicle's type.
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
void addStops(const bool ignoreStopErrors, MSRouteIterator *searchStart=nullptr, bool addRouteStops=true)
Adds stops to the built vehicle.
The car-following model abstraction.
Definition: MSCFModel.h:55
double getMaxAccel() const
Get the vehicle type's maximum acceleration [m/s^2].
Definition: MSCFModel.h:256
The ToC Device controls transition of control between automated and manual driving.
A device which collects info on current friction Coefficient on the road.
Abstract in-vehicle / in-person device.
Definition: MSDevice.h:62
A road/street connecting two junctions.
Definition: MSEdge.h:77
static bool gSemiImplicitEulerUpdate
Definition: MSGlobals.h:53
static SUMOTime gWaitingTimeMemory
length of memory for waiting times (in millisecs)
Definition: MSGlobals.h:112
The base class for an intersection.
Definition: MSJunction.h:58
Performs lane changing of vehicles.
Definition: MSLaneChanger.h:45
Performs lane changing of vehicles.
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
saves leader/follower vehicles and their distances relative to an ego vehicle
Definition: MSLeaderInfo.h:144
Something on a lane to be noticed about vehicle movement.
Notification
Definition of a vehicle state.
Interface for objects listening to vehicle state changes.
Definition: MSNet.h:635
VehicleState
Definition of a vehicle state.
Definition: MSNet.h:602
Definition of overhead wire segment.
A lane area vehicles can halt at.
Definition: MSParkingArea.h:60
Provides an interface to an error whose fluctuation is controlled via the driver's 'awareness',...
Definition: MSStop.h:44
A lane area vehicles can halt at.
A static instance of this class in GapControlState deactivates gap control for vehicles whose referen...
Definition: MSVehicle.h:1361
void vehicleStateChanged(const SUMOVehicle *const vehicle, MSNet::VehicleState to, const std::string &info="")
Called if a vehicle changes its state.
Definition: MSVehicle.cpp:264
Changes the wished vehicle speed / lanes.
Definition: MSVehicle.h:1356
void setLaneChangeMode(int value)
Sets lane changing behavior.
Definition: MSVehicle.cpp:790
TraciLaneChangePriority myTraciLaneChangePriority
flags for determining the priority of traci lane change requests
Definition: MSVehicle.h:1666
bool getEmergencyBrakeRedLight() const
Returns whether red lights shall be a reason to brake.
Definition: MSVehicle.h:1528
SUMOTime getLaneTimeLineEnd()
Definition: MSVehicle.cpp:473
void adaptLaneTimeLine(int indexShift)
Adapts lane timeline when moving to a new lane and the lane index changes.
Definition: MSVehicle.cpp:425
void setRemoteControlled(Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, const ConstMSEdgeVector &route, SUMOTime t)
Definition: MSVehicle.cpp:801
bool isRemoteAffected(SUMOTime t) const
Definition: MSVehicle.cpp:820
int getSpeedMode() const
return the current speed mode
Definition: MSVehicle.cpp:438
void deactivateGapController()
Deactivates the gap control.
Definition: MSVehicle.cpp:412
Influencer()
Constructor.
Definition: MSVehicle.cpp:363
void setSpeedMode(int speedMode)
Sets speed-constraining behaviors.
Definition: MSVehicle.cpp:779
std::shared_ptr< GapControlState > myGapControlState
The gap control state.
Definition: MSVehicle.h:1614
bool considerSafeVelocity() const
Returns whether safe velocities shall be considered.
Definition: MSVehicle.h:1542
int getSignals() const
Definition: MSVehicle.h:1590
bool myConsiderMaxDeceleration
Whether the maximum deceleration shall be regarded.
Definition: MSVehicle.h:1632
ConstMSEdgeVector myRemoteRoute
Definition: MSVehicle.h:1649
void setLaneTimeLine(const std::vector< std::pair< SUMOTime, int > > &laneTimeLine)
Sets a new lane timeline.
Definition: MSVehicle.cpp:419
bool myRespectJunctionLeaderPriority
Whether the junction priority rules are respected (within)
Definition: MSVehicle.h:1641
void setOriginalSpeed(double speed)
Stores the originally longitudinal speed.
Definition: MSVehicle.cpp:670
double myOriginalSpeed
The velocity before influence.
Definition: MSVehicle.h:1617
double getLatDist() const
Definition: MSVehicle.h:1594
double implicitDeltaPosRemote(const MSVehicle *veh)
return the change in longitudinal position that is implicit in the new remote position
Definition: MSVehicle.cpp:947
double implicitSpeedRemote(const MSVehicle *veh, double oldSpeed)
return the speed that is implicit in the new remote position
Definition: MSVehicle.cpp:919
void postProcessRemoteControl(MSVehicle *v)
update position from remote control
Definition: MSVehicle.cpp:842
double gapControlSpeed(SUMOTime currentTime, const SUMOVehicle *veh, double speed, double vSafe, double vMin, double vMax)
Applies gap control logic on the speed.
Definition: MSVehicle.cpp:512
void setSublaneChange(double latDist)
Sets a new sublane-change request.
Definition: MSVehicle.cpp:433
double getOriginalSpeed() const
Returns the originally longitudinal speed to use.
Definition: MSVehicle.cpp:665
SUMOTime myLastRemoteAccess
Definition: MSVehicle.h:1650
std::vector< std::pair< SUMOTime, int > > myLaneTimeLine
The lane usage time line to apply.
Definition: MSVehicle.h:1611
bool getRespectJunctionLeaderPriority() const
Returns whether junction priority rules within the junction shall be respected (concerns vehicles wit...
Definition: MSVehicle.h:1536
LaneChangeMode myStrategicLC
lane changing which is necessary to follow the current route
Definition: MSVehicle.h:1655
LaneChangeMode mySpeedGainLC
lane changing to travel with higher speed
Definition: MSVehicle.h:1659
static void init()
Static initalization.
Definition: MSVehicle.cpp:388
LaneChangeMode mySublaneLC
changing to the prefered lateral alignment
Definition: MSVehicle.h:1663
bool getRespectJunctionPriority() const
Returns whether junction priority rules shall be respected (concerns approaching vehicles outside the...
Definition: MSVehicle.h:1520
static void cleanup()
Static cleanup.
Definition: MSVehicle.cpp:393
int getLaneChangeMode() const
return the current lane change mode
Definition: MSVehicle.cpp:450
SUMOTime getLaneTimeLineDuration()
Definition: MSVehicle.cpp:460
double influenceSpeed(SUMOTime currentTime, double speed, double vSafe, double vMin, double vMax)
Applies stored velocity information on the speed to use.
Definition: MSVehicle.cpp:483
double changeRequestRemainingSeconds(const SUMOTime currentTime) const
Return the remaining number of seconds of the current laneTimeLine assuming one exists.
Definition: MSVehicle.cpp:771
bool myConsiderSafeVelocity
Whether the safe velocity shall be regarded.
Definition: MSVehicle.h:1626
bool mySpeedAdaptationStarted
Whether influencing the speed has already started.
Definition: MSVehicle.h:1623
~Influencer()
Destructor.
Definition: MSVehicle.cpp:385
void setSignals(int signals)
Definition: MSVehicle.h:1586
double myLatDist
The requested lateral change.
Definition: MSVehicle.h:1620
bool myEmergencyBrakeRedLight
Whether red lights are a reason to brake.
Definition: MSVehicle.h:1638
LaneChangeMode myRightDriveLC
changing to the rightmost lane
Definition: MSVehicle.h:1661
void setSpeedTimeLine(const std::vector< std::pair< SUMOTime, double > > &speedTimeLine)
Sets a new velocity timeline.
Definition: MSVehicle.cpp:398
void updateRemoteControlRoute(MSVehicle *v)
update route if provided by remote control
Definition: MSVehicle.cpp:826
std::vector< std::pair< SUMOTime, double > > mySpeedTimeLine
The velocity time line to apply.
Definition: MSVehicle.h:1608
SUMOTime getLastAccessTimeStep() const
Definition: MSVehicle.h:1566
bool myConsiderMaxAcceleration
Whether the maximum acceleration shall be regarded.
Definition: MSVehicle.h:1629
LaneChangeMode myCooperativeLC
lane changing with the intent to help other vehicles
Definition: MSVehicle.h:1657
bool isRemoteControlled() const
Definition: MSVehicle.cpp:814
bool ignoreOverlap() const
Definition: MSVehicle.h:1602
bool myRespectJunctionPriority
Whether the junction priority rules are respected (approaching)
Definition: MSVehicle.h:1635
int influenceChangeDecision(const SUMOTime currentTime, const MSEdge &currentEdge, const int currentLaneIndex, int state)
Applies stored LaneChangeMode information and laneTimeLine.
Definition: MSVehicle.cpp:676
void activateGapController(double originalTau, double newTimeHeadway, double newSpaceHeadway, double duration, double changeRate, double maxDecel, MSVehicle *refVeh=nullptr)
Activates the gap control with the given parameters,.
Definition: MSVehicle.cpp:404
Container for manouevering time associated with stopping.
Definition: MSVehicle.h:1280
SUMOTime myManoeuvreCompleteTime
Time at which this manoeuvre should complete.
Definition: MSVehicle.h:1332
MSVehicle::ManoeuvreType getManoeuvreType() const
Accessor (get) for manoeuvre type.
Definition: MSVehicle.cpp:7707
std::string myManoeuvreStop
The name of the stop associated with the Manoeuvre - for debug output.
Definition: MSVehicle.h:1326
bool manoeuvreIsComplete() const
Check if any manoeuver is ongoing and whether the completion time is beyond currentTime.
Definition: MSVehicle.cpp:7845
bool configureExitManoeuvre(MSVehicle *veh)
Setup the myManoeuvre for exiting (Sets completion time and manoeuvre type)
Definition: MSVehicle.cpp:7763
void setManoeuvreType(const MSVehicle::ManoeuvreType mType)
Accessor (set) for manoeuvre type.
Definition: MSVehicle.cpp:7725
Manoeuvre & operator=(const Manoeuvre &manoeuvre)
Assignment operator.
Definition: MSVehicle.cpp:7679
Manoeuvre()
Constructor.
Definition: MSVehicle.cpp:7666
std::string myManoeuvreVehicleID
The name of the vehicle associated with the Manoeuvre - for debug output.
Definition: MSVehicle.h:1323
ManoeuvreType myManoeuvreType
Manoeuvre type - currently entry, exit or none.
Definition: MSVehicle.h:1335
double getGUIIncrement() const
Accessor for GUI rotation step when parking (radians)
Definition: MSVehicle.cpp:7701
SUMOTime myManoeuvreStartTime
Time at which the Manoeuvre for this stop started.
Definition: MSVehicle.h:1329
bool operator!=(const Manoeuvre &manoeuvre)
Operator !=.
Definition: MSVehicle.cpp:7690
bool entryManoeuvreIsComplete(MSVehicle *veh)
Configure an entry manoeuvre if nothing is configured - otherwise check if complete.
Definition: MSVehicle.cpp:7806
bool configureEntryManoeuvre(MSVehicle *veh)
Setup the entry manoeuvre for this vehicle (Sets completion time and manoeuvre type)
Definition: MSVehicle.cpp:7731
Container that holds the vehicles driving state (position+speed).
Definition: MSVehicle.h:87
double lastCoveredDist() const
previous Speed of this state
Definition: MSVehicle.h:127
double myPosLat
the stored lateral position
Definition: MSVehicle.h:140
State(double pos, double speed, double posLat, double backPos, double previousSpeed)
Constructor.
Definition: MSVehicle.cpp:171
double myPreviousSpeed
the speed at the begin of the previous time step
Definition: MSVehicle.h:148
double myPos
the stored position
Definition: MSVehicle.h:134
bool operator!=(const State &state)
Operator !=.
Definition: MSVehicle.cpp:161
double myLastCoveredDist
Definition: MSVehicle.h:154
double mySpeed
the stored speed (should be >=0 at any time)
Definition: MSVehicle.h:137
State & operator=(const State &state)
Assignment operator.
Definition: MSVehicle.cpp:149
double posLat() const
Lateral Position of this state (m relative to the centerline of the lane).
Definition: MSVehicle.h:117
double pos() const
Position of this state.
Definition: MSVehicle.h:107
double speed() const
Speed of this state.
Definition: MSVehicle.h:112
double backPos() const
back Position of this state
Definition: MSVehicle.h:122
double myBackPos
the stored back position
Definition: MSVehicle.h:145
Stores the waiting intervals over the previous seconds (memory is to be specified in ms....
Definition: MSVehicle.h:162
void passTime(SUMOTime dt, bool waiting)
Definition: MSVehicle.cpp:205
const std::string getState() const
Definition: MSVehicle.cpp:237
SUMOTime cumulatedWaitingTime(SUMOTime memory=-1) const
Definition: MSVehicle.cpp:183
std::deque< std::pair< SUMOTime, SUMOTime > > myWaitingIntervals
Definition: MSVehicle.h:184
void setState(const std::string &state)
Definition: MSVehicle.cpp:248
SUMOTime myMemorySize
the maximal memory to store
Definition: MSVehicle.h:179
void appendWaitingTime(SUMOTime dt)
append an amount of dt millisecs to the stored waiting times
WaitingTimeCollector(SUMOTime memory=MSGlobals::gWaitingTimeMemory)
Constructor.
Definition: MSVehicle.cpp:179
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:77
void setManoeuvreType(const MSVehicle::ManoeuvreType mType)
accessor function to myManoeuvre equivalent
Definition: MSVehicle.cpp:7719
TraciLaneChangePriority
modes for prioritizing traci lane change requests
Definition: MSVehicle.h:1158
@ LCP_NOOVERLAP
Definition: MSVehicle.h:1160
@ LCP_OPPORTUNISTIC
Definition: MSVehicle.h:1162
double getRightSideOnEdge(const MSLane *lane=0) const
Get the vehicle's lateral position on the edge of the given lane (or its current edge if lane == 0)
Definition: MSVehicle.cpp:6681
bool wasRemoteControlled(SUMOTime lookBack=DELTA_T) const
Returns the information whether the vehicle is fully controlled via TraCI within the lookBack time.
Definition: MSVehicle.cpp:7277
void processLinkApproaches(double &vSafe, double &vSafeMin, double &vSafeMinDist)
This method iterates through the driveprocess items for the vehicle and adapts the given in/out param...
Definition: MSVehicle.cpp:3575
const std::vector< double > & getFurtherLanesPosLat() const
Definition: MSVehicle.h:847
SUMOTime getTimeSinceStartup() const
Returns the SUMOTime spent driving since startup (speed was larger than 0.1m/s)
Definition: MSVehicle.h:686
const MSLane * getPreviousLane(const MSLane *current, int &furtherIndex) const
Definition: MSVehicle.cpp:8011
void checkLinkLeader(const MSLink *link, const MSLane *lane, double seen, DriveProcessItem *const lastLink, double &v, double &vLinkPass, double &vLinkWait, bool &setRequest, bool isShadowLink=false) const
checks for link leaders on the given link
Definition: MSVehicle.cpp:3415
void checkRewindLinkLanes(const double lengthsInFront, DriveItemVector &lfLinks) const
runs heuristic for keeping the intersection clear in case of downstream jamming
Definition: MSVehicle.cpp:5054
MSVehicle(const MSVehicle &)
invalidated copy constructor
bool willStop() const
Returns whether the vehicle will stop on the current edge.
Definition: MSVehicle.cpp:1568
bool hasDriverState() const
Whether this vehicle is equipped with a MSDriverState.
Definition: MSVehicle.h:1004
static int nextLinkPriority(const std::vector< MSLane * > &conts)
get a numerical value for the priority of the upcoming link
Definition: MSVehicle.cpp:6227
double getTimeGapOnLane() const
Returns the time gap in seconds to the leader of the vehicle on the same lane.
Definition: MSVehicle.cpp:6539
void updateBestLanes(bool forceRebuild=false, const MSLane *startLane=0)
computes the best lanes to use in order to continue the route
Definition: MSVehicle.cpp:5773
bool myAmIdling
Whether the vehicle is trying to enter the network (eg after parking so engine is running)
Definition: MSVehicle.h:1925
SUMOTime myWaitingTime
The time the vehicle waits (is not faster than 0.1m/s) in seconds.
Definition: MSVehicle.h:1861
double getStopDelay() const
Returns the public transport stop delay in seconds.
Definition: MSVehicle.cpp:7952
double computeAngle() const
compute the current vehicle angle
Definition: MSVehicle.cpp:1466
double myTimeLoss
the time loss in seconds due to driving with less than maximum speed
Definition: MSVehicle.h:1865
SUMOTime myLastActionTime
Action offset (actions are taken at time myActionOffset + N*getActionStepLength()) Initialized to 0,...
Definition: MSVehicle.h:1880
ConstMSEdgeVector::const_iterator getRerouteOrigin() const
Returns the starting point for reroutes (usually the current edge)
Definition: MSVehicle.cpp:1406
bool hasArrivedInternal(bool oppositeTransformed=true) const
Returns whether this vehicle has already arived (reached the arrivalPosition on its final edge) metho...
Definition: MSVehicle.cpp:1107
double getFriction() const
Returns the current friction on the road as perceived by the friction device.
Definition: MSVehicle.cpp:7633
bool ignoreFoe(const SUMOTrafficObject *foe) const
decide whether a given foe object may be ignored
Definition: MSVehicle.cpp:7338
void boardTransportables(MSStop &stop)
board persons and load transportables at the given stop
Definition: MSVehicle.cpp:1907
const std::vector< const MSLane * > getUpcomingLanesUntil(double distance) const
Returns the upcoming (best followed by default 0) sequence of lanes to continue the route starting at...
Definition: MSVehicle.cpp:6293
bool isOnRoad() const
Returns the information whether the vehicle is on a road (is simulated)
Definition: MSVehicle.h:608
void adaptLaneEntering2MoveReminder(const MSLane &enteredLane)
Adapts the vehicle's entering of a new lane.
Definition: MSVehicle.cpp:1193
void addTransportable(MSTransportable *transportable)
Adds a person or container to this vehicle.
Definition: MSVehicle.cpp:6550
SUMOTime myJunctionConflictEntryTime
Definition: MSVehicle.h:1943
SUMOTime getLastActionTime() const
Returns the time of the vehicle's last action point.
Definition: MSVehicle.h:544
double getLeftSideOnEdge(const MSLane *lane=0) const
Get the vehicle's lateral position on the edge of the given lane (or its current edge if lane == 0)
Definition: MSVehicle.cpp:6687
PositionVector getBoundingPoly(double offset=0) const
get bounding polygon
Definition: MSVehicle.cpp:6981
void setTentativeLaneAndPosition(MSLane *lane, double pos, double posLat=0)
set tentative lane and position during insertion to ensure that all cfmodels work (some of them requi...
Definition: MSVehicle.cpp:6648
bool brakeForOverlap(const MSLink *link, const MSLane *lane) const
handle with transitions
Definition: MSVehicle.cpp:2153
const std::vector< MSLane * > & getFurtherLanes() const
Definition: MSVehicle.h:843
void workOnMoveReminders(double oldPos, double newPos, double newSpeed)
Processes active move reminder.
Definition: MSVehicle.cpp:1134
bool isStoppedOnLane() const
Definition: MSVehicle.cpp:1573
double getDistanceToPosition(double destPos, const MSLane *destLane) const
Definition: MSVehicle.cpp:6488
bool brokeDown() const
Returns how long the vehicle has been stopped already due to lack of energy.
Definition: MSVehicle.cpp:1607
double myAcceleration
The current acceleration after dawdling in m/s.
Definition: MSVehicle.h:1907
void registerInsertionApproach(MSLink *link, double dist)
register approach on insertion
Definition: MSVehicle.cpp:5345
SUMOTime getTimeLoss() const
Returns the SUMOTime lost (speed was lesser maximum speed)
Definition: MSVehicle.h:703
void cleanupFurtherLanes()
remove vehicle from further lanes (on leaving the network)
Definition: MSVehicle.cpp:1022
void adaptToLeaders(const MSLeaderInfo &ahead, double latOffset, const double seen, DriveProcessItem *const lastLink, const MSLane *const lane, double &v, double &vLinkPass) const
Definition: MSVehicle.cpp:3019
static bool betterContinuation(const LaneQ *bestConnectedNext, const LaneQ &m)
comparison between different continuations from the same lane
Definition: MSVehicle.cpp:6210
bool isActive() const
Returns whether the current simulation step is an action point for the vehicle.
Definition: MSVehicle.h:631
const MSLane * getBackLane() const
Definition: MSVehicle.cpp:4848
double getTimeLossSeconds() const
Returns the time loss in seconds.
Definition: MSVehicle.h:719
void enterLaneAtInsertion(MSLane *enteredLane, double pos, double speed, double posLat, MSMoveReminder::Notification notification)
Update when the vehicle enters a new lane in the emit step.
Definition: MSVehicle.cpp:5615
double getBackPositionOnLane() const
Get the vehicle's position relative to its current lane.
Definition: MSVehicle.h:408
void setPreviousSpeed(double prevSpeed, double prevAcceleration)
Sets the influenced previous speed.
Definition: MSVehicle.cpp:7639
SUMOTime getArrivalTime(SUMOTime t, double seen, double v, double arrivalSpeed) const
Definition: MSVehicle.cpp:3000
double getAccumulatedWaitingSeconds() const
Returns the number of seconds waited (speed was lesser than 0.1m/s) within the last millisecs.
Definition: MSVehicle.h:713
SUMOTime getWaitingTime(const bool accumulated=false) const
Returns the SUMOTime waited (speed was lesser than 0.1m/s)
Definition: MSVehicle.h:673
bool isFrontOnLane(const MSLane *lane) const
Returns the information whether the front of the vehicle is on the given lane.
Definition: MSVehicle.cpp:5048
virtual ~MSVehicle()
Destructor.
Definition: MSVehicle.cpp:1010
double getTimeSinceStartupSeconds() const
Definition: MSVehicle.h:690
void processLaneAdvances(std::vector< MSLane * > &passedLanes, std::string &emergencyReason)
This method checks if the vehicle has advanced over one or several lanes along its route and triggers...
Definition: MSVehicle.cpp:4288
MSAbstractLaneChangeModel & getLaneChangeModel()
Definition: MSVehicle.cpp:5749
void setEmergencyBlueLight(SUMOTime currentTime)
sets the blue flashing light for emergency vehicles
Definition: MSVehicle.cpp:6628
bool isActionStep(SUMOTime t) const
Returns whether the next simulation step will be an action point for the vehicle.
Definition: MSVehicle.h:638
MSAbstractLaneChangeModel * myLaneChangeModel
Definition: MSVehicle.h:1887
Position getPositionAlongBestLanes(double offset) const
Return the (x,y)-position, which the vehicle would reach if it continued along its best continuation ...
Definition: MSVehicle.cpp:1310
bool hasValidRouteStart(std::string &msg)
checks wether the vehicle can depart on the first edge
Definition: MSVehicle.cpp:1069
double getLeftSideOnLane() const
Get the lateral position of the vehicles left side on the lane:
Definition: MSVehicle.cpp:6663
std::vector< MSLane * > myFurtherLanes
The information into which lanes the vehicle laps into.
Definition: MSVehicle.h:1914
bool signalSet(int which) const
Returns whether the given signal is on.
Definition: MSVehicle.h:1194
MSLane * getMutableLane() const
Returns the lane the vehicle is on Non const version indicates that something volatile is going on.
Definition: MSVehicle.h:592
MSCFModel::VehicleVariables * myCFVariables
The per vehicle variables of the car following model.
Definition: MSVehicle.h:2151
double getActionStepLengthSecs() const
Returns the vehicle's action step length in secs, i.e. the interval between two action points.
Definition: MSVehicle.h:536
bool addTraciStop(SUMOVehicleParameter::Stop stop, std::string &errorMsg)
Definition: MSVehicle.cpp:7115
void checkLinkLeaderCurrentAndParallel(const MSLink *link, const MSLane *lane, double seen, DriveProcessItem *const lastLink, double &v, double &vLinkPass, double &vLinkWait, bool &setRequest) const
checks for link leaders of the current link as well as the parallel link (if there is one)
Definition: MSVehicle.cpp:3399
void planMoveInternal(const SUMOTime t, MSLeaderInfo ahead, DriveItemVector &lfLinks, double &myStopDist, std::pair< double, const MSLink * > &myNextTurn) const
Definition: MSVehicle.cpp:2188
std::pair< double, const MSLink * > myNextTurn
the upcoming turn for the vehicle
Definition: MSVehicle.h:1911
double getDistanceToLeaveJunction() const
get the distance from the start of this lane to the start of the next normal lane (or 0 if this lane ...
Definition: MSVehicle.cpp:1295
int influenceChangeDecision(int state)
allow TraCI to influence a lane change decision
Definition: MSVehicle.cpp:7252
double getMaxSpeedOnLane() const
Returns the maximal speed for the vehicle on its current lane (including speed factor and deviation,...
Definition: MSVehicle.cpp:1376
bool isRemoteControlled() const
Returns the information whether the vehicle is fully controlled via TraCI.
Definition: MSVehicle.cpp:7271
bool myAmOnNet
Whether the vehicle is on the network (not parking, teleported, vaporized, or arrived)
Definition: MSVehicle.h:1922
double nextStopDist() const
return the distance to the next stop or doubleMax if there is none.
Definition: MSVehicle.h:1043
void enterLaneAtMove(MSLane *enteredLane, bool onTeleporting=false)
Update when the vehicle enters a new lane in the move step.
Definition: MSVehicle.cpp:5389
void adaptBestLanesOccupation(int laneIndex, double density)
update occupation from MSLaneChanger
Definition: MSVehicle.cpp:6456
std::pair< double, double > estimateTimeToNextStop() const
return time (s) and distance to the next stop
Definition: MSVehicle.cpp:7857
double accelThresholdForWaiting() const
maximum acceleration to consider a vehicle as 'waiting' at low speed
Definition: MSVehicle.h:2068
void setAngle(double angle, bool straightenFurther=false)
Set a custom vehicle angle in rad, optionally updates furtherLanePosLat.
Definition: MSVehicle.cpp:1419
std::vector< LaneQ >::iterator myCurrentLaneInBestLanes
Definition: MSVehicle.h:1902
double getDeltaPos(const double accel) const
calculates the distance covered in the next integration step given an acceleration and assuming the c...
Definition: MSVehicle.cpp:3553
const MSLane * myLastBestLanesInternalLane
Definition: MSVehicle.h:1890
void updateOccupancyAndCurrentBestLane(const MSLane *startLane)
updates LaneQ::nextOccupation and myCurrentLaneInBestLanes
Definition: MSVehicle.cpp:6243
const std::vector< MSLane * > getUpstreamOppositeLanes() const
Returns the sequence of opposite lanes corresponding to past lanes.
Definition: MSVehicle.cpp:6420
WaitingTimeCollector myWaitingTimeCollector
Definition: MSVehicle.h:1862
void setRemoteState(Position xyPos)
sets position outside the road network
Definition: MSVehicle.cpp:7265
void fixPosition()
repair errors in vehicle position after changing between internal edges
Definition: MSVehicle.cpp:6464
double getAcceleration() const
Returns the vehicle's acceleration in m/s (this is computed as the last step's mean acceleration in c...
Definition: MSVehicle.h:517
double getSpeedWithoutTraciInfluence() const
Returns the uninfluenced velocity.
Definition: MSVehicle.cpp:7242
PositionVector getBoundingBox(double offset=0) const
get bounding rectangle
Definition: MSVehicle.cpp:6950
ManoeuvreType
flag identifying which, if any, manoeuvre is in progress
Definition: MSVehicle.h:1253
@ MANOEUVRE_ENTRY
Manoeuvre into stopping place.
Definition: MSVehicle.h:1255
@ MANOEUVRE_NONE
not manouevring
Definition: MSVehicle.h:1259
@ MANOEUVRE_EXIT
Manoeuvre out of stopping place.
Definition: MSVehicle.h:1257
const MSEdge * getNextEdgePtr() const
returns the next edge (possibly an internal edge)
Definition: MSVehicle.cpp:7996
Position getPosition(const double offset=0) const
Return current position (x/y, cartesian)
Definition: MSVehicle.cpp:1242
void setBrakingSignals(double vNext)
sets the braking lights on/off
Definition: MSVehicle.cpp:4092
const std::vector< MSLane * > & getBestLanesContinuation() const
Returns the best sequence of lanes to continue the route starting at myLane.
Definition: MSVehicle.cpp:6265
const MSEdge * myLastBestLanesEdge
Definition: MSVehicle.h:1889
bool ignoreCollision() const
whether this vehicle is except from collision checks
Definition: MSVehicle.cpp:1613
Influencer * myInfluencer
An instance of a velocity/lane influencing instance; built in "getInfluencer".
Definition: MSVehicle.h:2154
void saveState(OutputDevice &out)
Saves the states of a vehicle.
Definition: MSVehicle.cpp:7515
void setIdling(bool amIdling)
access function for Idling flag used to record whether vehicle is waiting to enter lane (after parkin...
Definition: MSVehicle.h:616
void onRemovalFromNet(const MSMoveReminder::Notification reason)
Called when the vehicle is removed from the network.
Definition: MSVehicle.cpp:1043
void planMove(const SUMOTime t, const MSLeaderInfo &ahead, const double lengthsInFront)
Compute safe velocities for the upcoming lanes based on positions and speeds from the last time step....
Definition: MSVehicle.cpp:2083
bool resumeFromStopping()
Definition: MSVehicle.cpp:7153
int getBestLaneOffset() const
Definition: MSVehicle.cpp:6436
void adaptToJunctionLeader(const std::pair< const MSVehicle *, double > leaderInfo, const double seen, DriveProcessItem *const lastLink, const MSLane *const lane, double &v, double &vLinkPass, double distToCrossing=-1) const
Definition: MSVehicle.cpp:3217
double lateralDistanceToLane(const int offset) const
Get the minimal lateral distance required to move fully onto the lane at given offset.
Definition: MSVehicle.cpp:6823
double getBackPositionOnLane(const MSLane *lane) const
Get the vehicle's position relative to the given lane.
Definition: MSVehicle.h:401
void resetActionOffset(const SUMOTime timeUntilNextAction=0)
Resets the action offset for the vehicle.
Definition: MSVehicle.cpp:2058
std::vector< DriveProcessItem > DriveItemVector
Container for used Links/visited Lanes during planMove() and executeMove.
Definition: MSVehicle.h:2011
void interpolateLateralZ(Position &pos, double offset, double posLat) const
perform lateral z interpolation in elevated networks
Definition: MSVehicle.cpp:1279
void setBlinkerInformation()
sets the blue flashing light for emergency vehicles
Definition: MSVehicle.cpp:6567
const MSEdge * getCurrentEdge() const
Returns the edge the vehicle is currently at (possibly an internal edge or nullptr)
Definition: MSVehicle.cpp:7990
void adaptToLeaderDistance(const MSLeaderDistanceInfo &ahead, double latOffset, double seen, DriveProcessItem *const lastLink, double &v, double &vLinkPass) const
Definition: MSVehicle.cpp:3099
DriveItemVector::iterator myNextDriveItem
iterator pointing to the next item in myLFLinkLanes
Definition: MSVehicle.h:2024
void leaveLane(const MSMoveReminder::Notification reason, const MSLane *approachedLane=0)
Update of members if vehicle leaves a new lane in the lane change step or at arrival.
Definition: MSVehicle.cpp:5655
bool isIdling() const
Returns whether a sim vehicle is waiting to enter a lane (after parking has completed)
Definition: MSVehicle.h:624
std::shared_ptr< MSSimpleDriverState > getDriverState() const
Returns the vehicle driver's state.
Definition: MSVehicle.cpp:7627
void removeApproachingInformation(const DriveItemVector &lfLinks) const
unregister approach from all upcoming links
Definition: MSVehicle.cpp:6885
void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
Definition: MSVehicle.cpp:4840
SUMOTime myJunctionEntryTimeNeverYield
Definition: MSVehicle.h:1942
double getLatOffset(const MSLane *lane) const
Get the offset that that must be added to interpret myState.myPosLat for the given lane.
Definition: MSVehicle.cpp:6743
bool rerouteParkingArea(const std::string &parkingAreaID, std::string &errorMsg)
Definition: MSVehicle.cpp:7039
bool hasArrived() const
Returns whether this vehicle has already arived (reached the arrivalPosition on its final edge)
Definition: MSVehicle.cpp:1101
void switchOffSignal(int signal)
Switches the given signal off.
Definition: MSVehicle.h:1177
void updateState(double vNext)
updates the vehicles state, given a next value for its speed. This value can be negative in case of t...
Definition: MSVehicle.cpp:4770
double getStopArrivalDelay() const
Returns the estimated public transport stop arrival delay in seconds.
Definition: MSVehicle.cpp:7974
int getSignals() const
Returns the signals.
Definition: MSVehicle.h:1185
int mySignals
State of things of the vehicle that can be on or off.
Definition: MSVehicle.h:1919
bool setExitManoeuvre()
accessor function to myManoeuvre equivalent
Definition: MSVehicle.cpp:7658
bool isOppositeLane(const MSLane *lane) const
whether the give lane is reverse direction of the current route or not
Definition: MSVehicle.cpp:5760
double myStopDist
distance to the next stop or doubleMax if there is none
Definition: MSVehicle.h:1933
Signalling
Some boolean values which describe the state of some vehicle parts.
Definition: MSVehicle.h:1112
@ VEH_SIGNAL_EMERGENCY_RED
A red emergency light is on.
Definition: MSVehicle.h:1140
@ VEH_SIGNAL_NONE
Everything is switched off.
Definition: MSVehicle.h:1114
@ VEH_SIGNAL_FOGLIGHT
The fog lights are on (no visualisation)
Definition: MSVehicle.h:1126
@ VEH_SIGNAL_FRONTLIGHT
The front lights are on (no visualisation)
Definition: MSVehicle.h:1124
@ VEH_SIGNAL_DOOR_OPEN_LEFT
One of the left doors is opened.
Definition: MSVehicle.h:1134
@ VEH_SIGNAL_BLINKER_RIGHT
Right blinker lights are switched on.
Definition: MSVehicle.h:1116
@ VEH_SIGNAL_BRAKELIGHT
The brake lights are on.
Definition: MSVehicle.h:1122
@ VEH_SIGNAL_BACKDRIVE
The backwards driving lights are on (no visualisation)
Definition: MSVehicle.h:1130
@ VEH_SIGNAL_EMERGENCY_BLUE
A blue emergency light is on.
Definition: MSVehicle.h:1138
@ VEH_SIGNAL_BLINKER_LEFT
Left blinker lights are switched on.
Definition: MSVehicle.h:1118
@ VEH_SIGNAL_DOOR_OPEN_RIGHT
One of the right doors is opened.
Definition: MSVehicle.h:1136
@ VEH_SIGNAL_BLINKER_EMERGENCY
Blinker lights on both sides are switched on.
Definition: MSVehicle.h:1120
@ VEH_SIGNAL_WIPER
The wipers are on.
Definition: MSVehicle.h:1132
@ VEH_SIGNAL_EMERGENCY_YELLOW
A yellow emergency light is on.
Definition: MSVehicle.h:1142
@ VEH_SIGNAL_HIGHBEAM
The high beam lights are on (no visualisation)
Definition: MSVehicle.h:1128
SUMOTime getActionStepLength() const
Returns the vehicle's action step length in millisecs, i.e. the interval between two action points.
Definition: MSVehicle.h:528
bool myHaveToWaitOnNextLink
Definition: MSVehicle.h:1927
SUMOTime collisionStopTime() const
Returns the remaining time a vehicle needs to stop due to a collision. A negative value indicates tha...
Definition: MSVehicle.cpp:1601
const std::vector< const MSLane * > getPastLanesUntil(double distance) const
Returns the sequence of past lanes (right-most on edge) based on the route starting at the current la...
Definition: MSVehicle.cpp:6362
double getBestLaneDist() const
returns the distance that can be driven without lane change
Definition: MSVehicle.cpp:6445
std::pair< const MSVehicle *const, double > getLeader(double dist=0) const
Returns the leader of the vehicle looking for a fixed distance.
Definition: MSVehicle.cpp:6497
double slowDownForSchedule(double vMinComfortable) const
optionally return an upper bound on speed to stay within the schedule
Definition: MSVehicle.cpp:2957
bool executeMove()
Executes planned vehicle movements with regards to right-of-way.
Definition: MSVehicle.cpp:4452
std::pair< const MSVehicle *const, double > getFollower(double dist=0) const
Returns the follower of the vehicle looking for a fixed distance.
Definition: MSVehicle.cpp:6527
double getLastStepDist() const
Get the distance the vehicle covered in the previous timestep.
Definition: MSVehicle.h:384
void invalidateCachedPosition()
Definition: MSVehicle.h:424
ChangeRequest
Requests set via TraCI.
Definition: MSVehicle.h:194
@ REQUEST_HOLD
vehicle want's to keep the current lane
Definition: MSVehicle.h:202
@ REQUEST_LEFT
vehicle want's to change to left lane
Definition: MSVehicle.h:198
@ REQUEST_NONE
vehicle doesn't want to change
Definition: MSVehicle.h:196
@ REQUEST_RIGHT
vehicle want's to change to right lane
Definition: MSVehicle.h:200
bool isLeader(const MSLink *link, const MSVehicle *veh, const double gap) const
whether the given vehicle must be followed at the given junction
Definition: MSVehicle.cpp:7372
void computeFurtherLanes(MSLane *enteredLane, double pos, bool collision=false)
updates myFurtherLanes on lane insertion or after collision
Definition: MSVehicle.cpp:5549
MSVehicle & operator=(const MSVehicle &)
invalidated assignment operator
std::pair< const MSLane *, double > getLanePosAfterDist(double distance) const
return lane and position along bestlanes at the given distance
Definition: MSVehicle.cpp:6471
SUMOTime myCollisionImmunity
amount of time for which the vehicle is immune from collisions
Definition: MSVehicle.h:1936
bool passingMinor() const
decide whether the vehicle is passing a minor link or has comitted to do so
Definition: MSVehicle.cpp:7356
void updateWaitingTime(double vNext)
Updates the vehicle's waiting time counters (accumulated and consecutive)
Definition: MSVehicle.cpp:4111
void enterLaneAtLaneChange(MSLane *enteredLane)
Update when the vehicle enters a new lane in the laneChange step.
Definition: MSVehicle.cpp:5450
BaseInfluencer & getBaseInfluencer()
Returns the velocity/lane influencer.
Definition: MSVehicle.cpp:7225
Influencer & getInfluencer()
Definition: MSVehicle.cpp:7217
bool isBidiOn(const MSLane *lane) const
whether this vehicle is driving against lane
Definition: MSVehicle.cpp:7031
double getRightSideOnLane() const
Get the lateral position of the vehicles right side on the lane:
Definition: MSVehicle.cpp:6657
bool unsafeLinkAhead(const MSLane *lane) const
whether the vehicle may safely move to the given lane with regard to upcoming links
Definition: MSVehicle.cpp:6897
double getCurrentApparentDecel() const
get apparent deceleration based on vType parameters and current acceleration
Definition: MSVehicle.cpp:7651
double updateFurtherLanes(std::vector< MSLane * > &furtherLanes, std::vector< double > &furtherLanesPosLat, const std::vector< MSLane * > &passedLanes)
update a vector of further lanes and return the new backPos
Definition: MSVehicle.cpp:4858
MSCFModel::VehicleVariables * getCarFollowVariables() const
Returns the vehicle's car following model variables.
Definition: MSVehicle.h:998
DriveItemVector myLFLinkLanesPrev
planned speeds from the previous step for un-registering from junctions after the new container is fi...
Definition: MSVehicle.h:2017
std::vector< std::vector< LaneQ > > myBestLanes
Definition: MSVehicle.h:1897
void setActionStepLength(double actionStepLength, bool resetActionOffset=true)
Sets the action steplength of the vehicle.
Definition: MSVehicle.cpp:1443
double getLateralPositionOnLane() const
Get the vehicle's lateral position on the lane.
Definition: MSVehicle.h:416
double getSlope() const
Returns the slope of the road at vehicle's position in degrees.
Definition: MSVehicle.cpp:1215
bool myActionStep
The flag myActionStep indicates whether the current time step is an action point for the vehicle.
Definition: MSVehicle.h:1877
const Position getBackPosition() const
Definition: MSVehicle.cpp:1530
bool congested() const
Definition: MSVehicle.cpp:1460
void loadState(const SUMOSAXAttributes &attrs, const SUMOTime offset)
Loads the state of this vehicle from the given description.
Definition: MSVehicle.cpp:7561
SUMOTime myTimeSinceStartup
duration of driving (speed > SUMO_const_haltingSpeed) after the last halting episode
Definition: MSVehicle.h:1946
double getSpeed() const
Returns the vehicle's current speed.
Definition: MSVehicle.h:493
void setApproachingForAllLinks(const SUMOTime t)
Register junction approaches for all link items in the current plan.
Definition: MSVehicle.cpp:5292
SUMOTime remainingStopDuration() const
Returns the remaining stop duration for a stopped vehicle or 0.
Definition: MSVehicle.cpp:1592
bool keepStopping(bool afterProcessing=false) const
Returns whether the vehicle is stopped and must continue to do so.
Definition: MSVehicle.cpp:1578
void workOnIdleReminders()
cycle through vehicle devices invoking notifyIdle
Definition: MSVehicle.cpp:1177
static std::vector< MSLane * > myEmptyLaneVector
Definition: MSVehicle.h:1904
Position myCachedPosition
Definition: MSVehicle.h:1938
bool replaceRoute(ConstMSRoutePtr route, const std::string &info, bool onInit=false, int offset=0, bool addStops=true, bool removeStops=true, std::string *msgReturn=nullptr)
Replaces the current route by the given one.
Definition: MSVehicle.cpp:1116
MSVehicle::ManoeuvreType getManoeuvreType() const
accessor function to myManoeuvre equivalent
Definition: MSVehicle.cpp:7713
double checkReversal(bool &canReverse, double speedThreshold=SUMO_const_haltingSpeed, double seen=0) const
Definition: MSVehicle.cpp:4138
void updateLaneBruttoSum()
Update the lane brutto occupancy after a change in minGap.
Definition: MSVehicle.cpp:6203
void removePassedDriveItems()
Erase passed drive items from myLFLinkLanes (and unregister approaching information for corresponding...
Definition: MSVehicle.cpp:3878
const std::vector< LaneQ > & getBestLanes() const
Returns the description of best lanes to use in order to continue the route.
Definition: MSVehicle.cpp:5767
std::vector< double > myFurtherLanesPosLat
lateral positions on further lanes
Definition: MSVehicle.h:1916
bool checkActionStep(const SUMOTime t)
Returns whether the vehicle is supposed to take action in the current simulation step Updates myActio...
Definition: MSVehicle.cpp:2048
Position validatePosition(Position result, double offset=0) const
ensure that a vehicle-relative position is not invalid
Definition: MSVehicle.cpp:1385
void loadPreviousApproaching(MSLink *link, bool setRequest, SUMOTime arrivalTime, double arrivalSpeed, double arrivalSpeedBraking, double dist, double leaveSpeed)
Definition: MSVehicle.cpp:7615
bool keepClear(const MSLink *link) const
decide whether the given link must be kept clear
Definition: MSVehicle.cpp:7283
bool manoeuvreIsComplete() const
accessor function to myManoeuvre equivalent
Definition: MSVehicle.cpp:7851
double processNextStop(double currentVelocity)
Processes stops, returns the velocity needed to reach the stop.
Definition: MSVehicle.cpp:1619
double myAngle
the angle in radians (
Definition: MSVehicle.h:1930
bool ignoreRed(const MSLink *link, bool canBrake) const
decide whether a red (or yellow light) may be ignored
Definition: MSVehicle.cpp:7295
double getPositionOnLane() const
Get the vehicle's position along the lane.
Definition: MSVehicle.h:377
const MSLane * getLane() const
Returns the lane the vehicle is on.
Definition: MSVehicle.h:584
void updateTimeLoss(double vNext)
Updates the vehicle's time loss.
Definition: MSVehicle.cpp:4126
const std::pair< double, const MSLink * > & getNextTurn()
Get the distance and direction of the next upcoming turn for the vehicle (within its look-ahead range...
Definition: MSVehicle.h:835
MSDevice_DriverState * myDriverState
This vehicle's driver state.
Definition: MSVehicle.h:1871
bool joinTrainPart(MSVehicle *veh)
try joining the given vehicle to the rear of this one (to resolve joinTriggered)
Definition: MSVehicle.cpp:1968
const MSCFModel & getCarFollowModel() const
Returns the vehicle's car following model definition.
Definition: MSVehicle.h:977
MSLane * myLane
The lane the vehicle is on.
Definition: MSVehicle.h:1885
bool onFurtherEdge(const MSEdge *edge) const
whether this vehicle has its back (and no its front) on the given edge
Definition: MSVehicle.cpp:7020
double processTraCISpeedControl(double vSafe, double vNext)
Check for speed advices from the traci client and adjust the speed vNext in the current (euler) / aft...
Definition: MSVehicle.cpp:3845
Manoeuvre myManoeuvre
Definition: MSVehicle.h:1342
double getLateralOverlap() const
return the amount by which the vehicle extends laterally outside it's primary lane
Definition: MSVehicle.cpp:6879
double getAngle() const
Returns the vehicle's direction in radians.
Definition: MSVehicle.h:734
bool handleCollisionStop(MSStop &stop, const double distToStop)
Definition: MSVehicle.cpp:7126
bool hasInfluencer() const
whether the vehicle is individually influenced (via TraCI or special parameters)
Definition: MSVehicle.h:1685
MSDevice_Friction * myFrictionDevice
This vehicle's friction perception.
Definition: MSVehicle.h:1874
double getPreviousSpeed() const
Returns the vehicle's speed before the previous time step.
Definition: MSVehicle.h:501
MSVehicle()
invalidated default constructor
bool joinTrainPartFront(MSVehicle *veh)
try joining the given vehicle to the front of this one (to resolve joinTriggered)
Definition: MSVehicle.cpp:1989
void updateActionOffset(const SUMOTime oldActionStepLength, const SUMOTime newActionStepLength)
Process an updated action step length value (only affects the vehicle's action offset,...
Definition: MSVehicle.cpp:2064
double getBrakeGap(bool delayed=false) const
get distance for coming to a stop (used for rerouting checks)
Definition: MSVehicle.cpp:2042
void executeFractionalMove(double dist)
move vehicle forward by the given distance during insertion
Definition: MSVehicle.cpp:4713
LaneChangeMode
modes for resolving conflicts between external control (traci) and vehicle control over lane changing...
Definition: MSVehicle.h:1150
@ LC_NOCONFLICT
Definition: MSVehicle.h:1152
virtual void drawOutsideNetwork(bool)
register vehicle for drawing while outside the network
Definition: MSVehicle.h:1836
void initDevices()
Definition: MSVehicle.cpp:1059
void adaptToOncomingLeader(const std::pair< const MSVehicle *, double > leaderInfo, DriveProcessItem *const lastLink, double &v, double &vLinkPass) const
Definition: MSVehicle.cpp:3331
State myState
This Vehicles driving state (pos and speed)
Definition: MSVehicle.h:1868
double getCenterOnEdge(const MSLane *lane=0) const
Get the vehicle's lateral position on the edge of the given lane (or its current edge if lane == 0)
Definition: MSVehicle.cpp:6693
void setLateralPositionOnLane(double posLat)
Definition: MSVehicle.h:420
void adaptToLeader(const std::pair< const MSVehicle *, double > leaderInfo, double seen, DriveProcessItem *const lastLink, double &v, double &vLinkPass) const
Definition: MSVehicle.cpp:3131
void activateReminders(const MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
"Activates" all current move reminder
Definition: MSVehicle.cpp:5356
void switchOnSignal(int signal)
Switches the given signal on.
Definition: MSVehicle.h:1169
static bool overlap(const MSVehicle *veh1, const MSVehicle *veh2)
Definition: MSVehicle.h:762
int getLaneIndex() const
Definition: MSVehicle.cpp:6642
void updateParkingState()
update state while parking
Definition: MSVehicle.cpp:4824
DriveItemVector myLFLinkLanes
container for the planned speeds in the current step
Definition: MSVehicle.h:2014
void updateDriveItems()
Check whether the drive items (myLFLinkLanes) are up to date, and update them if required.
Definition: MSVehicle.cpp:3932
Position getVelocityVector() const
Returns the vehicle's direction in radians.
Definition: MSVehicle.h:742
SUMOTime myJunctionEntryTime
time at which the current junction was entered
Definition: MSVehicle.h:1941
The car-following model and parameter.
Definition: MSVehicleType.h:63
double getLengthWithGap() const
Get vehicle's length including the minimum gap [m].
double getActionStepLengthSecs() const
Returns this type's default action step length in seconds.
const MSCFModel & getCarFollowModel() const
Returns the vehicle type's car following model definition (const version)
SUMOTime getActionStepLength() const
Returns this type's default action step length.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
static const Position INVALID
used to indicate that a position is valid
Definition: Position.h:317
A list of positions.
Encapsulated SAX-Attributes.
Representation of a vehicle, person, or container.
Representation of a vehicle.
Definition: SUMOVehicle.h:60
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.
Drive process items represent bounds on the safe velocity corresponding to the upcoming links.
Definition: MSVehicle.h:1953
void adaptStopSpeed(const double v)
Definition: MSVehicle.h:2000
DriveProcessItem(MSLink *link, double vPass, double vWait, bool setRequest, SUMOTime arrivalTime, double arrivalSpeed, double arrivalSpeedBraking, double distance, double leaveSpeed)
Definition: MSVehicle.h:1966
double getLeaveSpeed() const
Definition: MSVehicle.h:2004
DriveProcessItem(double vWait, double distance, double _availableSpace=0)
constructor if the link shall not be passed
Definition: MSVehicle.h:1982
void adaptLeaveSpeed(const double v)
Definition: MSVehicle.h:1992
Container for state and parameters of the gap control.
Definition: MSVehicle.h:1373
bool active
Whether the gap control is active.
Definition: MSVehicle.h:1404
static std::map< const MSVehicle *, GapControlState * > refVehMap
stores reference vehicles currently in use by a gapController
Definition: MSVehicle.h:1415
SUMOTime lastUpdate
Time of the last update of the gap control.
Definition: MSVehicle.h:1410
double changeRate
Rate by which the current time and space headways are changed towards the target value....
Definition: MSVehicle.h:1398
double addGapTarget
Target value for the desired space headway.
Definition: MSVehicle.h:1393
static GapControlVehStateListener vehStateListener
Definition: MSVehicle.h:1418
double timeHeadwayIncrement
cache storage for the headway increments of the current operation
Definition: MSVehicle.h:1412
double tauOriginal
Original value for the desired headway (will be reset after duration has expired)
Definition: MSVehicle.h:1385
double tauCurrent
Current, interpolated value for the desired time headway.
Definition: MSVehicle.h:1387
double remainingDuration
Remaining duration for keeping the target headway.
Definition: MSVehicle.h:1395
void activate(double tauOriginal, double tauTarget, double additionalGap, double duration, double changeRate, double maxDecel, const MSVehicle *refVeh)
Start gap control with given params.
Definition: MSVehicle.cpp:320
double addGapCurrent
Current, interpolated value for the desired space headway.
Definition: MSVehicle.h:1391
static void cleanup()
Static cleanup (removes vehicle state listener)
Definition: MSVehicle.cpp:314
double tauTarget
Target value for the desired time headway.
Definition: MSVehicle.h:1389
void deactivate()
Stop gap control.
Definition: MSVehicle.cpp:350
const MSVehicle * referenceVeh
reference vehicle for the gap - if it is null, the current leader on the ego's lane is used as a refe...
Definition: MSVehicle.h:1402
double maxDecel
Maximal deceleration to be applied due to the adapted headway.
Definition: MSVehicle.h:1400
bool gapAttained
Whether the desired gap was attained during the current activity phase (induces the remaining duratio...
Definition: MSVehicle.h:1406
const MSVehicle * prevLeader
The last recognized leader.
Definition: MSVehicle.h:1408
static void init()
Static initalization (adds vehicle state listener)
Definition: MSVehicle.cpp:303
A structure representing the best lanes for continuing the current route starting at 'lane'.
Definition: MSVehicle.h:865
double length
The overall length which may be driven when using this lane without a lane change.
Definition: MSVehicle.h:869
bool allowsContinuation
Whether this lane allows to continue the drive.
Definition: MSVehicle.h:879
double nextOccupation
As occupation, but without the first lane.
Definition: MSVehicle.h:875
std::vector< MSLane * > bestContinuations
Definition: MSVehicle.h:885
MSLane * lane
The described lane.
Definition: MSVehicle.h:867
double currentLength
The length which may be driven on this lane.
Definition: MSVehicle.h:871
int bestLaneOffset
The (signed) number of lanes to be crossed to get to the lane which allows to continue the drive.
Definition: MSVehicle.h:877
double occupation
The overall vehicle sum on consecutive lanes which can be passed without a lane change.
Definition: MSVehicle.h:873