The main way to interact with a running simulation is TraCI which gives the complete flexibility of doing cross-platform, cross-language, and networked interaction with SUMO acting as a server. One major drawback is the communication overhead due to the protocol and the socket communication. To have a more efficient coupling without the need to dive deep into the SUMO internals an interface called libsumo is being defined, having the following properties:
- C++ interface based on static functions and a few simple wrapper classes for results
- Function signatures similar to TraCI
- Language bindings for at least Java and Python
- Based on SWIG
libsumo is still under development but several basic parts are already functional
- loading a simulation
- doing simulation steps
- retrieving data from single vehicles, detectors, edges etc.
What does not work yet:
- running with sumo-gui
- vehicle state notifications (getting the number of departed vehicles etc.)
- testing the whole stuff
It currently requires cmake and swig being installed together with the developer packages for Python (and Java if needed), for Windows see Installing/Windows_CMake. You need to (re-)compile sumo yourself under Windows following the remarks above, under Linux it is probably just a matter of calling cmake and make. For the python bindings you will get a libsumo.py and a _libsumo.so (or .pyd on Windows). If you place them somewhere on your python path you should be able to use them like that:
import libsumo libsumo.Simulation.load(["-c", "test.sumocfg"]) libsumo.Simulation.simulationStep()
Further descriptions will follow.