 |
Eclipse SUMO - Simulation of Urban MObility
|
Go to the documentation of this file.
50 #define DEBUG_COND (isSelected())
58 std::set<std::string> MSBaseVehicle::myShallTraceMoveReminders;
69 throw ProcessError(
"getPreviousSpeed() is not available for non-MSVehicles.");
78 myCurrEdge(route->begin()),
79 myChosenSpeedFactor(speedFactor),
81 myPersonDevice(nullptr),
82 myContainerDevice(nullptr),
83 myDeparture(NOT_YET_DEPARTED),
88 myNumericalID(myCurrentNumericalIndex++)
90 , myTraceMoveReminders(myShallTraceMoveReminders.count(pars->id) > 0)
101 msg =
"Vehicle '" + pars->
id +
"' has no valid route. " + msg;
179 if (source ==
nullptr) {
183 if (sink ==
nullptr) {
190 double firstPos = -1;
193 if (stops.size() > 0) {
196 const bool skipFirst = stops.front() == source && sourcePos < firstPos;
197 const bool skipLast = stops.back() == sink &&
myArrivalPos > lastPos;
201 <<
" source=" << source->
getID() <<
" sourcePos=" << sourcePos <<
" firstPos=" << firstPos <<
" arrivalPos=" <<
myArrivalPos <<
" lastPos=" << lastPos
205 if (stops.size() == 1 && (skipFirst || skipLast)) {
209 stops.erase(stops.begin());
212 stops.erase(stops.end() - 1);
221 if (viaEdge == source || viaEdge == sink) {
224 assert(viaEdge != 0);
226 throw ProcessError(
"Vehicle '" +
getID() +
"' is not allowed on any lane of via edge '" + viaEdge->
getID() +
"'.");
228 stops.push_back(viaEdge);
236 if (into.size() > 0) {
238 edges.insert(edges.end(), into.begin(), into.end());
239 if ((*s)->isTazConnector()) {
240 source = into.back();
246 std::string error =
"Vehicle '" +
getID() +
"' has no valid route from edge '" + source->
getID() +
"' to stop edge '" + (*s)->getID() +
"'.";
251 edges.push_back(source);
256 router.
compute(source, sink,
this, t, edges, silent);
257 if (edges.empty() && silent) {
260 if (!edges.empty() && edges.front()->isTazConnector()) {
261 edges.erase(edges.begin());
263 if (!edges.empty() && edges.back()->isTazConnector()) {
267 const double previousCost = onInit ? routeCost : router.
recomputeCosts(oldEdgesRemaining,
this, t);
268 const double savings = previousCost - routeCost;
298 std::string
id =
getID();
302 if (
myRoute->
getID().find(
"!var#") != std::string::npos) {
307 int oldSize = (int)edges.size();
310 if (origin != *
myCurrEdge && edges.front() == origin) {
312 oldSize = (int)edges.size();
338 if (!
replaceRoute(newRoute, info, onInit, (
int)edges.
size() - oldSize,
false, removeStops)) {
405 if (route ==
nullptr) {
408 start = route->
begin();
414 msg =
"No connection between edge '" + (*e)->getID() +
"' and edge '" + (*(e + 1))->getID() +
"'.";
421 if ((*e)->prohibits(
this)) {
422 msg =
"Edge '" + (*e)->getID() +
"' prohibits.";
433 if (myTraceMoveReminders) {
434 traceMoveReminder(
"add", rem, 0,
true);
444 if (r->first == rem) {
446 if (myTraceMoveReminders) {
447 traceMoveReminder(
"remove", rem, 0,
false);
460 if (rem->first->notifyEnter(*
this, reason, enteredLane)) {
462 if (myTraceMoveReminders) {
463 traceMoveReminder(
"notifyEnter", rem->first, rem->second,
true);
469 if (myTraceMoveReminders) {
470 traceMoveReminder(
"notifyEnter", rem->first, rem->second,
false);
485 const double lastLaneLength = lanes[0]->getLength();
489 WRITE_WARNING(
"Vehicle '" +
getID() +
"' will not be able to arrive at the given position!");
514 for (std::vector<MSLane*>::const_iterator l = lanes.begin(); l != lanes.end(); ++l) {
519 WRITE_WARNING(
"Vehicle '" +
getID() +
"' will not be able to arrive with the given speed!");
534 if (
typeid(*dev) == type) {
561 std::string errorMsg;
565 if (errorMsg !=
"") {
571 std::string errorMsg;
572 if (!
addStop(*i, errorMsg, untilOffset) && !ignoreStopErrors) {
575 if (errorMsg !=
"") {
588 std::vector<std::string>
590 std::vector<std::string> ret;
591 const std::vector<MSTransportable*>& persons =
getPersons();
592 for (std::vector<MSTransportable*>::const_iterator it_p = persons.begin(); it_p != persons.end(); ++it_p) {
593 ret.push_back((*it_p)->getID());
617 const std::vector<MSTransportable*>&
627 const std::vector<MSTransportable*>&
641 if (dev->deviceName() == deviceName) {
652 if (deviceName ==
"rerouting") {
658 assert(routingDevice != 0);
662 throw InvalidArgument(
"Creating device of type '" + deviceName +
"' is not supported");
671 if (dev->deviceName() == deviceName) {
672 return dev->getParameter(key);
675 throw InvalidArgument(
"No device of type '" + deviceName +
"' exists");
682 if (dev->deviceName() == deviceName) {
683 dev->setParameter(key, value);
687 throw InvalidArgument(
"No device of type '" + deviceName +
"' exists");
693 assert(type !=
nullptr);
714 if (lane ==
nullptr) {
723 MSBaseVehicle::initMoveReminderOutput(
const OptionsCont& oc) {
724 if (oc.
isSet(
"movereminder-output.vehicles")) {
725 const std::vector<std::string> vehicles = oc.
getStringVector(
"movereminder-output.vehicles");
726 myShallTraceMoveReminders.insert(vehicles.begin(), vehicles.end());
732 MSBaseVehicle::traceMoveReminder(
const std::string& type,
MSMoveReminder* rem,
double pos,
bool keep)
const {
static void checkDist(const std::string &id)
Checks the distribution whether it is permanent and deletes it if not.
void vehicleDeparted(const SUMOVehicle &v)
Informs this control about a vehicle's departure.
The car-following model and parameter.
virtual bool compute(const E *from, const E *to, const V *const vehicle, SUMOTime msTime, std::vector< const E * > &into, bool silent=false)=0
Builds the route between the given edges using the minimum effort at the given time The definition of...
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
int personNumber
The static number of persons in the vehicle when it departs (not including boarding persons)
static const RGBColor DEFAULT_COLOR
The default color (for vehicle types and vehicles)
const std::vector< MSTransportable * > & getTransportables() const
Returns the list of transportables using this vehicle.
int containerNumber
The static number of containers in the vehicle when it departs.
void release() const
deletes the route if there are no further references to it
MSVehicleType * buildSingularType(const std::string &id) const
Duplicates the microsim vehicle type giving the newly created type the given id, marking it as vehicl...
virtual SUMOTime getWaitingTime() const =0
The arrival position is given.
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
const std::string & getID() const
Returns the name of the vehicle type.
bool wasSet(int what) const
Returns whether the given parameter was set.
const std::string & getDescription() const
bool hasDeparted() const
Returns whether this vehicle has already departed.
int parametersSet
Information for the router which parameter were set, TraCI may modify this (whe changing color)
A device that performs vehicle rerouting based on current edge speeds.
#define WRITE_WARNING(msg)
int getContainerNumber() const
Returns the number of containers.
Representation of a lane in the micro simulation.
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...
ArrivalSpeedDefinition arrivalSpeedProcedure
Information how the vehicle's end speed shall be chosen.
virtual ~MSBaseVehicle()
Destructor.
MSBaseVehicle(SUMOVehicleParameter *pars, const MSRoute *route, MSVehicleType *type, const double speedFactor)
Constructor.
bool isVehicleSpecific() const
Returns whether this type belongs to a single vehicle only (was modified)
The arrival lane is given.
void removeVType(const MSVehicleType *vehType)
Static storage of an output device and its base (abstract) implementation.
The arrival position is chosen randomly.
SUMOTime myDeparture
The real departure time.
MSRouteIterator end() const
Returns the end of the list of edges to pass.
ConstMSEdgeVector::const_iterator MSRouteIterator
double myChosenSpeedFactor
A precomputed factor by which the driver wants to be faster than the speed limit.
std::vector< MSVehicleDevice * > myDevices
The devices this vehicle has.
const int VEHPARS_FORCE_REROUTE
SUMOTime repetitionOffset
The time offset between vehicle reinsertions.
int getNumberReroutes() const
Returns the number of new routes this vehicle got.
MSInsertionControl & getInsertionControl()
Returns the insertion control.
const MSEdge * getLastEdge() const
returns the destination edge
const MSRoute * myRoute
This vehicle's route.
std::vector< const MSEdge * > ConstMSEdgeVector
bool hasValidRoute(std::string &msg, const MSRoute *route=0) const
Validates the current or given route.
void replaceParameter(const SUMOVehicleParameter *newParameter)
replace the vehicle parameter (deleting the old one)
static OptionsCont & getOptions()
Retrieves the options.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
int myArrivalLane
The destination lane where the vehicle stops.
void setCosts(double costs)
Sets the costs of the route.
const ConstMSEdgeVector & getEdges() const
virtual const MSEdge * getRerouteOrigin() const
Returns the starting point for reroutes (usually the current edge)
Structure representing possible vehicle parameter.
long long int NumericalID
const RGBColor & getColor() const
Returns the color.
double getMaxSpeed() const
Returns the maximum speed.
void calculateArrivalParams()
(Re-)Calculates the arrival position and lane from the vehicle parameters
Something on a lane to be noticed about vehicle movement.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
virtual const ConstMSEdgeVector getStopEdges(double &firstPos, double &lastPos) const =0
Returns the list of still pending stop edges.
const SUMOVehicleParameter * myParameter
This vehicle's parameter.
double myArrivalPos
The position on the destination lane where the vehicle stops.
const MSEdge * getEdge() const
Returns the edge the vehicle is currently at.
entry for an alternative parking zone
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
int size() const
Returns the number of edges to pass.
void createDevice(const std::string &deviceName)
create device of the given type
static double rand(std::mt19937 *rng=0)
Returns a random real number in [0, 1)
virtual void saveState(OutputDevice &out)
Saves the (common) state of a vehicle.
MSDevice_Transportable * myPersonDevice
The passengers this vehicle may have.
std::string getDeviceParameter(const std::string &deviceName, const std::string &key) const
try to retrieve the given parameter from any of the vehicles devices, raise InvalidArgument if no dev...
const std::vector< MSTransportable * > & getContainers() const
retrieve riding containers
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
double getImpatience() const
Returns this vehicles impatience.
bool computeLooped(const E *from, const E *to, const V *const vehicle, SUMOTime msTime, std::vector< const E * > &into, bool silent=false)
Builds the route between the given edges using the minimum effort at the given time if from == to,...
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
virtual void addPerson(MSTransportable *person)
Adds a person to this vehicle.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
bool isTazConnector() const
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....
virtual MSLane * getLane() const =0
Returns the lane the vehicle is on.
std::string id
The vehicle's id.
virtual bool replaceRoute(const MSRoute *route, const std::string &info, bool onInit=false, int offset=0, bool addStops=true, bool removeStops=true)=0
Replaces the current route by the given one.
double myDepartPos
The real depart position.
double arrivalPos
(optional) The position the vehicle shall arrive on
std::string fromTaz
The vehicle's origin zone (district)
void descheduleDeparture(const SUMOVehicle *veh)
stops trying to emit the given vehicle (and delete it)
Abstract in-vehicle / in-person device.
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
int repetitionsDone
The number of times the vehicle was already inserted.
static MSDevice_Transportable * buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into, const bool isContainer)
Build devices for the given vehicle, if needed.
A storage for options typed value containers)
A road/street connecting two junctions.
The departure is person triggered.
virtual double getAcceleration() const
Returns the vehicle's acceleration.
std::string routeid
The vehicle's route id.
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
The vehicle has departed (was inserted into the network)
const std::vector< MSLane * > * allowedLanes(const MSEdge &destination, SUMOVehicleClass vclass=SVC_IGNORING) const
Get the allowed lanes to reach the destination-edge.
void removeTransportable(MSTransportable *transportable)
Remove a passenger (TraCI)
trigger: the time of the step
bool replaceRouteEdges(ConstMSEdgeVector &edges, double cost, double savings, const std::string &info, bool onInit=false, bool check=false, bool removeStops=true)
Replaces the current route by the given edges.
virtual double getSlope() const
Returns the slope of the road at vehicle's position.
void write(OutputDevice &dev, const OptionsCont &oc, const SumoXMLTag tag=SUMO_TAG_VEHICLE, const std::string &typeID="") const
Writes the parameters as a beginning element.
bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Computes a new route on vehicle insertion.
void addStops(const bool ignoreStopErrors)
Adds stops to the built vehicle.
static SUMOTime gTimeToImpatience
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
std::vector< std::string > getPersonIDList() const
Returns the list of persons.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
MSRouteIterator myCurrEdge
Iterator to current route-edge.
void addTransportable(MSTransportable *transportable)
Add a passenger.
std::vector< std::string > via
List of the via-edges the vehicle must visit.
static std::vector< MSTransportable * > myEmptyTransportableVector
bool hasDevice(const std::string &deviceName) const
check whether the vehicle is equiped with a device of the given type
int size() const
Return the number of passengers / containers.
double recomputeCosts(const std::vector< const E * > &edges, const V *const v, SUMOTime msTime, double *lengthp=nullptr) const
const std::vector< MSTransportable * > & getPersons() const
retrieve riding persons
virtual bool addStop(const SUMOVehicleParameter::Stop &stopPar, std::string &errorMsg, SUMOTime untilOffset=0, bool collision=false, ConstMSEdgeVector::const_iterator *searchStart=0)=0
Adds a stop.
const MSEdge * succEdge(int nSuccs) const
Returns the nSuccs'th successor of edge the vehicle is currently at.
SUMOVehicleClass getVClass() const
Returns the vehicle's access class.
MSVehicleType & getSingularType()
Replaces the current vehicle type with a new one used by this vehicle only.
int getPersonNumber() const
Returns the number of persons.
const std::vector< SUMOVehicleParameter::Stop > & getStops() const
Returns the stops.
const std::string & getID() const
Returns the name of the vehicle.
virtual bool hasArrived() const
Returns whether this vehicle has already arived (by default this is true if the vehicle has reached i...
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
void addReminder(MSMoveReminder *rem)
Adds a MoveReminder dynamically.
double getMaxSpeed() const
Get vehicle's maximum speed [m/s].
MSRouteIterator begin() const
Returns the begin of the list of edges to pass.
void onDepart()
Called when the vehicle is inserted into the network.
double getPreviousSpeed() const
Returns the vehicle's previous speed.
static bool dictionary(const std::string &id, const MSRoute *route)
Adds a route to the dictionary.
static NumericalID myCurrentNumericalIndex
std::mt19937 * getRNG() const
return the associated RNG
void setSavings(double savings)
Sets the savings of the route.
std::string toTaz
The vehicle's destination zone (district)
void removeReminder(MSMoveReminder *rem)
Removes a MoveReminder dynamically.
void addReference() const
increments the reference counter for the route
void removeTransportable(MSTransportable *t)
removes a person or container
virtual double getPositionOnLane() const =0
Get the vehicle's position along the lane.
void reroute(SUMOTime t, const std::string &info, SUMOAbstractRouter< MSEdge, SUMOVehicle > &router, const bool onInit=false, const bool withTaz=false, const bool silent=false)
Performs a rerouting using the given router.
MSVehicleType * myType
This vehicle's type.
SUMOVehicleClass getVehicleClass() const
Get this vehicle type's vehicle class.
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
std::vector< Stop > stops
List of the stops the vehicle will make, TraCI may add entries here.
MSVehicleDevice * getDevice(const std::type_info &type) const
Returns a device of the given type if it exists or 0.
static const SUMOTime NOT_YET_DEPARTED
MSDevice_Transportable * myContainerDevice
The containers this vehicle may have.
MoveReminderCont myMoveReminders
Currently relevant move reminders.
virtual void activateReminders(const MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
"Activates" all current move reminder
const std::string & getID() const
Returns the id.
Notification
Definition of a vehicle state.
static OutputDevice & getDeviceByOption(const std::string &name)
Returns the device described by the option.
std::vector< std::string > getStringVector(const std::string &name) const
Returns the list of string-vector-value of the named option (only for Option_String)
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
double arrivalSpeed
(optional) The final speed of the vehicle (not used yet)
void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
std::mt19937 * getRNG() const
Abstract in-vehicle device.
virtual void addContainer(MSTransportable *container)
Adds a container to this vehicle.