SUMO - Simulation of Urban MObility
TraCIAPI.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-2018 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 /****************************************************************************/
17 // C++ TraCI client API implementation
18 /****************************************************************************/
19 #ifndef TraCIAPI_h
20 #define TraCIAPI_h
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #include <config.h>
27 
28 #include <vector>
29 #include <limits>
30 #include <string>
31 #include <sstream>
32 #include <iomanip>
33 #include <foreign/tcpip/socket.h>
35 #include <libsumo/TraCIDefs.h>
36 
37 // ===========================================================================
38 // global definitions
39 // ===========================================================================
40 #define DEFAULT_VIEW "View #0"
41 #define PRECISION 2
42 
43 // ===========================================================================
44 // class definitions
45 // ===========================================================================
52 class TraCIAPI {
53 public:
56  TraCIAPI();
57 
58 
60  ~TraCIAPI();
61 
62 
65 
71  void connect(const std::string& host, int port);
72 
74  void setOrder(int order);
75 
77  void close();
79 
81  void simulationStep(int time = 0);
82 
84  void load(const std::vector<std::string>& args);
85 
88  int getUnsignedByte(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
89  int getByte(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
90  int getInt(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
91  double getDouble(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
92  libsumo::TraCIPositionVector getPolygon(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
93  libsumo::TraCIPosition getPosition(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
94  libsumo::TraCIPosition getPosition3D(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
95  std::string getString(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
96  std::vector<std::string> getStringVector(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
97  libsumo::TraCIColor getColor(int cmd, int var, const std::string& id, tcpip::Storage* add = 0);
99 
100 
107  public:
111  TraCIScopeWrapper(TraCIAPI& parent, int cmdGetID, int cmdSetID, int subscribeID, int contextSubscribeID) :
112  myParent(parent),
113  myCmdGetID(cmdGetID),
114  myCmdSetID(cmdSetID),
115  mySubscribeID(subscribeID),
116  myContextSubscribeID(contextSubscribeID) {
117  }
118 
120  virtual ~TraCIScopeWrapper() {}
121 
123  std::string getParameter(const std::string& objectID, const std::string& key) const;
124 
126  void setParameter(const std::string& objectID, const std::string& key, const std::string& value) const;
127 
128  void subscribe(const std::string& objID, const std::vector<int>& vars, double beginTime, double endTime) const;
129  void subscribeContext(const std::string& objID, int domain, double range, const std::vector<int>& vars, double beginTime, double endTime) const;
130 
132  const libsumo::TraCIResults getSubscriptionResults(const std::string& objID) const;
133 
135  const libsumo::SubscriptionResults getContextSubscriptionResults(const std::string& objID) const;
136 
137  // the following are only for internal use
141 
142 
143  protected:
152 
153 
154  private:
157 
160 
161  };
162 
163 
164 
165 
166 
170  class EdgeScope : public TraCIScopeWrapper {
171  public:
173  virtual ~EdgeScope() {}
174 
175  std::vector<std::string> getIDList() const;
176  int getIDCount() const;
177  double getAdaptedTraveltime(const std::string& edgeID, double time) const;
178  double getEffort(const std::string& edgeID, double time) const;
179  double getCO2Emission(const std::string& edgeID) const;
180  double getCOEmission(const std::string& edgeID) const;
181  double getHCEmission(const std::string& edgeID) const;
182  double getPMxEmission(const std::string& edgeID) const;
183  double getNOxEmission(const std::string& edgeID) const;
184  double getFuelConsumption(const std::string& edgeID) const;
185  double getNoiseEmission(const std::string& edgeID) const;
186  double getElectricityConsumption(const std::string& edgeID) const;
187  double getLastStepMeanSpeed(const std::string& edgeID) const;
188  double getLastStepOccupancy(const std::string& edgeID) const;
189  double getLastStepLength(const std::string& edgeID) const;
190  double getTraveltime(const std::string& edgeID) const;
191  int getLastStepVehicleNumber(const std::string& edgeID) const;
192  double getLastStepHaltingNumber(const std::string& edgeID) const;
193  std::vector<std::string> getLastStepVehicleIDs(const std::string& edgeID) const;
194  int getLaneNumber(const std::string& edgeID) const;
195 
196  void adaptTraveltime(const std::string& edgeID, double time, double beginSeconds = 0., double endSeconds = std::numeric_limits<double>::max()) const;
197  void setEffort(const std::string& edgeID, double effort, double beginSeconds = 0., double endSeconds = std::numeric_limits<double>::max()) const;
198  void setMaxSpeed(const std::string& edgeID, double speed) const;
199 
200  private:
202  EdgeScope(const EdgeScope& src);
203 
205  EdgeScope& operator=(const EdgeScope& src);
206 
207  };
208 
209 
210 
211 
212 
216  class GUIScope : public TraCIScopeWrapper {
217  public:
219  virtual ~GUIScope() {}
220 
221  std::vector<std::string> getIDList() const;
222  double getZoom(const std::string& viewID = DEFAULT_VIEW) const;
223  libsumo::TraCIPosition getOffset(const std::string& viewID = DEFAULT_VIEW) const;
224  std::string getSchema(const std::string& viewID = DEFAULT_VIEW) const;
225  libsumo::TraCIPositionVector getBoundary(const std::string& viewID = DEFAULT_VIEW) const;
226  void setZoom(const std::string& viewID, double zoom) const;
227  void setOffset(const std::string& viewID, double x, double y) const;
228  void setSchema(const std::string& viewID, const std::string& schemeName) const;
229  void setBoundary(const std::string& viewID, double xmin, double ymin, double xmax, double ymax) const;
230  void screenshot(const std::string& viewID, const std::string& filename, const int width = -1, const int height = -1) const;
231  void trackVehicle(const std::string& viewID, const std::string& vehID) const;
232 
233  private:
235  GUIScope(const GUIScope& src);
236 
238  GUIScope& operator=(const GUIScope& src);
239 
240  };
241 
242 
243 
244 
245 
250  public:
252  virtual ~InductionLoopScope() {}
253 
254  std::vector<std::string> getIDList() const;
255  double getPosition(const std::string& loopID) const;
256  std::string getLaneID(const std::string& loopID) const;
257  int getLastStepVehicleNumber(const std::string& loopID) const;
258  double getLastStepMeanSpeed(const std::string& loopID) const;
259  std::vector<std::string> getLastStepVehicleIDs(const std::string& loopID) const;
260  double getLastStepOccupancy(const std::string& loopID) const;
261  double getLastStepMeanLength(const std::string& loopID) const;
262  double getTimeSinceDetection(const std::string& loopID) const;
263  std::vector<libsumo::TraCIVehicleData> getVehicleData(const std::string& loopID) const;
264 
265 
266  private:
269 
272 
273  };
274 
275 
276 
277 
278 
283  public:
285  virtual ~JunctionScope() {}
286 
287  std::vector<std::string> getIDList() const;
288  libsumo::TraCIPosition getPosition(const std::string& junctionID) const;
289 
290  private:
292  JunctionScope(const JunctionScope& src);
293 
296 
297  };
298 
299 
300 
301 
302 
306  class LaneScope : public TraCIScopeWrapper {
307  public:
309  virtual ~LaneScope() {}
310 
311  std::vector<std::string> getIDList() const;
312  int getIDCount() const;
313  double getLength(const std::string& laneID) const;
314  double getMaxSpeed(const std::string& laneID) const;
315  double getWidth(const std::string& laneID) const;
316  std::vector<std::string> getAllowed(const std::string& laneID) const;
317  std::vector<std::string> getDisallowed(const std::string& laneID) const;
318  int getLinkNumber(const std::string& laneID) const;
319  std::vector<libsumo::TraCIConnection> getLinks(const std::string& laneID) const;
320  libsumo::TraCIPositionVector getShape(const std::string& laneID) const;
321  std::string getEdgeID(const std::string& laneID) const;
322  double getCO2Emission(const std::string& laneID) const;
323  double getCOEmission(const std::string& laneID) const;
324  double getHCEmission(const std::string& laneID) const;
325  double getPMxEmission(const std::string& laneID) const;
326  double getNOxEmission(const std::string& laneID) const;
327  double getFuelConsumption(const std::string& laneID) const;
328  double getNoiseEmission(const std::string& laneID) const;
329  double getElectricityConsumption(const std::string& laneID) const;
330  double getLastStepMeanSpeed(const std::string& laneID) const;
331  double getLastStepOccupancy(const std::string& laneID) const;
332  double getLastStepLength(const std::string& laneID) const;
333  double getTraveltime(const std::string& laneID) const;
334  int getLastStepVehicleNumber(const std::string& laneID) const;
335  int getLastStepHaltingNumber(const std::string& laneID) const;
336  std::vector<std::string> getLastStepVehicleIDs(const std::string& laneID) const;
337  std::vector<std::string> getFoes(const std::string& laneID, const std::string& toLaneID) const;
338  std::vector<std::string> getInternalFoes(const std::string& laneID) const;
339 
340  void setAllowed(const std::string& laneID, const std::vector<std::string>& allowedClasses) const;
341  void setDisallowed(const std::string& laneID, const std::vector<std::string>& disallowedClasses) const;
342  void setMaxSpeed(const std::string& laneID, double speed) const;
343  void setLength(const std::string& laneID, double length) const;
344 
345  private:
347  LaneScope(const LaneScope& src);
348 
350  LaneScope& operator=(const LaneScope& src);
351 
352  };
353 
354 
359  public:
361  virtual ~LaneAreaScope() {}
362 
363  std::vector<std::string> getIDList() const;
364 
365  private:
367  LaneAreaScope(const LaneAreaScope& src);
368 
371 
372  };
373 
374 
378  class MeMeScope : public TraCIScopeWrapper {
379  public:
381  virtual ~MeMeScope() {}
382 
383  std::vector<std::string> getIDList() const;
384  int getLastStepVehicleNumber(const std::string& detID) const;
385  double getLastStepMeanSpeed(const std::string& detID) const;
386  std::vector<std::string> getLastStepVehicleIDs(const std::string& detID) const;
387  int getLastStepHaltingNumber(const std::string& detID) const;
388 
389  private:
391  MeMeScope(const MeMeScope& src);
392 
394  MeMeScope& operator=(const MeMeScope& src);
395 
396  };
397 
398 
399 
400 
401 
405  class POIScope : public TraCIScopeWrapper {
406  public:
408  virtual ~POIScope() {}
409 
410  std::vector<std::string> getIDList() const;
411  std::string getType(const std::string& poiID) const;
412  libsumo::TraCIPosition getPosition(const std::string& poiID) const;
413  libsumo::TraCIColor getColor(const std::string& poiID) const;
414 
415  void setType(const std::string& poiID, const std::string& setType) const;
416  void setPosition(const std::string& poiID, double x, double y) const;
417  void setColor(const std::string& poiID, const libsumo::TraCIColor& c) const;
418  void add(const std::string& poiID, double x, double y, const libsumo::TraCIColor& c, const std::string& type, int layer) const;
419  void remove(const std::string& poiID, int layer = 0) const;
420 
421  private:
423  POIScope(const POIScope& src);
424 
426  POIScope& operator=(const POIScope& src);
427 
428  };
429 
430 
431 
432 
433 
438  public:
440  virtual ~PolygonScope() {}
441 
442  std::vector<std::string> getIDList() const;
443  std::string getType(const std::string& polygonID) const;
444  libsumo::TraCIPositionVector getShape(const std::string& polygonID) const;
445  libsumo::TraCIColor getColor(const std::string& polygonID) const;
446  void setType(const std::string& polygonID, const std::string& setType) const;
447  void setShape(const std::string& polygonID, const libsumo::TraCIPositionVector& shape) const;
448  void setColor(const std::string& polygonID, const libsumo::TraCIColor& c) const;
449  void add(const std::string& polygonID, const libsumo::TraCIPositionVector& shape, const libsumo::TraCIColor& c, bool fill, const std::string& type, int layer) const;
450  void remove(const std::string& polygonID, int layer = 0) const;
451 
452  private:
454  PolygonScope(const PolygonScope& src);
455 
457  PolygonScope& operator=(const PolygonScope& src);
458 
459  };
460 
461 
462 
463 
464 
468  class RouteScope : public TraCIScopeWrapper {
469  public:
471  virtual ~RouteScope() {}
472 
473  std::vector<std::string> getIDList() const;
474  std::vector<std::string> getEdges(const std::string& routeID) const;
475 
476  void add(const std::string& routeID, const std::vector<std::string>& edges) const;
477 
478  private:
480  RouteScope(const RouteScope& src);
481 
483  RouteScope& operator=(const RouteScope& src);
484 
485  };
486 
487 
488 
493  public:
495  virtual ~SimulationScope() {}
496 
497  int getCurrentTime() const;
498  double getTime() const;
499  int getLoadedNumber() const;
500  std::vector<std::string> getLoadedIDList() const;
501  int getDepartedNumber() const;
502  std::vector<std::string> getDepartedIDList() const;
503  int getArrivedNumber() const;
504  std::vector<std::string> getArrivedIDList() const;
505  int getStartingTeleportNumber() const;
506  std::vector<std::string> getStartingTeleportIDList() const;
507  int getEndingTeleportNumber() const;
508  std::vector<std::string> getEndingTeleportIDList() const;
509  double getDeltaT() const;
510  libsumo::TraCIPositionVector getNetBoundary() const;
511  int getMinExpectedNumber() const;
512  double getDistance2D(double x1, double y1, double x2, double y2, bool isGeo = false, bool isDriving = false);
513  double getDistanceRoad(const std::string& edgeID1, double pos1, const std::string& edgeID2, double pos2, bool isDriving = false);
514 
515 
516  private:
518  SimulationScope(const SimulationScope& src);
519 
522 
523  };
524 
525 
526 
527 
528 
533  public:
535  virtual ~TrafficLightScope() {}
536 
537  std::vector<std::string> getIDList() const;
538  int getIDCount() const;
539  std::string getRedYellowGreenState(const std::string& tlsID) const;
540  std::vector<libsumo::TraCILogic> getCompleteRedYellowGreenDefinition(const std::string& tlsID) const;
541  std::vector<std::string> getControlledLanes(const std::string& tlsID) const;
542  std::vector<std::vector<libsumo::TraCILink> > getControlledLinks(const std::string& tlsID) const;
543  std::string getProgram(const std::string& tlsID) const;
544  int getPhase(const std::string& tlsID) const;
545  double getPhaseDuration(const std::string& tlsID) const;
546  double getNextSwitch(const std::string& tlsID) const;
547 
548  void setRedYellowGreenState(const std::string& tlsID, const std::string& state) const;
549  void setPhase(const std::string& tlsID, int index) const;
550  void setProgram(const std::string& tlsID, const std::string& programID) const;
551  void setPhaseDuration(const std::string& tlsID, double phaseDuration) const;
552  void setCompleteRedYellowGreenDefinition(const std::string& tlsID, const libsumo::TraCILogic& logic) const;
553 
554  private:
557 
560 
561  };
562 
563 
564 
565 
566 
571  public:
573  virtual ~VehicleTypeScope() {}
574 
575  std::vector<std::string> getIDList() const;
576  double getLength(const std::string& typeID) const;
577  double getMaxSpeed(const std::string& typeID) const;
578  double getSpeedFactor(const std::string& typeID) const;
579  double getSpeedDeviation(const std::string& typeID) const;
580  double getAccel(const std::string& typeID) const;
581  double getDecel(const std::string& typeID) const;
582  double getEmergencyDecel(const std::string& typeID) const;
583  double getApparentDecel(const std::string& typeID) const;
584  double getImperfection(const std::string& typeID) const;
585  double getTau(const std::string& typeID) const;
586  std::string getVehicleClass(const std::string& typeID) const;
587  std::string getEmissionClass(const std::string& typeID) const;
588  std::string getShapeClass(const std::string& typeID) const;
589  double getMinGap(const std::string& typeID) const;
590  double getWidth(const std::string& typeID) const;
591  double getHeight(const std::string& typeID) const;
592  libsumo::TraCIColor getColor(const std::string& typeID) const;
593  double getMinGapLat(const std::string& typeID) const;
594  double getMaxSpeedLat(const std::string& typeID) const;
595  std::string getLateralAlignment(const std::string& typeID) const;
596 
597  void setLength(const std::string& typeID, double length) const;
598  void setMaxSpeed(const std::string& typeID, double speed) const;
599  void setVehicleClass(const std::string& typeID, const std::string& clazz) const;
600  void setSpeedFactor(const std::string& typeID, double factor) const;
601  void setSpeedDeviation(const std::string& typeID, double deviation) const;
602  void setEmissionClass(const std::string& typeID, const std::string& clazz) const;
603  void setShapeClass(const std::string& typeID, const std::string& shapeClass) const;
604  void setWidth(const std::string& typeID, double width) const;
605  void setHeight(const std::string& typeID, double height) const;
606  void setMinGap(const std::string& typeID, double minGap) const;
607  void setAccel(const std::string& typeID, double accel) const;
608  void setDecel(const std::string& typeID, double decel) const;
609  void setEmergencyDecel(const std::string& typeID, double decel) const;
610  void setApparentDecel(const std::string& typeID, double decel) const;
611  void setImperfection(const std::string& typeID, double imperfection) const;
612  void setTau(const std::string& typeID, double tau) const;
613  void setColor(const std::string& typeID, const libsumo::TraCIColor& c) const;
614  void setMinGapLat(const std::string& typeID, double minGapLat) const;
615  void setMaxSpeedLat(const std::string& typeID, double speed) const;
616  void setLateralAlignment(const std::string& typeID, const std::string& latAlignment) const;
617  void copy(const std::string& origTypeID, const std::string& newTypeID) const;
618 
619  private:
622 
625 
626  };
627 
628 
629 
630 
631 
636  public:
638  virtual ~VehicleScope() {}
639 
641  SIGNAL_BLINKER_RIGHT = 1,
642  SIGNAL_BLINKER_LEFT = 2,
643  SIGNAL_BLINKER_EMERGENCY = 4,
644  SIGNAL_BRAKELIGHT = 8,
645  SIGNAL_FRONTLIGHT = 16,
646  SIGNAL_FOGLIGHT = 32,
647  SIGNAL_HIGHBEAM = 64,
648  SIGNAL_BACKDRIVE = 128,
649  SIGNAL_WIPER = 256,
650  SIGNAL_DOOR_OPEN_LEFT = 512,
651  SIGNAL_DOOR_OPEN_RIGHT = 1024,
652  SIGNAL_EMERGENCY_BLUE = 2048,
653  SIGNAL_EMERGENCY_RED = 4096,
654  SIGNAL_EMERGENCY_YELLOW = 8192,
655  SIGNAL_RESET = -1, /*< sending a negative signal resets all signals to their computed values immediately */
656  };
657 
660  std::vector<std::string> getIDList() const;
661  int getIDCount() const;
662  double getSpeed(const std::string& vehicleID) const;
663  double getAcceleration(const std::string& vehicleID) const;
664  libsumo::TraCIPosition getPosition(const std::string& vehicleID) const;
665  libsumo::TraCIPosition getPosition3D(const std::string& vehicleID) const;
666  double getAngle(const std::string& vehicleID) const;
667  std::string getRoadID(const std::string& vehicleID) const;
668  std::string getLaneID(const std::string& vehicleID) const;
669  int getLaneIndex(const std::string& vehicleID) const;
670  std::string getTypeID(const std::string& vehicleID) const;
671  std::string getRouteID(const std::string& vehicleID) const;
672  int getRouteIndex(const std::string& vehicleID) const;
673  std::vector<std::string> getRoute(const std::string& vehicleID) const;
674  libsumo::TraCIColor getColor(const std::string& vehicleID) const;
675  double getLanePosition(const std::string& vehicleID) const;
676  double getDistance(const std::string& vehicleID) const;
677  int getSignals(const std::string& vehicleID) const;
678  double getCO2Emission(const std::string& vehicleID) const;
679  double getCOEmission(const std::string& vehicleID) const;
680  double getHCEmission(const std::string& vehicleID) const;
681  double getPMxEmission(const std::string& vehicleID) const;
682  double getNOxEmission(const std::string& vehicleID) const;
683  double getFuelConsumption(const std::string& vehicleID) const;
684  double getNoiseEmission(const std::string& vehicleID) const;
685  double getElectricityConsumption(const std::string& vehicleID) const;
686  int getSpeedMode(const std::string& vehicleID) const;
687  int getStopState(const std::string& vehicleID) const;
688  double getWaitingTime(const std::string& vehicleID) const;
689  double getAccumulatedWaitingTime(const std::string& vehicleID) const;
690  double getSlope(const std::string& vehicleID) const;
691  double getAllowedSpeed(const std::string& vehicleID) const;
692  int getPersonNumber(const std::string& vehicleID) const;
693  std::vector<std::string> getPersonIDList(const std::string& vehicleID) const;
694  double getSpeedWithoutTraCI(const std::string& vehicleID) const;
695  bool isRouteValid(const std::string& vehicleID) const;
696  double getLateralLanePosition(const std::string& vehicleID) const;
697  double getSpeedFactor(const std::string& vehicleID) const;
698  std::string getLine(const std::string& vehicleID) const;
699  std::vector<std::string> getVia(const std::string& vehicleID) const;
700  std::vector<libsumo::TraCINextTLSData> getNextTLS(const std::string& vehID) const;
701  std::vector<libsumo::TraCIBestLanesData> getBestLanes(const std::string& vehicleID) const;
702  std::pair<std::string, double> getLeader(const std::string& vehicleID, double dist) const;
703  int getRoutingMode(const std::string& vehicleID) const;
704  std::pair<int, int> getLaneChangeState(const std::string& vehicleID, int direction) const;
706 
709  double getLength(const std::string& vehicleID) const;
710  double getMaxSpeed(const std::string& vehicleID) const;
711  double getAccel(const std::string& vehicleID) const;
712  double getDecel(const std::string& vehicleID) const;
713  double getEmergencyDecel(const std::string& vehicleID) const;
714  double getApparentDecel(const std::string& vehicleID) const;
715  double getTau(const std::string& vehicleID) const;
716  double getImperfection(const std::string& vehicleID) const;
717  double getSpeedDeviation(const std::string& vehicleID) const;
718  double getMinGap(const std::string& vehicleID) const;
719  double getWidth(const std::string& vehicleID) const;
720  double getHeight(const std::string& veihcleID) const;
721  double getMaxSpeedLat(const std::string& vehicleID) const;
722  double getMinGapLat(const std::string& vehicleID) const;
723  std::string getVehicleClass(const std::string& vehicleID) const;
724  std::string getEmissionClass(const std::string& vehicleID) const;
725  std::string getShapeClass(const std::string& vehicleID) const;
726  std::string getLateralAlignment(const std::string& vehicleID) const;
728 
731  void add(const std::string& vehicleID,
732  const std::string& routeID,
733  const std::string& typeID = "DEFAULT_VEHTYPE",
734  std::string depart = "-1",
735  const std::string& departLane = "first",
736  const std::string& departPos = "base",
737  const std::string& departSpeed = "0",
738  const std::string& arrivalLane = "current",
739  const std::string& arrivalPos = "max",
740  const std::string& arrivalSpeed = "current",
741  const std::string& fromTaz = "",
742  const std::string& toTaz = "",
743  const std::string& line = "",
744  int personCapacity = 0,
745  int personNumber = 0) const;
746 
747  void changeTarget(const std::string& vehicleID, const std::string& edgeID) const;
748  void changeLane(const std::string& vehicleID, int laneIndex, double duration) const;
749  void changeLaneRelative(const std::string& vehicleID, int laneChange, double duration) const;
750  void changeSublane(const std::string& vehicleID, double latDist) const;
751  void setRouteID(const std::string& vehicleID, const std::string& routeID) const;
752  void setRoute(const std::string& vehicleID, const std::vector<std::string>& edge) const;
753  void rerouteTraveltime(const std::string& vehicleID, bool currentTravelTimes = true) const;
754  void moveTo(const std::string& vehicleID, const std::string& laneID, double position) const;
755  void moveToXY(const std::string& vehicleID, const std::string& edgeID, const int lane, const double x, const double y, const double angle, const int keepRoute) const;
756  void slowDown(const std::string& vehicleID, double speed, double duration) const;
757  void setSpeed(const std::string& vehicleID, double speed) const;
758  void setSpeedMode(const std::string& vehicleID, int mode) const;
759  void setStop(const std::string vehicleID, const std::string edgeID, const double endPos = 1.,
760  const int laneIndex = 0, const double duration = std::numeric_limits<double>::max(),
761  const int flags = 0, const double startPos = std::numeric_limits<int>::min(),
762  const double until = -1) const;
763  void setType(const std::string& vehicleID, const std::string& typeID) const;
764  void remove(const std::string& vehicleID, char reason = REMOVE_VAPORIZED) const;
765  void setColor(const std::string& vehicleID, const libsumo::TraCIColor& c) const;
766  void setLine(const std::string& vehicleID, const std::string& line) const;
767  void setVia(const std::string& vehicleID, const std::vector<std::string>& via) const;
768  void setSignals(const std::string& vehicleID, int signals) const;
769  void setRoutingMode(const std::string& vehicleID, int routingMode) const;
771 
774  void setShapeClass(const std::string& vehicleID, const std::string& clazz) const;
775  void setEmissionClass(const std::string& vehicleID, const std::string& clazz) const;
776  void setSpeedFactor(const std::string& vehicleID, double factor) const;
777  void setMaxSpeed(const std::string& vehicleID, double speed) const;
779 
780  private:
782  VehicleScope(const VehicleScope& src);
783 
785  VehicleScope& operator=(const VehicleScope& src);
786 
787  };
788 
793  public:
795  virtual ~PersonScope() {}
796 
797  std::vector<std::string> getIDList() const;
798  int getIDCount() const;
799  double getSpeed(const std::string& personID) const;
800  libsumo::TraCIPosition getPosition(const std::string& personID) const;
801  std::string getRoadID(const std::string& personID) const;
802  std::string getTypeID(const std::string& personID) const;
803  double getWaitingTime(const std::string& personID) const;
804  std::string getNextEdge(const std::string& personID) const;
805  std::string getVehicle(const std::string& personID) const;
806  int getRemainingStages(const std::string& personID) const;
807  int getStage(const std::string& personID, int nextStageIndex = 0) const;
808  std::vector<std::string> getEdges(const std::string& personID, int nextStageIndex = 0) const;
809  // TODO:
810  // double getAngle(const std::string& personID) const;
811  // double getLanePosition(const std::string& personID) const;
812  // libsumo::TraCIColor getColor(const std::string& personID) const;
813 
814 
815  void removeStages(const std::string& personID) const;
816  void add(const std::string& personID, const std::string& edgeID, double pos, double depart = DEPARTFLAG_NOW, const std::string typeID = "DEFAULT_PEDTYPE");
817  void appendWaitingStage(const std::string& personID, double duration, const std::string& description = "waiting", const std::string& stopID = "");
818  void appendWalkingStage(const std::string& personID, const std::vector<std::string>& edges, double arrivalPos, double duration = -1, double speed = -1, const std::string& stopID = "");
819  void appendDrivingStage(const std::string& personID, const std::string& toEdge, const std::string& lines, const std::string& stopID = "");
820  void removeStage(const std::string& personID, int nextStageIndex) const;
821  void rerouteTraveltime(const std::string& personID) const;
822  void setSpeed(const std::string& personID, double speed) const;
823  void setType(const std::string& personID, const std::string& typeID) const;
824  void setLength(const std::string& personID, double length) const;
825  void setWidth(const std::string& personID, double width) const;
826  void setHeight(const std::string& personID, double height) const;
827  void setMinGap(const std::string& personID, double minGap) const;
828  void setColor(const std::string& personID, const libsumo::TraCIColor& c) const;
829 
830  private:
832  PersonScope(const PersonScope& src);
833 
835  PersonScope& operator=(const PersonScope& src);
836  };
837 
838 
839 
840 public:
871 
872 
873 protected:
876 
879  void send_commandSimulationStep(double time) const;
880 
881 
884  void send_commandClose() const;
885 
886 
889  void send_commandSetOrder(int order) const;
890 
897  void send_commandGetVariable(int domID, int varID, const std::string& objID, tcpip::Storage* add = 0) const;
898 
899 
906  void send_commandSetValue(int domID, int varID, const std::string& objID, tcpip::Storage& content) const;
907 
908 
916  void send_commandSubscribeObjectVariable(int domID, const std::string& objID, double beginTime, double endTime, const std::vector<int>& vars) const;
917 
918 
928  void send_commandSubscribeObjectContext(int domID, const std::string& objID, double beginTime, double endTime,
929  int domain, double range, const std::vector<int>& vars) const;
931 
932 
933  void send_commandMoveToXY(const std::string& vehicleID, const std::string& edgeID, const int lane,
934  const double x, const double y, const double angle, const int keepRoute) const;
935 
936 
939 
946  void check_resultState(tcpip::Storage& inMsg, int command, bool ignoreCommandId = false, std::string* acknowledgement = 0) const;
947 
951  int check_commandGetResult(tcpip::Storage& inMsg, int command, int expectedType = -1, bool ignoreCommandId = false) const;
952 
953  void processGET(tcpip::Storage& inMsg, int command, int expectedType, bool ignoreCommandId = false) const;
955 
956  void readVariableSubscription(int cmdId, tcpip::Storage& inMsg);
957  void readContextSubscription(int cmdId, tcpip::Storage& inMsg);
958  void readVariables(tcpip::Storage& inMsg, const std::string& objectID, int variableCount, libsumo::SubscriptionResults& into);
959 
960  template <class T>
961  static inline std::string toString(const T& t, std::streamsize accuracy = PRECISION) {
962  std::ostringstream oss;
963  oss.setf(std::ios::fixed , std::ios::floatfield);
964  oss << std::setprecision(accuracy);
965  oss << t;
966  return oss.str();
967  }
968 
970  void closeSocket();
971 
972 protected:
973  std::map<int, TraCIScopeWrapper*> myDomains;
976 };
977 
978 
979 #endif
980 
981 /****************************************************************************/
982 
EdgeScope edge
Scope for interaction with edges.
Definition: TraCIAPI.h:842
#define DEPARTFLAG_NOW
LaneScope(TraCIAPI &parent)
Definition: TraCIAPI.h:308
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
Definition: TraCIDefs.h:199
std::string getParameter(const std::string &objectID, const std::string &key) const
retrieve generic paramter
Definition: TraCIAPI.cpp:3130
void send_commandSetValue(int domID, int varID, const std::string &objID, tcpip::Storage &content) const
Sends a SetVariable request.
Definition: TraCIAPI.cpp:187
#define CMD_SUBSCRIBE_VEHICLE_CONTEXT
#define CMD_SUBSCRIBE_LANE_VARIABLE
libsumo::SubscriptionResults & getModifiableSubscriptionResults()
Definition: TraCIAPI.cpp:3215
libsumo::SubscriptionResults & getModifiableContextSubscriptionResults(const std::string &objID)
Definition: TraCIAPI.cpp:3221
#define CMD_SUBSCRIBE_LANEAREA_VARIABLE
tcpip::Socket * mySocket
The socket.
Definition: TraCIAPI.h:975
C++ TraCI client API implementation.
Definition: TraCIAPI.h:52
void close()
ends the simulation and closes the connection
Definition: TraCIAPI.cpp:102
Scope for interaction with edges.
Definition: TraCIAPI.h:170
void check_resultState(tcpip::Storage &inMsg, int command, bool ignoreCommandId=false, std::string *acknowledgement=0) const
Validates the result state of a command.
Definition: TraCIAPI.cpp:286
void connect(const std::string &host, int port)
Connects to the specified SUMO server.
Definition: TraCIAPI.cpp:74
#define CMD_GET_TL_VARIABLE
#define CMD_SUBSCRIBE_JUNCTION_CONTEXT
MeMeScope(TraCIAPI &parent)
Definition: TraCIAPI.h:380
void setOrder(int order)
set priority (execution order) for the client
Definition: TraCIAPI.cpp:87
#define CMD_GET_VEHICLE_VARIABLE
#define CMD_SUBSCRIBE_SIM_CONTEXT
#define CMD_SUBSCRIBE_VEHICLETYPE_CONTEXT
virtual ~PolygonScope()
Definition: TraCIAPI.h:440
#define CMD_GET_INDUCTIONLOOP_VARIABLE
void setParameter(const std::string &objectID, const std::string &key, const std::string &value) const
set generic paramter
Definition: TraCIAPI.cpp:3139
GUIScope(TraCIAPI &parent)
Definition: TraCIAPI.h:218
libsumo::TraCIPositionVector getPolygon(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:392
TraCIScopeWrapper & operator=(const TraCIScopeWrapper &src)
invalidated assignment operator
JunctionScope junction
Scope for interaction with junctions.
Definition: TraCIAPI.h:848
#define CMD_SUBSCRIBE_INDUCTIONLOOP_VARIABLE
PersonScope(TraCIAPI &parent)
Definition: TraCIAPI.h:794
void send_commandGetVariable(int domID, int varID, const std::string &objID, tcpip::Storage *add=0) const
Sends a GetVariable request.
Definition: TraCIAPI.cpp:160
std::map< int, std::shared_ptr< TraCIResult > > TraCIResults
{variable->value}
Definition: TraCIDefs.h:197
#define CMD_GET_LANEAREA_VARIABLE
LaneScope lane
Scope for interaction with lanes.
Definition: TraCIAPI.h:850
#define CMD_GET_PERSON_VARIABLE
PersonScope person
Scope for interaction with persons.
Definition: TraCIAPI.h:856
#define DEFAULT_VIEW
Definition: TraCIAPI.h:40
void load(const std::vector< std::string > &args)
Let sumo load a simulation using the given command line like options.
Definition: TraCIAPI.cpp:586
Scope for interaction with vehicles.
Definition: TraCIAPI.h:635
virtual ~RouteScope()
Definition: TraCIAPI.h:471
TraCIScopeWrapper(TraCIAPI &parent, int cmdGetID, int cmdSetID, int subscribeID, int contextSubscribeID)
Constructor.
Definition: TraCIAPI.h:111
#define CMD_SUBSCRIBE_POLYGON_CONTEXT
void send_commandSetOrder(int order) const
Sends a SetOrder command.
Definition: TraCIAPI.cpp:147
Scope for interaction with traffic lights.
Definition: TraCIAPI.h:532
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
Definition: TraCIDefs.h:200
virtual ~LaneScope()
Definition: TraCIAPI.h:309
void closeSocket()
Closes the connection.
Definition: TraCIAPI.cpp:112
#define CMD_GET_POLYGON_VARIABLE
#define CMD_SUBSCRIBE_JUNCTION_VARIABLE
Scope for interaction with lane area detectors.
Definition: TraCIAPI.h:358
#define CMD_SUBSCRIBE_ROUTE_CONTEXT
libsumo::TraCIColor getColor(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:459
Scope for interaction with the gui.
Definition: TraCIAPI.h:216
#define CMD_SET_EDGE_VARIABLE
#define CMD_SET_GUI_VARIABLE
TrafficLightScope trafficlights
Scope for interaction with traffic lights.
Definition: TraCIAPI.h:866
const libsumo::SubscriptionResults getAllSubscriptionResults() const
Definition: TraCIAPI.cpp:3176
Scope for interaction with routes.
Definition: TraCIAPI.h:468
#define CMD_SUBSCRIBE_EDGE_VARIABLE
#define CMD_GET_ROUTE_VARIABLE
#define CMD_SUBSCRIBE_INDUCTIONLOOP_CONTEXT
InductionLoopScope inductionloop
Scope for interaction with inductive loops.
Definition: TraCIAPI.h:846
Scope for interaction with inductive loops.
Definition: TraCIAPI.h:249
#define CMD_SET_JUNCTION_VARIABLE
#define CMD_SUBSCRIBE_POI_VARIABLE
POIScope(TraCIAPI &parent)
Definition: TraCIAPI.h:407
std::map< int, TraCIScopeWrapper * > myDomains
Definition: TraCIAPI.h:973
virtual ~MeMeScope()
Definition: TraCIAPI.h:381
#define CMD_SET_TL_VARIABLE
Scope for interaction with POIs.
Definition: TraCIAPI.h:405
#define CMD_SUBSCRIBE_LANE_CONTEXT
libsumo::TraCIPosition getPosition3D(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:423
#define CMD_SUBSCRIBE_SIM_VARIABLE
#define CMD_GET_VEHICLETYPE_VARIABLE
Scope for interaction with the simulation.
Definition: TraCIAPI.h:492
Scope for interaction with multi entry/-exit detectors.
Definition: TraCIAPI.h:378
const libsumo::SubscriptionResults getContextSubscriptionResults(const std::string &objID) const
Definition: TraCIAPI.cpp:3198
virtual ~EdgeScope()
Definition: TraCIAPI.h:173
void readVariables(tcpip::Storage &inMsg, const std::string &objectID, int variableCount, libsumo::SubscriptionResults &into)
Definition: TraCIAPI.cpp:473
#define CMD_SET_ROUTE_VARIABLE
InductionLoopScope(TraCIAPI &parent)
Definition: TraCIAPI.h:251
MeMeScope multientryexit
Scope for interaction with multi-entry/-exit detectors.
Definition: TraCIAPI.h:854
#define CMD_SUBSCRIBE_GUI_CONTEXT
Scope for interaction with vehicle types.
Definition: TraCIAPI.h:570
PolygonScope(TraCIAPI &parent)
Definition: TraCIAPI.h:439
#define PRECISION
Definition: TraCIAPI.h:41
#define CMD_GET_POI_VARIABLE
virtual ~JunctionScope()
Definition: TraCIAPI.h:285
#define CMD_SUBSCRIBE_MULTIENTRYEXIT_VARIABLE
libsumo::ContextSubscriptionResults myContextSubscriptionResults
Definition: TraCIAPI.h:151
~TraCIAPI()
Destructor.
Definition: TraCIAPI.cpp:68
#define CMD_SUBSCRIBE_MULTIENTRYEXIT_CONTEXT
#define CMD_SET_VEHICLETYPE_VARIABLE
RouteScope route
Scope for interaction with routes.
Definition: TraCIAPI.h:862
Scope for interaction with polygons.
Definition: TraCIAPI.h:437
void send_commandMoveToXY(const std::string &vehicleID, const std::string &edgeID, const int lane, const double x, const double y, const double angle, const int keepRoute) const
Definition: TraCIAPI.cpp:266
void send_commandSubscribeObjectVariable(int domID, const std::string &objID, double beginTime, double endTime, const std::vector< int > &vars) const
Sends a SubscribeVariable request.
Definition: TraCIAPI.cpp:208
#define CMD_SUBSCRIBE_GUI_VARIABLE
#define CMD_GET_LANE_VARIABLE
void send_commandSubscribeObjectContext(int domID, const std::string &objID, double beginTime, double endTime, int domain, double range, const std::vector< int > &vars) const
Sends a SubscribeContext request.
Definition: TraCIAPI.cpp:236
int getInt(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:374
#define CMD_SUBSCRIBE_LANEAREA_CONTEXT
libsumo::SubscriptionResults mySubscriptionResults
Definition: TraCIAPI.h:150
#define CMD_SET_VEHICLE_VARIABLE
void subscribe(const std::string &objID, const std::vector< int > &vars, double beginTime, double endTime) const
Definition: TraCIAPI.cpp:3154
#define CMD_GET_SIM_VARIABLE
#define CMD_GET_EDGE_VARIABLE
int getByte(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:365
void subscribeContext(const std::string &objID, int domain, double range, const std::vector< int > &vars, double beginTime, double endTime) const
Definition: TraCIAPI.cpp:3166
static std::string toString(const T &t, std::streamsize accuracy=PRECISION)
Definition: TraCIAPI.h:961
#define CMD_GET_GUI_VARIABLE
#define CMD_SET_POI_VARIABLE
int getUnsignedByte(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:356
double getDouble(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:383
#define CMD_SUBSCRIBE_POLYGON_VARIABLE
Scope for interaction with vehicles.
Definition: TraCIAPI.h:792
#define CMD_SUBSCRIBE_TL_CONTEXT
#define CMD_SUBSCRIBE_EDGE_CONTEXT
#define CMD_GET_JUNCTION_VARIABLE
Scope for interaction with junctions.
Definition: TraCIAPI.h:282
#define CMD_SUBSCRIBE_PERSON_VARIABLE
TrafficLightScope(TraCIAPI &parent)
Definition: TraCIAPI.h:534
virtual ~VehicleScope()
Definition: TraCIAPI.h:638
#define CMD_SET_SIM_VARIABLE
const libsumo::TraCIResults getSubscriptionResults(const std::string &objID) const
Definition: TraCIAPI.cpp:3182
virtual ~SimulationScope()
Definition: TraCIAPI.h:495
std::vector< std::string > getStringVector(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:445
#define CMD_SUBSCRIBE_VEHICLETYPE_VARIABLE
EdgeScope(TraCIAPI &parent)
Definition: TraCIAPI.h:172
POIScope poi
Scope for interaction with POIs.
Definition: TraCIAPI.h:858
virtual ~POIScope()
Definition: TraCIAPI.h:408
virtual ~PersonScope()
Definition: TraCIAPI.h:795
#define CMD_SET_POLYGON_VARIABLE
SimulationScope simulation
Scope for interaction with the simulation.
Definition: TraCIAPI.h:864
Scope for interaction with lanes.
Definition: TraCIAPI.h:306
RouteScope(TraCIAPI &parent)
Definition: TraCIAPI.h:470
VehicleScope vehicle
Scope for interaction with vehicles.
Definition: TraCIAPI.h:868
std::vector< TraCIPosition > TraCIPositionVector
Definition: TraCIDefs.h:145
#define CMD_SUBSCRIBE_VEHICLE_VARIABLE
#define CMD_SUBSCRIBE_PERSON_CONTEXT
void processGET(tcpip::Storage &inMsg, int command, int expectedType, bool ignoreCommandId=false) const
Definition: TraCIAPI.cpp:349
void readVariableSubscription(int cmdId, tcpip::Storage &inMsg)
Definition: TraCIAPI.cpp:541
void simulationStep(int time=0)
Advances by one step (or up to the given time)
Definition: TraCIAPI.cpp:564
#define CMD_SET_LANE_VARIABLE
PolygonScope polygon
Scope for interaction with polygons.
Definition: TraCIAPI.h:860
#define CMD_GET_MULTIENTRYEXIT_VARIABLE
virtual ~TraCIScopeWrapper()
Destructor.
Definition: TraCIAPI.h:120
VehicleTypeScope(TraCIAPI &parent)
Definition: TraCIAPI.h:572
virtual ~GUIScope()
Definition: TraCIAPI.h:219
void send_commandSimulationStep(double time) const
Sends a SimulationStep command.
Definition: TraCIAPI.cpp:123
void send_commandClose() const
Sends a Close command.
Definition: TraCIAPI.cpp:136
TraCIAPI & myParent
The parent TraCI client which offers the connection.
Definition: TraCIAPI.h:145
int check_commandGetResult(tcpip::Storage &inMsg, int command, int expectedType=-1, bool ignoreCommandId=false) const
Validates the result state of a command.
Definition: TraCIAPI.cpp:325
libsumo::TraCIPosition getPosition(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:410
#define REMOVE_VAPORIZED
GUIScope gui
Scope for interaction with the gui.
Definition: TraCIAPI.h:844
#define CMD_SUBSCRIBE_TL_VARIABLE
std::string getString(int cmd, int var, const std::string &id, tcpip::Storage *add=0)
Definition: TraCIAPI.cpp:436
VehicleScope(TraCIAPI &parent)
Definition: TraCIAPI.h:637
SimulationScope(TraCIAPI &parent)
Definition: TraCIAPI.h:494
An abstract interface for accessing type-dependent values.
Definition: TraCIAPI.h:106
#define CMD_SET_PERSON_VARIABLE
LaneAreaScope lanearea
Scope for interaction with lanes.
Definition: TraCIAPI.h:852
TraCIAPI()
Constructor.
Definition: TraCIAPI.cpp:41
virtual ~LaneAreaScope()
Definition: TraCIAPI.h:361
A 3D-position.
Definition: TraCIDefs.h:107
#define CMD_SUBSCRIBE_POI_CONTEXT
const libsumo::ContextSubscriptionResults getAllContextSubscriptionResults() const
Definition: TraCIAPI.cpp:3192
LaneAreaScope(TraCIAPI &parent)
Definition: TraCIAPI.h:360
JunctionScope(TraCIAPI &parent)
Definition: TraCIAPI.h:284
void readContextSubscription(int cmdId, tcpip::Storage &inMsg)
Definition: TraCIAPI.cpp:549
#define CMD_SUBSCRIBE_ROUTE_VARIABLE
VehicleTypeScope vehicletype
Scope for interaction with vehicle types.
Definition: TraCIAPI.h:870