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 
912 
916  const std::vector<MSLane*>& getBestLanesContinuation() const;
917 
918 
922  const std::vector<MSLane*>& getBestLanesContinuation(const MSLane* const l) const;
923 
930  const std::vector<const MSLane*> getUpcomingLanesUntil(double distance) const;
931 
937  const std::vector<const MSLane*> getPastLanesUntil(double distance) const;
938 
943  const std::vector<MSLane*> getUpstreamOppositeLanes() const;
944 
945  /* @brief returns the current signed offset from the lane that is most
946  * suited for continuing the current route (in the strategic sense of reducing lane-changes)
947  * - 0 if the vehicle is on its best lane
948  * - negative if the vehicle should change to the right
949  * - positive if the vehicle should change to the left
950  */
951  int getBestLaneOffset() const;
952 
954  double getBestLaneDist() const;
955 
957  void adaptBestLanesOccupation(int laneIndex, double density);
958 
960 
962  void fixPosition();
963 
965  std::pair<const MSLane*, double> getLanePosAfterDist(double distance) const;
966 
974  inline const MSCFModel& getCarFollowModel() const {
975  return myType->getCarFollowModel();
976  }
977 
983  std::shared_ptr<MSSimpleDriverState> getDriverState() const;
984 
989  double getFriction() const;
990 
996  return myCFVariables;
997  }
998 
1001  inline bool hasDriverState() const {
1002  return myDriverState != nullptr;
1003  }
1005 
1006 
1009 
1012  bool willStop() const;
1013 
1015  bool isStoppedOnLane() const;
1016 
1018  bool keepStopping(bool afterProcessing = false) const;
1019 
1023  SUMOTime collisionStopTime() const;
1024 
1028  bool isRemoteControlled() const;
1029 
1033  bool wasRemoteControlled(SUMOTime lookBack = DELTA_T) const;
1034 
1036  double nextStopDist() const {
1037  return myStopDist;
1038  }
1040 
1041  int getLaneIndex() const;
1042 
1052  double getDistanceToPosition(double destPos, const MSLane* destLane) const;
1053 
1054 
1062  double processNextStop(double currentVelocity);
1063 
1064 
1072  std::pair<const MSVehicle* const, double> getLeader(double dist = 0) const;
1073 
1082  std::pair<const MSVehicle* const, double> getFollower(double dist = 0) const;
1083 
1090  double getTimeGapOnLane() const;
1091 
1092 
1097  void addTransportable(MSTransportable* transportable);
1098 
1101 
1105  enum Signalling {
1136  };
1137 
1138 
1144  LC_NEVER = 0, // lcModel shall never trigger changes at this level
1145  LC_NOCONFLICT = 1, // lcModel may trigger changes if not in conflict with TraCI request
1146  LC_ALWAYS = 2 // lcModel may always trigger changes of this level regardless of requests
1147  };
1148 
1149 
1152  LCP_ALWAYS = 0, // change regardless of blockers, adapt own speed and speed of blockers
1153  LCP_NOOVERLAP = 1, // change unless overlapping with blockers, adapt own speed and speed of blockers
1154  LCP_URGENT = 2, // change if not blocked, adapt own speed and speed of blockers
1155  LCP_OPPORTUNISTIC = 3 // change if not blocked
1156  };
1157 
1158 
1162  void switchOnSignal(int signal) {
1163  mySignals |= signal;
1164  }
1165 
1166 
1170  void switchOffSignal(int signal) {
1171  mySignals &= ~signal;
1172  }
1173 
1174 
1178  int getSignals() const {
1179  return mySignals;
1180  }
1181 
1182 
1187  bool signalSet(int which) const {
1188  return (mySignals & which) != 0;
1189  }
1191 
1192 
1194  bool unsafeLinkAhead(const MSLane* lane) const;
1195 
1197  bool passingMinor() const;
1198 
1199 
1200 
1208  double getSpeedWithoutTraciInfluence() const;
1209 
1214  bool rerouteParkingArea(const std::string& parkingAreaID, std::string& errorMsg);
1215 
1222  bool addTraciStop(SUMOVehicleParameter::Stop stop, std::string& errorMsg);
1223 
1224  bool handleCollisionStop(MSStop& stop, const double distToStop);
1225 
1230  bool resumeFromStopping();
1231 
1233  double updateFurtherLanes(std::vector<MSLane*>& furtherLanes,
1234  std::vector<double>& furtherLanesPosLat,
1235  const std::vector<MSLane*>& passedLanes);
1236 
1238  PositionVector getBoundingBox(double offset = 0) const;
1239 
1241  PositionVector getBoundingPoly(double offset = 0) const;
1242 
1253  };
1254 
1257  bool setExitManoeuvre();
1259  void setManoeuvreType(const MSVehicle::ManoeuvreType mType);
1260 
1262  bool manoeuvreIsComplete() const;
1265 
1266 
1273  class Manoeuvre {
1274 
1275  public:
1277  Manoeuvre();
1278 
1280  Manoeuvre(const Manoeuvre& manoeuvre);
1281 
1283  Manoeuvre& operator=(const Manoeuvre& manoeuvre);
1284 
1286  bool operator!=(const Manoeuvre& manoeuvre);
1287 
1290 
1292  bool configureExitManoeuvre(MSVehicle* veh);
1293 
1296 
1298  bool
1299  manoeuvreIsComplete(const ManoeuvreType checkType) const;
1300 
1302  bool
1303  manoeuvreIsComplete() const;
1304 
1306  double getGUIIncrement() const;
1307 
1310 
1312  void setManoeuvreType(const MSVehicle::ManoeuvreType mType);
1313 
1314  private:
1317 
1319  std::string myManoeuvreStop;
1320 
1323 
1326 
1329 
1330  // @brief Angle (radians) through which parking vehicle moves in each sim step
1332  };
1333 
1334  // Current or previous (completed) manoeuvre
1336 
1349  class Influencer : public BaseInfluencer {
1350  private:
1351 
1361  void vehicleStateChanged(const SUMOVehicle* const vehicle, MSNet::VehicleState to, const std::string& info = "");
1362  };
1363 
1364 
1367  GapControlState();
1368  virtual ~GapControlState();
1370  static void init();
1372  static void cleanup();
1374  void activate(double tauOriginal, double tauTarget, double additionalGap, double duration, double changeRate, double maxDecel, const MSVehicle* refVeh);
1376  void deactivate();
1378  double tauOriginal;
1380  double tauCurrent;
1382  double tauTarget;
1391  double changeRate;
1393  double maxDecel;
1397  bool active;
1406 
1408  static std::map<const MSVehicle*, GapControlState*> refVehMap;
1409 
1410  private:
1412  };
1413 
1414 
1415  public:
1417  Influencer();
1418 
1420  ~Influencer();
1421 
1423  static void init();
1425  static void cleanup();
1426 
1430  void setSpeedTimeLine(const std::vector<std::pair<SUMOTime, double> >& speedTimeLine);
1431 
1434  void activateGapController(double originalTau, double newTimeHeadway, double newSpaceHeadway, double duration, double changeRate, double maxDecel, MSVehicle* refVeh = nullptr);
1435 
1438  void deactivateGapController();
1439 
1443  void setLaneTimeLine(const std::vector<std::pair<SUMOTime, int> >& laneTimeLine);
1444 
1448  void adaptLaneTimeLine(int indexShift);
1449 
1453  void setSublaneChange(double latDist);
1454 
1456  int getSpeedMode() const;
1457 
1459  int getLaneChangeMode() const;
1460 
1462 
1464 
1476  double influenceSpeed(SUMOTime currentTime, double speed, double vSafe, double vMin, double vMax);
1477 
1490  double gapControlSpeed(SUMOTime currentTime, const SUMOVehicle* veh, double speed, double vSafe, double vMin, double vMax);
1491 
1499  int influenceChangeDecision(const SUMOTime currentTime, const MSEdge& currentEdge, const int currentLaneIndex, int state);
1500 
1501 
1507  double changeRequestRemainingSeconds(const SUMOTime currentTime) const;
1508 
1513  inline bool getRespectJunctionPriority() const {
1515  }
1516 
1517 
1521  inline bool getEmergencyBrakeRedLight() const {
1522  return myEmergencyBrakeRedLight;
1523  }
1524 
1529  inline bool getRespectJunctionLeaderPriority() const {
1531  }
1532 
1533 
1535  bool considerSafeVelocity() const {
1536  return myConsiderSafeVelocity;
1537  }
1538 
1542  void setSpeedMode(int speedMode);
1543 
1547  void setLaneChangeMode(int value);
1548 
1552  double getOriginalSpeed() const;
1553 
1555  void setOriginalSpeed(double speed);
1556 
1557  void setRemoteControlled(Position xyPos, MSLane* l, double pos, double posLat, double angle, int edgeOffset, const ConstMSEdgeVector& route, SUMOTime t);
1558 
1560  return myLastRemoteAccess;
1561  }
1562 
1565 
1568 
1570  double implicitSpeedRemote(const MSVehicle* veh, double oldSpeed);
1571 
1573  double implicitDeltaPosRemote(const MSVehicle* veh);
1574 
1575  bool isRemoteControlled() const;
1576 
1577  bool isRemoteAffected(SUMOTime t) const;
1578 
1579  void setSignals(int signals) {
1580  myTraCISignals = signals;
1581  }
1582 
1583  int getSignals() const {
1584  return myTraCISignals;
1585  }
1586 
1587  double getLatDist() const {
1588  return myLatDist;
1589  }
1590 
1591  void resetLatDist() {
1592  myLatDist = 0.;
1593  }
1594 
1595  bool ignoreOverlap() const {
1597  }
1598 
1599  private:
1601  std::vector<std::pair<SUMOTime, double> > mySpeedTimeLine;
1602 
1604  std::vector<std::pair<SUMOTime, int> > myLaneTimeLine;
1605 
1607  std::shared_ptr<GapControlState> myGapControlState;
1608 
1611 
1613  double myLatDist;
1614 
1617 
1620 
1623 
1626 
1629 
1632 
1635 
1638  double myRemotePos;
1644 
1646 
1660 
1661  // @brief the signals set via TraCI
1663 
1664  };
1665 
1666 
1674 
1675  const BaseInfluencer* getBaseInfluencer() const;
1676  const Influencer* getInfluencer() const;
1677 
1678  bool hasInfluencer() const {
1679  return myInfluencer != nullptr;
1680  }
1681 
1683  int influenceChangeDecision(int state);
1684 
1686  void setRemoteState(Position xyPos);
1687 
1689  static int nextLinkPriority(const std::vector<MSLane*>& conts);
1690 
1692  bool isLeader(const MSLink* link, const MSVehicle* veh, const double gap) const;
1693 
1694  // @brief get the position of the back bumper;
1695  const Position getBackPosition() const;
1696 
1698  bool ignoreCollision() const;
1699 
1701  void updateParkingState();
1702 
1707  void replaceVehicleType(MSVehicleType* type);
1708 
1710  double getBrakeGap(bool delayed = false) const;
1711 
1713 
1714 
1716  void saveState(OutputDevice& out);
1717 
1720  void loadState(const SUMOSAXAttributes& attrs, const SUMOTime offset);
1721 
1722  void loadPreviousApproaching(MSLink* link, bool setRequest,
1723  SUMOTime arrivalTime, double arrivalSpeed,
1724  double arrivalSpeedBraking,
1725  double dist, double leaveSpeed);
1727 
1728 protected:
1729 
1732 
1748  void adaptLaneEntering2MoveReminder(const MSLane& enteredLane);
1750 
1751 
1759  void processLinkApproaches(double& vSafe, double& vSafeMin, double& vSafeMinDist);
1760 
1761 
1769  void processLaneAdvances(std::vector<MSLane*>& passedLanes, std::string& emergencyReason);
1770 
1771 
1779  double processTraCISpeedControl(double vSafe, double vNext);
1780 
1781 
1788  void removePassedDriveItems();
1789 
1792  void updateWaitingTime(double vNext);
1793 
1796  void updateTimeLoss(double vNext);
1797 
1798  /* @brief Check whether the vehicle is a train that can reverse its direction at the current point in its route
1799  * and return the speed in preparation for reversal
1800  *
1801  * @param[out] canReverse
1802  * @param[in] speedThreshold
1803  * @return speed for reversal
1804  */
1805  double checkReversal(bool& canReverse, double speedThreshold = SUMO_const_haltingSpeed, double seen = 0) const;
1806 
1809  void setBrakingSignals(double vNext) ;
1810 
1813  void setBlinkerInformation();
1814 
1817  void setEmergencyBlueLight(SUMOTime currentTime);
1818 
1820  void computeFurtherLanes(MSLane* enteredLane, double pos, bool collision = false);
1821 
1823  void updateOccupancyAndCurrentBestLane(const MSLane* startLane);
1824 
1826  Position validatePosition(Position result, double offset = 0) const;
1827 
1829  virtual void drawOutsideNetwork(bool /*add*/) {};
1830 
1832  void boardTransportables(MSStop& stop);
1833 
1835  bool joinTrainPart(MSVehicle* veh);
1836 
1838  bool joinTrainPartFront(MSVehicle* veh);
1839 
1841  double slowDownForSchedule(double vMinComfortable) const;
1842 
1844  void interpolateLateralZ(Position& pos, double offset, double posLat) const;
1845 
1849  double getDistanceToLeaveJunction() const;
1850 
1851 protected:
1852 
1856 
1858  double myTimeLoss;
1859 
1862 
1865 
1868 
1874 
1875 
1876 
1879 
1881 
1884 
1885  /* @brief Complex data structure for keeping and updating LaneQ:
1886  * Each element of the outer vector corresponds to an upcoming edge on the vehicles route
1887  * The first element corresponds to the current edge and is returned in getBestLanes()
1888  * The other elements are only used as a temporary structure in updateBestLanes();
1889  */
1890  std::vector<std::vector<LaneQ> > myBestLanes;
1891 
1892  /* @brief iterator to speed up retrieval of the current lane's LaneQ in getBestLaneOffset() and getBestLanesContinuation()
1893  * This is updated in updateOccupancyAndCurrentBestLane()
1894  */
1895  std::vector<LaneQ>::iterator myCurrentLaneInBestLanes;
1896 
1897  static std::vector<MSLane*> myEmptyLaneVector;
1898 
1901 
1904  std::pair<double, const MSLink*> myNextTurn;
1905 
1907  std::vector<MSLane*> myFurtherLanes;
1909  std::vector<double> myFurtherLanesPosLat;
1910 
1913 
1916 
1919 
1921 
1923  double myAngle;
1924 
1926  double myStopDist;
1927 
1930 
1932 
1937 
1940 
1941 protected:
1942 
1948  double myVLinkPass;
1949  double myVLinkWait;
1954  double myDistance;
1955  double accelV;
1958 
1959  DriveProcessItem(MSLink* link, double vPass, double vWait, bool setRequest,
1960  SUMOTime arrivalTime, double arrivalSpeed,
1961  double arrivalSpeedBraking,
1962  double distance,
1963  double leaveSpeed) :
1964  myLink(link), myVLinkPass(vPass), myVLinkWait(vWait), mySetRequest(setRequest),
1965  myArrivalTime(arrivalTime), myArrivalSpeed(arrivalSpeed),
1966  myArrivalSpeedBraking(arrivalSpeedBraking),
1967  myDistance(distance),
1968  accelV(leaveSpeed), hadStoppedVehicle(false), availableSpace(0) {
1969  assert(vWait >= 0 || !MSGlobals::gSemiImplicitEulerUpdate);
1970  assert(vPass >= 0 || !MSGlobals::gSemiImplicitEulerUpdate);
1971  };
1972 
1973 
1975  DriveProcessItem(double vWait, double distance, double _availableSpace = 0) :
1976  myLink(0), myVLinkPass(vWait), myVLinkWait(vWait), mySetRequest(false),
1979  myDistance(distance),
1980  accelV(-1), hadStoppedVehicle(false), availableSpace(_availableSpace) {
1981  assert(vWait >= 0 || !MSGlobals::gSemiImplicitEulerUpdate);
1982  };
1983 
1984 
1985  inline void adaptLeaveSpeed(const double v) {
1986  if (accelV < 0) {
1987  accelV = v;
1988  } else {
1989  accelV = MIN2(accelV, v);
1990  }
1991  }
1992  inline double getLeaveSpeed() const {
1993  return accelV < 0 ? myVLinkPass : accelV;
1994  }
1995  };
1996 
1998  // TODO: Consider making LFLinkLanes a std::deque for efficient front removal (needs refactoring in checkRewindLinkLanes()...)
1999  typedef std::vector< DriveProcessItem > DriveItemVector;
2000 
2003 
2006 
2012  DriveItemVector::iterator myNextDriveItem;
2013 
2015  void planMoveInternal(const SUMOTime t, MSLeaderInfo ahead, DriveItemVector& lfLinks, double& myStopDist, std::pair<double, const MSLink*>& myNextTurn) const;
2016 
2018  void checkRewindLinkLanes(const double lengthsInFront, DriveItemVector& lfLinks) const;
2019 
2021  void removeApproachingInformation(const DriveItemVector& lfLinks) const;
2022 
2023  /* @brief adapt safe velocity in accordance to a moving obstacle:
2024  * - a leader vehicle
2025  * - a vehicle or pedestrian that crosses this vehicles path on an upcoming intersection
2026  * @param[in] leaderInfo The leading vehicle and the (virtual) distance to it
2027  * @param[in] lastLink the lastLink index
2028  * @param[in,out] the safe velocity for driving
2029  * @param[in,out] the safe velocity for arriving at the next link
2030  */
2031  void adaptToLeader(const std::pair<const MSVehicle*, double> leaderInfo,
2032  double seen,
2033  DriveProcessItem* const lastLink,
2034  double& v, double& vLinkPass) const;
2035 
2037  bool brakeForOverlap(const MSLink* link, const MSLane* lane) const;
2038 
2039 public:
2040  void adaptToJunctionLeader(const std::pair<const MSVehicle*, double> leaderInfo,
2041  const double seen, DriveProcessItem* const lastLink,
2042  const MSLane* const lane, double& v, double& vLinkPass,
2043  double distToCrossing = -1) const;
2044 
2045  void adaptToOncomingLeader(const std::pair<const MSVehicle*, double> leaderInfo,
2046  DriveProcessItem* const lastLink,
2047  double& v, double& vLinkPass) const;
2048 
2050  bool ignoreRed(const MSLink* link, bool canBrake) const;
2051 
2053  bool ignoreFoe(const SUMOTrafficObject* foe) const;
2054 
2056  inline double accelThresholdForWaiting() const {
2057  return 0.5 * getCarFollowModel().getMaxAccel();
2058  }
2059 
2060  /* @brief return the previous lane in this vehicles route including internal lanes
2061  * @param[in] current The lane of which the predecessor should be returned
2062  * @param[in,out] routeIndex The index of the current or previous non-internal edge in the route
2063  */
2064  const MSLane* getPreviousLane(const MSLane* current, int& furtherIndex) const;
2065 
2066 protected:
2067 
2068  /* @brief adapt safe velocity in accordance to multiple vehicles ahead:
2069  * @param[in] ahead The leader information according to the current lateral-resolution
2070  * @param[in] latOffset the lateral offset for locating the ego vehicle on the given lane
2071  * @param[in] seen the distance to the end of the current lane
2072  * @param[in] lastLink the lastLink index
2073  * @param[in] lane The current Lane the vehicle is on
2074  * @param[in,out] the safe velocity for driving
2075  * @param[in,out] the safe velocity for arriving at the next link
2076  */
2077  void adaptToLeaders(const MSLeaderInfo& ahead,
2078  double latOffset,
2079  const double seen, DriveProcessItem* const lastLink,
2080  const MSLane* const lane, double& v, double& vLinkPass) const;
2081 
2082  void adaptToLeaderDistance(const MSLeaderDistanceInfo& ahead, double latOffset,
2083  double seen,
2084  DriveProcessItem* const lastLink,
2085  double& v, double& vLinkPass) const;
2086 
2088  void checkLinkLeader(const MSLink* link, const MSLane* lane, double seen,
2089  DriveProcessItem* const lastLink, double& v, double& vLinkPass, double& vLinkWait, bool& setRequest,
2090  bool isShadowLink = false) const;
2091 
2093  void checkLinkLeaderCurrentAndParallel(const MSLink* link, const MSLane* lane, double seen,
2094  DriveProcessItem* const lastLink, double& v, double& vLinkPass, double& vLinkWait, bool& setRequest) const;
2095 
2096 
2104  void updateState(double vNext);
2105 
2106 
2108  bool keepClear(const MSLink* link) const;
2109 
2111  std::pair<double, double> estimateTimeToNextStop() const;
2112 
2113  /* @brief special considerations for opposite direction driving so that the
2114  * result can be used directly by getPositionOnLane(...) */
2115  double getBackPositionOnLane(const MSLane* lane, bool calledByGetPosition) const;
2116 
2123  bool hasArrivedInternal(bool oppositeTransformed = true) const;
2124 
2125 
2126  SUMOTime getArrivalTime(SUMOTime t, double seen, double v, double arrivalSpeed) const;
2127 
2129  bool isOppositeLane(const MSLane* lane) const;
2130 
2132  void cleanupFurtherLanes();
2133 
2135  static bool betterContinuation(const LaneQ* bestConnectedNext, const LaneQ& m);
2136 
2137 private:
2140 
2143 
2144 
2145 private:
2148 
2151 
2154 
2155 };
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:1354
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:1349
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:1659
bool getEmergencyBrakeRedLight() const
Returns whether red lights shall be a reason to brake.
Definition: MSVehicle.h:1521
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:1607
bool considerSafeVelocity() const
Returns whether safe velocities shall be considered.
Definition: MSVehicle.h:1535
int getSignals() const
Definition: MSVehicle.h:1583
bool myConsiderMaxDeceleration
Whether the maximum deceleration shall be regarded.
Definition: MSVehicle.h:1625
ConstMSEdgeVector myRemoteRoute
Definition: MSVehicle.h:1642
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:1634
void setOriginalSpeed(double speed)
Stores the originally longitudinal speed.
Definition: MSVehicle.cpp:670
double myOriginalSpeed
The velocity before influence.
Definition: MSVehicle.h:1610
double getLatDist() const
Definition: MSVehicle.h:1587
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:1643
std::vector< std::pair< SUMOTime, int > > myLaneTimeLine
The lane usage time line to apply.
Definition: MSVehicle.h:1604
bool getRespectJunctionLeaderPriority() const
Returns whether junction priority rules within the junction shall be respected (concerns vehicles wit...
Definition: MSVehicle.h:1529
LaneChangeMode myStrategicLC
lane changing which is necessary to follow the current route
Definition: MSVehicle.h:1648
LaneChangeMode mySpeedGainLC
lane changing to travel with higher speed
Definition: MSVehicle.h:1652
static void init()
Static initalization.
Definition: MSVehicle.cpp:388
LaneChangeMode mySublaneLC
changing to the prefered lateral alignment
Definition: MSVehicle.h:1656
bool getRespectJunctionPriority() const
Returns whether junction priority rules shall be respected (concerns approaching vehicles outside the...
Definition: MSVehicle.h:1513
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:1619
bool mySpeedAdaptationStarted
Whether influencing the speed has already started.
Definition: MSVehicle.h:1616
~Influencer()
Destructor.
Definition: MSVehicle.cpp:385
void setSignals(int signals)
Definition: MSVehicle.h:1579
double myLatDist
The requested lateral change.
Definition: MSVehicle.h:1613
bool myEmergencyBrakeRedLight
Whether red lights are a reason to brake.
Definition: MSVehicle.h:1631
LaneChangeMode myRightDriveLC
changing to the rightmost lane
Definition: MSVehicle.h:1654
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:1601
SUMOTime getLastAccessTimeStep() const
Definition: MSVehicle.h:1559
bool myConsiderMaxAcceleration
Whether the maximum acceleration shall be regarded.
Definition: MSVehicle.h:1622
LaneChangeMode myCooperativeLC
lane changing with the intent to help other vehicles
Definition: MSVehicle.h:1650
bool isRemoteControlled() const
Definition: MSVehicle.cpp:814
bool ignoreOverlap() const
Definition: MSVehicle.h:1595
bool myRespectJunctionPriority
Whether the junction priority rules are respected (approaching)
Definition: MSVehicle.h:1628
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:1273
SUMOTime myManoeuvreCompleteTime
Time at which this manoeuvre should complete.
Definition: MSVehicle.h:1325
MSVehicle::ManoeuvreType getManoeuvreType() const
Accessor (get) for manoeuvre type.
Definition: MSVehicle.cpp:7672
std::string myManoeuvreStop
The name of the stop associated with the Manoeuvre - for debug output.
Definition: MSVehicle.h:1319
bool manoeuvreIsComplete() const
Check if any manoeuver is ongoing and whether the completion time is beyond currentTime.
Definition: MSVehicle.cpp:7810
bool configureExitManoeuvre(MSVehicle *veh)
Setup the myManoeuvre for exiting (Sets completion time and manoeuvre type)
Definition: MSVehicle.cpp:7728
void setManoeuvreType(const MSVehicle::ManoeuvreType mType)
Accessor (set) for manoeuvre type.
Definition: MSVehicle.cpp:7690
Manoeuvre & operator=(const Manoeuvre &manoeuvre)
Assignment operator.
Definition: MSVehicle.cpp:7644
Manoeuvre()
Constructor.
Definition: MSVehicle.cpp:7631
std::string myManoeuvreVehicleID
The name of the vehicle associated with the Manoeuvre - for debug output.
Definition: MSVehicle.h:1316
ManoeuvreType myManoeuvreType
Manoeuvre type - currently entry, exit or none.
Definition: MSVehicle.h:1328
double getGUIIncrement() const
Accessor for GUI rotation step when parking (radians)
Definition: MSVehicle.cpp:7666
SUMOTime myManoeuvreStartTime
Time at which the Manoeuvre for this stop started.
Definition: MSVehicle.h:1322
bool operator!=(const Manoeuvre &manoeuvre)
Operator !=.
Definition: MSVehicle.cpp:7655
bool entryManoeuvreIsComplete(MSVehicle *veh)
Configure an entry manoeuvre if nothing is configured - otherwise check if complete.
Definition: MSVehicle.cpp:7771
bool configureEntryManoeuvre(MSVehicle *veh)
Setup the entry manoeuvre for this vehicle (Sets completion time and manoeuvre type)
Definition: MSVehicle.cpp:7696
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:7684
TraciLaneChangePriority
modes for prioritizing traci lane change requests
Definition: MSVehicle.h:1151
@ LCP_NOOVERLAP
Definition: MSVehicle.h:1153
@ LCP_OPPORTUNISTIC
Definition: MSVehicle.h:1155
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:6646
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:7242
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:3546
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:7976
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:3395
void checkRewindLinkLanes(const double lengthsInFront, DriveItemVector &lfLinks) const
runs heuristic for keeping the intersection clear in case of downstream jamming
Definition: MSVehicle.cpp:5025
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:1001
static int nextLinkPriority(const std::vector< MSLane * > &conts)
get a numerical value for the priority of the upcoming link
Definition: MSVehicle.cpp:6192
double getTimeGapOnLane() const
Returns the time gap in seconds to the leader of the vehicle on the same lane.
Definition: MSVehicle.cpp:6504
void updateBestLanes(bool forceRebuild=false, const MSLane *startLane=0)
computes the best lanes to use in order to continue the route
Definition: MSVehicle.cpp:5744
bool myAmIdling
Whether the vehicle is trying to enter the network (eg after parking so engine is running)
Definition: MSVehicle.h:1918
SUMOTime myWaitingTime
The time the vehicle waits (is not faster than 0.1m/s) in seconds.
Definition: MSVehicle.h:1854
double getStopDelay() const
Returns the public transport stop delay in seconds.
Definition: MSVehicle.cpp:7917
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:1858
SUMOTime myLastActionTime
Action offset (actions are taken at time myActionOffset + N*getActionStepLength()) Initialized to 0,...
Definition: MSVehicle.h:1873
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:7598
bool ignoreFoe(const SUMOTrafficObject *foe) const
decide whether a given foe object may be ignored
Definition: MSVehicle.cpp:7303
void boardTransportables(MSStop &stop)
board persons and load transportables at the given stop
Definition: MSVehicle.cpp:1901
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:6258
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:6515
SUMOTime myJunctionConflictEntryTime
Definition: MSVehicle.h:1936
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:6652
PositionVector getBoundingPoly(double offset=0) const
get bounding polygon
Definition: MSVehicle.cpp:6946
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:6613
bool brakeForOverlap(const MSLink *link, const MSLane *lane) const
handle with transitions
Definition: MSVehicle.cpp:2147
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:6453
double myAcceleration
The current acceleration after dawdling in m/s.
Definition: MSVehicle.h:1900
void registerInsertionApproach(MSLink *link, double dist)
register approach on insertion
Definition: MSVehicle.cpp:5316
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:3007
static bool betterContinuation(const LaneQ *bestConnectedNext, const LaneQ &m)
comparison between different continuations from the same lane
Definition: MSVehicle.cpp:6175
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:4819
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:5586
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:7604
SUMOTime getArrivalTime(SUMOTime t, double seen, double v, double arrivalSpeed) const
Definition: MSVehicle.cpp:2988
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:5019
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:4259
MSAbstractLaneChangeModel & getLaneChangeModel()
Definition: MSVehicle.cpp:5720
void setEmergencyBlueLight(SUMOTime currentTime)
sets the blue flashing light for emergency vehicles
Definition: MSVehicle.cpp:6593
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:1880
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:6628
std::vector< MSLane * > myFurtherLanes
The information into which lanes the vehicle laps into.
Definition: MSVehicle.h:1907
bool signalSet(int which) const
Returns whether the given signal is on.
Definition: MSVehicle.h:1187
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:2139
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:7080
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:3379
void planMoveInternal(const SUMOTime t, MSLeaderInfo ahead, DriveItemVector &lfLinks, double &myStopDist, std::pair< double, const MSLink * > &myNextTurn) const
Definition: MSVehicle.cpp:2182
std::pair< double, const MSLink * > myNextTurn
the upcoming turn for the vehicle
Definition: MSVehicle.h:1904
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:7217
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:7236
bool myAmOnNet
Whether the vehicle is on the network (not parking, teleported, vaporized, or arrived)
Definition: MSVehicle.h:1915
double nextStopDist() const
return the distance to the next stop or doubleMax if there is none.
Definition: MSVehicle.h:1036
void enterLaneAtMove(MSLane *enteredLane, bool onTeleporting=false)
Update when the vehicle enters a new lane in the move step.
Definition: MSVehicle.cpp:5360
void adaptBestLanesOccupation(int laneIndex, double density)
update occupation from MSLaneChanger
Definition: MSVehicle.cpp:6421
std::pair< double, double > estimateTimeToNextStop() const
return time (s) and distance to the next stop
Definition: MSVehicle.cpp:7822
double accelThresholdForWaiting() const
maximum acceleration to consider a vehicle as 'waiting' at low speed
Definition: MSVehicle.h:2056
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:1895
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:3524
const MSLane * myLastBestLanesInternalLane
Definition: MSVehicle.h:1883
void updateOccupancyAndCurrentBestLane(const MSLane *startLane)
updates LaneQ::nextOccupation and myCurrentLaneInBestLanes
Definition: MSVehicle.cpp:6208
const std::vector< MSLane * > getUpstreamOppositeLanes() const
Returns the sequence of opposite lanes corresponding to past lanes.
Definition: MSVehicle.cpp:6385
WaitingTimeCollector myWaitingTimeCollector
Definition: MSVehicle.h:1855
void setRemoteState(Position xyPos)
sets position outside the road network
Definition: MSVehicle.cpp:7230
void fixPosition()
repair errors in vehicle position after changing between internal edges
Definition: MSVehicle.cpp:6429
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:7207
PositionVector getBoundingBox(double offset=0) const
get bounding rectangle
Definition: MSVehicle.cpp:6915
ManoeuvreType
flag identifying which, if any, manoeuvre is in progress
Definition: MSVehicle.h:1246
@ MANOEUVRE_ENTRY
Manoeuvre into stopping place.
Definition: MSVehicle.h:1248
@ MANOEUVRE_NONE
not manouevring
Definition: MSVehicle.h:1252
@ MANOEUVRE_EXIT
Manoeuvre out of stopping place.
Definition: MSVehicle.h:1250
const MSEdge * getNextEdgePtr() const
returns the next edge (possibly an internal edge)
Definition: MSVehicle.cpp:7961
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:4063
const std::vector< MSLane * > & getBestLanesContinuation() const
Returns the best sequence of lanes to continue the route starting at myLane.
Definition: MSVehicle.cpp:6230
const MSEdge * myLastBestLanesEdge
Definition: MSVehicle.h:1882
bool ignoreCollision() const
whether this vehicle is except from collision checks
Definition: MSVehicle.cpp:1607
Influencer * myInfluencer
An instance of a velocity/lane influencing instance; built in "getInfluencer".
Definition: MSVehicle.h:2142
void saveState(OutputDevice &out)
Saves the states of a vehicle.
Definition: MSVehicle.cpp:7480
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:2077
bool resumeFromStopping()
Definition: MSVehicle.cpp:7118
int getBestLaneOffset() const
Definition: MSVehicle.cpp:6401
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:3205
double lateralDistanceToLane(const int offset) const
Get the minimal lateral distance required to move fully onto the lane at given offset.
Definition: MSVehicle.cpp:6788
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:2052
std::vector< DriveProcessItem > DriveItemVector
Container for used Links/visited Lanes during planMove() and executeMove.
Definition: MSVehicle.h:1999
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:6532
const MSEdge * getCurrentEdge() const
Returns the edge the vehicle is currently at (possibly an internal edge or nullptr)
Definition: MSVehicle.cpp:7955
void adaptToLeaderDistance(const MSLeaderDistanceInfo &ahead, double latOffset, double seen, DriveProcessItem *const lastLink, double &v, double &vLinkPass) const
Definition: MSVehicle.cpp:3087
DriveItemVector::iterator myNextDriveItem
iterator pointing to the next item in myLFLinkLanes
Definition: MSVehicle.h:2012
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:5626
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:7592
void removeApproachingInformation(const DriveItemVector &lfLinks) const
unregister approach from all upcoming links
Definition: MSVehicle.cpp:6850
void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
Definition: MSVehicle.cpp:4811
SUMOTime myJunctionEntryTimeNeverYield
Definition: MSVehicle.h:1935
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:6708
bool rerouteParkingArea(const std::string &parkingAreaID, std::string &errorMsg)
Definition: MSVehicle.cpp:7004
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:1170
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:4741
double getStopArrivalDelay() const
Returns the estimated public transport stop arrival delay in seconds.
Definition: MSVehicle.cpp:7939
int getSignals() const
Returns the signals.
Definition: MSVehicle.h:1178
int mySignals
State of things of the vehicle that can be on or off.
Definition: MSVehicle.h:1912
bool setExitManoeuvre()
accessor function to myManoeuvre equivalent
Definition: MSVehicle.cpp:7623
bool isOppositeLane(const MSLane *lane) const
whether the give lane is reverse direction of the current route or not
Definition: MSVehicle.cpp:5731
double myStopDist
distance to the next stop or doubleMax if there is none
Definition: MSVehicle.h:1926
Signalling
Some boolean values which describe the state of some vehicle parts.
Definition: MSVehicle.h:1105
@ VEH_SIGNAL_EMERGENCY_RED
A red emergency light is on.
Definition: MSVehicle.h:1133
@ VEH_SIGNAL_NONE
Everything is switched off.
Definition: MSVehicle.h:1107
@ VEH_SIGNAL_FOGLIGHT
The fog lights are on (no visualisation)
Definition: MSVehicle.h:1119
@ VEH_SIGNAL_FRONTLIGHT
The front lights are on (no visualisation)
Definition: MSVehicle.h:1117
@ VEH_SIGNAL_DOOR_OPEN_LEFT
One of the left doors is opened.
Definition: MSVehicle.h:1127
@ VEH_SIGNAL_BLINKER_RIGHT
Right blinker lights are switched on.
Definition: MSVehicle.h:1109
@ VEH_SIGNAL_BRAKELIGHT
The brake lights are on.
Definition: MSVehicle.h:1115
@ VEH_SIGNAL_BACKDRIVE
The backwards driving lights are on (no visualisation)
Definition: MSVehicle.h:1123
@ VEH_SIGNAL_EMERGENCY_BLUE
A blue emergency light is on.
Definition: MSVehicle.h:1131
@ VEH_SIGNAL_BLINKER_LEFT
Left blinker lights are switched on.
Definition: MSVehicle.h:1111
@ VEH_SIGNAL_DOOR_OPEN_RIGHT
One of the right doors is opened.
Definition: MSVehicle.h:1129
@ VEH_SIGNAL_BLINKER_EMERGENCY
Blinker lights on both sides are switched on.
Definition: MSVehicle.h:1113
@ VEH_SIGNAL_WIPER
The wipers are on.
Definition: MSVehicle.h:1125
@ VEH_SIGNAL_EMERGENCY_YELLOW
A yellow emergency light is on.
Definition: MSVehicle.h:1135
@ VEH_SIGNAL_HIGHBEAM
The high beam lights are on (no visualisation)
Definition: MSVehicle.h:1121
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:1920
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:6327
double getBestLaneDist() const
returns the distance that can be driven without lane change
Definition: MSVehicle.cpp:6410
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:6462
double slowDownForSchedule(double vMinComfortable) const
optionally return an upper bound on speed to stay within the schedule
Definition: MSVehicle.cpp:2945
bool executeMove()
Executes planned vehicle movements with regards to right-of-way.
Definition: MSVehicle.cpp:4423
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:6492
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:7337
void computeFurtherLanes(MSLane *enteredLane, double pos, bool collision=false)
updates myFurtherLanes on lane insertion or after collision
Definition: MSVehicle.cpp:5520
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:6436
SUMOTime myCollisionImmunity
amount of time for which the vehicle is immune from collisions
Definition: MSVehicle.h:1929
bool passingMinor() const
decide whether the vehicle is passing a minor link or has comitted to do so
Definition: MSVehicle.cpp:7321
void updateWaitingTime(double vNext)
Updates the vehicle's waiting time counters (accumulated and consecutive)
Definition: MSVehicle.cpp:4082
void enterLaneAtLaneChange(MSLane *enteredLane)
Update when the vehicle enters a new lane in the laneChange step.
Definition: MSVehicle.cpp:5421
BaseInfluencer & getBaseInfluencer()
Returns the velocity/lane influencer.
Definition: MSVehicle.cpp:7190
Influencer & getInfluencer()
Definition: MSVehicle.cpp:7182
bool isBidiOn(const MSLane *lane) const
whether this vehicle is driving against lane
Definition: MSVehicle.cpp:6996
double getRightSideOnLane() const
Get the lateral position of the vehicles right side on the lane:
Definition: MSVehicle.cpp:6622
bool unsafeLinkAhead(const MSLane *lane) const
whether the vehicle may safely move to the given lane with regard to upcoming links
Definition: MSVehicle.cpp:6862
double getCurrentApparentDecel() const
get apparent deceleration based on vType parameters and current acceleration
Definition: MSVehicle.cpp:7616
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:4829
MSCFModel::VehicleVariables * getCarFollowVariables() const
Returns the vehicle's car following model variables.
Definition: MSVehicle.h:995
DriveItemVector myLFLinkLanesPrev
planned speeds from the previous step for un-registering from junctions after the new container is fi...
Definition: MSVehicle.h:2005
std::vector< std::vector< LaneQ > > myBestLanes
Definition: MSVehicle.h:1890
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:1870
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:7526
SUMOTime myTimeSinceStartup
duration of driving (speed > SUMO_const_haltingSpeed) after the last halting episode
Definition: MSVehicle.h:1939
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:5263
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:1897
Position myCachedPosition
Definition: MSVehicle.h:1931
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:7678
double checkReversal(bool &canReverse, double speedThreshold=SUMO_const_haltingSpeed, double seen=0) const
Definition: MSVehicle.cpp:4109
void removePassedDriveItems()
Erase passed drive items from myLFLinkLanes (and unregister approaching information for corresponding...
Definition: MSVehicle.cpp:3849
const std::vector< LaneQ > & getBestLanes() const
Returns the description of best lanes to use in order to continue the route.
Definition: MSVehicle.cpp:5738
std::vector< double > myFurtherLanesPosLat
lateral positions on further lanes
Definition: MSVehicle.h:1909
bool checkActionStep(const SUMOTime t)
Returns whether the vehicle is supposed to take action in the current simulation step Updates myActio...
Definition: MSVehicle.cpp:2042
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:7580
bool keepClear(const MSLink *link) const
decide whether the given link must be kept clear
Definition: MSVehicle.cpp:7248
bool manoeuvreIsComplete() const
accessor function to myManoeuvre equivalent
Definition: MSVehicle.cpp:7816
double processNextStop(double currentVelocity)
Processes stops, returns the velocity needed to reach the stop.
Definition: MSVehicle.cpp:1613
double myAngle
the angle in radians (
Definition: MSVehicle.h:1923
bool ignoreRed(const MSLink *link, bool canBrake) const
decide whether a red (or yellow light) may be ignored
Definition: MSVehicle.cpp:7260
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:4097
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:1864
bool joinTrainPart(MSVehicle *veh)
try joining the given vehicle to the rear of this one (to resolve joinTriggered)
Definition: MSVehicle.cpp:1962
const MSCFModel & getCarFollowModel() const
Returns the vehicle's car following model definition.
Definition: MSVehicle.h:974
MSLane * myLane
The lane the vehicle is on.
Definition: MSVehicle.h:1878
bool onFurtherEdge(const MSEdge *edge) const
whether this vehicle has its back (and no its front) on the given edge
Definition: MSVehicle.cpp:6985
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:3816
Manoeuvre myManoeuvre
Definition: MSVehicle.h:1335
double getLateralOverlap() const
return the amount by which the vehicle extends laterally outside it's primary lane
Definition: MSVehicle.cpp:6844
double getAngle() const
Returns the vehicle's direction in radians.
Definition: MSVehicle.h:734
bool handleCollisionStop(MSStop &stop, const double distToStop)
Definition: MSVehicle.cpp:7091
bool hasInfluencer() const
whether the vehicle is individually influenced (via TraCI or special parameters)
Definition: MSVehicle.h:1678
MSDevice_Friction * myFrictionDevice
This vehicle's friction perception.
Definition: MSVehicle.h:1867
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:1983
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:2058
double getBrakeGap(bool delayed=false) const
get distance for coming to a stop (used for rerouting checks)
Definition: MSVehicle.cpp:2036
void executeFractionalMove(double dist)
move vehicle forward by the given distance during insertion
Definition: MSVehicle.cpp:4684
LaneChangeMode
modes for resolving conflicts between external control (traci) and vehicle control over lane changing...
Definition: MSVehicle.h:1143
@ LC_NOCONFLICT
Definition: MSVehicle.h:1145
virtual void drawOutsideNetwork(bool)
register vehicle for drawing while outside the network
Definition: MSVehicle.h:1829
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:3311
State myState
This Vehicles driving state (pos and speed)
Definition: MSVehicle.h:1861
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:6658
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:3119
void activateReminders(const MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
"Activates" all current move reminder
Definition: MSVehicle.cpp:5327
void switchOnSignal(int signal)
Switches the given signal on.
Definition: MSVehicle.h:1162
static bool overlap(const MSVehicle *veh1, const MSVehicle *veh2)
Definition: MSVehicle.h:762
int getLaneIndex() const
Definition: MSVehicle.cpp:6607
void updateParkingState()
update state while parking
Definition: MSVehicle.cpp:4795
DriveItemVector myLFLinkLanes
container for the planned speeds in the current step
Definition: MSVehicle.h:2002
void updateDriveItems()
Check whether the drive items (myLFLinkLanes) are up to date, and update them if required.
Definition: MSVehicle.cpp:3903
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:1934
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:1946
DriveProcessItem(MSLink *link, double vPass, double vWait, bool setRequest, SUMOTime arrivalTime, double arrivalSpeed, double arrivalSpeedBraking, double distance, double leaveSpeed)
Definition: MSVehicle.h:1959
double getLeaveSpeed() const
Definition: MSVehicle.h:1992
DriveProcessItem(double vWait, double distance, double _availableSpace=0)
constructor if the link shall not be passed
Definition: MSVehicle.h:1975
void adaptLeaveSpeed(const double v)
Definition: MSVehicle.h:1985
Container for state and parameters of the gap control.
Definition: MSVehicle.h:1366
bool active
Whether the gap control is active.
Definition: MSVehicle.h:1397
static std::map< const MSVehicle *, GapControlState * > refVehMap
stores reference vehicles currently in use by a gapController
Definition: MSVehicle.h:1408
SUMOTime lastUpdate
Time of the last update of the gap control.
Definition: MSVehicle.h:1403
double changeRate
Rate by which the current time and space headways are changed towards the target value....
Definition: MSVehicle.h:1391
double addGapTarget
Target value for the desired space headway.
Definition: MSVehicle.h:1386
static GapControlVehStateListener vehStateListener
Definition: MSVehicle.h:1411
double timeHeadwayIncrement
cache storage for the headway increments of the current operation
Definition: MSVehicle.h:1405
double tauOriginal
Original value for the desired headway (will be reset after duration has expired)
Definition: MSVehicle.h:1378
double tauCurrent
Current, interpolated value for the desired time headway.
Definition: MSVehicle.h:1380
double remainingDuration
Remaining duration for keeping the target headway.
Definition: MSVehicle.h:1388
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:1384
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:1382
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:1395
double maxDecel
Maximal deceleration to be applied due to the adapted headway.
Definition: MSVehicle.h:1393
bool gapAttained
Whether the desired gap was attained during the current activity phase (induces the remaining duratio...
Definition: MSVehicle.h:1399
const MSVehicle * prevLeader
The last recognized leader.
Definition: MSVehicle.h:1401
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