Zoeken
SUMO koppelen met CCOL
SUMO is paket voor een open source micro-simulaties. Het bevat diverse tools, waarvan de belangrijkste bestaan uit tooling voor het opbouwen van een netwerk, draaien van de simulatie (met of zonder UI) en opbouwen van het verkeersaanbod. Gegeven een geschikt netwerk (zie hier voor een tutorial) wordt hieronder omschreven hoe een CCOL regeling kan worden gekoppeld aan een SUMO netwerk.
In tegenstelling tot bv. VISSIM of Aimsun, wordt de SUMO simulatie aangestuurd vanuit de CCOL applicatie(s). Dit werkt op hoofdlijnen als volgt:
- SUMO wordt gestart en wacht een (TCP) verbinding vanuit een externe applicatie
- De externe applicatie (in ons geval de CCOL regeling) maakt verbinding met SUMO op de ingestelde poort
- Na verbinden wordt het netwerk geladen
- De externe applicatie wisselt vanaf dit punt informatie uit met SUMO:
- De externe applicatie kan de simulatie een stap laten lopen
- Data van detectoren kan worden uitgelezen
- Data van verkeerslichten kan worden ingesteld
- En nog veel meer dat voor de koppeling met CCOL niet relevant is
Het koppelen van een TLCGen CCOL regeling met een SUMO netwerk is relatief eenvoudig, omdat TLCGen alle benodigde code kan genereren. Tevens kan TLCGen het proces van koppelen versnellen door te helpen van de naamgeving van detectoren in SUMO.
Instellen TLCGen
In TLCGen zit er een tabblad SUMO onder Specials. Hier moet worden ingesteld:
- SUMO poort: die moet overeenkomen met de ingestelde poort in de .sumocfg file
- SUMO volgorde: indien er meerdere applicaties gekoppeld worden, moet dit een uniek nummer zijn voor deze regeling
- Start tijd uur/minuut: zorgt dat de regeling na laden start op dit punt
- SUMO tl ID: dit moet overeenkomen met de in SUMO ingestelde “tl ID” voor de geregelde “junctions”; zie in de tutorial onder “Toevoegen verkeerslichten”. Het betreft deze instelling, beschik in de traffic-light modus in NETEDIT na selectie van de kruising:
- SUMO tl link max: dit is het aantal “lichten” dat in SUMO is gekoppeld aan de betreffende “tl” ofwel traffic light. Dit is op te vragen door éérst alle betrokken junctions samen te voegen in één traffic light (door bij de “tl” waarde per junction dezelfde waarde in te vullen).
Let op! Dubbel-check of alle junctions die samen geregeld moeten worden zijn ingesteld met de juiste “tl” waarde. Wijzig je dit later, dan wijzigt het aantal links, en verschuiven mogelijk de indices van de lichten.
Let op! Ook geheel ongeregelde junctions, bv. waar enkel verkeer kruist, moeten worden opgenomen. Deze worden vervolgens niet gekoppeld aan een fase in TLCGen, waarna ze vanuit CCOL altijd naar groen zullen worden gestuurd.
Met alle “tl” waarden ingevuld kan het aantal links worden opgevraagd. Dit gaat via de traffic-light modus, na selectie van de kruising (één van de betrokken junctions), door onder “Phases” van één van de fasen die SUMO aanmaakt het aantal karakters te tellen:
Dubbelklik op de “state” en kopieer de tekst naar bv. notepad. Tel het aantal karakters en vul de waarde in in TLCGen. - SUMO tl ID voor d.naam: indien aangevinkt, worden detector namen tbv. koppeling voorzien van de kruispunt naam. Bv. 022 wordt K1022. Dit is vooral relevant bij meerdere gekoppelde kruispunten.
- SUMO auto start: indien aangevinkt, zal de CCOL regeling automatisch SUMO starten bij openen van de applicatie.
- SUMO pad: moet worden ingevuld indien SUMO auto start aanstaat: verwijs hier naar de map waar SUMO staat; dit is de map waarin oa. een map “bin” staat (verwijs dus niet direct naar de bin map!)
- SUMO config: een absolute verwijzing naar het .sumocfg bestand tbv. auto-start
Koppelen van fasen
De staat van de verkeerslichten wordt door CCOL bepaald en via de TCP verbinding met SUMO ingesteld tijdens de simulatie. Hiertoe met de CCOL regelaar weten welke links bij welke fase horen. Dit gaat door onder “SUMO id’s” in het SUMO tabblad de juiste waarden in te stellen.
Per fase moeten de link id’s worden ingesteld die horen bij de betreffende fase. Deze kunnen in NETEDIT worden opgevraagd door in de selectiemodus de junction te selecteren, en dan “show connections over junctions” aan te zetten via deze knop:
Nu kan op de links worden geklikt. De waarde bij “linkIndex” is wat we nu zoeken: zoek de indices voor alle links die direct na de stopstreep van een fase liggen bij elkaar en vul dit in TLCGen in. Meerdere link indices moeten met een komma (zonder spatie) worden gescheiden. Bv.:

