Path: blob/main/tests/complex/traas/api/data/APITest.java
169689 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2017-2025 German Aerospace Center (DLR) and others.3// TraaS module4// Copyright (C) 2013-2017 Dresden University of Technology5// This program and the accompanying materials are made available under the6// terms of the Eclipse Public License 2.0 which is available at7// https://www.eclipse.org/legal/epl-2.0/8// This Source Code may also be made available under the following Secondary9// Licenses when the conditions for such availability set forth in the Eclipse10// Public License 2.0 are satisfied: GNU General Public License, version 211// or later which is available at12// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html13// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later14/****************************************************************************/15/// @file APITest.java16/// @author Mario Krumnow17/// @date 201318///19//20/****************************************************************************/21import java.util.LinkedList;22import it.polito.appeal.traci.SumoTraciConnection;23import de.tudresden.sumo.cmd.Simulation;24import de.tudresden.sumo.cmd.Vehicle;25import de.tudresden.sumo.cmd.Vehicletype;26import de.tudresden.sumo.cmd.Edge;27import de.tudresden.sumo.cmd.Lane;28import de.tudresden.sumo.cmd.Route;29import de.tudresden.sumo.cmd.Poi;30import de.tudresden.sumo.cmd.Polygon;31import de.tudresden.sumo.cmd.Person;32import de.tudresden.sumo.cmd.Inductionloop;33import de.tudresden.sumo.cmd.Trafficlight;34import de.tudresden.sumo.objects.SumoVehicleData;35import de.tudresden.sumo.objects.SumoStopFlags;36import de.tudresden.sumo.objects.SumoStringList;37import de.tudresden.sumo.objects.SumoStage;38import de.tudresden.sumo.objects.SumoPosition2D;39import de.tudresden.sumo.objects.SumoRoadPosition;40import de.tudresden.sumo.objects.SumoTLSController;41import de.tudresden.sumo.objects.SumoTLSProgram;4243public class APITest {44public static void main(String[] args) {45String sumo_bin = "sumo";46String config_file = "data/config.sumocfg";47double step_length = 1.0;4849if (args.length > 0) {50sumo_bin = args[0];51}52if (args.length > 1) {53config_file = args[1];54}5556try {57SumoTraciConnection conn = new SumoTraciConnection(sumo_bin, config_file);58conn.addOption("step-length", step_length + "");59conn.addOption("start", "true"); //start sumo immediately6061//start Traci Server62conn.runServer();63conn.setOrder(1);6465double deltaT = (double)conn.do_job_get(Simulation.getDeltaT());66System.out.println("deltaT:" + deltaT);67SumoStage stage = (SumoStage)conn.do_job_get(Simulation.findRoute("gneE0", "gneE2", "car", 0, 0));68System.out.println("findRoute result stage:");69for (String s : stage.edges) {70System.out.println(" " + s);71}72@SuppressWarnings("unchecked") // the cast is as safe or unsafe as all the other casts after do_job_get but here the compiler complains73LinkedList<SumoStage> stages = (LinkedList<SumoStage>)conn.do_job_get(Simulation.findIntermodalRoute("gneE0", "gneE2", "", 0, 0,741.5, 1, 50, 50, 0, "", "", ""));75System.out.println("findIntermodalRoute result stages:");76for (SumoStage s2 : stages) {77for (String s : s2.edges) {78System.out.println(" " + s);79}8081}82SumoStringList walk = new SumoStringList();83walk.add("gneE2");84walk.add("gneE3");85for (int i = 0; i < 36; i++) {8687conn.do_timestep();88conn.do_job_set(Vehicle.addFull("v" + i, "r1", "car", "now", "0", "0", "max", "current", "max", "current", "", "", "", 0, 0));89double timeSeconds = (double)conn.do_job_get(Simulation.getTime());90int tlsPhase = (int)conn.do_job_get(Trafficlight.getPhase("gneJ1"));91String tlsPhaseName = (String)conn.do_job_get(Trafficlight.getPhaseName("gneJ1"));92System.out.println(String.format("Step %s, tlsPhase %s (%s)", timeSeconds, tlsPhase, tlsPhaseName));9394SumoVehicleData vehData = (SumoVehicleData)conn.do_job_get(Inductionloop.getVehicleData("loop1"));95for (SumoVehicleData.VehicleData d : vehData.ll) {96System.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));97}98if (i == 10) {99SumoStopFlags flags = new SumoStopFlags(false, false, false, false, false, false, false);100conn.do_job_set(Vehicle.setStop("v0", "gneE0", 200, (byte)0, 10, flags, 10, -1));101}102conn.do_job_set(Person.add("p" + i, "gneE2", 10.0, 0, "DEFAULT_PEDTYPE"));103conn.do_job_set(Person.appendWalkingStage("p" + i, walk, 50.0, -1, -1.0, ""));104}105SumoStringList vehIDs = (SumoStringList)conn.do_job_get(Vehicle.getIDList());106String vehIDsStr = "";107for (String id : vehIDs) {108vehIDsStr += (id + " ");109}110System.out.println("VehicleIDs: " + vehIDsStr);111112conn.do_job_set(Vehicle.setParameter("v0", "vehParam", "vehValue"));113System.out.println("vehicle.getParameter: " + (String)conn.do_job_get(Vehicle.getParameter("v0", "vehParam")));114115conn.do_job_set(Vehicle.setAdaptedTraveltime("v0", 100, 200, "gneE0", 200));116System.out.println("Vehicletype.getAdaptedTraveltime: " + (double)conn.do_job_get(Vehicle.getAdaptedTraveltime("v0", 150, "gneE0")));117118System.out.println("Vehicle.getRoute: " + conn.do_job_get(Vehicle.getRoute("v0")));119SumoStringList route = new SumoStringList();120route.add("gneE0");121conn.do_job_set(Vehicle.setRoute("v0", route));122System.out.println("Vehicle.getRoute: " + conn.do_job_get(Vehicle.getRoute("v0")));123conn.do_job_set(Vehicle.setRouteID("v0", "r1"));124System.out.println("Vehicle.getRoute: " + conn.do_job_get(Vehicle.getRoute("v0")));125126conn.do_job_set(Vehicletype.setParameter("car", "vehtypeParam", "vehtypeValue"));127System.out.println("Vehicletype.getParameter: " + (String)conn.do_job_get(Vehicletype.getParameter("car", "vehtypeParam")));128129SumoStringList personIDs = (SumoStringList)conn.do_job_get(Person.getIDList());130String personIDsStr = "";131for (String id : personIDs) {132personIDsStr += (id + " ");133}134System.out.println("PersonIDs: " + personIDsStr);135136SumoStage personStage = (SumoStage)conn.do_job_get(Person.getStage("p0", 0));137System.out.println("Person.getStage: " + personStage.type);138139conn.do_job_set(Edge.setParameter("gneE0", "edgeParam", "edgeValue"));140System.out.println("Edge.getParameter: " + (String)conn.do_job_get(Edge.getParameter("gneE0", "edgeParam")));141142conn.do_job_set(Edge.adaptTraveltime("gneE0", 123, 2000, 4000));143System.out.println("Edge.getAdaptatedTraveltime: " + (double)conn.do_job_get(Edge.getAdaptedTraveltime("gneE0", 3000)));144System.out.println("Edge.getAdaptatedTraveltime: " + (double)conn.do_job_get(Edge.getAdaptedTraveltime("gneE0", 1000)));145System.out.println("Edge.getAdaptatedTraveltime: " + (double)conn.do_job_get(Edge.getAdaptedTraveltime("gneE0", 5000)));146147conn.do_job_set(Edge.setEffort("gneE0", 246, 2000, 4000));148System.out.println("Edge.getEffort: " + (double)conn.do_job_get(Edge.getEffort("gneE0", 3000)));149System.out.println("Edge.getEffort: " + (double)conn.do_job_get(Edge.getEffort("gneE0", 1000)));150System.out.println("Edge.getEffort: " + (double)conn.do_job_get(Edge.getEffort("gneE0", 5000)));151152conn.do_job_set(Lane.setParameter("gneE0_1", "laneParam", "laneValue"));153System.out.println("Lane.getParameter: " + (String)conn.do_job_get(Lane.getParameter("gneE0_1", "laneParam")));154155conn.do_job_set(Route.setParameter("r1", "routeParam", "routeValue"));156System.out.println("Route.getParameter: " + (String)conn.do_job_get(Route.getParameter("r1", "routeParam")));157158conn.do_job_set(Poi.setParameter("t0", "poiParam", "poiValue"));159System.out.println("Poi.getParameter: " + (String)conn.do_job_get(Poi.getParameter("t0", "poiParam")));160161SumoStringList controlledJunctions = (SumoStringList)conn.do_job_get(Trafficlight.getControlledJunctions("gneJ1"));162System.out.println("Trafficlight.getControlledJunctions: " + controlledJunctions);163164conn.do_job_set(Trafficlight.setParameter("gneJ1", "tlsParam", "tlsValue"));165System.out.println("Trafficlight.getParameter: " + (String)conn.do_job_get(Trafficlight.getParameter("gneJ1", "tlsParam")));166167conn.do_job_set(Trafficlight.setPhaseDuration("gneJ1", 15));168169SumoTLSController tlsc = (SumoTLSController)conn.do_job_get(Trafficlight.getCompleteRedYellowGreenDefinition("gneJ1"));170System.out.println("Trafficlight.getCompleteRedYellowGreenDefinition: " + tlsc.programs);171172SumoTLSProgram tlsp = (SumoTLSProgram)tlsc.programs.values().toArray()[0];173conn.do_job_set(Trafficlight.setCompleteRedYellowGreenDefinition("gneJ1", tlsp));174175System.out.println("Trafficlight.getPhaseDuration: " + (double)conn.do_job_get(Trafficlight.getPhaseDuration("gneJ1")));176System.out.println("Trafficlight.getNextSwitch: " + (double)conn.do_job_get(Trafficlight.getNextSwitch("gneJ1")));177178SumoRoadPosition roadPos = (SumoRoadPosition)conn.do_job_get(Simulation.convertRoad(505.38, -42.08, false, "passenger"));179System.out.println("Simulation.convertRoad: " + roadPos.edgeID + ", " + roadPos.pos + ", " + roadPos.laneIndex);180181SumoPosition2D geoPos = (SumoPosition2D)conn.do_job_get(Simulation.convertGeo(505.38, -42.08, false));182System.out.println("Simulation.convertGeo: " + geoPos);183184System.out.println("Lane.getLinks: " + conn.do_job_get(Lane.getLinks(":gneJ1_6_0")));185186conn.close();187188} catch (Exception ex) {189ex.printStackTrace();190}191192try {193SumoTraciConnection conn = new SumoTraciConnection(sumo_bin, config_file);194conn.addOption("step-length", step_length + "");195conn.addOption("start", "true"); //start sumo immediately196197//start Traci Server198conn.runServer();199conn.setOrder(1);200201// expecting exception here since we use get instead of set202conn.do_job_get(Simulation.saveState("file-state-now"));203} catch (Exception tex) {204System.err.println(tex.getMessage());205}206}207208}209210211