https://github.com/carla-simulator/carla
Raw File
Tip revision: 9a3fb64ed6e3d7a095c404d775de6e284cfd01b9 authored by Axel on 09 May 2022, 07:46:05 UTC
Added gbuffer serializer classes
Tip revision: 9a3fb64
adv_sumo.md

# SUMO co-simulation

CARLA has developed a co-simulation feature with SUMO. This allows to distribute the tasks at will, and exploit the capabilities of each simulation in favour of the user.

*   [__Requisites__](#requisites)  
*   [__Run a custom co-simulation__](#run-a-custom-co-simulation)  
	*   [Create CARLA vtypes](#create-carla-vtypes)  
	*   [Create the SUMO net](#create-the-sumo-net)  
	*   [Run the synchronization](#run-the-synchronization)  
*   [__Spawn NPCs controlled by SUMO__](#spawn-npcs-controlled-by-sumo)  

---
## Requisites

First and foremost, it is necessary to [__install SUMO__](https://sumo.dlr.de/docs/Installing.html) to run the co-simulation. Building from source is recommended over a simple installation, as there are new features and fixes that will improve the co-simulation. 

Once that is done, set the SUMO environment variable.  
```sh
echo "export SUMO_HOME=/usr/share/sumo" >> ~/.bashrc && source ~/.bashrc
```

SUMO is ready to run the co-simulations. There are some examples in `Co-Simulation/Sumo/examples` for __Town01__, __Town04__, and __Town05__. These `.sumocfg` files describe the configuration of the simulation (e.g., net, routes, vehicle types...). Use one of these to test the co-simulation. The script has different options that are detailed [below](#run-the-synchronization). For the time being, let's run a simple example for __Town04__.  

Run a CARLA simulation with __Town04__.  
```sh
cd ~/carla
./CarlaUE4.sh
cd PythonAPI/util
python3 config.py --map Town04
```

Then, run the SUMO co-simulation example.  
```sh
cd ~/carla/Co-Simulation/Sumo
python3 run_synchronization.py examples/Town04.sumocfg  --sumo-gui
```
!!! Important
    

---
## Run a custom co-simulation

### Create carla vtypes

With the script `Co-Simulation/Sumo/util/create_sumo_vtypes.py` the user can create sumo *vtypes*, the equivalent to CARLA blueprints, based on the CARLA blueprint library.  

*   __`--carla-host`__ *(default: 127.0.0.1)* — IP of the carla host server.  
*   __`--carla-port`__ *(default: 2000)* — TCP port to listen to.  
*   __`--output-file`__ *(default: carlavtypes.rou.xml)* — The generated file containing the *vtypes*.  

This script uses the information stored in `data/vtypes.json` to create the SUMO *vtypes*. These can be modified by editing said file.  

!!! Warning
    A CARLA simulation must be running to execute the script.

### Create the SUMO net

The recommended way to create a SUMO net that synchronizes with CARLA is using the script `Co-Simulation/Sumo/util/netconvert_carla.py`. This will draw on the [netconvert](https://sumo.dlr.de/docs/NETCONVERT.html) tool provided by SUMO. In order to run the script, some arguments are needed.  

*   __`xodr_file`__ — OpenDRIVE file `.xodr`.
*   __`--output'`__ *(default:`net.net.xml`)* — output file `.net.xml`.
*   __`--guess-tls`__ *(default:false)* — SUMO can set traffic lights only for specific lanes in a road, but CARLA can't. If set to __True__, SUMO will not differenciate traffic lights for specific lanes, and these will be in sync with CARLA.  

The output of the script will be a `.net.xml` that can be edited using __[NETEDIT](https://sumo.dlr.de/docs/NETEDIT.html)__. Use it to edit the routes, add demand, and eventually, prepare a simulation that can be saved as `.sumocfg`.  

The examples provided may be helpful during this process. Take a look at `Co-Simulation/Sumo/examples`. For every `example.sumocfg` there are several related files under the same name. All of them comprise a co-simulation example.  

### Run the synchronization

Once a simulation is ready and saved as a `.sumocfg`, it is ready to run. There are some optional parameters to change the settings of the co-simulation. 

*   __`sumo_cfg_file`__ — The SUMO configuration file.  
*   __`--carla-host`__ *(default: 127.0.0.1)* — IP of the carla host server  
*   __`--carla-port`__ *(default: 2000)* — TCP port to listen to  
*   __`--sumo-host`__ *(default: 127.0.0.1)* — IP of the SUMO host server.  
*   __`--sumo-port`__ *(default: 8813)* — TCP port to listen to.  
*   __`--sumo-gui`__ — Open a window to visualize the gui version of SUMO.
*   __`--step-length`__ *(default: 0.05s)* — Set fixed delta seconds for the simulation time-step. 
*   __`--sync-vehicle-lights`__ *(default: False)* — Synchronize vehicle lights. 
*   __`--sync-vehicle-color`__ *(default: False)* — Synchronize vehicle color. 
*   __`--sync-vehicle-all`__ *(default: False)* — Synchronize all vehicle properties.  
*   __`--tls-manager`__ *(default: none)* — Choose which simulator should manage the traffic lights. The other will update those accordingly. The options are `carla`, `sumo`, and `none`. If `none` is chosen, traffic lights will not be synchronized. Each vehicle would only obey the traffic lights in the simulator that spawn it. 

```sh
python3 run_synchronization.py <SUMOCFG FILE> --tls-manager carla --sumo-gui
```

!!! Warning
    To stop the co-simulation, press `Ctrl+C` in the terminal that run the script.  

---
## Spawn NPCs controlled by SUMO

The co-simulation with SUMO makes for an additional feature. Vehicles can be spawned in CARLA through SUMO, and managed by the later as the Traffi Manager would do.  

The script `spawn_npc_sumo.py` is almost equivalent to the already-known `generate_traffic.py`. This script automatically generates a SUMO network in a temporal folder, based on the active town in CARLA. The script will create random routes and let the vehicles roam around.

As the script runs a synchronous simulation, and spawns vehicles in it, the arguments are the same that appear in `run_synchronization.py` and `generate_traffic.py`.

*   __`--host`__ *(default: 127.0.0.1)* — IP of the host server.  
*   __`--port`__ *(default: 2000)* — TCP port to listen to.  
*   __`-n,--number-of-vehicles`__ *(default: 10)* — Number of vehicles spawned.  
*   __`--safe`__ — Avoid spawning vehicles prone to accidents.  
*   __`--filterv`__ *(default: "vehicle.*")* — Filter the blueprint of the vehicles spawned.  
*   __`--sumo-gui`__ — Open a window to visualize SUMO.  
*   __`--step-length`__ *(default: 0.05s)* — Set fixed delta seconds for the simulation time-step.  
*   __`--sync-vehicle-lights`__ *(default: False)* — Synchronize vehicle lights state.  
*   __`--sync-vehicle-color`__ *(default: False)* — Synchronize vehicle color.  
*   __`--sync-vehicle-all`__ *(default: False)* — Synchronize all vehicle properties.  
*   __`--tls-manager`__ *(default: none)* — Choose which simulator will change the traffic lights' state. The other will update them accordingly. If `none`, traffic lights will not be synchronized.  

```sh
# Spawn 10 vehicles, that will be managed by SUMO instead of Traffic Manager.
# CARLA in charge of traffic lights.
# Open a window for SUMO visualization.
python3 spawn_sumo_npc.py -n 10 --tls-manager carla --sumo-gui
```

---

That is all there is so far, regarding for the SUMO co-simulation with CARLA. 

Open CARLA and mess around for a while. If there are any doubts, feel free to post these in the forum. 

<div class="build-buttons">
<p>
<a href="https://github.com/carla-simulator/carla/discussions/" target="_blank" class="btn btn-neutral" title="Go to the CARLA forum">
CARLA forum</a>
</p>
</div>
back to top