Een index nummer mag nooit de bij “SUMO tl link max” ingevulde waarde overschreiden, want dan zal het niet werken. De maximale link index is één lager dan de ingevulde max.
Let op! “Volg links”, bv. wanneer een auto afslaat over een junction, en dan over een volgende junction kruist met langzaam verkeer, kunnen het beste niet worden geregeld. Immers: stel een auto rijdt af op einde geel, dan gaat daarna de complete fase naar rood; wordt de tweede link ook geregeld, dan staat de auto vast op de kruising.
Koppelen van detectie
Detectie (e2 detectoren in SUMO) wordt gekoppeld op basis van ID. De ID zoals ingevuld in TLCGen in de tabel onder “Sumo naam 1” (of 2 of 3, in geval van detectie over meerdere stroken die in SUMO zit met meerdere detectoren) moet overeen komen met de “id” waarde in SUMO. Dit kan handmatig worden opgegeven, of als volgt met behulp van TLCGen heel vlug:
- Vooraf: het is handig SUMO en TLCGen eerst naast elkaar te plaatsen op het scherm
- Selecteer in TLCGen de eerste detector uit de lijst in het SUMO tabblad
- Klik nu op “Start naamgeving in SUMO”
- Ga naar NETEDIT en klik op de in TLCGen geselecteerde detector (inspection modus)
- Klik in het veld “id”
- Druk op F6; de naam vanuit TLCGen (de 1e van de drie) wordt nu ingevuld, en in TLCGen wordt automatisch de volgende detector geselecteerd
- Herhaal dit tot alles de juiste naam heeft
- Let op, als je ergens “mis” klikt en dan F6 doet, zal TLCGen wel verder springen; selecteer dan met de hand nogmaals de vorige detector in de lijst
- Het lijkt nog veel klikken, maar is eenmalig en gaat véél sneller dan handmatig alles overnemen
- Klik in TLCGen op “Stop naamgeving in SUMO”; hiermee wordt de F6 hotkey weer losgekoppeld
Er zijn vaak detectoren die niet gekoppeld moeten worden (bv. dummies, of een knop bij fietsers die al een lus hebben, etc.). Om extreem veel warnings te voorkomen in SUMO, worden detectoren waarvoor géén naam is opgegeven in de lijst overgeslagen bij de koppeling. De code hiervoor moet soms handmatig worden aangepast en is te vinden in SpecialSignals.
Selectieve detectie
In de lijst met detectoren kan “Selectief” worden aangevinkt. Dit zorgt ervoor dat iun plaats van een e2 detector (area) een e1 detector (induction loop) wordt verwacht. Indicution loops hebben in SUMO geen lengte, maar wel de optie om selectief verkeer te herkennen, bv. op basis van voertuig type. Hiermee wordt het mogelijk bv. enkel bussen te detecteren.
Detectoren kunnen in SUMO enkel liggen op edges en niet op links (strikt genomen kan het wel, maar het vergt handmatig aanpassen van de XML van het netwerk). Voor de uitmelding kan de e1 detector daartoe helemaal aan de start van de edge worden gelegd, zeg maar op de stopstreep. Voertuigen die wachten voor de stopstreep zullen de detectoren in dat geval niet activeren.
Simuleren
Alles is nu klaar voor de simulatie. Compileer de regeling met SUMO in de pre-processor definities. Start de regeling (start eerst SUMO als auto-start uit staat). De simulatie zal gaan lopen.
Troubleshooting
De kans dat het niet meteen werkt is aanwezig. Veel voorkomende oorzaken zijn:
- Link max komt niet overeen tussen SUMO en TLCGen
- Er is een ingestelde link id die groter is dan Link max
- De naamgeving van lussen komt niet overeen