Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/vehicle/SUMOVehicle.h
194309 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file SUMOVehicle.h
15
/// @author Michael Behrisch
16
/// @author Daniel Krajzewicz
17
/// @author Jakob Erdmann
18
/// @date Tue, 17 Feb 2009
19
///
20
// Abstract base class for vehicle representations
21
/****************************************************************************/
22
#pragma once
23
#include <config.h>
24
25
#include <vector>
26
#include <typeinfo>
27
#include <utils/common/SUMOTime.h>
28
#include <utils/common/Named.h>
29
#include <utils/router/SUMOAbstractRouter.h>
30
#include <utils/vehicle/SUMOVehicleParameter.h>
31
#include <utils/vehicle/SUMOTrafficObject.h>
32
#include <utils/iodevices/OutputDevice.h>
33
34
35
// ===========================================================================
36
// class declarations
37
// ===========================================================================
38
class MSRoute;
39
class MSEdge;
40
class MSLane;
41
class MSPerson;
42
class MSStop;
43
class MSTransportable;
44
class MSParkingArea;
45
class MSChargingStation;
46
class MSStoppingPlace;
47
class MSVehicleDevice;
48
class SUMOSAXAttributes;
49
class EnergyParams;
50
class PositionVector;
51
class MFXOptionalLock;
52
53
typedef std::vector<const MSEdge*> ConstMSEdgeVector;
54
55
56
// ===========================================================================
57
// class definitions
58
// ===========================================================================
59
/**
60
* @class SUMOVehicle
61
* @brief Representation of a vehicle
62
*/
63
class SUMOVehicle : public SUMOTrafficObject {
64
public:
65
66
/// @brief Constructor
67
SUMOVehicle(const std::string& id) : SUMOTrafficObject(id) {}
68
69
/// @brief Destructor
70
virtual ~SUMOVehicle() {}
71
72
/** @brief Get the vehicle's lateral position on the lane
73
* @return The lateral position of the vehicle (in m relative to the
74
* centerline of the lane)
75
*/
76
virtual double getLateralPositionOnLane() const = 0;
77
78
/** @brief Get the vehicle's angle
79
* @return The angle of the vehicle (in degree)
80
*/
81
virtual double getAngle() const = 0;
82
83
/// Returns the current route
84
virtual const MSRoute& getRoute() const = 0;
85
86
/// Returns the current route
87
virtual ConstMSRoutePtr getRoutePtr() const = 0;
88
89
/** @brief Returns the nSuccs'th successor of edge the vehicle is currently at
90
*
91
* If the rest of the route (counted from the current edge) than nSuccs,
92
* 0 is returned.
93
* @param[in] nSuccs The number of edge to look forward
94
* @return The nSuccs'th following edge in the vehicle's route
95
*/
96
virtual const MSEdge* succEdge(int nSuccs) const = 0;
97
98
/** @brief Returns the starting point for reroutes (usually the current edge)
99
*
100
* This differs from myCurrEdge depending on braking distance and rail signals
101
* @return The rerouting start point
102
*/
103
virtual ConstMSEdgeVector::const_iterator getRerouteOrigin() const = 0;
104
105
/** @brief Replaces the current route by the given edges
106
*
107
* It is possible that the new route is not accepted, if a) it does not
108
* contain the vehicle's current edge, or b) something fails on insertion
109
* into the routes container (see in-line comments).
110
*
111
* @param[in] edges The new list of edges to pass
112
* @param[in] onInit Whether the vehicle starts with this route
113
* @param[in] check Whether the route should be checked for validity
114
* @param[in] removeStops Whether stops should be removed if they do not fit onto the new route
115
* @return Whether the new route was accepted
116
*/
117
virtual 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) = 0;
118
119
/** @brief Performs a rerouting using the given router
120
*
121
* Tries to find a new route between the current edge and the destination edge, first.
122
* Tries to replace the current route by the new one using replaceRoute.
123
*
124
* @param[in] t The time for which the route is computed
125
* @param[in] router The router to use
126
* @return whether a valid route was found
127
* @see replaceRoute
128
*/
129
virtual 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) = 0;
130
131
/** @brief Validates the current or given route
132
* @param[out] msg Description why the route is not valid (if it is the case)
133
* @param[in] route The route to check (or 0 if the current route shall be checked)
134
* @return Whether the vehicle's current route is valid
135
*/
136
virtual bool hasValidRoute(std::string& msg, ConstMSRoutePtr route = 0) const = 0;
137
/// @brief checks wether the vehicle can depart on the first edge
138
virtual bool hasValidRouteStart(std::string& msg) = 0;
139
140
/// @brief computes validity attributes for the current route
141
virtual int getRouteValidity(bool update = true, bool silent = false, std::string* msgReturn = nullptr) = 0;
142
143
/** @brief Returns an iterator pointing to the current edge in this vehicles route
144
* @return The current route pointer
145
*/
146
virtual const ConstMSEdgeVector::const_iterator& getCurrentRouteEdge() const = 0;
147
148
/** @brief Returns the vehicle's emission model parameter
149
*
150
* @return The vehicle's emission parameters
151
*/
152
virtual EnergyParams* getEmissionParameters() const = 0;
153
154
/** @brief Replaces the vehicle's parameter
155
*/
156
virtual void replaceParameter(const SUMOVehicleParameter* newParameter) = 0;
157
158
/** @brief Called when the vehicle is inserted into the network
159
*
160
* Sets optional information about departure time, informs the vehicle
161
* control about a further running vehicle.
162
*/
163
virtual void onDepart() = 0;
164
165
/** @brief Returns the information whether the vehicle is on a road (is simulated)
166
* @return Whether the vehicle is simulated
167
*/
168
virtual bool isOnRoad() const = 0;
169
170
/** @brief Returns whether the vehicle is idling (waiting to re-enter the net
171
* @return true if the vehicle is waiting to enter the net (eg after parking)
172
*/
173
virtual bool isIdling() const = 0;
174
175
/** @brief Returns the information whether the front of the vehhicle is on the given lane
176
* @return Whether the vehicle's front is on that lane
177
*/
178
virtual bool isFrontOnLane(const MSLane*) const = 0;
179
180
/** @brief Returns the information whether the vehicle is parked
181
* @return Whether the vehicle is parked
182
*/
183
virtual bool isParking() const = 0;
184
185
/** @brief Returns the information whether the vehicle is fully controlled
186
* via TraCI
187
* @return Whether the vehicle is remote-controlled
188
*/
189
virtual bool isRemoteControlled() const = 0;
190
191
/** @brief Returns the information whether the vehicle is fully controlled
192
* via TraCI
193
* @return Whether the vehicle was remote-controlled within the given time range
194
*/
195
virtual bool wasRemoteControlled(SUMOTime lookBack = DELTA_T) const = 0;
196
197
/** @brief Returns this vehicle's real departure time
198
* @return This vehicle's real departure time
199
*/
200
virtual SUMOTime getDeparture() const = 0;
201
202
/** @brief Returns this vehicle's real departure position
203
* @return This vehicle's real departure position
204
*/
205
virtual double getDepartPos() const = 0;
206
207
/** @brief Returns this vehicle's desired arrivalPos for its current route
208
* (may change on reroute)
209
* @return This vehicle's real arrivalPos
210
*/
211
virtual double getArrivalPos() const = 0;
212
213
/** @brief Sets this vehicle's desired arrivalPos for its current route
214
*/
215
virtual void setArrivalPos(double arrivalPos) = 0;
216
217
/** @brief Returns whether this vehicle has departed
218
*/
219
virtual bool hasDeparted() const = 0;
220
221
/** @brief Returns the edge on which this vehicle shall depart
222
*/
223
virtual int getDepartEdge() const = 0;
224
225
/** @brief Returns the distance that was already driven by this vehicle
226
* @return the distance driven [m]
227
*/
228
virtual double getOdometer() const = 0;
229
230
/** @brief Returns the number of new routes this vehicle got
231
* @return the number of new routes this vehicle got
232
*/
233
virtual int getNumberReroutes() const = 0;
234
235
/// @brief whether the given transportable is allowed to board this vehicle
236
virtual bool allowsBoarding(const MSTransportable* t) const = 0;
237
238
/** @brief Adds a person or container to this vehicle
239
*
240
* @param[in] transportable The person/container to add
241
*/
242
virtual void addTransportable(MSTransportable* transportable) = 0;
243
244
/** @brief Returns the number of persons
245
* @return The number of passengers on-board
246
*/
247
virtual int getPersonNumber() const = 0;
248
249
/** @brief Returns the list of persons
250
* @return The list of passengers on-board
251
*/
252
virtual std::vector<std::string> getPersonIDList() const = 0;
253
254
/** @brief Returns the number of containers
255
* @return The number of contaiers on-board
256
*/
257
virtual int getContainerNumber() const = 0;
258
259
/// @brief removes a person or container
260
virtual void removeTransportable(MSTransportable* t) = 0;
261
262
/// @brief removes a person or containers mass
263
virtual void removeTransportableMass(MSTransportable* t) = 0;
264
265
/// @brief retrieve riding persons
266
virtual const std::vector<MSTransportable*>& getPersons() const = 0;
267
268
/// @brief retrieve riding containers
269
virtual const std::vector<MSTransportable*>& getContainers() const = 0;
270
271
/** @brief Adds a stop
272
*
273
* The stop is put into the sorted list.
274
* @param[in] stop The stop to add
275
* @return Whether the stop could be added
276
*/
277
virtual bool addStop(const SUMOVehicleParameter::Stop& stopPar, std::string& errorMsg, SUMOTime untilOffset = 0,
278
ConstMSEdgeVector::const_iterator* searchStart = 0) = 0;
279
280
/// @brief return list of route indices and stop positions for the remaining stops
281
virtual std::vector<std::pair<int, double> > getStopIndices() const = 0;
282
283
/// @brief returns whether the vehicle serves a public transport line that serves the given stop
284
virtual bool isLineStop(double position) const = 0;
285
286
/// @brief deletes the next stop at the given index if it exists
287
virtual bool abortNextStop(int nextStopIndex = 0) = 0;
288
289
290
/**
291
* returns the next imminent stop in the stop queue
292
* @return the upcoming stop
293
*/
294
virtual MSParkingArea* getNextParkingArea() = 0;
295
296
/** @brief Replaces a stop
297
*
298
* The stop replace the next stop into the sorted list.
299
* @param[in] stop The stop to add
300
* @return Whether the stop could be added
301
*/
302
virtual bool replaceParkingArea(MSParkingArea* parkingArea, std::string& errorMsg) = 0;
303
304
virtual const std::vector<std::string>& getParkingBadges() const = 0;
305
306
/// @brief Returns the remaining stop duration for a stopped vehicle or 0
307
virtual SUMOTime remainingStopDuration() const = 0;
308
309
/** @brief Returns whether the vehicle is at a stop and waiting for a person or container to continue
310
*/
311
virtual bool isStopped() const = 0;
312
/** @brief Returns whether the vehicle is at a stop and waiting for a person or container to continue
313
*/
314
virtual bool isStoppedTriggered() const = 0;
315
316
/** @brief Returns whether the vehicle is at a stop and parking
317
*/
318
virtual bool isStoppedParking() const = 0;
319
320
/** @brief Returns whether the vehicle is stopped in the range of the given position */
321
virtual bool isStoppedInRange(const double pos, const double tolerance, bool checkFuture = false) const = 0;
322
323
/** @brief Returns whether the vehicle stops at the given stopping place */
324
virtual bool stopsAt(MSStoppingPlace* stop) const = 0;
325
326
/** @brief Returns whether the vehicle stops at the given edge */
327
virtual bool stopsAtEdge(const MSEdge* edge) const = 0;
328
329
/** @brief Returns whether the vehicle has to stop somewhere
330
* @return Whether the vehicle has to stop somewhere
331
*/
332
virtual bool hasStops() const = 0;
333
334
/**
335
* returns the list of stops not yet reached in the stop queue
336
* @return the list of upcoming stops
337
*/
338
virtual const std::list<MSStop>& getStops() const = 0;
339
340
/**
341
* returns the next imminent stop in the stop queue
342
* @return the upcoming stop
343
*/
344
virtual const MSStop& getNextStop() const = 0;
345
346
/**
347
* returns the next imminent stop in the stop queue
348
* @return the upcoming stop
349
*/
350
virtual MSStop& getNextStopMutable() = 0;
351
352
/// @brief mark vehicle as active
353
virtual void unregisterWaiting() = 0;
354
355
/** @brief Returns parameters of the next stop or nullptr **/
356
virtual const SUMOVehicleParameter::Stop* getNextStopParameter() const = 0;
357
358
/// @brief get remaining stop duration or 0 if the vehicle isn't stopped
359
virtual SUMOTime getStopDuration() const = 0;
360
361
/**
362
* schedule a new stop for the vehicle; each time a stop is reached, the vehicle
363
* will wait for the given duration before continuing on its route
364
* @param[in] stop Stop parameters
365
* @param[out] errorMsg returned error message
366
*/
367
virtual bool addTraciStop(SUMOVehicleParameter::Stop stop, std::string& errorMsg) = 0;
368
369
virtual void setChosenSpeedFactor(const double factor) = 0;
370
371
virtual SUMOTime getDepartDelay() const = 0;
372
373
virtual SUMOTime getTimeLoss() const = 0;
374
375
/// @brief get distance for coming to a stop (used for rerouting checks)
376
virtual double getBrakeGap(bool delayed = false) const = 0;
377
378
/// @brief Returns this vehicles impatience
379
virtual double getImpatience() const = 0;
380
381
/** @brief Returns this vehicle's devices
382
* @return This vehicle's devices
383
*/
384
virtual const std::vector<MSVehicleDevice*>& getDevices() const = 0;
385
386
/// @brief Returns the vehicles's length
387
virtual double getLength() const = 0;
388
389
/* @brief Return whether this vehicle must be treated like a railway vehicle
390
* either due to its vClass or the vClass of it's edge */
391
virtual bool isRail() const = 0;
392
393
virtual SUMOTime getLastActionTime() const = 0;
394
395
/// @brief get bounding rectangle
396
virtual PositionVector getBoundingBox(double offset = 0) const = 0;
397
398
virtual std::unique_ptr<MFXOptionalLock> getScopeLock() = 0;
399
400
/// @name parking memory io
401
//@{
402
virtual void rememberBlockedParkingArea(const MSStoppingPlace* pa, bool local) = 0;
403
virtual SUMOTime sawBlockedParkingArea(const MSStoppingPlace* pa, bool local) const = 0;
404
virtual void rememberParkingAreaScore(const MSStoppingPlace* pa, const std::string& score) = 0;
405
virtual void resetParkingAreaScores() = 0;
406
virtual int getNumberParkingReroutes() const = 0;
407
virtual void setNumberParkingReroutes(int value) = 0;
408
409
virtual void rememberBlockedChargingStation(const MSStoppingPlace* cs, bool local) = 0;
410
virtual SUMOTime sawBlockedChargingStation(const MSStoppingPlace* cs, bool local) const = 0;
411
virtual void rememberChargingStationScore(const MSStoppingPlace* cs, const std::string& score) = 0;
412
virtual void resetChargingStationScores() = 0;
413
//@}
414
415
/// @name state io
416
//@{
417
418
/// Saves the states of a vehicle
419
virtual void saveState(OutputDevice& out) = 0;
420
421
/** @brief Loads the state of this vehicle from the given description
422
*/
423
virtual void loadState(const SUMOSAXAttributes& attrs, const SUMOTime offset) = 0;
424
//@}
425
};
426
427