57#define CALL_MICRO_FUN(veh, fun, mesoResult) ((dynamic_cast<MSVehicle*>(veh) == nullptr ? (mesoResult) : dynamic_cast<MSVehicle*>(veh)->fun))
58#define CALL_MESO_FUN(veh, fun, microResult) ((dynamic_cast<MEVehicle*>(veh) == nullptr ? (microResult) : dynamic_cast<MEVehicle*>(veh)->fun))
66#define DEBUG_COND (veh->isSelected())
88Vehicle::isOnInit(
const std::string& vehID) {
90 return sumoVehicle ==
nullptr || sumoVehicle->
getLane() ==
nullptr;
88Vehicle::isOnInit(
const std::string& vehID) {
…}
94std::vector<std::string>
96 std::vector<std::string> ids;
99 if (isVisible((*i).second)) {
100 ids.push_back((*i).first);
107Vehicle::getIDCount() {
108 return (
int)getIDList().size();
113Vehicle::getSpeed(
const std::string& vehID) {
113Vehicle::getSpeed(
const std::string& vehID) {
…}
119Vehicle::getLateralSpeed(
const std::string& vehID) {
119Vehicle::getLateralSpeed(
const std::string& vehID) {
…}
126Vehicle::getAcceleration(
const std::string& vehID) {
126Vehicle::getAcceleration(
const std::string& vehID) {
…}
133Vehicle::getSpeedWithoutTraCI(
const std::string& vehID) {
133Vehicle::getSpeedWithoutTraCI(
const std::string& vehID) {
…}
140Vehicle::getPosition(
const std::string& vehID,
const bool includeZ) {
142 if (isVisible(veh)) {
145 return TraCIPosition();
140Vehicle::getPosition(
const std::string& vehID,
const bool includeZ) {
…}
150Vehicle::getPosition3D(
const std::string& vehID) {
151 return getPosition(vehID,
true);
150Vehicle::getPosition3D(
const std::string& vehID) {
…}
156Vehicle::getAngle(
const std::string& vehID) {
156Vehicle::getAngle(
const std::string& vehID) {
…}
163Vehicle::getSlope(
const std::string& vehID) {
163Vehicle::getSlope(
const std::string& vehID) {
…}
170Vehicle::getRoadID(
const std::string& vehID) {
170Vehicle::getRoadID(
const std::string& vehID) {
…}
177Vehicle::getLaneID(
const std::string& vehID) {
177Vehicle::getLaneID(
const std::string& vehID) {
…}
184Vehicle::getLaneIndex(
const std::string& vehID) {
188 if (microVeh !=
nullptr) {
184Vehicle::getLaneIndex(
const std::string& vehID) {
…}
200Vehicle::getSegmentID(
const std::string& vehID) {
200Vehicle::getSegmentID(
const std::string& vehID) {
…}
206Vehicle::getSegmentIndex(
const std::string& vehID) {
206Vehicle::getSegmentIndex(
const std::string& vehID) {
…}
212Vehicle::getTypeID(
const std::string& vehID) {
212Vehicle::getTypeID(
const std::string& vehID) {
…}
218Vehicle::getRouteID(
const std::string& vehID) {
218Vehicle::getRouteID(
const std::string& vehID) {
…}
224Vehicle::getDeparture(
const std::string& vehID) {
224Vehicle::getDeparture(
const std::string& vehID) {
…}
231Vehicle::getDepartDelay(
const std::string& vehID) {
231Vehicle::getDepartDelay(
const std::string& vehID) {
…}
237Vehicle::getRouteIndex(
const std::string& vehID) {
237Vehicle::getRouteIndex(
const std::string& vehID) {
…}
244Vehicle::getColor(
const std::string& vehID) {
249Vehicle::getLanePosition(
const std::string& vehID) {
249Vehicle::getLanePosition(
const std::string& vehID) {
…}
255Vehicle::getLateralLanePosition(
const std::string& vehID) {
255Vehicle::getLateralLanePosition(
const std::string& vehID) {
…}
261Vehicle::getCO2Emission(
const std::string& vehID) {
261Vehicle::getCO2Emission(
const std::string& vehID) {
…}
267Vehicle::getCOEmission(
const std::string& vehID) {
267Vehicle::getCOEmission(
const std::string& vehID) {
…}
273Vehicle::getHCEmission(
const std::string& vehID) {
273Vehicle::getHCEmission(
const std::string& vehID) {
…}
279Vehicle::getPMxEmission(
const std::string& vehID) {
279Vehicle::getPMxEmission(
const std::string& vehID) {
…}
285Vehicle::getNOxEmission(
const std::string& vehID) {
285Vehicle::getNOxEmission(
const std::string& vehID) {
…}
291Vehicle::getFuelConsumption(
const std::string& vehID) {
291Vehicle::getFuelConsumption(
const std::string& vehID) {
…}
297Vehicle::getNoiseEmission(
const std::string& vehID) {
297Vehicle::getNoiseEmission(
const std::string& vehID) {
…}
303Vehicle::getElectricityConsumption(
const std::string& vehID) {
303Vehicle::getElectricityConsumption(
const std::string& vehID) {
…}
309Vehicle::getPersonNumber(
const std::string& vehID) {
309Vehicle::getPersonNumber(
const std::string& vehID) {
…}
314Vehicle::getPersonCapacity(
const std::string& vehID) {
320Vehicle::getBoardingDuration(
const std::string& vehID) {
325std::vector<std::string>
326Vehicle::getPersonIDList(
const std::string& vehID) {
326Vehicle::getPersonIDList(
const std::string& vehID) {
…}
330std::pair<std::string, double>
331Vehicle::getLeader(
const std::string& vehID,
double dist) {
334 std::pair<const MSVehicle* const, double> leaderInfo = veh->
getLeader(dist,
false);
335 const std::string leaderID = leaderInfo.first !=
nullptr ? leaderInfo.first->getID() :
"";
336 double gap = leaderInfo.second;
337 if (leaderInfo.first !=
nullptr
338 && leaderInfo.first->getLane() !=
nullptr
339 && leaderInfo.first->getLane()->isInternal()
342 || (veh->
getLane()->
getLinkCont().front()->getIndex() != leaderInfo.first->getLane()->getLinkCont().front()->getIndex()))) {
345 gap =
MAX2(0.0, gap);
347 return std::make_pair(leaderID, gap);
349 return std::make_pair(
"", -1);
331Vehicle::getLeader(
const std::string& vehID,
double dist) {
…}
354std::pair<std::string, double>
355Vehicle::getFollower(
const std::string& vehID,
double dist) {
358 std::pair<const MSVehicle* const, double> leaderInfo = veh->
getFollower(dist);
359 return std::make_pair(
360 leaderInfo.first !=
nullptr ? leaderInfo.first->getID() :
"",
363 return std::make_pair(
"", -1);
355Vehicle::getFollower(
const std::string& vehID,
double dist) {
…}
368std::vector<TraCIJunctionFoe>
369Vehicle::getJunctionFoes(
const std::string& vehID,
double dist) {
370 std::vector<TraCIJunctionFoe> result;
373 if (veh ==
nullptr) {
379 const std::vector<const MSLane*> internalLanes;
383 curDist += lane->getLength();
384 if (lane->isInternal()) {
385 const MSLink* exitLink = lane->getLinkCont().front();
387 const std::vector<MSLink::ConflictInfo>& conflicts = exitLink->
getConflicts();
395 const MSLink* foeExitLink = foeLane->getLinkCont().front();
396 const double distToCrossing = curDist - distBehindCrossing;
401 jf.foeId = foe->
getID();
402 jf.egoDist = distToCrossing;
408 jf.foeDist = item.second.dist - foeDistBehindCrossing - prevFoeDist;
411 jf.egoLane = lane->getID();
412 jf.foeLane = foeLane->getID();
415 result.push_back(jf);
369Vehicle::getJunctionFoes(
const std::string& vehID,
double dist) {
…}
427Vehicle::getWaitingTime(
const std::string& vehID) {
427Vehicle::getWaitingTime(
const std::string& vehID) {
…}
433Vehicle::getAccumulatedWaitingTime(
const std::string& vehID) {
433Vehicle::getAccumulatedWaitingTime(
const std::string& vehID) {
…}
440Vehicle::getAdaptedTraveltime(
const std::string& vehID,
double time,
const std::string& edgeID) {
440Vehicle::getAdaptedTraveltime(
const std::string& vehID,
double time,
const std::string& edgeID) {
…}
449Vehicle::getEffort(
const std::string& vehID,
double time,
const std::string& edgeID) {
449Vehicle::getEffort(
const std::string& vehID,
double time,
const std::string& edgeID) {
…}
458Vehicle::isRouteValid(
const std::string& vehID) {
458Vehicle::isRouteValid(
const std::string& vehID) {
…}
464std::vector<std::string>
465Vehicle::getRoute(
const std::string& vehID) {
466 std::vector<std::string> result;
470 result.push_back((*i)->getID());
465Vehicle::getRoute(
const std::string& vehID) {
…}
477Vehicle::getSignals(
const std::string& vehID) {
477Vehicle::getSignals(
const std::string& vehID) {
…}
483std::vector<TraCIBestLanesData>
484Vehicle::getBestLanes(
const std::string& vehID) {
485 std::vector<TraCIBestLanesData> result;
487 if (veh !=
nullptr && veh->
isOnRoad()) {
489 TraCIBestLanesData bld;
490 bld.laneID = lq.lane->
getID();
491 bld.length = lq.length;
492 bld.occupation = lq.nextOccupation;
493 bld.bestLaneOffset = lq.bestLaneOffset;
494 bld.allowsContinuation = lq.allowsContinuation;
495 for (
const MSLane*
const lane : lq.bestContinuations) {
496 if (lane !=
nullptr) {
497 bld.continuationLanes.push_back(lane->getID());
500 result.emplace_back(bld);
484Vehicle::getBestLanes(
const std::string& vehID) {
…}
507std::vector<TraCINextTLSData>
508Vehicle::getNextTLS(
const std::string& vehID) {
509 std::vector<TraCINextTLSData> result;
512 if (veh !=
nullptr) {
519 std::vector<MSLink*>::const_iterator linkIt =
MSLane::succLinkSec(*veh, view, *lane, bestLaneConts);
522 if ((*linkIt)->isTLSControlled()) {
523 TraCINextTLSData ntd;
524 ntd.id = (*linkIt)->getTLLogic()->getID();
525 ntd.tlIndex = (*linkIt)->getTLIndex();
527 ntd.state = (char)(*linkIt)->getState();
528 result.push_back(ntd);
531 lane = (*linkIt)->getViaLaneOrLane();
542 for (
int i = 0; i < remainingEdges; i++) {
546 if (allowed !=
nullptr && allowed->size() != 0) {
547 for (
const MSLink*
const link : allowed->front()->getLinkCont()) {
548 if (&link->getLane()->getEdge() == next) {
549 if (link->isTLSControlled()) {
550 TraCINextTLSData ntd;
551 ntd.id = link->getTLLogic()->getID();
552 ntd.tlIndex = link->getTLIndex();
554 ntd.state = (char)link->getState();
555 result.push_back(ntd);
557 seen += next->
getLength() + link->getInternalLengthsAfter();
508Vehicle::getNextTLS(
const std::string& vehID) {
…}
573std::vector<TraCINextStopData>
574Vehicle::getNextStops(
const std::string& vehID) {
575 return getStops(vehID, 0);
574Vehicle::getNextStops(
const std::string& vehID) {
…}
578std::vector<libsumo::TraCIConnection>
579Vehicle::getNextLinks(
const std::string& vehID) {
580 std::vector<libsumo::TraCIConnection> result;
586 if (veh !=
nullptr) {
591 std::vector<MSLink*>::const_iterator linkIt =
MSLane::succLinkSec(*veh, view, *lane, bestLaneConts);
594 const MSLink* link = (*linkIt);
595 const std::string approachedLane = link->
getLane() !=
nullptr ? link->
getLane()->
getID() :
"";
598 const bool isOpen = link->
opened(currTime, speed, speed, veh->
getLength(),
606 result.push_back(TraCIConnection(approachedLane, hasPrio, isOpen, hasFoe, approachedInternal, state, direction, length));
608 lane = (*linkIt)->getViaLaneOrLane();
616 for (
int i = 0; i < remainingEdges; i++) {
620 if (allowed !=
nullptr && allowed->size() != 0) {
621 for (
const MSLink*
const link : allowed->front()->getLinkCont()) {
622 if (&link->getLane()->getEdge() == next) {
623 const std::string approachedLane = link->getLane() !=
nullptr ? link->getLane()->getID() :
"";
624 const bool hasPrio = link->havePriority();
625 const double speed =
MIN2(lane->
getSpeedLimit(), link->getLane()->getSpeedLimit());
626 const bool isOpen = link->opened(currTime, speed, speed, veh->
getLength(),
630 const std::string approachedInternal = link->getViaLane() !=
nullptr ? link->getViaLane()->getID() :
"";
633 const double length = link->getLength();
634 result.push_back(TraCIConnection(approachedLane, hasPrio, isOpen, hasFoe, approachedInternal, state, direction, length));
579Vehicle::getNextLinks(
const std::string& vehID) {
…}
648std::vector<TraCINextStopData>
649Vehicle::getStops(
const std::string& vehID,
int limit) {
650 std::vector<TraCINextStopData> result;
654 const std::vector<SUMOVehicleParameter::Stop>& pastStops = vehicle->
getPastStops();
655 const int n = (int)pastStops.size();
656 for (
int i =
MAX2(0, n + limit); i < n; i++) {
661 if (!stop.pars.collision) {
664 result.push_back(nsd);
665 if (limit > 0 && (
int)result.size() >= limit) {
649Vehicle::getStops(
const std::string& vehID,
int limit) {
…}
676Vehicle::getStopState(
const std::string& vehID) {
679 if (veh ==
nullptr) {
676Vehicle::getStopState(
const std::string& vehID) {
…}
693Vehicle::getDistance(
const std::string& vehID) {
693Vehicle::getDistance(
const std::string& vehID) {
…}
704Vehicle::getDrivingDistance(
const std::string& vehID,
const std::string& edgeID,
double pos,
int laneIndex) {
711 if (distance == std::numeric_limits<double>::max()) {
704Vehicle::getDrivingDistance(
const std::string& vehID,
const std::string& edgeID,
double pos,
int laneIndex) {
…}
722Vehicle::getDrivingDistance2D(
const std::string& vehID,
double x,
double y) {
724 if (veh ==
nullptr) {
733 if (distance == std::numeric_limits<double>::max()) {
722Vehicle::getDrivingDistance2D(
const std::string& vehID,
double x,
double y) {
…}
744Vehicle::getAllowedSpeed(
const std::string& vehID) {
744Vehicle::getAllowedSpeed(
const std::string& vehID) {
…}
751Vehicle::getSpeedFactor(
const std::string& vehID) {
757Vehicle::getSpeedMode(
const std::string& vehID) {
757Vehicle::getSpeedMode(
const std::string& vehID) {
…}
764Vehicle::getLaneChangeMode(
const std::string& vehID) {
764Vehicle::getLaneChangeMode(
const std::string& vehID) {
…}
771Vehicle::getRoutingMode(
const std::string& vehID) {
771Vehicle::getRoutingMode(
const std::string& vehID) {
…}
777Vehicle::getLine(
const std::string& vehID) {
777Vehicle::getLine(
const std::string& vehID) {
…}
782std::vector<std::string>
783Vehicle::getVia(
const std::string& vehID) {
783Vehicle::getVia(
const std::string& vehID) {
…}
789Vehicle::getLaneChangeState(
const std::string& vehID,
int direction) {
792 return veh->
isOnRoad() ?
CALL_MICRO_FUN(veh, getLaneChangeModel().getSavedState(direction), undefined) : undefined;
789Vehicle::getLaneChangeState(
const std::string& vehID,
int direction) {
…}
797Vehicle::getParameter(
const std::string& vehID,
const std::string& key) {
802 throw TraCIException(error);
811std::vector<std::pair<std::string, double> >
812Vehicle::getNeighbors(
const std::string& vehID,
const int mode) {
813 int dir = (1 & mode) != 0 ? -1 : 1;
814 bool queryLeaders = (2 & mode) != 0;
815 bool blockersOnly = (4 & mode) != 0;
818 std::vector<std::pair<std::string, double> > result;
819 if (veh ==
nullptr) {
822#ifdef DEBUG_NEIGHBORS
824 std::cout <<
"getNeighbors() for veh '" << vehID <<
"': dir=" << dir
825 <<
", queryLeaders=" << queryLeaders
826 <<
", blockersOnly=" << blockersOnly << std::endl;
835 if (targetLane ==
nullptr) {
860 for (
int i = 0; i < neighbors.
numSublanes(); i++) {
862 if (n.first !=
nullptr) {
871 if (n.second < secureGap) {
872 blockers.
addLeader(n.first, n.second, 0, i);
876 neighbors = blockers;
880 for (
int i = 0; i < neighbors.
numSublanes(); i++) {
882 if (n.first !=
nullptr &&
884 (result.size() == 0 || result.back().first != n.first->getID())) {
885 result.push_back(std::make_pair(n.first->getID(), n.second));
812Vehicle::getNeighbors(
const std::string& vehID,
const int mode) {
…}
894Vehicle::getFollowSpeed(
const std::string& vehID,
double speed,
double gap,
double leaderSpeed,
double leaderMaxDecel,
const std::string& leaderID) {
897 if (veh ==
nullptr) {
898 WRITE_ERROR(
"getFollowSpeed not applicable for meso");
894Vehicle::getFollowSpeed(
const std::string& vehID,
double speed,
double gap,
double leaderSpeed,
double leaderMaxDecel,
const std::string& leaderID) {
…}
907Vehicle::getSecureGap(
const std::string& vehID,
double speed,
double leaderSpeed,
double leaderMaxDecel,
const std::string& leaderID) {
910 if (veh ==
nullptr) {
911 WRITE_ERROR(
"getSecureGap not applicable for meso");
907Vehicle::getSecureGap(
const std::string& vehID,
double speed,
double leaderSpeed,
double leaderMaxDecel,
const std::string& leaderID) {
…}
920Vehicle::getStopSpeed(
const std::string& vehID,
const double speed,
double gap) {
923 if (veh ==
nullptr) {
924 WRITE_ERROR(
"getStopSpeed not applicable for meso");
920Vehicle::getStopSpeed(
const std::string& vehID,
const double speed,
double gap) {
…}
931Vehicle::getStopDelay(
const std::string& vehID) {
931Vehicle::getStopDelay(
const std::string& vehID) {
…}
937Vehicle::getImpatience(
const std::string& vehID) {
943Vehicle::getStopArrivalDelay(
const std::string& vehID) {
943Vehicle::getStopArrivalDelay(
const std::string& vehID) {
…}
953Vehicle::getTimeLoss(
const std::string& vehID) {
953Vehicle::getTimeLoss(
const std::string& vehID) {
…}
957std::vector<std::string>
958Vehicle::getTaxiFleet(
int taxiState) {
959 std::vector<std::string> result;
961 if (taxi->getHolder().hasDeparted()) {
963 || (taxiState == 0 && taxi->getState() == 0)
964 || (taxiState != 0 && (taxi->getState() & taxiState) == taxiState)) {
965 result.push_back(taxi->getHolder().getID());
958Vehicle::getTaxiFleet(
int taxiState) {
…}
972std::vector<std::string>
973Vehicle::getLoadedIDList() {
974 std::vector<std::string> ids;
977 ids.push_back(i->first);
973Vehicle::getLoadedIDList() {
…}
982std::vector<std::string>
983Vehicle::getTeleportingIDList() {
984 std::vector<std::string> ids;
989 ids.push_back(veh->
getID());
983Vehicle::getTeleportingIDList() {
…}
996Vehicle::getEmissionClass(
const std::string& vehID) {
1001Vehicle::getShapeClass(
const std::string& vehID) {
1007Vehicle::getLength(
const std::string& vehID) {
1013Vehicle::getAccel(
const std::string& vehID) {
1019Vehicle::getDecel(
const std::string& vehID) {
1024double Vehicle::getEmergencyDecel(
const std::string& vehID) {
1029double Vehicle::getApparentDecel(
const std::string& vehID) {
1034double Vehicle::getActionStepLength(
const std::string& vehID) {
1039double Vehicle::getLastActionTime(
const std::string& vehID) {
1042 if (microVeh !=
nullptr) {
1039double Vehicle::getLastActionTime(
const std::string& vehID) {
…}
1052Vehicle::getTau(
const std::string& vehID) {
1058Vehicle::getImperfection(
const std::string& vehID) {
1064Vehicle::getSpeedDeviation(
const std::string& vehID) {
1070Vehicle::getVehicleClass(
const std::string& vehID) {
1076Vehicle::getMinGap(
const std::string& vehID) {
1082Vehicle::getMinGapLat(
const std::string& vehID) {
1085 }
catch (
const TraCIException&) {
1093Vehicle::getMaxSpeed(
const std::string& vehID) {
1099Vehicle::getMaxSpeedLat(
const std::string& vehID) {
1105Vehicle::getLateralAlignment(
const std::string& vehID) {
1111Vehicle::getWidth(
const std::string& vehID) {
1117Vehicle::getHeight(
const std::string& vehID) {
1123Vehicle::getMass(
const std::string& vehID) {
1129Vehicle::setStop(
const std::string& vehID,
1130 const std::string& edgeID,
1139 pos, laneIndex, startPos, flags, duration, until);
1142 throw TraCIException(error);
1129Vehicle::setStop(
const std::string& vehID, {
…}
1148Vehicle::replaceStop(
const std::string& vehID,
1150 const std::string& edgeID,
1163 if (teleport != 0) {
1164 if (!vehicle->
rerouteBetweenStops(nextStopIndex,
"traci:replaceStop", (teleport & 1), error)) {
1165 throw TraCIException(
"Stop replacement failed for vehicle '" + vehID +
"' (" + error +
").");
1169 if (msVeh->
getLane() !=
nullptr) {
1174 throw TraCIException(
"Stop replacement failed for vehicle '" + vehID +
"' (invalid nextStopIndex).");
1178 pos, laneIndex, startPos, flags, duration, until);
1180 if (!vehicle->
replaceStop(nextStopIndex, stopPars,
"traci:replaceStop", teleport != 0, error)) {
1181 throw TraCIException(
"Stop replacement failed for vehicle '" + vehID +
"' (" + error +
").");
1148Vehicle::replaceStop(
const std::string& vehID, {
…}
1188Vehicle::insertStop(
const std::string& vehID,
1190 const std::string& edgeID,
1200 pos, laneIndex, startPos, flags, duration, until);
1203 if (!vehicle->
insertStop(nextStopIndex, stopPars,
"traci:insertStop", teleport != 0, error)) {
1204 throw TraCIException(
"Stop insertion failed for vehicle '" + vehID +
"' (" + error +
").");
1188Vehicle::insertStop(
const std::string& vehID, {
…}
1210Vehicle::getStopParameter(
const std::string& vehID,
int nextStopIndex,
const std::string& param,
bool customParam) {
1213 if (nextStopIndex >= (
int)vehicle->
getStops().size() || (nextStopIndex < 0 && -nextStopIndex > (
int)vehicle->
getPastStops().size())) {
1291 throw TraCIException(
"Could not get stop parameter for vehicle '" + vehID +
"' (" + e.what() +
")");
1210Vehicle::getStopParameter(
const std::string& vehID,
int nextStopIndex,
const std::string& param,
bool customParam) {
…}
1298Vehicle::setStopParameter(
const std::string& vehID,
int nextStopIndex,
1299 const std::string& param,
const std::string& value,
1320 std::string edgeOrStopID = value;
1323 edgeOrStopID = pars.
edge;
1362 throw TraCIException(
"Changing stop index is not supported");
1367 if (pars.
speed > 0 && value !=
"") {
1368 throw ProcessError(
TLF(
"Waypoint (speed = %) at index % does not support triggers", pars.
speed, nextStopIndex));
1406 throw ProcessError(
TLF(
"Triggered stop at index % cannot be changed into a waypoint by setting speed to %", nextStopIndex, speed));
1429 throw TraCIException(
"Could not set stop parameter for vehicle '" + vehID +
"' (" + e.what() +
")");
1298Vehicle::setStopParameter(
const std::string& vehID,
int nextStopIndex, {
…}
1435Vehicle::rerouteParkingArea(
const std::string& vehID,
const std::string& parkingAreaID) {
1438 if (veh ==
nullptr) {
1439 WRITE_WARNING(
"rerouteParkingArea not yet implemented for meso");
1445 throw TraCIException(error);
1435Vehicle::rerouteParkingArea(
const std::string& vehID,
const std::string& parkingAreaID) {
…}
1450Vehicle::resume(
const std::string& vehID) {
1453 if (veh ==
nullptr) {
1458 throw TraCIException(
"Failed to resume vehicle '" + veh->
getID() +
"', it has no stops.");
1462 std::ostringstream strs;
1463 strs <<
"reached: " << sto.
reached;
1464 strs <<
", duration:" << sto.
duration;
1465 strs <<
", edge:" << (*sto.
edge)->getID();
1467 std::string posStr = strs.str();
1468 throw TraCIException(
"Failed to resume from stopping for vehicle '" + veh->
getID() +
"', " + posStr);
1450Vehicle::resume(
const std::string& vehID) {
…}
1474Vehicle::changeTarget(
const std::string& vehID,
const std::string& edgeID) {
1477 const bool onInit = isOnInit(vehID);
1478 if (destEdge ==
nullptr) {
1479 throw TraCIException(
"Destination edge '" + edgeID +
"' is not known.");
1484 veh->
getRouterTT(), onInit,
false,
false, destEdge);
1486 throw TraCIException(
"ChangeTarget failed for vehicle '" + veh->
getID() +
"', destination edge '" + edgeID +
"' unreachable.");
1489 throw TraCIException(e.what());
1474Vehicle::changeTarget(
const std::string& vehID,
const std::string& edgeID) {
…}
1495Vehicle::changeLane(
const std::string& vehID,
int laneIndex,
double duration) {
1499 throw TraCIException(
"Duration parameter exceeds the time value range.");
1503 if (veh ==
nullptr) {
1504 WRITE_ERROR(
"changeLane not applicable for meso");
1508 std::vector<std::pair<SUMOTime, int> > laneTimeLine;
1509 laneTimeLine.push_back(std::make_pair(
MSNet::getInstance()->getCurrentTimeStep(), laneIndex));
1495Vehicle::changeLane(
const std::string& vehID,
int laneIndex,
double duration) {
…}
1515Vehicle::changeLaneRelative(
const std::string& vehID,
int indexOffset,
double duration) {
1519 throw TraCIException(
"Duration parameter exceeds the time value range.");
1523 if (veh ==
nullptr) {
1524 WRITE_ERROR(
"changeLaneRelative not applicable for meso");
1528 std::vector<std::pair<SUMOTime, int> > laneTimeLine;
1530 if (laneIndex < 0 && !veh->getLaneChangeModel().isOpposite()) {
1532 WRITE_WARNINGF(
TL(
"Ignoring changeLaneRelative for vehicle '%' that isn't on the road"), vehID);
1537 laneTimeLine.push_back(std::make_pair(
MSNet::getInstance()->getCurrentTimeStep(), laneIndex));
1515Vehicle::changeLaneRelative(
const std::string& vehID,
int indexOffset,
double duration) {
…}
1545Vehicle::changeSublane(
const std::string& vehID,
double latDist) {
1548 if (veh ==
nullptr) {
1549 WRITE_ERROR(
"changeSublane not applicable for meso");
1545Vehicle::changeSublane(
const std::string& vehID,
double latDist) {
…}
1558Vehicle::add(
const std::string& vehID,
1559 const std::string& routeID,
1560 const std::string& typeID,
1561 const std::string& depart,
1562 const std::string& departLane,
1563 const std::string& departPos,
1564 const std::string& departSpeed,
1565 const std::string& arrivalLane,
1566 const std::string& arrivalPos,
1567 const std::string& arrivalSpeed,
1568 const std::string& fromTaz,
1569 const std::string& toTaz,
1570 const std::string& line,
1574 if (veh !=
nullptr) {
1575 throw TraCIException(
"The vehicle '" + vehID +
"' to add already exists.");
1579 vehicleParams.
id = vehID;
1582 throw TraCIException(
"Invalid type '" + typeID +
"' for vehicle '" + vehID +
"'.");
1584 if (typeID !=
"DEFAULT_VEHTYPE") {
1585 vehicleParams.
vtypeid = typeID;
1589 WRITE_WARNINGF(
TL(
"Internal routes receive an ID starting with '!' and must not be referenced in other vehicle or flow definitions. Please remove all references to route '%' in case it is internal."), routeID);
1593 if (routeID ==
"") {
1599 if (route ==
nullptr) {
1602 std::vector<std::string> edges;
1603 edges.push_back(e->getID());
1604 libsumo::Route::add(dummyRouteID, edges);
1614 throw TraCIException(
"Invalid route '" + routeID +
"' for vehicle '" + vehID +
"'.");
1618 if (route->getEdges().size() == 2) {
1619 const MSEdgeVector& succ = route->getEdges().front()->getSuccessors();
1620 if (std::find(succ.begin(), succ.end(), route->getEdges().back()) == succ.end()) {
1624 if (fromTaz !=
"" || toTaz !=
"") {
1629 throw TraCIException(error);
1633 WRITE_WARNINGF(
TL(
"Departure time for vehicle '%' is in the past; using current time instead."), vehID);
1638 throw TraCIException(error);
1641 throw TraCIException(error);
1644 throw TraCIException(error);
1647 throw TraCIException(error);
1650 throw TraCIException(error);
1653 throw TraCIException(error);
1656 if (departLane !=
"first") {
1659 if (departPos !=
"base") {
1662 if (departSpeed !=
"0") {
1665 if (arrivalLane !=
"current") {
1668 if (arrivalPos !=
"max") {
1671 if (arrivalSpeed !=
"current") {
1674 if (fromTaz !=
"") {
1683 if (personNumber != 0) {
1687 vehicleParams.
fromTaz = fromTaz;
1688 vehicleParams.
toTaz = toTaz;
1689 vehicleParams.
line = line;
1697 if (fromTaz ==
"" && !route->getEdges().front()->validateDepartSpeed(*vehicle)) {
1699 throw TraCIException(
"Departure speed for vehicle '" + vehID +
"' is too high for the departure edge '" + route->getEdges().front()->getID() +
"'.");
1704 throw TraCIException(
"Vehicle '" + vehID +
"' has no valid route (" + msg +
"). ");
1711 if (vehicle !=
nullptr) {
1714 throw TraCIException(e.what());
1558Vehicle::add(
const std::string& vehID, {
…}
1720Vehicle::moveToXY(
const std::string& vehID,
const std::string& edgeID,
const int laneIndex,
1721 const double x,
const double y,
double angle,
const int keepRoute,
double matchThreshold) {
1724 if (veh ==
nullptr) {
1728 const bool doKeepRoute = (keepRoute & 1) != 0 && veh->
getID() !=
"VTD_EGO";
1729 const bool mayLeaveNetwork = (keepRoute & 2) != 0;
1730 const bool ignorePermissions = (keepRoute & 4) != 0;
1734 const std::string origID = edgeID +
"_" +
toString(laneIndex);
1738 const double origAngle = angle;
1743 while (angle >= 360.) {
1746 while (angle < 0.) {
1754 std::cout <<
" wantedPos=" << pos <<
" origID=" << origID <<
" laneIndex=" << laneIndex <<
" origAngle=" << origAngle <<
" angle=" << angle <<
" keepRoute=" << keepRoute << std::endl;
1760 double lanePosLat = 0;
1761 double bestDistance = std::numeric_limits<double>::max();
1762 int routeOffset = 0;
1764 double maxRouteDistance = matchThreshold;
1773 vClass, setLateralPos,
1774 bestDistance, &lane, lanePos, routeOffset);
1781 bestDistance, &lane, lanePos, routeOffset, edges);
1783 if ((found && bestDistance <= maxRouteDistance) || mayLeaveNetwork) {
1786 if (found && setLateralPos) {
1789 lanePosLat = perpDist;
1790 if (!mayLeaveNetwork) {
1802 lanePosLat = -lanePosLat;
1811 assert((found && lane != 0) || (!found && lane == 0));
1812 assert(!std::isnan(lanePos));
1814 if (lane !=
nullptr) {
1823 std::cout <<
SIMTIME <<
" veh=" << vehID +
" moveToXYResult lane='" <<
Named::getIDSecure(lane) <<
"' lanePos=" << lanePos <<
" lanePosLat=" << lanePosLat <<
"\n";
1830 if (lane ==
nullptr) {
1831 throw TraCIException(
"Could not map vehicle '" + vehID +
"', no road found within " +
toString(maxRouteDistance) +
"m.");
1833 throw TraCIException(
"Could not map vehicle '" + vehID +
"', distance to road is " +
toString(bestDistance) +
".");
1720Vehicle::moveToXY(
const std::string& vehID,
const std::string& edgeID,
const int laneIndex, {
…}
1839Vehicle::slowDown(
const std::string& vehID,
double speed,
double duration) {
1843 throw TraCIException(
"Duration parameter exceeds the time value range.");
1847 if (veh ==
nullptr) {
1852 std::vector<std::pair<SUMOTime, double> > speedTimeLine;
1839Vehicle::slowDown(
const std::string& vehID,
double speed,
double duration) {
…}
1859Vehicle::openGap(
const std::string& vehID,
double newTimeHeadway,
double newSpaceHeadway,
double duration,
double changeRate,
double maxDecel,
const std::string& referenceVehID) {
1863 throw TraCIException(
"Duration parameter exceeds the time value range.");
1867 if (veh ==
nullptr) {
1873 if (referenceVehID !=
"") {
1877 if (newTimeHeadway == -1) {
1878 newTimeHeadway = originalTau;
1880 if (originalTau > newTimeHeadway) {
1881 WRITE_WARNING(
"Ignoring openGap(). New time headway must not be smaller than the original.");
1859Vehicle::openGap(
const std::string& vehID,
double newTimeHeadway,
double newSpaceHeadway,
double duration,
double changeRate,
double maxDecel,
const std::string& referenceVehID) {
…}
1888Vehicle::deactivateGapControl(
const std::string& vehID) {
1891 if (veh ==
nullptr) {
1892 WRITE_ERROR(
"deactivateGapControl not applicable for meso");
1888Vehicle::deactivateGapControl(
const std::string& vehID) {
…}
1902Vehicle::requestToC(
const std::string& vehID,
double leadTime) {
1903 setParameter(vehID,
"device.toc.requestToC",
toString(leadTime));
1902Vehicle::requestToC(
const std::string& vehID,
double leadTime) {
…}
1907Vehicle::setSpeed(
const std::string& vehID,
double speed) {
1910 if (veh ==
nullptr) {
1915 std::vector<std::pair<SUMOTime, double> > speedTimeLine;
1917 speedTimeLine.push_back(std::make_pair(
MSNet::getInstance()->getCurrentTimeStep(), speed));
1907Vehicle::setSpeed(
const std::string& vehID,
double speed) {
…}
1924Vehicle::setAcceleration(
const std::string& vehID,
double acceleration,
double duration) {
1928 throw TraCIException(
"Duration parameter exceeds the time value range.");
1932 if (veh ==
nullptr) {
1933 WRITE_WARNING(
"setAcceleration not yet implemented for meso");
1937 double targetSpeed = std::max(veh->
getSpeed() + acceleration * duration, 0.0);
1938 std::vector<std::pair<SUMOTime, double>> speedTimeLine;
1924Vehicle::setAcceleration(
const std::string& vehID,
double acceleration,
double duration) {
…}
1945Vehicle::setPreviousSpeed(
const std::string& vehID,
double prevSpeed,
double prevAcceleration) {
1948 if (veh ==
nullptr) {
1949 WRITE_WARNING(
"setPreviousSpeed not yet implemented for meso");
1953 prevAcceleration = std::numeric_limits<double>::min();
1945Vehicle::setPreviousSpeed(
const std::string& vehID,
double prevSpeed,
double prevAcceleration) {
…}
1959Vehicle::setSpeedMode(
const std::string& vehID,
int speedMode) {
1962 if (veh ==
nullptr) {
1959Vehicle::setSpeedMode(
const std::string& vehID,
int speedMode) {
…}
1971Vehicle::setLaneChangeMode(
const std::string& vehID,
int laneChangeMode) {
1974 if (veh ==
nullptr) {
1975 WRITE_ERROR(
"setLaneChangeMode not applicable for meso");
1971Vehicle::setLaneChangeMode(
const std::string& vehID,
int laneChangeMode) {
…}
1983Vehicle::setRoutingMode(
const std::string& vehID,
int routingMode) {
1983Vehicle::setRoutingMode(
const std::string& vehID,
int routingMode) {
…}
1988Vehicle::setType(
const std::string& vehID,
const std::string& typeID) {
1990 if (vehicleType ==
nullptr) {
1991 throw TraCIException(
"Vehicle type '" + typeID +
"' is not known");
1996 if (microVeh !=
nullptr && microVeh->
isOnRoad()) {
1988Vehicle::setType(
const std::string& vehID,
const std::string& typeID) {
…}
2003Vehicle::setRouteID(
const std::string& vehID,
const std::string& routeID) {
2007 throw TraCIException(
"The route '" + routeID +
"' is not known.");
2010 WRITE_WARNINGF(
TL(
"Internal routes receive an ID starting with '!' and must not be referenced in other vehicle or flow definitions. Please remove all references to route '%' in case it is internal."), routeID);
2016 throw TraCIException(
"Route replacement failed for " + veh->
getID());
2020 std::string errorMsg;
2021 if (!veh->
replaceRoute(r,
"traci:setRouteID", veh->
getLane() ==
nullptr, 0,
true,
true, &errorMsg)) {
2022 throw TraCIException(
"Route replacement failed for vehicle '" + veh->
getID() +
"' (" + errorMsg +
").");
2003Vehicle::setRouteID(
const std::string& vehID,
const std::string& routeID) {
…}
2027Vehicle::setRoute(
const std::string& vehID,
const std::string& edgeID) {
2028 setRoute(vehID, std::vector<std::string>({edgeID}));
2027Vehicle::setRoute(
const std::string& vehID,
const std::string& edgeID) {
…}
2033Vehicle::setRoute(
const std::string& vehID,
const std::vector<std::string>& edgeIDs) {
2036 const bool onInit = veh->
getLane() ==
nullptr;
2039 if (edges.size() > 0 && edges.front()->isInternal()) {
2040 if (edges.size() == 1) {
2042 edges.push_back(edges.back()->getLanes()[0]->getNextNormal());
2046 edges.erase(edges.begin());
2051 throw TraCIException(
"Invalid edge list for vehicle '" + veh->
getID() +
"' (" + e.what() +
")");
2053 std::string errorMsg;
2054 if (!veh->
replaceRouteEdges(edges, -1, 0,
"traci:setRoute", onInit,
true,
true, &errorMsg)) {
2055 throw TraCIException(
"Route replacement failed for vehicle '" + veh->
getID() +
"' (" + errorMsg +
").");
2033Vehicle::setRoute(
const std::string& vehID,
const std::vector<std::string>& edgeIDs) {
…}
2061Vehicle::setLateralLanePosition(
const std::string& vehID,
double posLat) {
2064 if (veh !=
nullptr) {
2067 WRITE_ERROR(
"setLateralLanePosition not applicable for meso");
2061Vehicle::setLateralLanePosition(
const std::string& vehID,
double posLat) {
…}
2073Vehicle::updateBestLanes(
const std::string& vehID) {
2076 if (veh ==
nullptr) {
2077 WRITE_ERROR(
"updateBestLanes not applicable for meso");
2073Vehicle::updateBestLanes(
const std::string& vehID) {
…}
2087Vehicle::setAdaptedTraveltime(
const std::string& vehID,
const std::string& edgeID,
2088 double time,
double begSeconds,
double endSeconds) {
2091 if (edge ==
nullptr) {
2092 throw TraCIException(
"Edge '" + edgeID +
"' is not known.");
2096 if (begSeconds == 0 && endSeconds == std::numeric_limits<double>::max()) {
2087Vehicle::setAdaptedTraveltime(
const std::string& vehID,
const std::string& edgeID, {
…}
2113Vehicle::setEffort(
const std::string& vehID,
const std::string& edgeID,
2114 double effort,
double begSeconds,
double endSeconds) {
2117 if (edge ==
nullptr) {
2118 throw TraCIException(
"Edge '" + edgeID +
"' is not known.");
2122 if (begSeconds == 0 && endSeconds == std::numeric_limits<double>::max()) {
2113Vehicle::setEffort(
const std::string& vehID,
const std::string& edgeID, {
…}
2139Vehicle::rerouteTraveltime(
const std::string& vehID,
const bool currentTravelTimes) {
2139Vehicle::rerouteTraveltime(
const std::string& vehID,
const bool currentTravelTimes) {
…}
2154Vehicle::rerouteEffort(
const std::string& vehID) {
2154Vehicle::rerouteEffort(
const std::string& vehID) {
…}
2162Vehicle::setSignals(
const std::string& vehID,
int signals) {
2165 if (veh ==
nullptr) {
2166 WRITE_ERROR(
"setSignals not applicable for meso");
2162Vehicle::setSignals(
const std::string& vehID,
int signals) {
…}
2181Vehicle::moveTo(
const std::string& vehID,
const std::string& laneID,
double pos,
int reason) {
2184 if (veh ==
nullptr) {
2191 throw TraCIException(
"Unknown lane '" + laneID +
"'.");
2215 throw TraCIException(
"Lane '" + laneID +
"' is not on the route of vehicle '" + vehID +
"'.");
2219 if (veh->
getLane() !=
nullptr) {
2227 const int newRouteIndex = (int)(it - veh->
getRoute().
begin());
2228 if (oldRouteIndex > newRouteIndex) {
2252 throw TraCIException(
"Invalid moveTo reason '" +
toString(reason) +
"' for vehicle '" + vehID +
"'.");
2181Vehicle::moveTo(
const std::string& vehID,
const std::string& laneID,
double pos,
int reason) {
…}
2262Vehicle::setActionStepLength(
const std::string& vehID,
double actionStepLength,
bool resetActionOffset) {
2263 if (actionStepLength < 0.0) {
2264 WRITE_ERROR(
"Invalid action step length (<0). Ignoring command setActionStepLength().");
2269 if (veh ==
nullptr) {
2270 WRITE_ERROR(
"setActionStepLength not applicable for meso");
2274 if (actionStepLength == 0.) {
2283Vehicle::setBoardingDuration(
const std::string& vehID,
double boardingDuration) {
2287 throw TraCIException(
"BoardingDuration parameter exceeds the time value range.");
2294Vehicle::setImpatience(
const std::string& vehID,
double impatience) {
2302Vehicle::remove(
const std::string& vehID,
char reason) {
2326 throw TraCIException(
"Unknown removal status.");
2331 if (microVeh !=
nullptr) {
2332 if (veh->
getLane() !=
nullptr) {
2302Vehicle::remove(
const std::string& vehID,
char reason) {
…}
2346Vehicle::setColor(
const std::string& vehID,
const TraCIColor& col) {
2348 p.
color.
set((
unsigned char)col.r, (
unsigned char)col.g, (
unsigned char)col.b, (
unsigned char)col.a);
2354Vehicle::setSpeedFactor(
const std::string& vehID,
double factor) {
2360Vehicle::setLine(
const std::string& vehID,
const std::string& line) {
2360Vehicle::setLine(
const std::string& vehID,
const std::string& line) {
…}
2366Vehicle::setVia(
const std::string& vehID,
const std::vector<std::string>& edgeList) {
2373 throw TraCIException(e.what());
2366Vehicle::setVia(
const std::string& vehID,
const std::vector<std::string>& edgeList) {
…}
2380Vehicle::setLength(
const std::string& vehID,
double length) {
2386Vehicle::setMaxSpeed(
const std::string& vehID,
double speed) {
2392Vehicle::setVehicleClass(
const std::string& vehID,
const std::string& clazz) {
2396 if (microVeh !=
nullptr && microVeh->
isOnRoad()) {
2403Vehicle::setShapeClass(
const std::string& vehID,
const std::string& clazz) {
2409Vehicle::setEmissionClass(
const std::string& vehID,
const std::string& clazz) {
2415Vehicle::setWidth(
const std::string& vehID,
double width) {
2421Vehicle::setHeight(
const std::string& vehID,
double height) {
2427Vehicle::setMass(
const std::string& vehID,
double mass) {
2433Vehicle::setMinGap(
const std::string& vehID,
double minGap) {
2437 if (microVeh !=
nullptr && microVeh->
isOnRoad()) {
2444Vehicle::setAccel(
const std::string& vehID,
double accel) {
2450Vehicle::setDecel(
const std::string& vehID,
double decel) {
2456Vehicle::setEmergencyDecel(
const std::string& vehID,
double decel) {
2457 VehicleType::setEmergencyDecel(
Helper::getVehicle(vehID)->getSingularType().getID(), decel);
2462Vehicle::setApparentDecel(
const std::string& vehID,
double decel) {
2468Vehicle::setImperfection(
const std::string& vehID,
double imperfection) {
2474Vehicle::setTau(
const std::string& vehID,
double tau) {
2480Vehicle::setMinGapLat(
const std::string& vehID,
double minGapLat) {
2482 setParameter(vehID,
"laneChangeModel.minGapLat",
toString(minGapLat));
2483 }
catch (TraCIException&) {
2491Vehicle::setMaxSpeedLat(
const std::string& vehID,
double speed) {
2497Vehicle::setLateralAlignment(
const std::string& vehID,
const std::string& latAlignment) {
2503 throw TraCIException(
"Unknown value '" + latAlignment +
"' when setting latAlignment for vehID '" + vehID +
"';\n must be one of (\"right\", \"center\", \"arbitrary\", \"nice\", \"compact\", \"left\" or a float)");
2509Vehicle::setParameter(
const std::string& vehID,
const std::string& key,
const std::string& value) {
2514 if (tok.size() < 3) {
2515 throw TraCIException(
"Invalid device parameter '" + key +
"' for vehicle '" + vehID +
"'");
2520 throw TraCIException(
"Vehicle '" + vehID +
"' does not support device parameter '" + key +
"' (" + e.what() +
").");
2523 if (microVeh ==
nullptr) {
2524 throw TraCIException(
"Meso Vehicle '" + vehID +
"' does not support laneChangeModel parameters.");
2526 const std::string attrName =
key.substr(16);
2534 throw TraCIException(
"Vehicle '" + vehID +
"' does not support laneChangeModel parameter '" + key +
"' (" + e.what() +
").");
2538 if (microVeh ==
nullptr) {
2539 throw TraCIException(
"Meso Vehicle '" + vehID +
"' does not support carFollowModel parameters.");
2544 throw TraCIException(
"Vehicle '" + vehID +
"' does not support carFollowModel parameter '" + key +
"' (" + e.what() +
").");
2552 throw TraCIException(e.what());
2556 if (tok.size() != 3) {
2557 throw TraCIException(
"Invalid request for device status change. Expected format is 'has.DEVICENAME.device'");
2559 const std::string deviceName = tok.get(1);
2564 throw TraCIException(
"Changing device status requires a 'true' or 'false'");
2567 throw TraCIException(
"Device removal is not supported for device of type '" + deviceName +
"'");
2572 throw TraCIException(
"Cannot create vehicle device (" + std::string(e.what()) +
").");
2581Vehicle::highlight(
const std::string& vehID,
const TraCIColor& col,
double size,
const int alphaMax,
const double duration,
const int type) {
2588 const double l2 = veh->
getLength() * 0.5;
2595 const unsigned int nPoints = 34;
2599#ifdef DEBUG_DYNAMIC_SHAPES
2600 std::cout <<
SIMTIME <<
" Vehicle::highlight() for vehicle '" << vehID <<
"'\n"
2601 <<
" circle: " << circlePV << std::endl;
2607 while (Polygon::exists(polyID)) {
2616 lyr += (type + 1) / 257.;
2619 Polygon::addHighlightPolygon(vehID, type, polyID, circle, col,
true,
"highlight", (
int)lyr, lw);
2622 double maxAttack = 1.0;
2623 std::vector<double> timeSpan;
2624 if (duration > 0.) {
2625 timeSpan = {0,
MIN2(maxAttack, duration / 3.), 2.*duration / 3., duration};
2628 std::vector<double> alphaSpan;
2629 if (alphaMax > 0.) {
2630 alphaSpan = {0., (double) alphaMax, (
double)(alphaMax) / 3., 0.};
2633 Polygon::addDynamics(polyID, vehID, timeSpan, alphaSpan,
false,
true);
2581Vehicle::highlight(
const std::string& vehID,
const TraCIColor& col,
double size,
const int alphaMax,
const double duration,
const int type) {
…}
2637Vehicle::dispatchTaxi(
const std::string& vehID,
const std::vector<std::string>& reservations) {
2641 throw TraCIException(
"Vehicle '" + vehID +
"' has not yet departed");
2643 if (taxi ==
nullptr) {
2644 throw TraCIException(
"Vehicle '" + vehID +
"' is not a taxi");
2647 if (dispatcher ==
nullptr) {
2648 throw TraCIException(
"Cannot dispatch taxi because no reservations have been made");
2651 if (traciDispatcher ==
nullptr) {
2652 throw TraCIException(
"device.taxi.dispatch-algorithm 'traci' has not been loaded");
2654 if (reservations.size() == 0) {
2655 throw TraCIException(
"No reservations have been specified for vehicle '" + vehID +
"'");
2660 throw TraCIException(
"Could not interpret reservations for vehicle '" + vehID +
"' (" + e.what() +
").");
2637Vehicle::dispatchTaxi(
const std::string& vehID,
const std::vector<std::string>& reservations) {
…}
2668Vehicle::subscribeLeader(
const std::string& vehID,
double dist,
double begin,
double end) {
2668Vehicle::subscribeLeader(
const std::string& vehID,
double dist,
double begin,
double end) {
…}
2675Vehicle::addSubscriptionFilterLanes(
const std::vector<int>& lanes,
bool noOpposite,
double downstreamDist,
double upstreamDist) {
2678 s->filterLanes = lanes;
2681 addSubscriptionFilterNoOpposite();
2684 addSubscriptionFilterDownstreamDistance(downstreamDist);
2687 addSubscriptionFilterUpstreamDistance(upstreamDist);
2675Vehicle::addSubscriptionFilterLanes(
const std::vector<int>& lanes,
bool noOpposite,
double downstreamDist,
double upstreamDist) {
…}
2693Vehicle::addSubscriptionFilterNoOpposite() {
2693Vehicle::addSubscriptionFilterNoOpposite() {
…}
2699Vehicle::addSubscriptionFilterDownstreamDistance(
double dist) {
2702 s->filterDownstreamDist = dist;
2699Vehicle::addSubscriptionFilterDownstreamDistance(
double dist) {
…}
2708Vehicle::addSubscriptionFilterUpstreamDistance(
double dist) {
2711 s->filterUpstreamDist = dist;
2708Vehicle::addSubscriptionFilterUpstreamDistance(
double dist) {
…}
2717Vehicle::addSubscriptionFilterCFManeuver(
double downstreamDist,
double upstreamDist) {
2718 addSubscriptionFilterLeadFollow(std::vector<int>({0}));
2720 addSubscriptionFilterDownstreamDistance(downstreamDist);
2723 addSubscriptionFilterUpstreamDistance(upstreamDist);
2717Vehicle::addSubscriptionFilterCFManeuver(
double downstreamDist,
double upstreamDist) {
…}
2730Vehicle::addSubscriptionFilterLCManeuver(
int direction,
bool noOpposite,
double downstreamDist,
double upstreamDist) {
2731 std::vector<int> lanes;
2734 lanes = std::vector<int>({-1, 0, 1});
2735 }
else if (direction != -1 && direction != 1) {
2736 WRITE_WARNINGF(
TL(
"Ignoring lane change subscription filter with non-neighboring lane offset direction=%."), direction);
2738 lanes = std::vector<int>({0, direction});
2740 addSubscriptionFilterLeadFollow(lanes);
2742 addSubscriptionFilterNoOpposite();
2745 addSubscriptionFilterDownstreamDistance(downstreamDist);
2748 addSubscriptionFilterUpstreamDistance(upstreamDist);
2730Vehicle::addSubscriptionFilterLCManeuver(
int direction,
bool noOpposite,
double downstreamDist,
double upstreamDist) {
…}
2754Vehicle::addSubscriptionFilterLeadFollow(
const std::vector<int>& lanes) {
2756 addSubscriptionFilterLanes(lanes);
2754Vehicle::addSubscriptionFilterLeadFollow(
const std::vector<int>& lanes) {
…}
2761Vehicle::addSubscriptionFilterTurn(
double downstreamDist,
double foeDistToJunction) {
2764 addSubscriptionFilterDownstreamDistance(downstreamDist);
2767 s->filterFoeDistToJunction = foeDistToJunction;
2761Vehicle::addSubscriptionFilterTurn(
double downstreamDist,
double foeDistToJunction) {
…}
2773Vehicle::addSubscriptionFilterVClass(
const std::vector<std::string>& vClasses) {
2773Vehicle::addSubscriptionFilterVClass(
const std::vector<std::string>& vClasses) {
…}
2782Vehicle::addSubscriptionFilterVType(
const std::vector<std::string>& vTypes) {
2785 s->filterVTypes.insert(vTypes.begin(), vTypes.end());
2782Vehicle::addSubscriptionFilterVType(
const std::vector<std::string>& vTypes) {
…}
2791Vehicle::addSubscriptionFilterFieldOfVision(
double openingAngle) {
2794 s->filterFieldOfVisionOpeningAngle = openingAngle;
2791Vehicle::addSubscriptionFilterFieldOfVision(
double openingAngle) {
…}
2800Vehicle::addSubscriptionFilterLateralDistance(
double lateralDist,
double downstreamDist,
double upstreamDist) {
2803 s->filterLateralDist = lateralDist;
2806 addSubscriptionFilterDownstreamDistance(downstreamDist);
2809 addSubscriptionFilterUpstreamDistance(upstreamDist);
2800Vehicle::addSubscriptionFilterLateralDistance(
double lateralDist,
double downstreamDist,
double upstreamDist) {
…}
2820std::shared_ptr<VariableWrapper>
2821Vehicle::makeWrapper() {
2822 return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
2821Vehicle::makeWrapper() {
…}
2827Vehicle::handleVariable(
const std::string& objID,
const int variable, VariableWrapper* wrapper,
tcpip::Storage* paramData) {
2830 return wrapper->wrapStringList(objID, variable, getIDList());
2832 return wrapper->wrapInt(objID, variable, getIDCount());
2834 return wrapper->wrapPosition(objID, variable, getPosition(objID));
2836 return wrapper->wrapPosition(objID, variable, getPosition(objID,
true));
2838 return wrapper->wrapDouble(objID, variable, getAngle(objID));
2840 return wrapper->wrapDouble(objID, variable, getSpeed(objID));
2842 return wrapper->wrapDouble(objID, variable, getLateralSpeed(objID));
2844 return wrapper->wrapString(objID, variable, getRoadID(objID));
2846 return wrapper->wrapDouble(objID, variable, getSpeedWithoutTraCI(objID));
2848 return wrapper->wrapDouble(objID, variable, getSlope(objID));
2850 return wrapper->wrapString(objID, variable, getLaneID(objID));
2852 return wrapper->wrapInt(objID, variable, getLaneIndex(objID));
2854 return wrapper->wrapString(objID, variable, getSegmentID(objID));
2856 return wrapper->wrapInt(objID, variable, getSegmentIndex(objID));
2858 return wrapper->wrapString(objID, variable, getTypeID(objID));
2860 return wrapper->wrapString(objID, variable, getRouteID(objID));
2862 return wrapper->wrapDouble(objID, variable, getDeparture(objID));
2864 return wrapper->wrapDouble(objID, variable, getDepartDelay(objID));
2866 return wrapper->wrapInt(objID, variable, getRouteIndex(objID));
2868 return wrapper->wrapColor(objID, variable, getColor(objID));
2870 return wrapper->wrapDouble(objID, variable, getLanePosition(objID));
2872 return wrapper->wrapDouble(objID, variable, getLateralLanePosition(objID));
2874 return wrapper->wrapDouble(objID, variable, getCO2Emission(objID));
2876 return wrapper->wrapDouble(objID, variable, getCOEmission(objID));
2878 return wrapper->wrapDouble(objID, variable, getHCEmission(objID));
2880 return wrapper->wrapDouble(objID, variable, getPMxEmission(objID));
2882 return wrapper->wrapDouble(objID, variable, getNOxEmission(objID));
2884 return wrapper->wrapDouble(objID, variable, getFuelConsumption(objID));
2886 return wrapper->wrapDouble(objID, variable, getNoiseEmission(objID));
2888 return wrapper->wrapDouble(objID, variable, getElectricityConsumption(objID));
2890 return wrapper->wrapInt(objID, variable, getPersonNumber(objID));
2892 return wrapper->wrapInt(objID, variable, getPersonCapacity(objID));
2894 return wrapper->wrapDouble(objID, variable, getBoardingDuration(objID));
2896 return wrapper->wrapStringList(objID, variable, getPersonIDList(objID));
2898 return wrapper->wrapDouble(objID, variable, getWaitingTime(objID));
2900 return wrapper->wrapDouble(objID, variable, getAccumulatedWaitingTime(objID));
2904 return wrapper->wrapDouble(objID, variable, getAdaptedTraveltime(objID, time,
StoHelp::readTypedString(*paramData)));
2912 return wrapper->wrapInt(objID, variable, isRouteValid(objID));
2914 return wrapper->wrapStringList(objID, variable, getRoute(objID));
2916 return wrapper->wrapInt(objID, variable, getSignals(objID));
2918 return wrapper->wrapBestLanesDataVector(objID, variable, getBestLanes(objID));
2920 return wrapper->wrapConnectionVector(objID, variable, getNextLinks(objID));
2922 return wrapper->wrapInt(objID, variable, getStopState(objID));
2924 return wrapper->wrapDouble(objID, variable, getDistance(objID));
2926 return wrapper->wrapDouble(objID, variable, getAllowedSpeed(objID));
2928 return wrapper->wrapDouble(objID, variable, getSpeedFactor(objID));
2930 return wrapper->wrapInt(objID, variable, getSpeedMode(objID));
2932 return wrapper->wrapInt(objID, variable, getLaneChangeMode(objID));
2934 return wrapper->wrapInt(objID, variable, getRoutingMode(objID));
2936 return wrapper->wrapString(objID, variable, getLine(objID));
2938 return wrapper->wrapStringList(objID, variable, getVia(objID));
2940 return wrapper->wrapDouble(objID, variable, getAcceleration(objID));
2942 return wrapper->wrapDouble(objID, variable, getLastActionTime(objID));
2944 return wrapper->wrapDouble(objID, variable, getStopDelay(objID));
2946 return wrapper->wrapDouble(objID, variable, getImpatience(objID));
2948 return wrapper->wrapDouble(objID, variable, getStopArrivalDelay(objID));
2950 return wrapper->wrapDouble(objID, variable, getTimeLoss(objID));
2952 return wrapper->wrapDouble(objID, variable, getMinGapLat(objID));
2958 return wrapper->wrapStringList(objID, variable, getLoadedIDList());
2960 return wrapper->wrapStringList(objID, variable, getTeleportingIDList());
2967 return wrapper->wrapDouble(objID, variable, getFollowSpeed(objID, speed, gap, leaderSpeed, leaderMaxDecel,
StoHelp::readTypedString(*paramData)));
2974 return wrapper->wrapDouble(objID, variable, getSecureGap(objID, speed, leaderSpeed, leaderMaxDecel,
StoHelp::readTypedString(*paramData)));
2982 return wrapper->wrapJunctionFoeVector(objID, variable, getJunctionFoes(objID,
StoHelp::readTypedDouble(*paramData)));
2984 return wrapper->wrapStringDoublePairList(objID, variable, getNeighbors(objID,
StoHelp::readTypedByte(*paramData)));
2986 return wrapper->wrapIntPair(objID, variable, getLaneChangeState(objID,
StoHelp::readTypedInt(*paramData)));
2992 return wrapper->wrapString(objID, variable, getStopParameter(objID, nextStopIndex, param, customParam));
2995 return wrapper->wrapNextTLSDataVector(objID, variable, getNextTLS(objID));
2997 return wrapper->wrapNextStopDataVector(objID, variable, getNextStops(objID));
2999 return wrapper->wrapNextStopDataVector(objID, variable, getStops(objID,
StoHelp::readTypedInt(*paramData)));
3001 TraCIRoadPosition roadPos;
3004 return wrapper->wrapDouble(objID, variable, getDrivingDistance(objID, roadPos.edgeID, roadPos.pos, roadPos.laneIndex));
3006 return wrapper->wrapDouble(objID, variable, getDrivingDistance2D(objID, pos.
x(), pos.
y()));
3015 return VehicleType::handleVariableWithID(objID, getTypeID(objID), variable, wrapper, paramData);
2827Vehicle::handleVariable(
const std::string& objID,
const int variable, VariableWrapper* wrapper,
tcpip::Storage* paramData) {
…}
std::vector< const MSEdge * > ConstMSEdgeVector
std::vector< MSEdge * > MSEdgeVector
std::pair< const MSVehicle *, double > CLeaderDist
ConstMSEdgeVector::const_iterator MSRouteIterator
#define WRITE_WARNINGF(...)
#define WRITE_WARNING(msg)
std::shared_ptr< const MSRoute > ConstMSRoutePtr
void checkTimeBounds(const double time)
check the valid SUMOTime range of double input and throw an error if out of bounds
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
LatAlignmentDefinition
Possible ways to choose the lateral alignment, i.e., how vehicles align themselves within their lane.
SUMOVehicleClass getVehicleClassID(const std::string &name)
Returns the class id of the abstract class given by its name.
SUMOVehicleShape getVehicleShapeID(const std::string &name)
Returns the class id of the shape class given by its name.
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
std::string getVehicleShapeName(SUMOVehicleShape id)
Returns the class name of the shape class given by its id.
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2, false)
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
const long long int VEHPARS_ARRIVALSPEED_SET
const long long int VEHPARS_PERSON_NUMBER_SET
const long long int VEHPARS_DEPARTSPEED_SET
const int STOP_ARRIVAL_SET
const int STOP_DURATION_SET
const int STOP_POSLAT_SET
const int STOP_EXPECTED_SET
const long long int VEHPARS_FORCE_REROUTE
const int STOP_JUMP_UNTIL_SET
const int STOP_PARKING_SET
const int STOP_TRIP_ID_SET
const long long int VEHPARS_COLOR_SET
const int STOP_PERMITTED_SET
const long long int VEHPARS_TO_TAZ_SET
const long long int VEHPARS_ARRIVALLANE_SET
const long long int VEHPARS_DEPARTLANE_SET
const long long int VEHPARS_DEPARTPOS_SET
const long long int VEHPARS_ARRIVALPOS_SET
const int STOP_EXTENSION_SET
const long long int VEHPARS_FROM_TAZ_SET
const int STOP_TRIGGER_SET
const long long int VEHPARS_VTYPE_SET
const int STOP_ONDEMAND_SET
const int STOP_STARTED_SET
const int STOP_EXPECTED_CONTAINERS_SET
const long long int VEHPARS_LINE_SET
@ GIVEN
The time is given.
@ NOW
The vehicle is discarded if emission fails (not fully implemented yet)
@ CONTAINER_TRIGGERED
The departure is container triggered.
@ TRIGGERED
The departure is person triggered.
@ LCA_UNKNOWN
The action has not been determined.
@ SUMO_ATTR_CONTAINER_STOP
@ SUMO_ATTR_CHARGING_STATION
@ SUMO_ATTR_LCA_CONTRIGHT
@ SUMO_ATTR_EXPECTED_CONTAINERS
const double INVALID_DOUBLE
invalid double
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOM)
#define LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(CLASS)
double getParameter(const int index) const
Returns the nth parameter of this distribution.
static PositionVector makeRing(const double radius1, const double radius2, const Position ¢er, unsigned int nPoints)
static const double INVALID_OFFSET
a value to signify offsets outside the range of [0, Line.length()]
static double naviDegree(const double angle)
A vehicle from the mesoscopic point of view.
int getQueIndex() const
Returns the index of the que the vehicle is in.
SUMOTime getEventTime() const
Returns the (planned) time at which the vehicle leaves its current segment.
virtual double getSafetyFactor() const
return factor for modifying the safety constraints of the car-following model
virtual void setParameter(const std::string &key, const std::string &value)
try to set the given parameter for this laneChangeModel. Throw exception for unsupported key
void setExtraImpatience(double value)
Sets routing behavior.
The base class for microscopic and mesoscopic vehicles.
double getMaxSpeed() const
Returns the maximum speed (the minimum of desired and technical maximum speed)
double getImpatience() const
Returns this vehicles impatience.
void resetRoutePosition(int index, DepartLaneDefinition departLaneProcedure)
reset index of edge within route
bool replaceStop(int nextStopIndex, SUMOVehicleParameter::Stop stop, const std::string &info, bool teleport, std::string &errorMsg)
void setChosenSpeedFactor(const double factor)
Returns the precomputed factor by which the driver wants to be faster than the speed limit.
void setCarFollowModelParameter(const std::string &key, const std::string &value)
set individual carFollow model parameters (not type related)
void setRoutingMode(int value)
Sets routing behavior.
virtual double getStopDelay() const
Returns the estimated public transport stop (departure) delay in seconds.
bool rerouteBetweenStops(int nextStopIndex, const std::string &info, bool teleport, std::string &errorMsg)
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
double getChosenSpeedFactor() const
Returns the precomputed factor by which the driver wants to be faster than the speed limit.
virtual BaseInfluencer & getBaseInfluencer()=0
Returns the velocity/lane influencer.
virtual bool replaceRoute(ConstMSRoutePtr route, const std::string &info, bool onInit=false, int offset=0, bool addRouteStops=true, bool removeStops=true, std::string *msgReturn=nullptr)
Replaces the current route by the given one.
virtual double getTimeLossSeconds() const
Returns the time loss in seconds.
double getOdometer() const
Returns the distance that was already driven by this vehicle.
MSVehicleType & getSingularType()
Replaces the current vehicle type with a new one used by this vehicle only.
virtual void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
const MSRouteIterator & getCurrentRouteEdge() const
Returns an iterator pointing to the current edge in this vehicles route.
bool hasValidRoute(std::string &msg, ConstMSRoutePtr route=0) const
Validates the current or given route.
virtual void onRemovalFromNet(const MSMoveReminder::Notification)
Called when the vehicle is removed from the network.
double getLength() const
Returns the vehicle's length.
bool isParking() const
Returns whether the vehicle is parking.
const MSEdge * getEdge() const
Returns the edge the vehicle is currently at.
double getHarmonoise_NoiseEmissions() const
Returns noise emissions of the current state.
int getPersonNumber() const
Returns the number of persons.
void setJunctionModelParameter(const std::string &key, const std::string &value)
set individual junction model paramete (not type related)
bool hasDeparted() const
Returns whether this vehicle has already departed.
const std::list< MSStop > & getStops() const
SUMOTime getDeparture() const
Returns this vehicle's real departure time.
void setDeviceParameter(const std::string &deviceName, const std::string &key, const std::string &value)
try to set the given parameter from any of the vehicles devices, raise InvalidArgument if no device p...
virtual std::pair< const MSVehicle *const, double > getLeader(double dist=0, bool considerCrossingFoes=true) const
Returns the leader of the vehicle looking for a fixed distance.
bool hasStops() const
Returns whether the vehicle has to stop somewhere.
void addToOdometer(double value)
Manipulate the odometer.
const MSStop & getNextStop() const
std::string getPrefixedParameter(const std::string &key, std::string &error) const
retrieve parameters of devices, models and the vehicle itself
SUMOVehicleClass getVClass() const
Returns the vehicle's access class.
virtual double getStopArrivalDelay() const
Returns the estimated public transport stop arrival delay in seconds.
MSStop & getStop(int nextStopIndex)
virtual std::pair< const MSVehicle *const, double > getFollower(double dist=0) const
Returns the follower of the vehicle looking for a fixed distance.
bool insertStop(int nextStopIndex, SUMOVehicleParameter::Stop stop, const std::string &info, bool teleport, std::string &errorMsg)
std::vector< std::string > getPersonIDList() const
Returns the list of persons.
const MSEdgeWeightsStorage & getWeightsStorage() const
Returns the vehicle's internal edge travel times/efforts container.
const std::vector< SUMOVehicleParameter::Stop > & getPastStops() const
virtual bool addTraciStop(SUMOVehicleParameter::Stop stop, std::string &errorMsg)
const MSRoute & getRoute() const
Returns the current route.
int getRoutingMode() const
return routing mode (configures router choice but also handling of transient permission changes)
int getRoutePosition() const
return index of edge within route
double getEmissions() const
Returns emissions of the current state The value is always per 1s, so multiply by step length if nece...
SUMOAbstractRouter< MSEdge, SUMOVehicle > & getRouterTT() const
virtual bool isOnRoad() const
Returns the information whether the vehicle is on a road (is simulated)
bool reroute(SUMOTime t, const std::string &info, SUMOAbstractRouter< MSEdge, SUMOVehicle > &router, const bool onInit=false, const bool withTaz=false, const bool silent=false, const MSEdge *sink=nullptr)
Performs a rerouting using the given router.
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
void createDevice(const std::string &deviceName)
create device of the given type
bool isStopped() const
Returns whether the vehicle is at a stop.
MSDevice * getDevice(const std::type_info &type) const
Returns a device of the given type if it exists, nullptr otherwise.
bool abortNextStop(int nextStopIndex=0)
deletes the next stop at the given index if it exists
bool replaceRouteEdges(ConstMSEdgeVector &edges, double cost, double savings, const std::string &info, bool onInit=false, bool check=false, bool removeStops=true, std::string *msgReturn=nullptr)
Replaces the current route by the given edges.
double getEmergencyDecel() const
Get the vehicle type's maximal physically possible deceleration [m/s^2].
@ FUTURE
the return value is used for calculating future speeds
virtual double getSecureGap(const MSVehicle *const veh, const MSVehicle *const, const double speed, const double leaderSpeed, const double leaderMaxDecel) const
Returns the minimum gap to reserve if the leader is braking at maximum (>=0)
double getApparentDecel() const
Get the vehicle type's apparent deceleration [m/s^2] (the one regarded by its followers.
double getMaxAccel() const
Get the vehicle type's maximum acceleration [m/s^2].
double brakeGap(const double speed) const
Returns the distance the vehicle needs to halt including driver's reaction time tau (i....
virtual double getImperfection() const
Get the driver's imperfection.
double getMaxDecel() const
Get the vehicle type's maximal comfortable deceleration [m/s^2].
virtual double followSpeed(const MSVehicle *const veh, double speed, double gap2pred, double predSpeed, double predMaxDecel, const MSVehicle *const pred=0, const CalcReason usage=CalcReason::CURRENT) const =0
Computes the vehicle's follow speed (no dawdling)
double stopSpeed(const MSVehicle *const veh, const double speed, double gap, const CalcReason usage=CalcReason::CURRENT) const
Computes the vehicle's safe speed for approaching a non-moving obstacle (no dawdling)
virtual double getHeadwayTime() const
Get the driver's desired headway [s].
A device which collects info on the vehicle trip (mainly on departure and arrival)
static const std::vector< MSDevice_Taxi * > & getFleet()
static MSDispatch * getDispatchAlgorithm()
A dispatch algorithm that services customers in reservation order and always sends the closest availa...
void interpretDispatch(MSDevice_Taxi *taxi, const std::vector< std::string > &reservationsIDs)
trigger taxi dispatch.
An algorithm that performs distpach for a taxi fleet.
A road/street connecting two junctions.
static const MSEdgeVector & getAllEdges()
Returns all edges with a numerical id.
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
static void parseEdgesList(const std::string &desc, ConstMSEdgeVector &into, const std::string &rid)
Parses the given string assuming it contains a list of edge ids divided by spaces.
const std::vector< MSLane * > * allowedLanes(const MSEdge &destination, SUMOVehicleClass vclass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Get the allowed lanes to reach the destination-edge.
double getLength() const
return the length of the edge
bool isInternal() const
return whether this edge is an internal edge
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn't already in the dictionary....
double getVehicleMaxSpeed(const SUMOTrafficObject *const veh) const
Returns the maximum speed the vehicle may use on this edge.
const MSEdge * getNormalBefore() const
if this edge is an internal edge, return its first normal predecessor, otherwise the edge itself
bool retrieveExistingTravelTime(const MSEdge *const e, const double t, double &value) const
Returns a travel time for an edge and time if stored.
bool knowsTravelTime(const MSEdge *const e) const
Returns the information whether any travel time is known for the given edge.
void addTravelTime(const MSEdge *const e, double begin, double end, double value)
Adds a travel time information for an edge and a time span.
void removeEffort(const MSEdge *const e)
Removes the effort information for an edge.
bool knowsEffort(const MSEdge *const e) const
Returns the information whether any effort is known for the given edge.
void addEffort(const MSEdge *const e, double begin, double end, double value)
Adds an effort information for an edge and a time span.
bool retrieveExistingEffort(const MSEdge *const e, const double t, double &value) const
Returns an effort for an edge and time if stored.
void removeTravelTime(const MSEdge *const e)
Removes the travel time information for an edge.
static double gLateralResolution
static bool gSemiImplicitEulerUpdate
void alreadyDeparted(SUMOVehicle *veh)
stops trying to emit the given vehicle (because it already departed)
void add(SUMOVehicle *veh)
Adds a single vehicle for departure.
virtual const MSJunctionLogic * getLogic() const
virtual const MSLogicJunction::LinkBits & getResponseFor(int linkIndex) const
Returns the response for the given link.
Representation of a lane in the micro simulation.
MSLane * getParallelLane(int offset, bool includeOpposite=true) const
Returns the lane with the given offset parallel to this one or 0 if it does not exist.
virtual MSVehicle * removeVehicle(MSVehicle *remVehicle, MSMoveReminder::Notification notification, bool notify=true)
static std::vector< MSLink * >::const_iterator succLinkSec(const SUMOVehicle &veh, int nRouteSuccs, const MSLane &succLinkSource, const std::vector< MSLane * > &conts)
void forceVehicleInsertion(MSVehicle *veh, double pos, MSMoveReminder::Notification notification, double posLat=0)
Inserts the given vehicle at the given position.
double getSpeedLimit() const
Returns the lane's maximum allowed speed.
const MSEdge * getNextNormal() const
Returns the lane's follower if it is an internal lane, the edge of the lane otherwise.
void addLeaders(const MSVehicle *vehicle, double vehPos, MSLeaderDistanceInfo &result, bool oppositeDirection=false)
get leaders for ego on the given lane
double getLength() const
Returns the lane's length.
bool isLinkEnd(std::vector< MSLink * >::const_iterator &i) const
int getIndex() const
Returns the lane's index.
double getOppositePos(double pos) const
return the corresponding position on the opposite lane
static bool dictionary(const std::string &id, MSLane *lane)
Static (sic!) container methods {.
virtual const PositionVector & getShape(bool) const
MSEdge & getEdge() const
Returns the lane's edge.
MSLeaderDistanceInfo getFollowersOnConsecutive(const MSVehicle *ego, double backOffset, bool allSublanes, double searchDist=-1, MinorLinkMode mLinkMode=FOLLOW_ALWAYS) const
return the sublane followers with the largest missing rear gap among all predecessor lanes (within di...
double getWidth() const
Returns the lane's width.
const std::vector< MSLink * > & getLinkCont() const
returns the container with all links !!!
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
saves leader/follower vehicles and their distances relative to an ego vehicle
void fixOppositeGaps(bool isFollower)
subtract vehicle length from all gaps if the leader vehicle is driving in the opposite direction
virtual int addLeader(const MSVehicle *veh, double gap, double latOffset=0, int sublane=-1)
const std::vector< const MSLane * > & getFoeLanes() const
LinkState getState() const
Returns the current state of the link.
bool hasApproachingFoe(SUMOTime arrivalTime, SUMOTime leaveTime, double speed, double decel) const
Returns the information whether a vehicle is approaching on one of the link's foe streams.
MSJunction * getJunction() const
MSLane * getLane() const
Returns the connected lane.
bool opened(SUMOTime arrivalTime, double arrivalSpeed, double leaveSpeed, double vehicleLength, double impatience, double decel, SUMOTime waitingTime, double posLat=0, BlockingFoes *collectFoes=nullptr, bool ignoreRed=false, const SUMOTrafficObject *ego=nullptr, double dist=-1) const
Returns the information whether the link may be passed.
int getIndex() const
Returns the respond index (for visualization)
bool havePriority() const
Returns whether this link is a major link.
ApproachingVehicleInformation getApproaching(const SUMOVehicle *veh) const
@ CONFLICT_NO_INTERSECTION
MSLane * getViaLane() const
Returns the following inner lane.
const std::vector< ConflictInfo > & getConflicts() const
LinkDirection getDirection() const
Returns the direction the vehicle passing this link take.
double getLength() const
Returns the length of this link.
Notification
Definition of a vehicle state.
@ NOTIFICATION_VAPORIZED_TRACI
The vehicle got removed via TraCI.
@ NOTIFICATION_ARRIVED
The vehicle arrived at its destination (is deleted)
@ NOTIFICATION_TELEPORT_ARRIVED
The vehicle was teleported out of the net.
@ NOTIFICATION_DEPARTED
The vehicle has departed (was inserted into the network)
@ NOTIFICATION_JUNCTION
The vehicle arrived at a junction.
@ NOTIFICATION_TELEPORT
The vehicle is being teleported.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
MSInsertionControl & getInsertionControl()
Returns the insertion control.
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
const ConstMSEdgeVector & getEdges() const
MSRouteIterator end() const
Returns the end of the list of edges to pass.
static bool dictionary(const std::string &id, ConstMSRoutePtr route)
Adds a route to the dictionary.
MSRouteIterator begin() const
Returns the begin of the list of edges to pass.
double getDistanceBetween(double fromPos, double toPos, const MSLane *fromLane, const MSLane *toLane, int routePosition=0) const
Compute the distance between 2 given edges on this route, optionally including the length of internal...
const MSLane * lane
The lane to stop at (microsim only)
void initPars(const SUMOVehicleParameter::Stop &stopPar)
initialize attributes from the given stop parameters
int getStateFlagsOld() const
return flags as used by Vehicle::getStopState
bool reached
Information whether the stop has been reached.
MSRouteIterator edge
The edge in the route to stop at.
SUMOTime duration
The stopping duration.
const SUMOVehicleParameter::Stop pars
The stop parameter.
void setLaneChangeMode(int value)
Sets lane changing behavior.
void deactivateGapController()
Deactivates the gap control.
void setSpeedMode(int speedMode)
Sets speed-constraining behaviors.
void setLaneTimeLine(const std::vector< std::pair< SUMOTime, int > > &laneTimeLine)
Sets a new lane timeline.
void setSublaneChange(double latDist)
Sets a new sublane-change request.
void setSignals(int signals)
void setSpeedTimeLine(const std::vector< std::pair< SUMOTime, double > > &speedTimeLine)
Sets a new velocity timeline.
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,.
The class responsible for building and deletion of vehicles.
void removePending()
Removes a vehicle after it has ended.
virtual bool addVehicle(const std::string &id, SUMOVehicle *v)
Tries to insert the vehicle into the internal vehicle container.
SUMOVehicle * getVehicle(const std::string &id) const
Returns the vehicle with the given id.
MSVehicleType * getVType(const std::string &id=DEFAULT_VTYPE_ID, SumoRNG *rng=nullptr, bool readOnly=false)
Returns the named vehicle type or a sample from the named distribution.
std::map< std::string, SUMOVehicle * >::const_iterator constVehIt
Definition of the internal vehicles map iterator.
virtual SUMOVehicle * buildVehicle(SUMOVehicleParameter *defs, ConstMSRoutePtr route, MSVehicleType *type, const bool ignoreStopErrors, const VehicleDefinitionSource source=ROUTEFILE, bool addRouteStops=true)
Builds a vehicle, increases the number of built vehicles.
void scheduleVehicleRemoval(SUMOVehicle *veh, bool checkDuplicate=false)
Removes a vehicle after it has ended.
virtual void deleteVehicle(SUMOVehicle *v, bool discard=false, bool wasKept=false)
Deletes the vehicle.
constVehIt loadedVehBegin() const
Returns the begin of the internal vehicle map.
constVehIt loadedVehEnd() const
Returns the end of the internal vehicle map.
Representation of a vehicle in the micro simulation.
void updateBestLanes(bool forceRebuild=false, const MSLane *startLane=0)
computes the best lanes to use in order to continue the route
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...
bool isOnRoad() const
Returns the information whether the vehicle is on a road (is simulated)
SUMOTime getLastActionTime() const
Returns the time of the vehicle's last action point.
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...
void setPreviousSpeed(double prevSpeed, double prevAcceleration)
Sets the influenced previous speed.
SUMOTime getWaitingTime(const bool accumulated=false) const
Returns the SUMOTime waited (speed was lesser than 0.1m/s)
MSAbstractLaneChangeModel & getLaneChangeModel()
Position getPosition(const double offset=0) const
Return current position (x/y, cartesian)
const std::vector< MSLane * > & getBestLanesContinuation() const
Returns the best sequence of lanes to continue the route starting at myLane.
void onRemovalFromNet(const MSMoveReminder::Notification reason)
Called when the vehicle is removed from the network.
bool resumeFromStopping()
double getBackPositionOnLane(const MSLane *lane) const
Get the vehicle's position relative to the given lane.
void resetActionOffset(const SUMOTime timeUntilNextAction=0)
Resets the action offset for the vehicle.
bool rerouteParkingArea(const std::string &parkingAreaID, std::string &errorMsg)
void switchOffSignal(int signal)
Switches the given signal off.
@ VEH_SIGNAL_NONE
Everything is switched off.
const MSLane * getLane() const
Returns the lane the vehicle is on.
MSLane * getMutableLane() const
Returns the lane the vehicle is on Non const version indicates that something volatile is going on.
Influencer & getInfluencer()
void setActionStepLength(double actionStepLength, bool resetActionOffset=true)
Sets the action steplength of the vehicle.
double getLateralPositionOnLane() const
Get the vehicle's lateral position on the lane.
double getSpeed() const
Returns the vehicle's current speed.
void updateLaneBruttoSum()
Update the lane brutto occupancy after a change in minGap.
const std::vector< LaneQ > & getBestLanes() const
Returns the description of best lanes to use in order to continue the route.
const MSCFModel & getCarFollowModel() const
Returns the vehicle's car following model definition.
double getPositionOnLane() const
Get the vehicle's position along the lane.
double getAngle() const
Returns the vehicle's direction in radians.
bool hasInfluencer() const
whether the vehicle is individually influenced (via TraCI or special parameters)
void setLateralPositionOnLane(double posLat)
void switchOnSignal(int signal)
Switches the given signal on.
static MSVehicleTransfer * getInstance()
Returns the instance of this object.
void remove(MSVehicle *veh)
Remove a vehicle from this transfer object.
The car-following model and parameter.
void setHeight(const double &height)
Set a new value for this type's height.
void setMaxSpeedLat(const double &maxSpeedLat)
Set a new value for this type's maximum lateral speed.
double getMinGapLat() const
Get the minimum lateral gap that vehicles of this type maintain.
double getWidth() const
Get the width which vehicles of this class shall have when being drawn.
SUMOVehicleClass getVehicleClass() const
Get this vehicle type's vehicle class.
void setEmissionClass(SUMOEmissionClass eclass)
Set a new value for this type's emission class.
double getMaxSpeed() const
Get vehicle's (technical) maximum speed [m/s].
int getPersonCapacity() const
Get this vehicle type's person capacity.
const std::string & getID() const
Returns the name of the vehicle type.
void setMinGapLat(const double &minGapLat)
Set a new value for this type's minimum lataral gap.
double getMinGap() const
Get the free space in front of vehicles of this class.
void setApparentDecel(double apparentDecel)
Set a new value for this type's apparent deceleration.
double getHeight() const
Get the height which vehicles of this class shall have when being drawn.
void setMaxSpeed(const double &maxSpeed)
Set a new value for this type's maximum speed.
const Distribution_Parameterized & getSpeedFactor() const
Returns this type's speed factor.
void setBoardingDuration(SUMOTime duration, bool isPerson=true)
Set a new value for this type's boardingDuration.
double getActionStepLengthSecs() const
Returns this type's default action step length in seconds.
void setLength(const double &length)
Set a new value for this type's length.
double getMaxSpeedLat() const
Get vehicle's maximum lateral speed [m/s].
void setVClass(SUMOVehicleClass vclass)
Set a new value for this type's vehicle class.
void setAccel(double accel)
Set a new value for this type's acceleration.
const MSCFModel & getCarFollowModel() const
Returns the vehicle type's car following model definition (const version)
void setWidth(const double &width)
Set a new value for this type's width.
void setLcContRight(const std::string &value)
Set lcContRight (which is the only lc-attribute not used within the laneChange model)
void setImperfection(double imperfection)
Set a new value for this type's imperfection.
void setPreferredLateralAlignment(const LatAlignmentDefinition &latAlignment, double latAlignmentOffset=0.0)
Set vehicle's preferred lateral alignment.
void setTau(double tau)
Set a new value for this type's headway.
double getLength() const
Get vehicle's length [m].
void setMass(double mass)
Set a new value for this type's mass.
double getMass() const
Get this vehicle type's mass.
void setMinGap(const double &minGap)
Set a new value for this type's minimum gap.
void setShape(SUMOVehicleShape shape)
Set a new value for this type's shape.
static std::string getIDSecure(const T *obj, const std::string &fallBack="NULL")
get an identifier for Named-like object which may be Null
const std::string & getID() const
Returns the id.
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
virtual void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
static std::string getName(const SUMOEmissionClass c)
Checks whether the string describes a known vehicle class.
static SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc=SVC_IGNORING)
Checks whether the string describes a known vehicle class.
A point in 2D or 3D with translation and scaling methods.
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
void sub(double dx, double dy)
Subtracts the given position from this one.
double x() const
Returns the x-position.
void setz(double z)
set position z
double z() const
Returns the z-position.
double angleTo2D(const Position &other) const
returns the angle in the plane of the vector pointing from here to the other position (in radians bet...
double y() const
Returns the y-position.
double rotationAtOffset(double pos) const
Returns the rotation at the given length.
double distance2D(const Position &p, bool perpendicular=false) const
closest 2D-distance to point p (or -1 if perpendicular is true and the point is beyond this vector)
void move2side(double amount, double maxExtension=100)
move position vector to side using certain amount
void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
assigns new values
virtual double getSlope() const =0
Returns the slope of the road at object's position in degrees.
virtual const MSLane * getLane() const =0
Returns the lane the object is currently at.
virtual double getPreviousSpeed() const =0
Returns the object's previous speed.
virtual double getSpeed() const =0
Returns the object's current speed.
virtual Position getPosition(const double offset=0) const =0
Return current position (x/y, cartesian)
virtual double getPositionOnLane() const =0
Get the object's position along the lane.
static double getDefaultDecel(const SUMOVehicleClass vc=SVC_IGNORING)
Returns the default deceleration for the given vehicle class This needs to be a function because the ...
static bool parseLatAlignment(const std::string &val, double &lao, LatAlignmentDefinition &lad)
Parses and validates a given latAlignment value.
Representation of a vehicle.
virtual int getRouteValidity(bool update=true, bool silent=false, std::string *msgReturn=nullptr)=0
computes validity attributes for the current route
virtual bool wasRemoteControlled(SUMOTime lookBack=DELTA_T) const =0
Returns the information whether the vehicle is fully controlled via TraCI.
virtual bool hasDeparted() const =0
Returns whether this vehicle has departed.
virtual bool isOnRoad() const =0
Returns the information whether the vehicle is on a road (is simulated)
virtual bool isParking() const =0
Returns the information whether the vehicle is parked.
virtual double getAngle() const =0
Get the vehicle's angle.
Definition of vehicle stop (position and duration)
int getFlags() const
return flags as per Vehicle::getStops
SUMOTime started
the time at which this stop was reached
std::string edge
The edge to stop at.
ParkingType parking
whether the vehicle is removed from the net while stopping
std::string lane
The lane to stop at.
SUMOTime extension
The maximum time extension for boarding / loading.
double speed
the speed at which this stop counts as reached (waypoint mode)
std::string parkingarea
(Optional) parking area if one is assigned to the stop
std::string split
the id of the vehicle (train portion) that splits of upon reaching this stop
double startPos
The stopping position start.
std::string line
the new line id of the trip within a cyclical public transport route
double posLat
the lateral offset when stopping
bool onDemand
whether the stop may be skipped
std::string chargingStation
(Optional) charging station if one is assigned to the stop
std::vector< std::string > getTriggers() const
write trigger attribute
std::set< std::string > permitted
IDs of persons or containers that may board/load at this stop.
SUMOTime jumpUntil
earlierst jump end if there shall be a jump from this stop to the next route edge
int parametersSet
Information for the output which parameter were set.
SUMOTime jump
transfer time if there shall be a jump from this stop to the next route edge
std::string join
the id of the vehicle (train portion) to which this vehicle shall be joined
SUMOTime until
The time at which the vehicle may continue its journey.
std::string actType
act Type (only used by Persons) (used by netedit)
SUMOTime ended
the time at which this stop was ended
double endPos
The stopping position end.
std::set< std::string > awaitedPersons
IDs of persons the vehicle has to wait for until departing.
std::set< std::string > awaitedContainers
IDs of containers the vehicle has to wait for until departing.
std::string busstop
(Optional) bus stop if one is assigned to the stop
std::string tripId
id of the trip within a cyclical public transport route
std::string containerstop
(Optional) container stop if one is assigned to the stop
SUMOTime arrival
The (expected) time at which the vehicle reaches the stop.
SUMOTime duration
The stopping duration.
Structure representing possible vehicle parameter.
int departLane
(optional) The lane the vehicle shall depart from (index in edge)
ArrivalSpeedDefinition arrivalSpeedProcedure
Information how the vehicle's end speed shall be chosen.
double departSpeed
(optional) The initial speed of the vehicle
std::string vtypeid
The vehicle's type id.
std::vector< std::string > via
List of the via-edges the vehicle must visit.
static bool parseArrivalLane(const std::string &val, const std::string &element, const std::string &id, int &lane, ArrivalLaneDefinition &ald, std::string &error)
Validates a given arrivalLane value.
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
long long int parametersSet
Information for the router which parameter were set, TraCI may modify this (when changing color)
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
static bool parseDepartSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, DepartSpeedDefinition &dsd, std::string &error)
Validates a given departSpeed value.
static bool parseArrivalPos(const std::string &val, const std::string &element, const std::string &id, double &pos, ArrivalPosDefinition &apd, std::string &error)
Validates a given arrivalPos value.
int personNumber
The static number of persons in the vehicle when it departs (not including boarding persons)
static bool parseArrivalSpeed(const std::string &val, const std::string &element, const std::string &id, double &speed, ArrivalSpeedDefinition &asd, std::string &error)
Validates a given arrivalSpeed value.
bool wasSet(long long int what) const
Returns whether the given parameter was set.
double departPos
(optional) The position the vehicle shall depart from
DepartSpeedDefinition departSpeedProcedure
Information how the vehicle's initial speed shall be chosen.
RGBColor color
The vehicle's color, TraCI may change this.
double arrivalPos
(optional) The position the vehicle shall arrive on
static bool parseDepartLane(const std::string &val, const std::string &element, const std::string &id, int &lane, DepartLaneDefinition &dld, std::string &error)
Validates a given departLane value.
std::string id
The vehicle's id.
static bool parseDepart(const std::string &val, const std::string &element, const std::string &id, SUMOTime &depart, DepartDefinition &dd, std::string &error, const std::string &attr="departure")
Validates a given depart value.
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
std::string toTaz
The vehicle's destination zone (district)
double arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
static bool parseDepartPos(const std::string &val, const std::string &element, const std::string &id, double &pos, DepartPosDefinition &dpd, std::string &error)
Validates a given departPos value.
std::string fromTaz
The vehicle's origin zone (district)
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
std::string line
The vehicle's line (mainly for public transport)
static ParkingType parseParkingType(const std::string &value)
parses parking type value
static void parseStopTriggers(const std::vector< std::string > &triggers, bool expectTrigger, Stop &stop)
parses stop trigger values
static bool isInternalRouteID(const std::string &id)
Checks whether the route ID uses the syntax of internal routes.
static StringBijection< LinkState > LinkStates
link states
static int getIndexFromLane(const std::string laneID)
return lane index when given the lane ID
static StringBijection< LinkDirection > LinkDirections
link directions
const std::string & getString(const T key) const
get string
std::set< std::string > getSet()
return set of strings
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter,...
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter
C++ TraCI client API implementation.
static MSEdge * getEdge(const std::string &edgeID)
static TraCIPosition makeTraCIPosition(const Position &position, const bool includeZ=false)
static bool moveToXYMap_matchingRoutePosition(const Position &pos, const std::string &origID, const ConstMSEdgeVector ¤tRoute, int routeIndex, SUMOVehicleClass vClass, bool setLateralPos, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset)
static TraCIPositionVector makeTraCIPositionVector(const PositionVector &positionVector)
helper functions
static int readDistanceRequest(tcpip::Storage &data, TraCIRoadPosition &roadPos, Position &pos)
static MSBaseVehicle * getVehicle(const std::string &id)
static TraCIColor makeTraCIColor(const RGBColor &color)
static TraCINextStopData buildStopData(const SUMOVehicleParameter::Stop &stopPar)
static void setRemoteControlled(MSVehicle *v, Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, ConstMSEdgeVector route, SUMOTime t)
static const MSVehicleType & getVehicleType(const std::string &vehicleID)
static bool moveToXYMap(const Position &pos, double maxRouteDistance, bool mayLeaveNetwork, const std::string &origID, const double angle, double speed, const ConstMSEdgeVector ¤tRoute, const int routePosition, const MSLane *currentLane, double currentLanePos, bool onRoad, SUMOVehicleClass vClass, double currentAngle, bool setLateralPos, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset, ConstMSEdgeVector &edges)
static std::pair< MSLane *, double > convertCartesianToRoadMap(const Position &pos, const SUMOVehicleClass vClass)
static SUMOVehicleParameter::Stop buildStopParameters(const std::string &edgeOrStoppingPlaceID, double pos, int laneIndex, double startPos, int flags, double duration, double until)
static Subscription * addSubscriptionFilter(SubscriptionFilterType filter)
static const MSLane * getLaneChecking(const std::string &edgeID, int laneIndex, double pos)
static int readTypedByte(tcpip::Storage &ret, const std::string &error="")
static int readCompound(tcpip::Storage &ret, int expectedSize=-1, const std::string &error="")
static int readTypedInt(tcpip::Storage &ret, const std::string &error="")
static std::string readTypedString(tcpip::Storage &ret, const std::string &error="")
static double readTypedDouble(tcpip::Storage &ret, const std::string &error="")
#define CALL_MESO_FUN(veh, fun, microResult)
#define CALL_MICRO_FUN(veh, fun, mesoResult)
TRACI_CONST double INVALID_DOUBLE_VALUE
TRACI_CONST int VAR_LASTACTIONTIME
TRACI_CONST int VAR_EDGES
TRACI_CONST int POSITION_ROADMAP
TRACI_CONST int VAR_NOXEMISSION
TRACI_CONST int VAR_LANECHANGE_MODE
TRACI_CONST int MOVE_AUTOMATIC
TRACI_CONST int LAST_STEP_PERSON_ID_LIST
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_IMPATIENCE
TRACI_CONST int VAR_SEGMENT_ID
TRACI_CONST int VAR_DEPARTURE
TRACI_CONST int VAR_ROUTING_MODE
TRACI_CONST int VAR_SECURE_GAP
TRACI_CONST int VAR_WAITING_TIME
std::map< std::string, libsumo::SubscriptionResults > ContextSubscriptionResults
TRACI_CONST int VAR_EDGE_TRAVELTIME
TRACI_CONST int VAR_ROAD_ID
TRACI_CONST int MOVE_NORMAL
TRACI_CONST int VAR_TIMELOSS
TRACI_CONST int VAR_SPEED_FACTOR
TRACI_CONST int VAR_FOLLOW_SPEED
TRACI_CONST int VAR_STOP_ARRIVALDELAY
TRACI_CONST int VAR_SPEED_LAT
TRACI_CONST int VAR_ANGLE
TRACI_CONST int VAR_NEXT_TLS
TRACI_CONST int VAR_EDGE_EFFORT
TRACI_CONST int VAR_BEST_LANES
TRACI_CONST int VAR_ALLOWED_SPEED
TRACI_CONST int VAR_LANE_INDEX
TRACI_CONST int VAR_PMXEMISSION
TRACI_CONST int VAR_SPEED_WITHOUT_TRACI
TRACI_CONST int VAR_BOARDING_DURATION
TRACI_CONST int MOVE_TELEPORT
TRACI_CONST int VAR_PERSON_NUMBER
TRACI_CONST int VAR_COEMISSION
TRACI_CONST int VAR_COLOR
TRACI_CONST int VAR_POSITION
TRACI_CONST int VAR_PERSON_CAPACITY
TRACI_CONST int VAR_STOP_PARAMETER
TRACI_CONST int VAR_LEADER
TRACI_CONST int VAR_CO2EMISSION
TRACI_CONST int VAR_TELEPORTING_LIST
TRACI_CONST int REMOVE_TELEPORT
TRACI_CONST int VAR_TAXI_FLEET
TRACI_CONST int VAR_ROUTE_VALID
TRACI_CONST int VAR_SPEEDSETMODE
TRACI_CONST int VAR_FUELCONSUMPTION
std::map< std::string, libsumo::TraCIResults > SubscriptionResults
{object->{variable->value}}
TRACI_CONST int VAR_SLOPE
TRACI_CONST int VAR_HCEMISSION
TRACI_CONST int VAR_PARAMETER
TRACI_CONST int VAR_LANEPOSITION
TRACI_CONST int REMOVE_PARKING
TRACI_CONST int VAR_LANE_ID
TRACI_CONST int VAR_STOP_SPEED
TRACI_CONST int VAR_NOISEEMISSION
TRACI_CONST int VAR_POSITION3D
TRACI_CONST int VAR_SPEED
TRACI_CONST int VAR_SIGNALS
TRACI_CONST int VAR_PARAMETER_WITH_KEY
TRACI_CONST int VAR_ACCUMULATED_WAITING_TIME
TRACI_CONST int VAR_MINGAP_LAT
TRACI_CONST int INVALID_INT_VALUE
TRACI_CONST int VAR_NEXT_LINKS
TRACI_CONST int VAR_ROUTE_INDEX
TRACI_CONST int VAR_NEXT_STOPS2
TRACI_CONST int VAR_ACCELERATION
TRACI_CONST int VAR_ROUTE_ID
TRACI_CONST int REMOVE_ARRIVED
TRACI_CONST int DISTANCE_REQUEST
@ SUBS_FILTER_LEAD_FOLLOW
@ SUBS_FILTER_UPSTREAM_DIST
@ SUBS_FILTER_DOWNSTREAM_DIST
@ SUBS_FILTER_LATERAL_DIST
@ SUBS_FILTER_FIELD_OF_VISION
TRACI_CONST int VAR_SEGMENT_INDEX
TRACI_CONST int ROUTING_MODE_DEFAULT
TRACI_CONST int VAR_LANEPOSITION_LAT
TRACI_CONST int CMD_CHANGELANE
TRACI_CONST int VAR_STOP_DELAY
TRACI_CONST int REMOVE_TELEPORT_ARRIVED
TRACI_CONST int VAR_NEIGHBORS
TRACI_CONST int REMOVE_VAPORIZED
TRACI_CONST int VAR_STOPSTATE
TRACI_CONST int VAR_FOLLOWER
TRACI_CONST int VAR_LOADED_LIST
TRACI_CONST int VAR_DEPART_DELAY
std::map< int, std::shared_ptr< libsumo::TraCIResult > > TraCIResults
{variable->value}
TRACI_CONST int VAR_DISTANCE
TRACI_CONST int ROUTING_MODE_AGGREGATED_CUSTOM
TRACI_CONST int VAR_ELECTRICITYCONSUMPTION
TRACI_CONST int VAR_NEXT_STOPS
@ key
the parser read a key of a value in an object
NLOHMANN_BASIC_JSON_TPL_DECLARATION void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL &j1, nlohmann::NLOHMANN_BASIC_JSON_TPL &j2) noexcept(//NOLINT(readability-inconsistent-declaration-parameter-name) is_nothrow_move_constructible< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value &&//NOLINT(misc-redundant-expression) is_nothrow_move_assignable< nlohmann::NLOHMANN_BASIC_JSON_TPL >::value)
exchanges the values of two JSON objects
pre-computed information for conflict points
double getFoeConflictSize(const MSLink *foeExitLink) const
double conflictSize
the length of the conflict space
double getFoeLengthBehindCrossing(const MSLink *foeExitLink) const
double lengthBehindCrossing
length of internal lane after the crossing point
A structure representing the best lanes for continuing the current route starting at 'lane'.