Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSPModel.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2014-2023 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/****************************************************************************/
18// The pedestrian following model (prototype)
19/****************************************************************************/
20#pragma once
21#include <config.h>
22
23#include <string>
24#include <limits>
30#ifdef HAVE_FOX
32#endif
33
34// ===========================================================================
35// class declarations
36// ===========================================================================
37class MSNet;
38class MSLane;
39class MSJunction;
40
41typedef std::pair<const MSPerson*, double> PersonDist;
42
43// ===========================================================================
44// class definitions
45// ===========================================================================
51class MSPModel {
52public:
53
54 virtual ~MSPModel() {};
55
57 virtual MSTransportableStateAdapter* add(MSTransportable* transportable, MSStageMoving* stage, SUMOTime now) = 0;
58
60 virtual MSTransportableStateAdapter* loadState(MSTransportable* transportable, MSStageMoving* stage, std::istringstream& state) {
61 UNUSED_PARAMETER(transportable);
62 UNUSED_PARAMETER(stage);
63 UNUSED_PARAMETER(state);
64 return nullptr;
65 }
66
68 virtual void clearState() = 0;
69
71 virtual void remove(MSTransportableStateAdapter* state) = 0;
72
82 virtual bool blockedAtDist(const SUMOTrafficObject* ego, const MSLane* lane, double vehSide, double vehWidth,
83 double oncomingGap, std::vector<const MSPerson*>* collectBlockers) {
85 UNUSED_PARAMETER(lane);
86 UNUSED_PARAMETER(vehSide);
87 UNUSED_PARAMETER(vehWidth);
88 UNUSED_PARAMETER(oncomingGap);
89 UNUSED_PARAMETER(collectBlockers);
90 return false;
91 }
92
94 virtual bool hasPedestrians(const MSLane* lane) {
95 UNUSED_PARAMETER(lane);
96 return false;
97 }
98
108 virtual PersonDist nextBlocking(const MSLane* lane, double minPos, double minRight, double maxLeft, double stopTime = 0, bool bidi = false) {
109 UNUSED_PARAMETER(lane);
110 UNUSED_PARAMETER(minPos);
111 UNUSED_PARAMETER(minRight);
112 UNUSED_PARAMETER(maxLeft);
113 UNUSED_PARAMETER(stopTime);
114 UNUSED_PARAMETER(bidi);
115 return PersonDist(nullptr, -1);
116 }
117
118 // @brief walking directions
119 static const int FORWARD;
120 static const int BACKWARD;
121 static const int UNDEFINED_DIRECTION;
122
123 // @brief the safety gap to keep between the car and the pedestrian in all directions
124 static const double SAFETY_GAP;
125
127 static const double SIDEWALK_OFFSET;
128
130 static const double UNSPECIFIED_POS_LAT;
131
133 static const double RANDOM_POS_LAT;
134
135 /* @brief return the arrival direction if the route may be traversed with the given starting direction.
136 * returns UNDEFINED_DIRECTION if the route cannot be traversed
137 */
138 static int canTraverse(int dir, const ConstMSEdgeVector& route);
139
141 virtual bool usingInternalLanes() = 0;
142
144 virtual int getActiveNumber() = 0;
145
146};
147
148
151public:
153
155 virtual double getEdgePos(const MSStageMoving& stage, SUMOTime now) const = 0;
156
158 virtual int getDirection(const MSStageMoving& stage, SUMOTime now) const = 0;
159
161 virtual Position getPosition(const MSStageMoving& stage, SUMOTime now) const = 0;
162
164 virtual double getAngle(const MSStageMoving& stage, SUMOTime now) const = 0;
165
167 virtual SUMOTime getWaitingTime(const MSStageMoving& stage, SUMOTime now) const = 0;
168
170 virtual double getSpeed(const MSStageMoving& stage) const = 0;
171
173 virtual const MSEdge* getNextEdge(const MSStageMoving& stage) const = 0;
174
176 virtual void moveTo(MSPerson* p, MSLane* lane, double lanePos, double lanePosLat, SUMOTime t) {
178 UNUSED_PARAMETER(lane);
179 UNUSED_PARAMETER(lanePos);
180 UNUSED_PARAMETER(lanePosLat);
182 WRITE_WARNING(TL("moveTo is ignored by the current movement model"));
183 }
184
186 virtual void moveToXY(MSPerson* p, Position pos, MSLane* lane, double lanePos,
187 double lanePosLat, double angle, int routeOffset,
188 const ConstMSEdgeVector& edges, SUMOTime t) {
190 UNUSED_PARAMETER(pos);
191 UNUSED_PARAMETER(lane);
192 UNUSED_PARAMETER(lanePos);
193 UNUSED_PARAMETER(lanePosLat);
194 UNUSED_PARAMETER(angle);
195 UNUSED_PARAMETER(routeOffset);
196 UNUSED_PARAMETER(edges);
198 WRITE_WARNING(TL("moveToXY is ignored by the current movement model"));
199 }
200
202 virtual bool isJammed() const {
203 return false;
204 }
205
207 virtual const MSLane* getLane() const {
208 return nullptr;
209 }
210
212 virtual double getPathLength() const {
213 return 0;
214 }
215
218 virtual void saveState(std::ostringstream& out) {
219 UNUSED_PARAMETER(out);
220 }
221
222};
long long int SUMOTime
Definition GUI.h:36
std::vector< const MSEdge * > ConstMSEdgeVector
Definition MSEdge.h:74
std::pair< const MSPerson *, double > PersonDist
Definition MSPModel.h:41
#define WRITE_WARNING(msg)
Definition MsgHandler.h:270
#define TL(string)
Definition MsgHandler.h:287
#define UNUSED_PARAMETER(x)
Definition StdDefs.h:30
A road/street connecting two junctions.
Definition MSEdge.h:77
The base class for an intersection.
Definition MSJunction.h:58
Representation of a lane in the micro simulation.
Definition MSLane.h:84
The simulated network and simulation perfomer.
Definition MSNet.h:88
The pedestrian (and also sometimes container) movement model.
Definition MSPModel.h:51
static const int BACKWARD
Definition MSPModel.h:120
virtual int getActiveNumber()=0
return the number of active objects
virtual void clearState()=0
Resets pedestrians when quick-loading state.
static int canTraverse(int dir, const ConstMSEdgeVector &route)
Definition MSPModel.cpp:54
static const int FORWARD
Definition MSPModel.h:119
virtual bool blockedAtDist(const SUMOTrafficObject *ego, const MSLane *lane, double vehSide, double vehWidth, double oncomingGap, std::vector< const MSPerson * > *collectBlockers)
whether a pedestrian is blocking the crossing of lane for the given vehicle bondaries
Definition MSPModel.h:82
virtual PersonDist nextBlocking(const MSLane *lane, double minPos, double minRight, double maxLeft, double stopTime=0, bool bidi=false)
returns the next pedestrian beyond minPos that is laterally between minRight and maxLeft or 0
Definition MSPModel.h:108
virtual MSTransportableStateAdapter * add(MSTransportable *transportable, MSStageMoving *stage, SUMOTime now)=0
register the given person as a pedestrian
static const double RANDOM_POS_LAT
magic value to encode randomized lateral offset for persons when starting a walk
Definition MSPModel.h:133
static const double SIDEWALK_OFFSET
the offset for computing person positions when walking on edges without a sidewalk
Definition MSPModel.h:127
virtual MSTransportableStateAdapter * loadState(MSTransportable *transportable, MSStageMoving *stage, std::istringstream &state)
load the state of the given transportable
Definition MSPModel.h:60
virtual bool usingInternalLanes()=0
whether movements on intersections are modelled
virtual void remove(MSTransportableStateAdapter *state)=0
remove the specified person from the pedestrian simulation
virtual ~MSPModel()
Definition MSPModel.h:54
static const int UNDEFINED_DIRECTION
Definition MSPModel.h:121
virtual bool hasPedestrians(const MSLane *lane)
whether the given lane has pedestrians on it
Definition MSPModel.h:94
static const double UNSPECIFIED_POS_LAT
the default lateral offset for persons when starting a walk
Definition MSPModel.h:130
static const double SAFETY_GAP
Definition MSPModel.h:124
abstract base class for managing callbacks to retrieve various state information from the model
Definition MSPModel.h:150
virtual double getSpeed(const MSStageMoving &stage) const =0
return the current speed of the transportable
virtual int getDirection(const MSStageMoving &stage, SUMOTime now) const =0
return the walking direction (FORWARD, BACKWARD)
virtual void moveToXY(MSPerson *p, Position pos, MSLane *lane, double lanePos, double lanePosLat, double angle, int routeOffset, const ConstMSEdgeVector &edges, SUMOTime t)
try to move transportable to the given position
Definition MSPModel.h:186
virtual Position getPosition(const MSStageMoving &stage, SUMOTime now) const =0
return the network coordinate of the transportable
virtual const MSLane * getLane() const
whether the transportable is jammed
Definition MSPModel.h:207
virtual bool isJammed() const
whether the transportable is jammed
Definition MSPModel.h:202
virtual const MSEdge * getNextEdge(const MSStageMoving &stage) const =0
return the list of internal edges if the transportable is on an intersection
virtual ~MSTransportableStateAdapter()
Definition MSPModel.h:152
virtual SUMOTime getWaitingTime(const MSStageMoving &stage, SUMOTime now) const =0
return the time the transportable spent standing
virtual void moveTo(MSPerson *p, MSLane *lane, double lanePos, double lanePosLat, SUMOTime t)
try to move transportable to the given position
Definition MSPModel.h:176
virtual double getEdgePos(const MSStageMoving &stage, SUMOTime now) const =0
return the offset from the start of the current edge measured in its natural direction
virtual double getAngle(const MSStageMoving &stage, SUMOTime now) const =0
return the direction in which the transportable faces in degrees
virtual void saveState(std::ostringstream &out)
Saves the current state into the given stream.
Definition MSPModel.h:218
virtual double getPathLength() const
return the total length of the current lane (in particular for on a walkingarea)
Definition MSPModel.h:212
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
Representation of a vehicle, person, or container.