Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/tests/complex/traas/api/data/APITest.java
169689 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2017-2025 German Aerospace Center (DLR) and others.
4
// TraaS module
5
// Copyright (C) 2013-2017 Dresden University of Technology
6
// This program and the accompanying materials are made available under the
7
// terms of the Eclipse Public License 2.0 which is available at
8
// https://www.eclipse.org/legal/epl-2.0/
9
// This Source Code may also be made available under the following Secondary
10
// Licenses when the conditions for such availability set forth in the Eclipse
11
// Public License 2.0 are satisfied: GNU General Public License, version 2
12
// or later which is available at
13
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
14
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
15
/****************************************************************************/
16
/// @file APITest.java
17
/// @author Mario Krumnow
18
/// @date 2013
19
///
20
//
21
/****************************************************************************/
22
import java.util.LinkedList;
23
import it.polito.appeal.traci.SumoTraciConnection;
24
import de.tudresden.sumo.cmd.Simulation;
25
import de.tudresden.sumo.cmd.Vehicle;
26
import de.tudresden.sumo.cmd.Vehicletype;
27
import de.tudresden.sumo.cmd.Edge;
28
import de.tudresden.sumo.cmd.Lane;
29
import de.tudresden.sumo.cmd.Route;
30
import de.tudresden.sumo.cmd.Poi;
31
import de.tudresden.sumo.cmd.Polygon;
32
import de.tudresden.sumo.cmd.Person;
33
import de.tudresden.sumo.cmd.Inductionloop;
34
import de.tudresden.sumo.cmd.Trafficlight;
35
import de.tudresden.sumo.objects.SumoVehicleData;
36
import de.tudresden.sumo.objects.SumoStopFlags;
37
import de.tudresden.sumo.objects.SumoStringList;
38
import de.tudresden.sumo.objects.SumoStage;
39
import de.tudresden.sumo.objects.SumoPosition2D;
40
import de.tudresden.sumo.objects.SumoRoadPosition;
41
import de.tudresden.sumo.objects.SumoTLSController;
42
import de.tudresden.sumo.objects.SumoTLSProgram;
43
44
public class APITest {
45
public static void main(String[] args) {
46
String sumo_bin = "sumo";
47
String config_file = "data/config.sumocfg";
48
double step_length = 1.0;
49
50
if (args.length > 0) {
51
sumo_bin = args[0];
52
}
53
if (args.length > 1) {
54
config_file = args[1];
55
}
56
57
try {
58
SumoTraciConnection conn = new SumoTraciConnection(sumo_bin, config_file);
59
conn.addOption("step-length", step_length + "");
60
conn.addOption("start", "true"); //start sumo immediately
61
62
//start Traci Server
63
conn.runServer();
64
conn.setOrder(1);
65
66
double deltaT = (double)conn.do_job_get(Simulation.getDeltaT());
67
System.out.println("deltaT:" + deltaT);
68
SumoStage stage = (SumoStage)conn.do_job_get(Simulation.findRoute("gneE0", "gneE2", "car", 0, 0));
69
System.out.println("findRoute result stage:");
70
for (String s : stage.edges) {
71
System.out.println(" " + s);
72
}
73
@SuppressWarnings("unchecked") // the cast is as safe or unsafe as all the other casts after do_job_get but here the compiler complains
74
LinkedList<SumoStage> stages = (LinkedList<SumoStage>)conn.do_job_get(Simulation.findIntermodalRoute("gneE0", "gneE2", "", 0, 0,
75
1.5, 1, 50, 50, 0, "", "", ""));
76
System.out.println("findIntermodalRoute result stages:");
77
for (SumoStage s2 : stages) {
78
for (String s : s2.edges) {
79
System.out.println(" " + s);
80
}
81
82
}
83
SumoStringList walk = new SumoStringList();
84
walk.add("gneE2");
85
walk.add("gneE3");
86
for (int i = 0; i < 36; i++) {
87
88
conn.do_timestep();
89
conn.do_job_set(Vehicle.addFull("v" + i, "r1", "car", "now", "0", "0", "max", "current", "max", "current", "", "", "", 0, 0));
90
double timeSeconds = (double)conn.do_job_get(Simulation.getTime());
91
int tlsPhase = (int)conn.do_job_get(Trafficlight.getPhase("gneJ1"));
92
String tlsPhaseName = (String)conn.do_job_get(Trafficlight.getPhaseName("gneJ1"));
93
System.out.println(String.format("Step %s, tlsPhase %s (%s)", timeSeconds, tlsPhase, tlsPhaseName));
94
95
SumoVehicleData vehData = (SumoVehicleData)conn.do_job_get(Inductionloop.getVehicleData("loop1"));
96
for (SumoVehicleData.VehicleData d : vehData.ll) {
97
System.out.println(String.format(" veh=%s len=%s entry=%s leave=%s type=%s", d.vehID, d.length, d.entry_time, d.leave_time, d.typeID));
98
}
99
if (i == 10) {
100
SumoStopFlags flags = new SumoStopFlags(false, false, false, false, false, false, false);
101
conn.do_job_set(Vehicle.setStop("v0", "gneE0", 200, (byte)0, 10, flags, 10, -1));
102
}
103
conn.do_job_set(Person.add("p" + i, "gneE2", 10.0, 0, "DEFAULT_PEDTYPE"));
104
conn.do_job_set(Person.appendWalkingStage("p" + i, walk, 50.0, -1, -1.0, ""));
105
}
106
SumoStringList vehIDs = (SumoStringList)conn.do_job_get(Vehicle.getIDList());
107
String vehIDsStr = "";
108
for (String id : vehIDs) {
109
vehIDsStr += (id + " ");
110
}
111
System.out.println("VehicleIDs: " + vehIDsStr);
112
113
conn.do_job_set(Vehicle.setParameter("v0", "vehParam", "vehValue"));
114
System.out.println("vehicle.getParameter: " + (String)conn.do_job_get(Vehicle.getParameter("v0", "vehParam")));
115
116
conn.do_job_set(Vehicle.setAdaptedTraveltime("v0", 100, 200, "gneE0", 200));
117
System.out.println("Vehicletype.getAdaptedTraveltime: " + (double)conn.do_job_get(Vehicle.getAdaptedTraveltime("v0", 150, "gneE0")));
118
119
System.out.println("Vehicle.getRoute: " + conn.do_job_get(Vehicle.getRoute("v0")));
120
SumoStringList route = new SumoStringList();
121
route.add("gneE0");
122
conn.do_job_set(Vehicle.setRoute("v0", route));
123
System.out.println("Vehicle.getRoute: " + conn.do_job_get(Vehicle.getRoute("v0")));
124
conn.do_job_set(Vehicle.setRouteID("v0", "r1"));
125
System.out.println("Vehicle.getRoute: " + conn.do_job_get(Vehicle.getRoute("v0")));
126
127
conn.do_job_set(Vehicletype.setParameter("car", "vehtypeParam", "vehtypeValue"));
128
System.out.println("Vehicletype.getParameter: " + (String)conn.do_job_get(Vehicletype.getParameter("car", "vehtypeParam")));
129
130
SumoStringList personIDs = (SumoStringList)conn.do_job_get(Person.getIDList());
131
String personIDsStr = "";
132
for (String id : personIDs) {
133
personIDsStr += (id + " ");
134
}
135
System.out.println("PersonIDs: " + personIDsStr);
136
137
SumoStage personStage = (SumoStage)conn.do_job_get(Person.getStage("p0", 0));
138
System.out.println("Person.getStage: " + personStage.type);
139
140
conn.do_job_set(Edge.setParameter("gneE0", "edgeParam", "edgeValue"));
141
System.out.println("Edge.getParameter: " + (String)conn.do_job_get(Edge.getParameter("gneE0", "edgeParam")));
142
143
conn.do_job_set(Edge.adaptTraveltime("gneE0", 123, 2000, 4000));
144
System.out.println("Edge.getAdaptatedTraveltime: " + (double)conn.do_job_get(Edge.getAdaptedTraveltime("gneE0", 3000)));
145
System.out.println("Edge.getAdaptatedTraveltime: " + (double)conn.do_job_get(Edge.getAdaptedTraveltime("gneE0", 1000)));
146
System.out.println("Edge.getAdaptatedTraveltime: " + (double)conn.do_job_get(Edge.getAdaptedTraveltime("gneE0", 5000)));
147
148
conn.do_job_set(Edge.setEffort("gneE0", 246, 2000, 4000));
149
System.out.println("Edge.getEffort: " + (double)conn.do_job_get(Edge.getEffort("gneE0", 3000)));
150
System.out.println("Edge.getEffort: " + (double)conn.do_job_get(Edge.getEffort("gneE0", 1000)));
151
System.out.println("Edge.getEffort: " + (double)conn.do_job_get(Edge.getEffort("gneE0", 5000)));
152
153
conn.do_job_set(Lane.setParameter("gneE0_1", "laneParam", "laneValue"));
154
System.out.println("Lane.getParameter: " + (String)conn.do_job_get(Lane.getParameter("gneE0_1", "laneParam")));
155
156
conn.do_job_set(Route.setParameter("r1", "routeParam", "routeValue"));
157
System.out.println("Route.getParameter: " + (String)conn.do_job_get(Route.getParameter("r1", "routeParam")));
158
159
conn.do_job_set(Poi.setParameter("t0", "poiParam", "poiValue"));
160
System.out.println("Poi.getParameter: " + (String)conn.do_job_get(Poi.getParameter("t0", "poiParam")));
161
162
SumoStringList controlledJunctions = (SumoStringList)conn.do_job_get(Trafficlight.getControlledJunctions("gneJ1"));
163
System.out.println("Trafficlight.getControlledJunctions: " + controlledJunctions);
164
165
conn.do_job_set(Trafficlight.setParameter("gneJ1", "tlsParam", "tlsValue"));
166
System.out.println("Trafficlight.getParameter: " + (String)conn.do_job_get(Trafficlight.getParameter("gneJ1", "tlsParam")));
167
168
conn.do_job_set(Trafficlight.setPhaseDuration("gneJ1", 15));
169
170
SumoTLSController tlsc = (SumoTLSController)conn.do_job_get(Trafficlight.getCompleteRedYellowGreenDefinition("gneJ1"));
171
System.out.println("Trafficlight.getCompleteRedYellowGreenDefinition: " + tlsc.programs);
172
173
SumoTLSProgram tlsp = (SumoTLSProgram)tlsc.programs.values().toArray()[0];
174
conn.do_job_set(Trafficlight.setCompleteRedYellowGreenDefinition("gneJ1", tlsp));
175
176
System.out.println("Trafficlight.getPhaseDuration: " + (double)conn.do_job_get(Trafficlight.getPhaseDuration("gneJ1")));
177
System.out.println("Trafficlight.getNextSwitch: " + (double)conn.do_job_get(Trafficlight.getNextSwitch("gneJ1")));
178
179
SumoRoadPosition roadPos = (SumoRoadPosition)conn.do_job_get(Simulation.convertRoad(505.38, -42.08, false, "passenger"));
180
System.out.println("Simulation.convertRoad: " + roadPos.edgeID + ", " + roadPos.pos + ", " + roadPos.laneIndex);
181
182
SumoPosition2D geoPos = (SumoPosition2D)conn.do_job_get(Simulation.convertGeo(505.38, -42.08, false));
183
System.out.println("Simulation.convertGeo: " + geoPos);
184
185
System.out.println("Lane.getLinks: " + conn.do_job_get(Lane.getLinks(":gneJ1_6_0")));
186
187
conn.close();
188
189
} catch (Exception ex) {
190
ex.printStackTrace();
191
}
192
193
try {
194
SumoTraciConnection conn = new SumoTraciConnection(sumo_bin, config_file);
195
conn.addOption("step-length", step_length + "");
196
conn.addOption("start", "true"); //start sumo immediately
197
198
//start Traci Server
199
conn.runServer();
200
conn.setOrder(1);
201
202
// expecting exception here since we use get instead of set
203
conn.do_job_get(Simulation.saveState("file-state-now"));
204
} catch (Exception tex) {
205
System.err.println(tex.getMessage());
206
}
207
}
208
209
}
210
211