39 #define FAR_AWAY 1000.0 55 std::vector<std::string>
58 std::vector<std::string> ids;
61 ids.push_back(i->first);
64 return std::move(ids);
105 Person::getColor(
const std::string& personID) {
134 std::vector<std::string>
138 throw TraCIException(
"The stage index must be lower than the number of remaining stages.");
141 throw TraCIException(
"The negative stage index must refer to a valid previous stage.");
143 std::vector<std::string> edgeIDs;
144 for (
auto& e : p->
getEdges(nextStageIndex)) {
145 edgeIDs.push_back(e->getID());
155 throw TraCIException(
"The stage index must be lower than the number of remaining stages.");
158 throw TraCIException(
"The negative stage index must refer to a valid previous stage.");
173 if (veh ==
nullptr) {
188 Person::getEmissionClass(
const std::string& personID) {
194 Person::getShapeClass(
const std::string& personID) {
200 Person::getLength(
const std::string& personID) {
206 Person::getSpeedFactor(
const std::string& personID) {
212 Person::getAccel(
const std::string& personID) {
218 Person::getDecel(
const std::string& personID) {
223 double Person::getEmergencyDecel(
const std::string& personID) {
228 double Person::getApparentDecel(
const std::string& personID) {
233 double Person::getActionStepLength(
const std::string& personID) {
239 Person::getTau(
const std::string& personID) {
245 Person::getImperfection(
const std::string& personID) {
251 Person::getSpeedDeviation(
const std::string& personID) {
257 Person::getVehicleClass(
const std::string& personID) {
263 Person::getMinGap(
const std::string& personID) {
269 Person::getMinGapLat(
const std::string& personID) {
275 Person::getMaxSpeed(
const std::string& personID) {
281 Person::getMaxSpeedLat(
const std::string& personID) {
287 Person::getLateralAlignment(
const std::string& personID) {
288 return toString(
getPerson(personID)->getVehicleType().getPreferredLateralAlignment());
293 Person::getWidth(
const std::string& personID) {
299 Person::getHeight(
const std::string& personID) {
315 if (vehicleType ==
nullptr) {
316 throw TraCIException(
"The vehicle type '" + typeID +
"' is not known.");
323 Person::add(
const std::string& personID,
const std::string& edgeID,
double pos,
double departInSecs,
const std::string typeID) {
332 throw TraCIException(
"The person " + personID +
" to add already exists.");
337 vehicleParams.
id = personID;
341 throw TraCIException(
"Invalid type '" + typeID +
"' for person '" + personID +
"'");
346 throw TraCIException(
"Invalid edge '" + edgeID +
"' for person: '" + personID +
"'");
349 if (departInSecs < 0.) {
350 const int proc = (int) - departInSecs;
359 +
"' is in the past; using current time " +
time2string(vehicleParams.
depart) +
" instead.");
361 vehicleParams.
depart = depart;
393 throw TraCIException(
"Invalid edge '" + toEdge +
"' for person: '" + personID +
"'");
395 if (lines.size() == 0) {
396 return throw TraCIException(
"Empty lines parameter for person: '" + personID +
"'");
402 throw TraCIException(
"Invalid stopping place id '" + stopID +
"' for person: '" + personID +
"'");
413 throw TraCIException(
"Duration for person: '" + personID +
"' must not be negative");
419 throw TraCIException(
"Invalid stopping place id '" + stopID +
"' for person: '" + personID +
"'");
427 Person::appendWalkingStage(
const std::string& personID,
const std::vector<std::string>& edgeIDs,
double arrivalPos,
double duration,
double speed,
const std::string& stopID) {
436 throw TraCIException(
"Empty edge list for walking stage of person '" + personID +
"'.");
438 if (fabs(arrivalPos) > edges.back()->getLength()) {
439 throw TraCIException(
"Invalid arrivalPos for walking stage of person '" + personID +
"'.");
441 if (arrivalPos < 0) {
442 arrivalPos += edges.back()->getLength();
451 throw TraCIException(
"Invalid stopping place id '" + stopID +
"' for person: '" + personID +
"'");
462 throw TraCIException(
"The stage index must be lower than the number of remaining stages.");
464 if (nextStageIndex < 0) {
475 throw TraCIException(
"Person '" + personID +
"' has no remaining stages.");
485 throw TraCIException(
"Person '" + personID +
"' cannot reroute after the current stop.");
491 int nextIndex = firstIndex + 1;
503 if (newEdges.empty()) {
504 throw TraCIException(
"Could not find new route for person '" + personID +
"'.");
507 assert(!oldEdges.empty());
509 oldEdges.erase(oldEdges.begin());
512 if (newEdges == oldEdges && (firstIndex + 1 == nextIndex)) {
515 if (newEdges.front() != from) {
517 newEdges.insert(newEdges.begin(), from);
519 p->
reroute(newEdges, departPos, firstIndex, nextIndex);
524 Person::moveTo(
const std::string& personID,
const std::string& edgeID,
double ) {
549 Person::moveToXY(
const std::string& personID,
const std::string& edgeID,
const double x,
const double y,
double angle,
const int keepRouteFlag) {
551 bool keepRoute = (keepRouteFlag == 1);
552 bool mayLeaveNetwork = (keepRouteFlag == 2);
555 const double origAngle = angle;
560 while (angle >= 360.) {
570 std::cout <<
" want pos:" << pos <<
" edgeID:" << edgeID <<
" origAngle:" << origAngle <<
" angle:" << angle <<
" keepRoute:" << keepRoute << std::endl;
576 double lanePosLat = 0;
577 double bestDistance = std::numeric_limits<double>::max();
580 double maxRouteDistance = 100;
603 bestDistance, &lane, lanePos, routeOffset);
607 speed, ev, routeIndex, currentLane, p->
getEdgePos(),
true,
608 bestDistance, &lane, lanePos, routeOffset, edges);
610 if ((found && bestDistance <= maxRouteDistance) || mayLeaveNetwork) {
615 lanePosLat = perpDist;
616 if (!mayLeaveNetwork) {
624 WRITE_WARNING(
"Could not determine position on lane '" + lane->
getID() +
" at lateral position " +
toString(-lanePosLat) +
".");
628 lanePosLat = -lanePosLat;
636 assert((found && lane != 0) || (!found && lane == 0));
638 if (lane !=
nullptr) {
654 if (lane ==
nullptr) {
655 throw TraCIException(
"Could not map person '" + personID +
"' no road found within " +
toString(maxRouteDistance) +
"m.");
657 throw TraCIException(
"Could not map person '" + personID +
"' distance to road is " +
toString(bestDistance) +
".");
672 Person::setLength(
const std::string& personID,
double length) {
678 Person::setMaxSpeed(
const std::string& personID,
double speed) {
684 Person::setVehicleClass(
const std::string& personID,
const std::string& clazz) {
690 Person::setShapeClass(
const std::string& personID,
const std::string& clazz) {
696 Person::setEmissionClass(
const std::string& personID,
const std::string& clazz) {
702 Person::setWidth(
const std::string& personID,
double width) {
708 Person::setHeight(
const std::string& personID,
double height) {
714 Person::setMinGap(
const std::string& personID,
double minGap) {
720 Person::setAccel(
const std::string& personID,
double accel) {
726 Person::setDecel(
const std::string& personID,
double decel) {
732 Person::setEmergencyDecel(
const std::string& personID,
double decel) {
738 Person::setApparentDecel(
const std::string& personID,
double decel) {
744 Person::setImperfection(
const std::string& personID,
double imperfection) {
750 Person::setTau(
const std::string& personID,
double tau) {
756 Person::setMinGapLat(
const std::string& personID,
double minGapLat) {
762 Person::setMaxSpeedLat(
const std::string& personID,
double speed) {
768 Person::setLateralAlignment(
const std::string& personID,
const std::string& latAlignment) {
774 Person::setSpeedFactor(
const std::string& personID,
double factor) {
780 Person::setActionStepLength(
const std::string& personID,
double actionStepLength,
bool resetActionOffset) {
786 Person::setColor(
const std::string& personID,
const TraCIColor& c) {
813 std::shared_ptr<VariableWrapper>
839 return wrapper->
wrapColor(objID, variable, getColor(objID));
SUMOVehicleClass getVehicleClassID(const std::string &name)
Returns the class id of the abstract class given by its name.
SUMOVehicle * getVehicle() const
The vehicle associated with this transportable.
double getApparentDecel() const
Get the vehicle type's apparent deceleration [m/s^2] (the one regarded by its followers.
void setMinGap(const double &minGap)
Set a new value for this type's minimum gap.
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
static double gLateralResolution
static void rerouteTraveltime(const std::string &personID)
RGBColor color
The vehicle's color, TraCI may change this.
virtual bool wrapInt(const std::string &objID, const int variable, const int value)=0
static void moveTo(const std::string &personID, const std::string &edgeID, double position)
std::map< std::string, MSTransportable * >::const_iterator constVehIt
Definition of the internal transportables map iterator.
static std::vector< std::string > getEdges(const std::string &personID, int nextStageIndex=0)
double getArrivalPos() const
returns the final arrival pos
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) ...
static void appendWalkingStage(const std::string &personID, const std::vector< std::string > &edgeIDs, double arrivalPos, double duration=-1, double speed=-1, const std::string &stopID="")
const MSEdge * getEdge() const
Returns the current edge.
MSStoppingPlace * getStoppingPlace(const std::string &id, const SumoXMLTag category) const
Returns the named stopping place of the given category.
A lane area vehicles can halt at.
static std::string getParameter(const std::string &routeID, const std::string ¶m)
void setSpeed(double speed)
sets the walking speed (ignored in other stages)
void setTau(double tau)
Set a new value for this type's headway.
static void setType(const std::string &personID, const std::string &typeID)
void setShape(SUMOVehicleShape shape)
Set a new value for this type's shape.
virtual double getEdgePos() const
Return the position on the edge.
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
LIBSUMO_VEHICLE_TYPE_SETTER static LIBSUMO_SUBSCRIPTION_API void storeShape(const std::string &id, PositionVector &shape)
Saves the shape of the requested object in the given container.
unsigned char alpha() const
Returns the alpha-amount of the color.
static TraCIPosition makeTraCIPosition(const Position &position, const bool includeZ=false)
virtual double getImperfection() const
Get the driver's imperfection.
std::vector< double > & getParameter()
Returns the parameters of this distribution.
static double getSpeed(const std::string &personID)
void setDecel(double decel)
Set a new value for this type's deceleration.
static MSPerson * getPerson(const std::string &id)
int parametersSet
Information for the router which parameter were set, TraCI may modify this (whe changing color) ...
std::string time2string(SUMOTime t)
static SUMOTime processActionStepLength(double given)
Checks and converts given value for the action step length from seconds to miliseconds assuring it be...
double angleTo2D(const Position &other) const
returns the angle in the plane of the vector pointing from here to the other position ...
int size() const
Returns the number of known transportables.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
const std::string & getNextEdge() const
return the list of internal edges if this person is walking and the pedestrian model allows it ...
const PositionVector & getShape() const
Returns this lane'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
double getMinGapLat() const
Get the minimum lateral gap that vehicles of this type maintain.
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 rotationAtOffset(double pos) const
Returns the rotation at the given length.
void setApparentDecel(double apparentDecel)
Set a new value for this type's apparent deceleration.
unsigned char blue() const
Returns the blue-amount of the color.
static int getStage(const std::string &personID, int nextStageIndex=0)
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
void setLength(const double &length)
Set a new value for this type's length.
std::vector< const MSEdge * > ConstMSEdgeVector
const std::string & getID() const
Returns the id.
virtual bool wrapString(const std::string &objID, const int variable, const std::string &value)=0
virtual double getSpeed() const
the current speed of the transportable
ConstMSEdgeVector getEdges(int next) const
Return the edges of the nth next stage.
const SUMOVehicleParameter & getParameter() const
void setMaxSpeed(const double &maxSpeed)
Set a new value for this type's maximum speed.
double getLength() const
return the length of the edge
void setImperfection(double imperfection)
Set a new value for this type's imperfection.
Tag for the last element in the enum for safe int casting.
double getWidth() const
Returns the lane's width.
int getNumRemainingStages() const
Return the number of remaining stages (including the current)
#define WRITE_WARNING(msg)
The car-following model and parameter.
static void setSpeed(const std::string &personID, double speed)
std::string getVehicleShapeName(SUMOVehicleShape id)
Returns the class name of the shape class given by its id.
void removeStage(int next)
removes the nth next stage
double getMaxAccel() const
Get the vehicle type's maximum acceleration [m/s^2].
void setMinGapLat(const double &minGapLat)
Set a new value for this type's minimum lataral gap.
static SubscriptionResults mySubscriptionResults
MSVehicleType & getSingularType()
Replaces the current vehicle type with a new one used by this vehicle only.
A road/street connecting two junctions.
#define INVALID_DOUBLE_VALUE
std::vector< MSTransportable::Stage * > MSTransportablePlan
the structure holding the plan of a transportable
virtual ConstMSEdgeVector getEdges() const
the edges of the current stage
static double naviDegree(const double angle)
MSTransportable::Stage * getCurrentStage() const
Return the current stage.
MSTransportable::Stage * getNextStage(int next) const
Return the current stage.
const MSCFModel & getCarFollowModel() const
Returns the vehicle type's car following model definition (const version)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static LIBSUMO_VEHICLE_TYPE_GETTER void add(const std::string &personID, const std::string &edgeID, double pos, double depart=DEPARTFLAG_NOW, const std::string typeID="DEFAULT_PEDTYPE")
void setAccel(double accel)
Set a new value for this type's acceleration.
Representation of a vehicle.
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
static std::string getTypeID(const std::string &personID)
static void appendDrivingStage(const std::string &personID, const std::string &toEdge, const std::string &lines, const std::string &stopID="")
virtual MSTransportableControl & getPersonControl()
Returns the person control.
static double getAngle(const std::string &personID)
A point in 2D or 3D with translation and scaling methods.
void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
assigns new values
ConstMSEdgeVector getEdges() const
the edges of the current stage
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...
double getEmergencyDecel() const
Get the vehicle type's maximal phisically possible deceleration [m/s^2].
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
void setHeight(const double &height)
Set a new value for this type's height.
constVehIt loadedBegin() const
Returns the begin of the internal transportables map.
static std::string getNextEdge(const std::string &personID)
SUMOTime depart
The vehicle's departure time.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
double getArrivalPos() const
static ContextSubscriptionResults myContextSubscriptionResults
double getMaxSpeed() const
Get vehicle's maximum speed [m/s].
static double getWaitingTime(const std::string &personID)
const std::string & getID() const
returns the id of the transportable
static int getRemainingStages(const std::string &personID)
static std::string getVehicle(const std::string &personID)
void setEmissionClass(SUMOEmissionClass eclass)
Set a new value for this type's emission class.
double getMinGap() const
Get the free space in front of vehicles of this class.
static std::string getName(const SUMOEmissionClass c)
Checks whether the string describes a known vehicle class.
double getMaxDecel() const
Get the vehicle type's maximal comfortable deceleration [m/s^2].
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
static const double INVALID_OFFSET
a value to signify offsets outside the range of [0, Line.length()]
static void removeStage(const std::string &personID, int nextStageIndex)
const int VEHPARS_COLOR_SET
const ConstMSEdgeVector & getRoute() const
void setSpeedFactor(const double &factor)
Set a new value for this type's speed factor.
MSPedestrianRouter & getPedestrianRouter(const MSEdgeVector &prohibited=MSEdgeVector()) const
static std::vector< std::string > getIDList()
void move2side(double amount)
move position vector to side using certain ammount
void setActionStepLength(const SUMOTime actionStepLength, bool resetActionOffset)
Set a new value for this type's action step length.
virtual bool wrapDouble(const std::string &objID, const int variable, const double value)=0
MSVehicleType * getVType(const std::string &id=DEFAULT_VTYPE_ID, std::mt19937 *rng=0)
Returns the named vehicle type or a sample from the named distribution.
static void setParameter(const std::string &personID, const std::string &key, const std::string &value)
virtual bool wrapPosition(const std::string &objID, const int variable, const TraCIPosition &value)=0
double getMaxSpeedLat() const
Get vehicle's maximum lateral speed [m/s].
static void setRemoteControlled(MSVehicle *v, Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, ConstMSEdgeVector route, SUMOTime t)
const std::vector< const MSEdge * >::iterator getRouteStep() const
void appendStage(Stage *stage, int next=-1)
Appends the given stage to the current plan.
double getWidth() const
Get the width which vehicles of this class shall have when being drawn.
double getHeight() const
Get the height which vehicles of this class shall have when being drawn.
std::string getCurrentStageDescription() const
Returns the current stage description as a string.
static TraCIPosition getPosition(const std::string &personID, const bool includeZ=false)
static StringBijection< LateralAlignment > LateralAlignments
lateral alignments
double departPos
(optional) The position the vehicle shall depart from
Structure representing possible vehicle parameter.
void setEmergencyDecel(double emergencyDecel)
Set a new value for this type's emergency deceleration.
static SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc=SVC_IGNORING)
Checks whether the string describes a known vehicle class.
virtual Position getPosition() const
Return the Network coordinate of the transportable.
void reroute(ConstMSEdgeVector &newEdges, double departPos, int firstIndex, int nextIndex)
set new walk and replace the stages with relative indices in the interval [firstIndex, nextIndex[
virtual bool wrapColor(const std::string &objID, const int variable, const TraCIColor &value)=0
virtual double getHeadwayTime() const
Get the driver's desired headway [s].
unsigned char green() const
Returns the green-amount of the color.
bool add(MSTransportable *transportable)
Adds a single transportable, returns false if an id clash occurred.
const std::string & getID() const
Returns the name of the vehicle type.
const std::string getParameter(const std::string &key, const std::string &defaultValue="") const
Returns the value for a given key.
void setWidth(const double &width)
Set a new value for this type's width.
double getActionStepLengthSecs() const
Returns this type's default action step length in seconds.
static void appendWaitingStage(const std::string &personID, double duration, const std::string &description="waiting", const std::string &stopID="")
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
constVehIt loadedEnd() const
Returns the end of the internal transportables map.
StageType getStageType(int next) const
the stage type for the nth next stage
void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
double getLength() const
Get vehicle's length [m].
static bool handleVariable(const std::string &objID, const int variable, VariableWrapper *wrapper)
void setVClass(SUMOVehicleClass vclass)
Set a new value for this type's vehicle class.
MSTransportable * get(const std::string &id) const
Returns the named transportable, if existing.
const MSEdge * getArrivalEdge() const
returns the final arrival edge
unsigned char red() const
Returns the red-amount of the color.
const MSVehicleType & getVehicleType() const
virtual double getWaitingSeconds() const
the time this transportable spent waiting in seconds
SUMOVehicleShape getVehicleShapeID(const std::string &name)
Returns the class id of the shape class given by its name.
static void moveToXY(const std::string &personID, const std::string &edgeID, const double x, const double y, double angle, const int keepRouteFlag)
static std::shared_ptr< VariableWrapper > makeWrapper()
virtual MSTransportable * buildPerson(const SUMOVehicleParameter *pars, MSVehicleType *vtype, MSTransportable::MSTransportablePlan *plan, std::mt19937 *rng) const
Builds a new person.
virtual bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)=0
void setMaxSpeedLat(const double &maxSpeedLat)
Set a new value for this type's maximum lateral speed.
void setPreferredLateralAlignment(LateralAlignment latAlignment)
Set vehicle's preferred lateral alignment.
static bool moveToXYMap_matchingRoutePosition(const Position &pos, const std::string &origID, const ConstMSEdgeVector ¤tRoute, int routeIndex, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset)
#define VAR_STAGES_REMAINING
static std::string getRoadID(const std::string &personID)
static double getLanePosition(const std::string &personID)
Representation of a lane in the micro simulation.
const Distribution_Parameterized & getSpeedFactor() const
Returns this type's speed factor.
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.
virtual const std::string & getID() const =0
Get the vehicle's ID.
DepartDefinition
Possible ways to depart.
int getNumStages() const
Return the total number stages in this persons plan.
std::string id
The vehicle's id.
StageType getCurrentStageType() const
the current stage type of the transportable
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, MSLane *currentLane, double currentLanePos, bool onRoad, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset, ConstMSEdgeVector &edges)