SUMO - Simulation of Urban MObility
Helper.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Helper of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2012-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
17 // C++ TraCI client API implementation
18 /****************************************************************************/
19 #ifndef Helper_h
20 #define Helper_h
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #ifdef _MSC_VER
27 #include <windows_config.h>
28 #else
29 #include <config.h>
30 #endif
31 
32 #include <vector>
33 #include <libsumo/TraCIDefs.h>
34 
35 
36 // ===========================================================================
37 // class declarations
38 // ===========================================================================
39 class Position;
40 class PositionVector;
41 class RGBColor;
42 class MSEdge;
43 class MSLane;
44 class MSPerson;
45 
46 
47 // ===========================================================================
48 // class definitions
49 // ===========================================================================
50 
52 public:
54  LaneStoringVisitor(std::set<std::string>& ids, const PositionVector& shape,
55  const double range, const int domain)
56  : myIDs(ids), myShape(shape), myRange(range), myDomain(domain) {}
57 
60 
62  void add(const MSLane* const l) const;
63 
65  std::set<std::string>& myIDs;
67  const double myRange;
68  const int myDomain;
69 
70 private:
73 
76 };
77 
78 #define LANE_RTREE_QUAL RTree<MSLane*, MSLane, float, 2, LaneStoringVisitor>
79 template<>
80 inline float LANE_RTREE_QUAL::RectSphericalVolume(Rect* a_rect) {
81  ASSERT(a_rect);
82  const float extent0 = a_rect->m_max[0] - a_rect->m_min[0];
83  const float extent1 = a_rect->m_max[1] - a_rect->m_min[1];
84  return .78539816f * (extent0 * extent0 + extent1 * extent1);
85 }
86 
87 template<>
88 inline LANE_RTREE_QUAL::Rect LANE_RTREE_QUAL::CombineRect(Rect* a_rectA, Rect* a_rectB) {
89  ASSERT(a_rectA && a_rectB);
90  Rect newRect;
91  newRect.m_min[0] = rtree_min(a_rectA->m_min[0], a_rectB->m_min[0]);
92  newRect.m_max[0] = rtree_max(a_rectA->m_max[0], a_rectB->m_max[0]);
93  newRect.m_min[1] = rtree_min(a_rectA->m_min[1], a_rectB->m_min[1]);
94  newRect.m_max[1] = rtree_max(a_rectA->m_max[1], a_rectB->m_max[1]);
95  return newRect;
96 }
97 
102 namespace libsumo {
103 
108 class Helper {
109 public:
115  //void connect(const std::string& host, int port);
116 
117 
119  void close();
121 
123  static void load(const std::vector<std::string>& args);
124 
126  static void HelperStep(const SUMOTime time = 0);
127 
129  typedef std::map<int, TraCIValue> TraCIValues;
130  typedef std::map<std::string, TraCIValues> SubscribedValues;
131  typedef std::map<std::string, SubscribedValues> SubscribedContextValues;
132 
133  //void subscribe(int domID, const std::string& objID, SUMOTime beginTime, SUMOTime endTime, const std::vector<int>& vars) const;
134  //void subscribeContext(int domID, const std::string& objID, SUMOTime beginTime, SUMOTime endTime, int domain, double range, const std::vector<int>& vars) const;
135 
136  const SubscribedValues& getSubscriptionResults() const;
137  const TraCIValues& getSubscriptionResults(const std::string& objID) const;
138 
139  const SubscribedContextValues& getContextSubscriptionResults() const;
140  const SubscribedValues& getContextSubscriptionResults(const std::string& objID) const;
141 
143  static TraCIPositionVector makeTraCIPositionVector(const PositionVector& positionVector);
144  static TraCIPosition makeTraCIPosition(const Position& position);
145  static Position makePosition(const TraCIPosition& position);
146 
147  static PositionVector makePositionVector(const TraCIPositionVector& vector);
148  static TraCIColor makeTraCIColor(const RGBColor& color);
149  static RGBColor makeRGBColor(const TraCIColor& color);
150 
151  static MSEdge* getEdge(const std::string& edgeID);
152  static const MSLane* getLaneChecking(const std::string& edgeID, int laneIndex, double pos);
153  static std::pair<MSLane*, double> convertCartesianToRoadMap(Position pos);
154 
155  static SUMOTime getCurrentTime();
156 
157  static SUMOTime getDeltaT();
158 
159  static TraCIBoundary getNetBoundary();
160 
161  static int getMinExpectedNumber();
162 
163  static TraCIStage findRoute(const std::string& from, const std::string& to, const std::string& typeID, const SUMOTime depart, const int routingMode);
164 
165  static std::vector<TraCIStage> findIntermodalRoute(const std::string& from, const std::string& to, const std::string& modes,
166  const SUMOTime depart, const int routingMode, const double speed, const double walkFactor,
167  const double departPos, const double arrivalPos, const double departPosLat,
168  const std::string& pType, const std::string& vehType);
169 
170  static std::string getParameter(const std::string& objectID, const std::string& key);
171 
172  static void collectObjectsInRange(int domain, const PositionVector& shape, double range, std::set<std::string>& into);
173 
174  static void setRemoteControlled(MSVehicle* v, Position xyPos, MSLane* l, double pos, double posLat, double angle,
175  int edgeOffset, ConstMSEdgeVector route, SUMOTime t);
176 
177  static void setRemoteControlled(MSPerson* p, Position xyPos, MSLane* l, double pos, double posLat, double angle,
178  int edgeOffset, ConstMSEdgeVector route, SUMOTime t);
179 
180  static void postProcessRemoteControl();
181 
182  static void cleanup();
183 
186  static bool moveToXYMap(const Position& pos, double maxRouteDistance, bool mayLeaveNetwork, const std::string& origID, const double angle,
187  double speed, const ConstMSEdgeVector& currentRoute, const int routePosition, MSLane* currentLane, double currentLanePos, bool onRoad,
188  double& bestDistance, MSLane** lane, double& lanePos, int& routeOffset, ConstMSEdgeVector& edges);
189 
190  static bool moveToXYMap_matchingRoutePosition(const Position& pos, const std::string& origID,
191  const ConstMSEdgeVector& currentRoute, int routeIndex,
192  double& bestDistance, MSLane** lane, double& lanePos, int& routeOffset);
193 
194  static bool findCloserLane(const MSEdge* edge, const Position& pos, double& bestDistance, MSLane** lane);
195 
196  class LaneUtility {
197  public:
198  LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_,
199  bool onRoute_, bool sameEdge_, const MSEdge* prevEdge_, const MSEdge* nextEdge_) :
200  dist(dist_), perpendicularDist(perpendicularDist_), lanePos(lanePos_), angleDiff(angleDiff_), ID(ID_),
201  onRoute(onRoute_), sameEdge(sameEdge_), prevEdge(prevEdge_), nextEdge(nextEdge_) {}
204 
205  double dist;
207  double lanePos;
208  double angleDiff;
209  bool ID;
210  bool onRoute;
211  bool sameEdge;
212  const MSEdge* prevEdge;
213  const MSEdge* nextEdge;
214  };
216 
217 private:
218 
219  SubscribedValues mySubscribedValues;
220  SubscribedContextValues mySubscribedContextValues;
221 
223  static std::map<int, NamedRTree*> myObjects;
224 
227 
228  static std::map<std::string, MSVehicle*> myRemoteControlledVehicles;
229  static std::map<std::string, MSPerson*> myRemoteControlledPersons;
230 
232  Helper();
233 
235  Helper(const Helper& src);
236 
238  Helper& operator=(const Helper& src);
239 };
240 
241 }
242 
243 
244 #endif
245 
246 /****************************************************************************/
const MSEdge * prevEdge
Definition: Helper.h:212
const MSEdge * nextEdge
Definition: Helper.h:213
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:83
const int myDomain
Definition: Helper.h:68
LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_, bool onRoute_, bool sameEdge_, const MSEdge *prevEdge_, const MSEdge *nextEdge_)
Definition: Helper.h:198
#define LANE_RTREE_QUAL
Definition: Helper.h:78
static LANE_RTREE_QUAL * myLaneTree
A storage of lanes.
Definition: Helper.h:226
std::map< int, TraCIValue > TraCIValues
{object->{variable->value}}
Definition: Helper.h:129
A 3D-bounding box.
Definition: TraCIDefs.h:90
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:78
static std::map< int, NamedRTree * > myObjects
A storage of objects.
Definition: Helper.h:223
std::map< std::string, TraCIValues > SubscribedValues
Definition: Helper.h:130
LaneStoringVisitor & operator=(const LaneStoringVisitor &src)
invalidated assignment operator
LaneStoringVisitor(std::set< std::string > &ids, const PositionVector &shape, const double range, const int domain)
Constructor.
Definition: Helper.h:54
static std::map< std::string, MSVehicle * > myRemoteControlledVehicles
Definition: Helper.h:228
SubscribedValues mySubscribedValues
Definition: Helper.h:219
A road/street connecting two junctions.
Definition: MSEdge.h:80
#define ASSERT
Definition: RTree.h:12
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:45
#define rtree_min(a, b)
Definition: RTree.h:20
A list of positions.
const double myRange
Definition: Helper.h:67
void add(const MSLane *const l) const
Adds the given object to the container.
Definition: Helper.cpp:56
#define rtree_max(a, b)
Definition: RTree.h:21
Definition: Edge.cpp:31
SubscribedContextValues mySubscribedContextValues
Definition: Helper.h:220
std::set< std::string > & myIDs
The container.
Definition: Helper.h:65
const PositionVector & myShape
Definition: Helper.h:66
std::map< std::string, SubscribedValues > SubscribedContextValues
Definition: Helper.h:131
long long int SUMOTime
Definition: TraCIDefs.h:51
A 3D-position.
Definition: TraCIDefs.h:71
~LaneStoringVisitor()
Destructor.
Definition: Helper.h:59
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
A list of positions.
static std::map< std::string, MSPerson * > myRemoteControlledPersons
Definition: Helper.h:229