Eclipse SUMO - Simulation of Urban MObility
Helper.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2012-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // C++ TraCI client API implementation
16 /****************************************************************************/
17 #ifndef Helper_h
18 #define Helper_h
19 
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #include <config.h>
25 
26 #include <vector>
27 #include <memory>
28 #include <libsumo/Subscription.h>
29 #include <microsim/MSNet.h>
30 
31 // ===========================================================================
32 // class declarations
33 // ===========================================================================
34 class Position;
35 class PositionVector;
36 class RGBColor;
37 class MSEdge;
38 class MSPerson;
39 class MSVehicle;
40 class MSVehicleType;
41 
42 
43 // ===========================================================================
44 // type definitions
45 // ===========================================================================
46 typedef std::map<const MSLane*, std::pair<double, double> > LaneCoverageInfo; // also declared in MSLane.h!
47 
48 // ===========================================================================
49 // class definitions
50 // ===========================================================================
51 
53 public:
55  LaneStoringVisitor(std::set<std::string>& ids, const PositionVector& shape,
56  const double range, const int domain)
57  : myIDs(ids), myShape(shape), myRange(range), myDomain(domain) {}
58 
61 
63  void add(const MSLane* const l) const;
64 
66  std::set<std::string>& myIDs;
68  const double myRange;
69  const int myDomain;
70 
71 private:
74 
77 };
78 
79 #define LANE_RTREE_QUAL RTree<MSLane*, MSLane, float, 2, LaneStoringVisitor>
80 template<>
81 inline float LANE_RTREE_QUAL::RectSphericalVolume(Rect* a_rect) {
82  ASSERT(a_rect);
83  const float extent0 = a_rect->m_max[0] - a_rect->m_min[0];
84  const float extent1 = a_rect->m_max[1] - a_rect->m_min[1];
85  return .78539816f * (extent0 * extent0 + extent1 * extent1);
86 }
87 
88 template<>
89 inline LANE_RTREE_QUAL::Rect LANE_RTREE_QUAL::CombineRect(Rect* a_rectA, Rect* a_rectB) {
90  ASSERT(a_rectA && a_rectB);
91  Rect newRect;
92  newRect.m_min[0] = rtree_min(a_rectA->m_min[0], a_rectB->m_min[0]);
93  newRect.m_max[0] = rtree_max(a_rectA->m_max[0], a_rectB->m_max[0]);
94  newRect.m_min[1] = rtree_min(a_rectA->m_min[1], a_rectB->m_min[1]);
95  newRect.m_max[1] = rtree_max(a_rectA->m_max[1], a_rectB->m_max[1]);
96  return newRect;
97 }
98 
99 namespace libsumo {
100 
105 class Helper {
106 public:
107  static void subscribe(const int commandId, const std::string& id, const std::vector<int>& variables,
108  const double beginTime, const double endTime, const int contextDomain = 0, const double range = 0.);
109 
110  static void handleSubscriptions(const SUMOTime t);
111 
112  static bool needNewSubscription(libsumo::Subscription& s, std::vector<Subscription>& subscriptions, libsumo::Subscription*& modifiedSubscription);
113 
114  static void clearSubscriptions();
115 
117  static TraCIPositionVector makeTraCIPositionVector(const PositionVector& positionVector);
118  static TraCIPosition makeTraCIPosition(const Position& position, const bool includeZ = false);
119  static Position makePosition(const TraCIPosition& position);
120 
122  static TraCIColor makeTraCIColor(const RGBColor& color);
123  static RGBColor makeRGBColor(const TraCIColor& color);
124 
125  static MSEdge* getEdge(const std::string& edgeID);
126  static const MSLane* getLaneChecking(const std::string& edgeID, int laneIndex, double pos);
127  static std::pair<MSLane*, double> convertCartesianToRoadMap(const Position& pos, const SUMOVehicleClass vClass);
128 
129  static MSVehicle* getVehicle(const std::string& id);
130  static const MSVehicleType& getVehicleType(const std::string& vehicleID);
131 
132  static void findObjectShape(int domain, const std::string& id, PositionVector& shape);
133 
134  static void collectObjectsInRange(int domain, const PositionVector& shape, double range, std::set<std::string>& into);
135 
142  static void applySubscriptionFilters(const Subscription& s, std::set<std::string>& objIDs);
143 
144  static void applySubscriptionFilterFieldOfVision(const Subscription& s, std::set<std::string>& objIDs);
145 
146  static void setRemoteControlled(MSVehicle* v, Position xyPos, MSLane* l, double pos, double posLat, double angle,
147  int edgeOffset, ConstMSEdgeVector route, SUMOTime t);
148 
149  static void setRemoteControlled(MSPerson* p, Position xyPos, MSLane* l, double pos, double posLat, double angle,
150  int edgeOffset, ConstMSEdgeVector route, SUMOTime t);
151 
152  static void postProcessRemoteControl();
153 
154  static void cleanup();
155 
156  static void registerVehicleStateListener();
157 
158  static const std::vector<std::string>& getVehicleStateChanges(const MSNet::VehicleState state);
159 
160  static void clearVehicleStates();
161 
164  static bool moveToXYMap(const Position& pos, double maxRouteDistance, bool mayLeaveNetwork, const std::string& origID, const double angle,
165  double speed, const ConstMSEdgeVector& currentRoute, const int routePosition, MSLane* currentLane, double currentLanePos, bool onRoad,
166  SUMOVehicleClass vClass,
167  double& bestDistance, MSLane** lane, double& lanePos, int& routeOffset, ConstMSEdgeVector& edges);
168 
169  static bool moveToXYMap_matchingRoutePosition(const Position& pos, const std::string& origID,
170  const ConstMSEdgeVector& currentRoute, int routeIndex,
171  SUMOVehicleClass vClass,
172  double& bestDistance, MSLane** lane, double& lanePos, int& routeOffset);
173 
174  static bool findCloserLane(const MSEdge* edge, const Position& pos, SUMOVehicleClass vClass, double& bestDistance, MSLane** lane);
175 
176  class LaneUtility {
177  public:
178  LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_,
179  bool onRoute_, bool sameEdge_, const MSEdge* prevEdge_, const MSEdge* nextEdge_) :
180  dist(dist_), perpendicularDist(perpendicularDist_), lanePos(lanePos_), angleDiff(angleDiff_), ID(ID_),
181  onRoute(onRoute_), sameEdge(sameEdge_), prevEdge(prevEdge_), nextEdge(nextEdge_) {}
183 
184  double dist;
186  double lanePos;
187  double angleDiff;
188  bool ID;
189  bool onRoute;
190  bool sameEdge;
191  const MSEdge* prevEdge;
192  const MSEdge* nextEdge;
193  };
195 
196  class SubscriptionWrapper final : public VariableWrapper {
197  public:
199  void setContext(const std::string& refID);
200  void clear();
201  bool wrapDouble(const std::string& objID, const int variable, const double value);
202  bool wrapInt(const std::string& objID, const int variable, const int value);
203  bool wrapString(const std::string& objID, const int variable, const std::string& value);
204  bool wrapStringList(const std::string& objID, const int variable, const std::vector<std::string>& value);
205  bool wrapPosition(const std::string& objID, const int variable, const TraCIPosition& value);
206  bool wrapColor(const std::string& objID, const int variable, const TraCIColor& value);
207  bool wrapRoadPosition(const std::string& objID, const int variable, const TraCIRoadPosition& value);
208  private:
212  private:
215  };
216 
217 private:
218  static void handleSingleSubscription(const Subscription& s);
219 
225  static void fuseLaneCoverage(std::shared_ptr<LaneCoverageInfo> aggregatedLaneCoverage, const std::shared_ptr<LaneCoverageInfo> newLaneCoverage);
226 
227 private:
229  public:
230  void vehicleStateChanged(const SUMOVehicle* const vehicle, MSNet::VehicleState to, const std::string& info = "");
232  std::map<MSNet::VehicleState, std::vector<std::string> > myVehicleStateChanges;
233  };
234 
236  static std::vector<Subscription> mySubscriptions;
237 
239  static std::map<int, std::shared_ptr<VariableWrapper> > myWrapper;
240 
243 
245  static std::map<int, NamedRTree*> myObjects;
246 
249 
250  static std::map<std::string, MSVehicle*> myRemoteControlledVehicles;
251  static std::map<std::string, MSPerson*> myRemoteControlledPersons;
252 
254  Helper() = delete;
255 };
256 
257 }
258 
259 
260 #endif
261 
262 /****************************************************************************/
libsumo::Helper::getEdge
static MSEdge * getEdge(const std::string &edgeID)
Definition: Helper.cpp:325
MSVehicleType
The car-following model and parameter.
Definition: MSVehicleType.h:65
libsumo::Helper::handleSubscriptions
static void handleSubscriptions(const SUMOTime t)
Definition: Helper.cpp:144
libsumo::Helper::makePosition
static Position makePosition(const TraCIPosition &position)
Definition: Helper.cpp:319
libsumo::Helper::myObjects
static std::map< int, NamedRTree * > myObjects
A storage of objects.
Definition: Helper.h:245
SUMOVehicleClass
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
Definition: SUMOVehicleClass.h:133
LANE_RTREE_QUAL
#define LANE_RTREE_QUAL
Definition: Helper.h:79
libsumo::Helper::LaneUtility::LaneUtility
LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_, bool onRoute_, bool sameEdge_, const MSEdge *prevEdge_, const MSEdge *nextEdge_)
Definition: Helper.h:178
libsumo::Helper::VehicleStateListener::vehicleStateChanged
void vehicleStateChanged(const SUMOVehicle *const vehicle, MSNet::VehicleState to, const std::string &info="")
Called if a vehicle changes its state.
Definition: Helper.cpp:1280
TraCIPositionVector
A list of positions.
MSNet.h
libsumo::Helper::myLaneTree
static LANE_RTREE_QUAL * myLaneTree
A storage of lanes.
Definition: Helper.h:248
MSLane
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
libsumo::Helper::getVehicle
static MSVehicle * getVehicle(const std::string &id)
Definition: Helper.cpp:384
libsumo::Helper::makeTraCIColor
static TraCIColor makeTraCIColor(const RGBColor &color)
Definition: Helper.cpp:292
libsumo::Helper::LaneUtility::dist
double dist
Definition: Helper.h:184
libsumo::TraCIPosition
A 3D-position.
Definition: TraCIDefs.h:109
libsumo::Helper::cleanup
static void cleanup()
Definition: Helper.cpp:404
libsumo::Helper::SubscriptionWrapper::SubscriptionWrapper
SubscriptionWrapper(VariableWrapper::SubscriptionHandler handler, SubscriptionResults &into, ContextSubscriptionResults &context)
Definition: Helper.cpp:1208
libsumo::Helper::SubscriptionWrapper::setContext
void setContext(const std::string &refID)
Definition: Helper.cpp:1215
libsumo::VariableWrapper
Definition: Subscription.h:132
MSNet::VehicleStateListener
Interface for objects listening to vehicle state changes.
Definition: MSNet.h:568
LaneStoringVisitor::myShape
const PositionVector & myShape
Definition: Helper.h:67
libsumo::Helper::makePositionVector
static PositionVector makePositionVector(const TraCIPositionVector &vector)
Definition: Helper.cpp:279
libsumo::Helper::LaneUtility::perpendicularDist
double perpendicularDist
Definition: Helper.h:185
MSPerson
Definition: MSPerson.h:63
libsumo::Helper::makeRGBColor
static RGBColor makeRGBColor(const TraCIColor &color)
Definition: Helper.cpp:303
libsumo::Helper::myRemoteControlledVehicles
static std::map< std::string, MSVehicle * > myRemoteControlledVehicles
Definition: Helper.h:250
libsumo::Helper::Helper
Helper()=delete
invalidated standard constructor
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
libsumo::Helper::SubscriptionWrapper::wrapRoadPosition
bool wrapRoadPosition(const std::string &objID, const int variable, const TraCIRoadPosition &value)
Definition: Helper.cpp:1273
SUMOVehicle
Representation of a vehicle.
Definition: SUMOVehicle.h:60
libsumo::Helper::moveToXYMap
static bool moveToXYMap(const Position &pos, double maxRouteDistance, bool mayLeaveNetwork, const std::string &origID, const double angle, double speed, const ConstMSEdgeVector &currentRoute, const int routePosition, MSLane *currentLane, double currentLanePos, bool onRoad, SUMOVehicleClass vClass, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset, ConstMSEdgeVector &edges)
Definition: Helper.cpp:910
ConstMSEdgeVector
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:75
libsumo::Helper::subscribe
static void subscribe(const int commandId, const std::string &id, const std::vector< int > &variables, const double beginTime, const double endTime, const int contextDomain=0, const double range=0.)
Definition: Helper.cpp:120
libsumo::ContextSubscriptionResults
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
Definition: TraCIDefs.h:204
libsumo::Helper::needNewSubscription
static bool needNewSubscription(libsumo::Subscription &s, std::vector< Subscription > &subscriptions, libsumo::Subscription *&modifiedSubscription)
Definition: Helper.cpp:157
libsumo::Helper::applySubscriptionFilters
static void applySubscriptionFilters(const Subscription &s, std::set< std::string > &objIDs)
Filter the given ID-Set (which was obtained from an R-Tree search) according to the filters set by th...
Definition: Helper.cpp:529
libsumo::Helper::makeTraCIPosition
static TraCIPosition makeTraCIPosition(const Position &position, const bool includeZ=false)
Definition: Helper.cpp:309
libsumo::TraCIColor
A color.
Definition: TraCIDefs.h:135
libsumo::Helper::SubscriptionWrapper::myContextResults
ContextSubscriptionResults & myContextResults
Definition: Helper.h:210
PositionVector
A list of positions.
Definition: PositionVector.h:45
libsumo::Helper::SubscriptionWrapper::wrapString
bool wrapString(const std::string &objID, const int variable, const std::string &value)
Definition: Helper.cpp:1243
LaneStoringVisitor::myIDs
std::set< std::string > & myIDs
The container.
Definition: Helper.h:66
libsumo::Helper::SubscriptionWrapper::clear
void clear()
Definition: Helper.cpp:1221
LaneStoringVisitor
Definition: Helper.h:52
rtree_min
#define rtree_min(a, b)
Definition: RTree.h:20
libsumo::Helper::getLaneChecking
static const MSLane * getLaneChecking(const std::string &edgeID, int laneIndex, double pos)
Definition: Helper.cpp:335
libsumo
Definition: Edge.cpp:29
libsumo::Helper::SubscriptionWrapper::myActiveResults
SubscriptionResults * myActiveResults
Definition: Helper.h:211
LaneStoringVisitor::~LaneStoringVisitor
~LaneStoringVisitor()
Destructor.
Definition: Helper.h:60
RGBColor
Definition: RGBColor.h:39
libsumo::Subscription
Representation of a subscription.
Definition: Subscription.h:67
LaneStoringVisitor::operator=
LaneStoringVisitor & operator=(const LaneStoringVisitor &src)
invalidated assignment operator
libsumo::Helper::SubscriptionWrapper::wrapInt
bool wrapInt(const std::string &objID, const int variable, const int value)
Definition: Helper.cpp:1236
libsumo::Helper::fuseLaneCoverage
static void fuseLaneCoverage(std::shared_ptr< LaneCoverageInfo > aggregatedLaneCoverage, const std::shared_ptr< LaneCoverageInfo > newLaneCoverage)
Adds lane coverage information from newLaneCoverage into aggregatedLaneCoverage.
Definition: Helper.cpp:251
MSNet::VehicleState
VehicleState
Definition of a vehicle state.
Definition: MSNet.h:535
libsumo::Helper::LaneUtility::sameEdge
bool sameEdge
Definition: Helper.h:190
libsumo::Helper::SubscriptionWrapper::myResults
SubscriptionResults & myResults
Definition: Helper.h:209
libsumo::Helper::moveToXYMap_matchingRoutePosition
static bool moveToXYMap_matchingRoutePosition(const Position &pos, const std::string &origID, const ConstMSEdgeVector &currentRoute, int routeIndex, SUMOVehicleClass vClass, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset)
Definition: Helper.cpp:1131
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
libsumo::Helper::makeTraCIPositionVector
static TraCIPositionVector makeTraCIPositionVector(const PositionVector &positionVector)
helper functions
Definition: Helper.cpp:269
libsumo::VariableWrapper::SubscriptionHandler
bool(* SubscriptionHandler)(const std::string &objID, const int variable, VariableWrapper *wrapper)
Definition of a method to be called for serving an associated commandID.
Definition: Subscription.h:135
libsumo::Helper::LaneUtility::nextEdge
const MSEdge * nextEdge
Definition: Helper.h:192
MSEdge
A road/street connecting two junctions.
Definition: MSEdge.h:78
rtree_max
#define rtree_max(a, b)
Definition: RTree.h:21
libsumo::Helper::LaneUtility::~LaneUtility
~LaneUtility()
Definition: Helper.h:182
libsumo::Helper::SubscriptionWrapper::wrapPosition
bool wrapPosition(const std::string &objID, const int variable, const TraCIPosition &value)
Definition: Helper.cpp:1259
libsumo::Helper::LaneUtility
Definition: Helper.h:176
ASSERT
#define ASSERT
Definition: RTree.h:12
libsumo::Helper::postProcessRemoteControl
static void postProcessRemoteControl()
Definition: Helper.cpp:889
libsumo::Helper::VehicleStateListener::myVehicleStateChanges
std::map< MSNet::VehicleState, std::vector< std::string > > myVehicleStateChanges
Changes in the states of simulated vehicles.
Definition: Helper.h:232
libsumo::Helper::LaneUtility::angleDiff
double angleDiff
Definition: Helper.h:187
libsumo::Helper
C++ TraCI client API implementation.
Definition: Helper.h:105
libsumo::Helper::applySubscriptionFilterFieldOfVision
static void applySubscriptionFilterFieldOfVision(const Subscription &s, std::set< std::string > &objIDs)
Definition: Helper.cpp:836
libsumo::Helper::collectObjectsInRange
static void collectObjectsInRange(int domain, const PositionVector &shape, double range, std::set< std::string > &into)
Definition: Helper.cpp:470
LaneStoringVisitor::myDomain
const int myDomain
Definition: Helper.h:69
libsumo::Helper::clearSubscriptions
static void clearSubscriptions()
Definition: Helper.cpp:180
LaneStoringVisitor::myRange
const double myRange
Definition: Helper.h:68
libsumo::Helper::myVehicleStateListener
static VehicleStateListener myVehicleStateListener
Changes in the states of simulated vehicles.
Definition: Helper.h:242
LaneStoringVisitor::LaneStoringVisitor
LaneStoringVisitor(const LaneStoringVisitor &src)
invalidated copy constructor
libsumo::Helper::LaneUtility::lanePos
double lanePos
Definition: Helper.h:186
libsumo::Helper::setRemoteControlled
static void setRemoteControlled(MSVehicle *v, Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, ConstMSEdgeVector route, SUMOTime t)
Definition: Helper.cpp:874
libsumo::Helper::myRemoteControlledPersons
static std::map< std::string, MSPerson * > myRemoteControlledPersons
Definition: Helper.h:251
libsumo::Helper::LaneUtility::prevEdge
const MSEdge * prevEdge
Definition: Helper.h:191
Subscription.h
libsumo::Helper::handleSingleSubscription
static void handleSingleSubscription(const Subscription &s)
Definition: Helper.cpp:186
libsumo::Helper::SubscriptionWrapper::wrapDouble
bool wrapDouble(const std::string &objID, const int variable, const double value)
Definition: Helper.cpp:1229
libsumo::Helper::SubscriptionWrapper
Definition: Helper.h:196
libsumo::Helper::findObjectShape
static void findObjectShape(int domain, const std::string &id, PositionVector &shape)
Definition: Helper.cpp:437
libsumo::Helper::SubscriptionWrapper::wrapColor
bool wrapColor(const std::string &objID, const int variable, const TraCIColor &value)
Definition: Helper.cpp:1266
libsumo::Helper::LaneUtility::onRoute
bool onRoute
Definition: Helper.h:189
libsumo::TraCIRoadPosition
An edgeId, position and laneIndex.
Definition: TraCIDefs.h:121
config.h
libsumo::Helper::LaneUtility::ID
bool ID
Definition: Helper.h:188
libsumo::Helper::getVehicleStateChanges
static const std::vector< std::string > & getVehicleStateChanges(const MSNet::VehicleState state)
Definition: Helper.cpp:423
libsumo::Helper::findCloserLane
static bool findCloserLane(const MSEdge *edge, const Position &pos, SUMOVehicleClass vClass, double &bestDistance, MSLane **lane)
Definition: Helper.cpp:1104
libsumo::Helper::mySubscriptions
static std::vector< Subscription > mySubscriptions
The list of known, still valid subscriptions.
Definition: Helper.h:236
libsumo::Helper::VehicleStateListener
Definition: Helper.h:228
libsumo::Helper::SubscriptionWrapper::wrapStringList
bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)
Definition: Helper.cpp:1250
LaneCoverageInfo
std::map< const MSLane *, std::pair< double, double > > LaneCoverageInfo
Definition: Helper.h:40
libsumo::Helper::getVehicleType
static const MSVehicleType & getVehicleType(const std::string &vehicleID)
Definition: Helper.cpp:398
libsumo::Helper::SubscriptionWrapper::operator=
SubscriptionWrapper & operator=(const SubscriptionWrapper &s)=delete
Invalidated assignment operator.
libsumo::Helper::myWrapper
static std::map< int, std::shared_ptr< VariableWrapper > > myWrapper
Map of commandIds -> their executors; applicable if the executor applies to the method footprint.
Definition: Helper.h:239
libsumo::Helper::registerVehicleStateListener
static void registerVehicleStateListener()
Definition: Helper.cpp:415
LaneStoringVisitor::LaneStoringVisitor
LaneStoringVisitor(std::set< std::string > &ids, const PositionVector &shape, const double range, const int domain)
Constructor.
Definition: Helper.h:55
libsumo::Helper::convertCartesianToRoadMap
static std::pair< MSLane *, double > convertCartesianToRoadMap(const Position &pos, const SUMOVehicleClass vClass)
Definition: Helper.cpp:352
LaneStoringVisitor::add
void add(const MSLane *const l) const
Adds the given object to the container.
Definition: Helper.cpp:62
libsumo::SubscriptionResults
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
Definition: TraCIDefs.h:203
libsumo::Helper::clearVehicleStates
static void clearVehicleStates()
Definition: Helper.cpp:429
MSVehicle
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:79