41 #define FAR_AWAY 1000.0
57 std::vector<std::string>
60 std::vector<std::string> ids;
63 ids.push_back(i->first);
71 Person::getIDCount() {
77 Person::getPosition(
const std::string& personID,
const bool includeZ) {
83 Person::getPosition3D(
const std::string& personID) {
89 Person::getAngle(
const std::string& personID) {
95 Person::getSlope(
const std::string& personID) {
96 MSPerson* person = getPerson(personID);
98 const MSLane* lane = getSidewalk<MSEdge, MSLane>(person->
getEdge());
99 if (lane ==
nullptr) {
108 Person::getSpeed(
const std::string& personID) {
109 return getPerson(personID)->getSpeed();
114 Person::getRoadID(
const std::string& personID) {
115 return getPerson(personID)->getEdge()->getID();
120 Person::getLaneID(
const std::string& personID) {
126 Person::getLanePosition(
const std::string& personID) {
127 return getPerson(personID)->getEdgePos();
130 std::vector<TraCIReservation>
131 Person::getTaxiReservations(
int onlyNew) {
132 std::vector<TraCIReservation> result;
134 if (dispatcher !=
nullptr) {
136 if (traciDispatcher ==
nullptr) {
137 throw TraCIException(
"device.taxi.dispatch-algorithm 'traci' has not been loaded");
147 std::vector<std::string> personIDs;
149 personIDs.push_back(p->
getID());
168 Person::getColor(
const std::string& personID) {
169 const RGBColor& col = getPerson(personID)->getParameter().color;
172 tcol.g = col.
green();
174 tcol.a = col.
alpha();
180 Person::getTypeID(
const std::string& personID) {
181 return getPerson(personID)->getVehicleType().getID();
186 Person::getWaitingTime(
const std::string& personID) {
187 return getPerson(personID)->getWaitingSeconds();
192 Person::getNextEdge(
const std::string& personID) {
193 return getPerson(personID)->getNextEdge();
197 std::vector<std::string>
198 Person::getEdges(
const std::string& personID,
int nextStageIndex) {
201 throw TraCIException(
"The stage index must be lower than the number of remaining stages.");
204 throw TraCIException(
"The negative stage index must refer to a valid previous stage.");
206 std::vector<std::string> edgeIDs;
207 for (
auto& e : p->
getEdges(nextStageIndex)) {
209 edgeIDs.push_back(e->getID());
217 Person::getStage(
const std::string& personID,
int nextStageIndex) {
221 throw TraCIException(
"The stage index must be lower than the number of remaining stages.");
224 throw TraCIException(
"The negative stage index " +
toString(nextStageIndex) +
" must refer to a valid previous stage.");
232 result.edges.push_back(e->getID());
236 if (destinationStop !=
nullptr) {
237 result.destStop = destinationStop->
getID();
241 if (result.length == -1.) {
258 const std::set<std::string> lines = drivingStage->
getLines();
259 for (
auto line = lines.begin(); line != lines.end(); line++) {
260 if (line != lines.begin()) {
263 result.line += *line;
269 result.departPos = walkingStage->getDepartPos();
280 Person::getRemainingStages(
const std::string& personID) {
281 return getPerson(personID)->getNumRemainingStages();
286 Person::getVehicle(
const std::string& personID) {
287 const SUMOVehicle* veh = getPerson(personID)->getVehicle();
288 if (veh ==
nullptr) {
297 Person::getParameter(
const std::string& personID,
const std::string& param) {
298 return getPerson(personID)->getParameter().getParameter(param,
"");
306 Person::getEmissionClass(
const std::string& personID) {
312 Person::getShapeClass(
const std::string& personID) {
318 Person::getLength(
const std::string& personID) {
319 return getPerson(personID)->getVehicleType().getLength();
324 Person::getSpeedFactor(
const std::string& personID) {
325 return getPerson(personID)->getVehicleType().getSpeedFactor().getParameter()[0];
330 Person::getAccel(
const std::string& personID) {
331 return getPerson(personID)->getVehicleType().getCarFollowModel().getMaxAccel();
336 Person::getDecel(
const std::string& personID) {
337 return getPerson(personID)->getVehicleType().getCarFollowModel().getMaxDecel();
341 double Person::getEmergencyDecel(
const std::string& personID) {
342 return getPerson(personID)->getVehicleType().getCarFollowModel().getEmergencyDecel();
346 double Person::getApparentDecel(
const std::string& personID) {
347 return getPerson(personID)->getVehicleType().getCarFollowModel().getApparentDecel();
351 double Person::getActionStepLength(
const std::string& personID) {
352 return getPerson(personID)->getVehicleType().getActionStepLengthSecs();
357 Person::getTau(
const std::string& personID) {
358 return getPerson(personID)->getVehicleType().getCarFollowModel().getHeadwayTime();
363 Person::getImperfection(
const std::string& personID) {
364 return getPerson(personID)->getVehicleType().getCarFollowModel().getImperfection();
369 Person::getSpeedDeviation(
const std::string& personID) {
370 return getPerson(personID)->getVehicleType().getSpeedFactor().getParameter()[1];
375 Person::getVehicleClass(
const std::string& personID) {
376 return toString(getPerson(personID)->getVehicleType().getVehicleClass());
381 Person::getMinGap(
const std::string& personID) {
382 return getPerson(personID)->getVehicleType().getMinGap();
387 Person::getMinGapLat(
const std::string& personID) {
388 return getPerson(personID)->getVehicleType().getMinGapLat();
393 Person::getMaxSpeed(
const std::string& personID) {
394 return getPerson(personID)->getVehicleType().getMaxSpeed();
399 Person::getMaxSpeedLat(
const std::string& personID) {
400 return getPerson(personID)->getVehicleType().getMaxSpeedLat();
405 Person::getLateralAlignment(
const std::string& personID) {
406 return toString(getPerson(personID)->getVehicleType().getPreferredLateralAlignment());
411 Person::getWidth(
const std::string& personID) {
412 return getPerson(personID)->getVehicleType().getWidth();
417 Person::getHeight(
const std::string& personID) {
418 return getPerson(personID)->getVehicleType().getHeight();
423 Person::getPersonCapacity(
const std::string& personID) {
424 return getPerson(personID)->getVehicleType().getPersonCapacity();
429 Person::setSpeed(
const std::string& personID,
double speed) {
430 getPerson(personID)->setSpeed(speed);
435 Person::setType(
const std::string& personID,
const std::string& typeID) {
437 if (vehicleType ==
nullptr) {
438 throw TraCIException(
"The vehicle type '" + typeID +
"' is not known.");
440 getPerson(personID)->replaceVehicleType(vehicleType);
445 Person::add(
const std::string& personID,
const std::string& edgeID,
double pos,
double departInSecs,
const std::string typeID) {
448 p = getPerson(personID);
449 }
catch (TraCIException&) {
454 throw TraCIException(
"The person " + personID +
" to add already exists.");
459 vehicleParams.
id = personID;
463 throw TraCIException(
"Invalid type '" + typeID +
"' for person '" + personID +
"'");
468 throw TraCIException(
"Invalid edge '" + edgeID +
"' for person: '" + personID +
"'");
471 if (departInSecs < 0.) {
472 const int proc = (int) - departInSecs;
474 throw TraCIException(
"Invalid departure time." +
toString(depart) +
" " +
toString(proc));
481 +
"' is in the past; using current time " +
time2string(vehicleParams.
depart) +
" instead.");
483 vehicleParams.
depart = depart;
488 throw TraCIException(
"Invalid departure position.");
497 plan->push_back(
new MSStageWaiting(edge,
nullptr, 0, depart, pos,
"awaiting departure",
true));
505 throw TraCIException(e.what());
510 Person::convertTraCIStage(
const TraCIStage& stage,
const std::string personID) {
512 if (!stage.destStop.empty()) {
517 throw TraCIException(
"Invalid stopping place id '" + stage.destStop +
"' for person: '" + personID +
"'");
524 switch (stage.type) {
526 if (stage.edges.empty()) {
527 throw TraCIException(
"The stage should have at least one edge");
529 std::string toId = stage.edges.back();
532 throw TraCIException(
"Invalid edge '" + toId +
"' for person: '" + personID +
"'");
539 if (stage.line.empty()) {
540 throw TraCIException(
"Empty lines parameter for person: '" + personID +
"'");
542 double arrivalPos = stage.arrivalPos;
559 throw TraCIException(e.what());
562 throw TraCIException(
"Empty edge list for walking stage of person '" + personID +
"'.");
564 double arrivalPos = stage.arrivalPos;
565 if (fabs(arrivalPos) > edges.back()->getLength()) {
566 throw TraCIException(
"Invalid arrivalPos for walking stage of person '" + personID +
"'.");
568 if (arrivalPos < 0) {
569 arrivalPos += edges.back()->getLength();
577 if (stage.travelTime < 0) {
578 throw TraCIException(
"Duration for person: '" + personID +
"' must not be negative");
589 Person::appendStage(
const std::string& personID,
const TraCIStage& stage) {
591 MSStage* personStage = convertTraCIStage(stage, personID);
597 Person::replaceStage(
const std::string& personID,
const int stageIndex,
const TraCIStage& stage) {
600 throw TraCIException(
"Specified stage index: is not valid for person " + personID);
602 MSStage* personStage = convertTraCIStage(stage, personID);
611 Person::appendDrivingStage(
const std::string& personID,
const std::string& toEdge,
const std::string& lines,
const std::string& stopID) {
615 throw TraCIException(
"Invalid edge '" + toEdge +
"' for person: '" + personID +
"'");
617 if (lines.size() == 0) {
618 return throw TraCIException(
"Empty lines parameter for person: '" + personID +
"'");
624 throw TraCIException(
"Invalid stopping place id '" + stopID +
"' for person: '" + personID +
"'");
632 Person::appendWaitingStage(
const std::string& personID,
double duration,
const std::string& description,
const std::string& stopID) {
635 throw TraCIException(
"Duration for person: '" + personID +
"' must not be negative");
641 throw TraCIException(
"Invalid stopping place id '" + stopID +
"' for person: '" + personID +
"'");
649 Person::appendWalkingStage(
const std::string& personID,
const std::vector<std::string>& edgeIDs,
double arrivalPos,
double duration,
double speed,
const std::string& stopID) {
655 throw TraCIException(e.what());
658 throw TraCIException(
"Empty edge list for walking stage of person '" + personID +
"'.");
660 if (fabs(arrivalPos) > edges.back()->getLength()) {
661 throw TraCIException(
"Invalid arrivalPos for walking stage of person '" + personID +
"'.");
663 if (arrivalPos < 0) {
664 arrivalPos += edges.back()->getLength();
673 throw TraCIException(
"Invalid stopping place id '" + stopID +
"' for person: '" + personID +
"'");
681 Person::removeStage(
const std::string& personID,
int nextStageIndex) {
684 throw TraCIException(
"The stage index must be lower than the number of remaining stages.");
686 if (nextStageIndex < 0) {
687 throw TraCIException(
"The stage index may not be negative.");
694 Person::rerouteTraveltime(
const std::string& personID) {
697 throw TraCIException(
"Person '" + personID +
"' has no remaining stages.");
707 throw TraCIException(
"Person '" + personID +
"' cannot reroute after the current stop.");
713 int nextIndex = firstIndex + 1;
725 if (newEdges.empty()) {
726 throw TraCIException(
"Could not find new route for person '" + personID +
"'.");
729 assert(!oldEdges.empty());
731 oldEdges.erase(oldEdges.begin());
734 if (newEdges == oldEdges && (firstIndex + 1 == nextIndex)) {
737 if (newEdges.front() != from) {
739 newEdges.insert(newEdges.begin(), from);
741 p->
reroute(newEdges, departPos, firstIndex, nextIndex);
746 Person::moveTo(
const std::string& personID,
const std::string& edgeID,
double ) {
750 throw TraCIException(
"Unknown edge '" + edgeID +
"'.");
765 throw TraCIException(
"Command moveTo is not supported for person '" + personID +
"' while " + p->
getCurrentStageDescription() +
".");
771 Person::moveToXY(
const std::string& personID,
const std::string& edgeID,
const double x,
const double y,
double angle,
const int keepRoute) {
773 const bool doKeepRoute = (keepRoute & 1) != 0;
774 const bool mayLeaveNetwork = (keepRoute & 2) != 0;
775 const bool ignorePermissions = (keepRoute & 4) != 0;
779 const double origAngle = angle;
784 while (angle >= 360.) {
794 std::cout <<
" want pos:" << pos <<
" edgeID:" << edgeID <<
" origAngle:" << origAngle <<
" angle:" << angle <<
" keepRoute:" << keepRoute << std::endl;
800 double lanePosLat = 0;
801 double bestDistance = std::numeric_limits<double>::max();
804 double maxRouteDistance = 100;
826 ev, routeIndex, vClass,
true,
827 bestDistance, &lane, lanePos, routeOffset);
831 speed, ev, routeIndex, currentLane, p->
getEdgePos(), currentLane !=
nullptr,
833 bestDistance, &lane, lanePos, routeOffset, edges);
834 if (edges.size() != 0 && ev.size() > 1) {
837 assert(lane !=
nullptr);
840 if (routeIndex == 0) {
847 if (origEdge->
getToJunction() == ev[routeIndex - 1]->getToJunction() || origEdge->
getToJunction() == ev[routeIndex - 1]->getFromJunction()) {
857 const MSEdge* newEdge = edges[0];
858 if (edges[0]->getFromJunction() == originalTarget || edges[0]->getToJunction() == originalTarget) {
860 edges[routeIndex] = newEdge;
864 if ((found && bestDistance <= maxRouteDistance) || mayLeaveNetwork) {
869 lanePosLat = perpDist;
870 if (!mayLeaveNetwork) {
878 WRITE_WARNING(
"Could not determine position on lane '" + lane->
getID() +
" at lateral position " +
toString(-lanePosLat) +
".");
882 lanePosLat = -lanePosLat;
890 assert((found && lane != 0) || (!found && lane == 0));
923 throw TraCIException(
"Command moveToXY is not supported for person '" + personID +
"' while " + p->
getCurrentStageDescription() +
".");
927 if (lane ==
nullptr) {
928 throw TraCIException(
"Could not map person '" + personID +
"' no road found within " +
toString(maxRouteDistance) +
"m.");
930 throw TraCIException(
"Could not map person '" + personID +
"' distance to road is " +
toString(bestDistance) +
".");
939 Person::setParameter(
const std::string& personID,
const std::string& key,
const std::string& value) {
945 Person::setLength(
const std::string& personID,
double length) {
946 getPerson(personID)->getSingularType().setLength(length);
951 Person::setMaxSpeed(
const std::string& personID,
double speed) {
952 getPerson(personID)->getSingularType().setMaxSpeed(speed);
957 Person::setVehicleClass(
const std::string& personID,
const std::string& clazz) {
963 Person::setShapeClass(
const std::string& personID,
const std::string& clazz) {
969 Person::setEmissionClass(
const std::string& personID,
const std::string& clazz) {
975 Person::setWidth(
const std::string& personID,
double width) {
976 getPerson(personID)->getSingularType().setWidth(width);
981 Person::setHeight(
const std::string& personID,
double height) {
982 getPerson(personID)->getSingularType().setHeight(height);
987 Person::setMinGap(
const std::string& personID,
double minGap) {
988 getPerson(personID)->getSingularType().setMinGap(minGap);
993 Person::setAccel(
const std::string& personID,
double accel) {
994 getPerson(personID)->getSingularType().setAccel(accel);
999 Person::setDecel(
const std::string& personID,
double decel) {
1000 getPerson(personID)->getSingularType().setDecel(decel);
1005 Person::setEmergencyDecel(
const std::string& personID,
double decel) {
1006 getPerson(personID)->getSingularType().setEmergencyDecel(decel);
1011 Person::setApparentDecel(
const std::string& personID,
double decel) {
1012 getPerson(personID)->getSingularType().setApparentDecel(decel);
1017 Person::setImperfection(
const std::string& personID,
double imperfection) {
1018 getPerson(personID)->getSingularType().setImperfection(imperfection);
1023 Person::setTau(
const std::string& personID,
double tau) {
1024 getPerson(personID)->getSingularType().setTau(tau);
1029 Person::setMinGapLat(
const std::string& personID,
double minGapLat) {
1030 getPerson(personID)->getSingularType().setMinGapLat(minGapLat);
1035 Person::setMaxSpeedLat(
const std::string& personID,
double speed) {
1036 getPerson(personID)->getSingularType().setMaxSpeedLat(speed);
1041 Person::setLateralAlignment(
const std::string& personID,
const std::string& latAlignment) {
1047 Person::setSpeedFactor(
const std::string& personID,
double factor) {
1048 getPerson(personID)->getSingularType().setSpeedFactor(factor);
1053 Person::setActionStepLength(
const std::string& personID,
double actionStepLength,
bool resetActionOffset) {
1059 Person::setColor(
const std::string& personID,
const TraCIColor& c) {
1061 p.
color.
set((
unsigned char)c.r, (
unsigned char)c.g, (
unsigned char)c.b, (
unsigned char)c.a);
1070 Person::getPerson(
const std::string& personID) {
1077 shape.push_back(getPerson(
id)->getPosition());
1081 std::shared_ptr<VariableWrapper>
1082 Person::makeWrapper() {
1083 return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
1088 Person::handleVariable(
const std::string& objID,
const int variable, VariableWrapper* wrapper) {
1091 return wrapper->wrapStringList(objID, variable, getIDList());
1093 return wrapper->wrapInt(objID, variable, getIDCount());
1095 return wrapper->wrapPosition(objID, variable, getPosition(objID));
1097 return wrapper->wrapPosition(objID, variable, getPosition(objID,
true));
1099 return wrapper->wrapDouble(objID, variable, getAngle(objID));
1101 return wrapper->wrapDouble(objID, variable, getSlope(objID));
1103 return wrapper->wrapDouble(objID, variable, getSpeed(objID));
1105 return wrapper->wrapString(objID, variable, getRoadID(objID));
1107 return wrapper->wrapString(objID, variable, getLaneID(objID));
1109 return wrapper->wrapDouble(objID, variable, getLanePosition(objID));
1111 return wrapper->wrapColor(objID, variable, getColor(objID));
1113 return wrapper->wrapDouble(objID, variable, getWaitingTime(objID));
1115 return wrapper->wrapString(objID, variable, getTypeID(objID));
1117 return wrapper->wrapString(objID, variable, getNextEdge(objID));
1119 return wrapper->wrapInt(objID, variable, getRemainingStages(objID));
1121 return wrapper->wrapString(objID, variable, getVehicle(objID));
1125 return libsumo::VehicleType::handleVariable(getTypeID(objID), variable, wrapper);
std::vector< const MSEdge * > ConstMSEdgeVector
#define WRITE_WARNING(msg)
std::string time2string(SUMOTime t)
convert SUMOTime to string
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.
std::string getVehicleShapeName(SUMOVehicleShape id)
Returns the class name of the shape class given by its id.
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
const int VEHPARS_COLOR_SET
@ GIVEN
The position is given.
DepartDefinition
Possible ways to depart.
@ DEPART_DEF_MAX
Tag for the last element in the enum for safe int casting.
@ SUMO_TAG_BUS_STOP
A bus stop.
@ SUMO_TAG_PARKING_AREA
A parking area.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
#define LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(CLASS)
static const double INVALID_OFFSET
a value to signify offsets outside the range of [0, Line.length()]
static double naviDegree(const double angle)
static MSDispatch * getDispatchAlgorithm()
A dispatch algorithm that services customers in reservation order and always sends the closest availa...
std::string getReservationID(Reservation *res)
An algorithm that performs distpach for a taxi fleet.
std::vector< Reservation * > getReservations()
retrieve all reservations
A road/street connecting two junctions.
bool isWalkingArea() const
return whether this edge is walking area
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.
bool isNormal() const
return whether this edge is an internal edge
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
const MSJunction * getFromJunction() const
double getLength() const
return the length of the 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....
const MSJunction * getToJunction() const
static double gLateralResolution
The base class for an intersection.
Representation of a lane in the micro simulation.
MSEdge & getEdge() const
Returns the lane's edge.
const PositionVector & getShape() const
Returns this lane's shape.
double interpolateLanePosToGeometryPos(double lanePos) const
double getWidth() const
Returns the lane's width.
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
MSStoppingPlace * getStoppingPlace(const std::string &id, const SumoXMLTag category) const
Returns the named stopping place of the given category.
MSPedestrianRouter & getPedestrianRouter(const int rngIndex, const MSEdgeVector &prohibited=MSEdgeVector()) const
virtual MSTransportableControl & getPersonControl()
Returns the person control.
void reroute(ConstMSEdgeVector &newEdges, double departPos, int firstIndex, int nextIndex)
set new walk and replace the stages with relative indices in the interval [firstIndex,...
const std::set< std::string > & getLines() const
SUMOTime getIntendedDepart() const
std::string getIntendedVehicleID() const
std::string getVehicleType() const
virtual ConstMSEdgeVector getEdges() const
the edges of the current stage
virtual double getArrivalPos() const
SUMOTime getDeparted() const
get departure time of stage
virtual std::string getStageDescription(const bool isPerson) const =0
return (brief) string representation of the current stage
MSStoppingPlace * getDestinationStop() const
returns the destination stop (if any)
SUMOTime getArrived() const
get arrival time of stage
MSStageType getStageType() const
virtual double getDistance() const =0
get travel distance in this stage
ConstMSEdgeVector getEdges() const
the edges of the current stage
const std::vector< const MSEdge * >::iterator getRouteStep() const
const std::vector< const MSEdge * > & getRoute() const
A lane area vehicles can halt at.
double getEndLanePosition() const
Returns the end position of this stop.
std::map< std::string, MSTransportable * >::const_iterator constVehIt
Definition of the internal transportables map iterator.
constVehIt loadedBegin() const
Returns the begin of the internal transportables map.
void forceDeparture()
register forced (traci) departure
int size() const
Returns the number of known transportables.
virtual MSTransportable * buildPerson(const SUMOVehicleParameter *pars, MSVehicleType *vtype, MSTransportable::MSTransportablePlan *plan, std::mt19937 *rng) const
Builds a new person.
constVehIt loadedEnd() const
Returns the end of the internal transportables map.
bool add(MSTransportable *transportable)
Adds a single transportable, returns false if an id clash occurred.
virtual double getEdgePos() const
Return the position on the edge.
SUMOVehicleClass getVClass() const
Returns the object's access class.
const MSEdge * getArrivalEdge() const
returns the final arrival edge
std::string getCurrentStageDescription() const
Returns the current stage description as a string.
MSStageType getStageType(int next) const
the stage type for the nth next stage
int getNumRemainingStages() const
Return the number of remaining stages (including the current)
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
const MSVehicleType & getVehicleType() const
Returns the object's "vehicle" type.
bool isPerson() const
Whether it is a person.
ConstMSEdgeVector getEdges(int next) const
Return the edges of the nth next stage.
Position getPosition(const double) const
Return current position (x/y, cartesian)
double getArrivalPos() const
returns the final arrival pos
void removeStage(int next)
removes the nth next stage
int getNumStages() const
Return the total number stages in this persons plan.
MSStageType getCurrentStageType() const
the current stage type of the transportable
const MSEdge * getEdge() const
Returns the current edge.
MSStage * getCurrentStage() const
Return the current stage.
MSStage * getNextStage(int next) const
Return the current stage.
void appendStage(MSStage *stage, int next=-1)
Appends the given stage to the current plan.
std::vector< MSStage * > MSTransportablePlan
the structure holding the plan of a transportable
MSVehicleType * getVType(const std::string &id=DEFAULT_VTYPE_ID, std::mt19937 *rng=nullptr)
Returns the named vehicle type or a sample from the named distribution.
The car-following model and parameter.
double getWidth() const
Get the width which vehicles of this class shall have when being drawn.
double getMaxSpeed() const
Get vehicle's maximum speed [m/s].
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.
double compute(const E *from, const E *to, double departPos, double arrivalPos, double speed, SUMOTime msTime, const N *onlyNode, std::vector< const E * > &into, bool allEdges=false)
Builds the route between the given edges using the minimum effort at the given time The definition of...
C++ TraCI client API implementation.
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
double angleTo2D(const Position &other) const
returns the angle in the plane of the vector pointing from here to the other 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 ammount
double slopeDegreeAtOffset(double pos) const
Returns the slope at the given length.
unsigned char red() const
Returns the red-amount of the color.
unsigned char alpha() const
Returns the alpha-amount of the color.
unsigned char green() const
Returns the green-amount of the color.
unsigned char blue() const
Returns the blue-amount of the color.
void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
assigns new values
Representation of a vehicle.
Structure representing possible vehicle parameter.
int parametersSet
Information for the router which parameter were set, TraCI may modify this (when changing color)
double departPos
(optional) The position the vehicle shall depart from
RGBColor color
The vehicle's color, TraCI may change this.
std::string id
The vehicle's id.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
static SUMOTime processActionStepLength(double given)
Checks and converts given value for the action step length from seconds to miliseconds assuring it be...
static StringBijection< LateralAlignment > LateralAlignments
lateral alignments
std::vector< std::string > getVector()
return vector of strings
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 MSPerson * getPerson(const std::string &id)
static void setRemoteControlled(MSVehicle *v, Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, ConstMSEdgeVector route, SUMOTime t)
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, bool setLateralPos, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset, ConstMSEdgeVector &edges)
TRACI_CONST double INVALID_DOUBLE_VALUE
TRACI_CONST int TRACI_ID_LIST
TRACI_CONST int VAR_VEHICLE
TRACI_CONST int VAR_WAITING_TIME
TRACI_CONST int VAR_ROAD_ID
TRACI_CONST int VAR_TAXI_RESERVATIONS
TRACI_CONST int VAR_ANGLE
TRACI_CONST int VAR_COLOR
TRACI_CONST int VAR_POSITION
TRACI_CONST int STAGE_WAITING
TRACI_CONST int VAR_SLOPE
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
TRACI_CONST int VAR_LANEPOSITION
TRACI_CONST int VAR_LANE_ID
TRACI_CONST int STAGE_WALKING
TRACI_CONST int VAR_POSITION3D
TRACI_CONST int VAR_SPEED
TRACI_CONST int VAR_NEXT_EDGE
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
TRACI_CONST int STAGE_DRIVING
TRACI_CONST int VAR_STAGES_REMAINING