„SUMO” változatai közötti eltérés
9. sor: | 9. sor: | ||
Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges <span class="plainlinks">[https://hu.wikipedia.org/wiki/Qt Qt]</span> és <span class="plainlinks">[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]</span> támogatás. | Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges <span class="plainlinks">[https://hu.wikipedia.org/wiki/Qt Qt]</span> és <span class="plainlinks">[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]</span> támogatás. | ||
− | == | + | ==Architektúra== |
− | A SUMO alapvetően <span class="plainlinks">[https://en.wikipedia.org/wiki/C%2B%2B C++]</span>-ban írt szoftver, a hozzá tartozó kiegészítő eszközök <span class="plainlinks">[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]</span>ban írt szkriptek. A grafikus felülete <span class="plainlinks">[https://hu.wikipedia.org/wiki/Qt Qt]</span>-ban íródott | + | A SUMO alapvetően <span class="plainlinks">[https://en.wikipedia.org/wiki/C%2B%2B C++]</span>-ban írt szoftver, a hozzá tartozó kiegészítő eszközök <span class="plainlinks">[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]</span>ban írt szkriptek. A grafikus felülete <span class="plainlinks">[https://hu.wikipedia.org/wiki/Qt Qt]</span>-ban íródott. |
− | = | + | A szoftver <span class="plainlinks">[https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s objektumorientált megvalósítású]</span>, modularizált szerkezetű, jól elkülönítve a szakértői területeket. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva. A rendszert felépítő modulok a következők. |
− | A | + | * '''microsim''': A szimuláció futtatását biztosító modul, tartalmazza többek között a járművek jármű típusok definícióját. |
+ | * '''netgenerate''': Absztrakt úthálózatok generálását teszi lehetővé. | ||
+ | * '''netbuild''': Az útvonal hálózat gráfjának elkészítését, és módosítását valósítja meg szimuláció könnyű fútatásához (pl. hurokélek transzformálása). | ||
+ | * '''netimport''': Úthálózat importálását biztosítja. | ||
+ | * '''od2trips''': OD mátrixból történő útgenerálást biztosít. | ||
+ | * '''router''': Az alapértelmezett útvonal kereső modell. | ||
+ | * '''Daurouter''': Legrövidebb útvonal keresése. | ||
+ | * '''DFRouter''': Útvonal tervezés ciklussal indukálva. | ||
+ | * '''jtrrouter''': Útvonal tervezés "junction swiching" módszerrel. | ||
+ | * '''polyconvert''': Az úthálózaton felülei tértképi elemek ábrázolását teszi lehetővé. | ||
+ | * '''GUI''': A grafikus felhasználói felület modulja Qt-ban. | ||
+ | * '''GUInetLader''': Úthálózat megjelenítése. | ||
+ | * '''GUISim''': Szimuláció megjelenítése. | ||
+ | * '''Foreign''': külső csomagok egységes felületét biztosítja (pl. R-fa, OpenGL támogatás). | ||
+ | * '''utils''': globális segédfunkciók gyűjteménye. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==Matematikai háttér== | |
− | + | A SUMO matematikai modellek segítségével kezeli a járműveket és a forgalmat, így például a járművek haladási sebességét. | |
− | A | ||
− | |||
− | A modell | + | ====Krauss modell==== |
+ | A Krauss modell a biztonságos sebességet adja meg, és közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agresszív és a kevésbé jártas vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet, bár a SUMO ezt nem támogatja közvetlenül. | ||
− | ==== | + | ====Wiedemann modell==== |
+ | A Wiedermann modellnek két változata is létezik, a 74-es és a 99-es. Utóbbival különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése. A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell. | ||
− | A | + | A modell leírható a következő lineáris összefüggéssel: |
+ | <math>bx=(bx_{add}+bx_{multi}*z)*\sqrt{v},</math> | ||
− | = | + | ahol |
+ | * <math>v</math> a sebesség, | ||
+ | * <math>bx</math> a biztonságos távolság, | ||
+ | * <math>bx_{add}</math> a biztonságos távolsági komponens, | ||
+ | * <math>z</math> paraméter 0 és 1 közti érték, általában 0.5,0.15-ös standard eltérés mellett. Ha determinisztikus modellre van szükség, akkor a <math>z=1</math> választást használják. | ||
− | + | Az első lökhárítók közti távolság az <math>ax+bx</math> képlettel írható le, ahol <math>ax</math> a nyugalmi távolságuk, vagyis <math>ax = L(n-1)+AX_{add}</math>, ahol <math>AX_{add}</math> kalibrációs paraméter, <math>L(n-1)</math> pedig a követett jármű hossza. | |
− | + | A <math>bx_{add}</math> és a <math>bx_{multi}</math> értékek becsülhetők a kapacitás mértékéből. | |
− | A | + | A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1. | |
==Használata== | ==Használata== | ||
69. sor: | 63. sor: | ||
====Hálózat generátor==== | ====Hálózat generátor==== | ||
− | A hálózat építést a netconvert | + | A hálózat építést a '''netconvert''' modul végzi, amely XML fájlok alapján tudja felépíteni a gráfot. Ehhez három bementi fájl szükséges. |
− | + | * A csúcsok leírása, ahol a <code><nodes></code> elemben kell megadni <code><node></code> elemek sorozatát. Minden elem tartalmaz egy azonosítót (<code>id</code>), illetve egy X és egy Y koordinátát. Pl.: | |
− | |||
<nodes> | <nodes> | ||
<node id="1" x="-500.0" y="0.0" /> | <node id="1" x="-500.0" y="0.0" /> | ||
79. sor: | 72. sor: | ||
</nodes> | </nodes> | ||
− | * | + | * Utak leírása, ahol a <code><edges></code> elemben kell megadni <code><edge></code> elemek sorozatát. Minden elem tartalmaz egy azonosítót (<code>id</code>), forrás (<code>from</code>) és cél (<code>to</code>) csúcs azonosítókat, valamint típust (<code>type</code>). |
<edges> | <edges> | ||
<edge from="1" id="1to2" to="2" type=”a” /> | <edge from="1" id="1to2" to="2" type=”a” /> |
A lap 2016. július 6., 17:13-kori változata
A SUMO (Simulation of Urban MObility) egy közúti, tömegközlekedési és vasúti mikroszimulációs nyílt forráskódú szoftver. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához, illetve teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, vagyis a szimuláció közben az adatok változtatására, úgymint úthálózat (pl. baleset előidézése), forgalmi lámpák (pl. napszaktól függő lámaváltás, detektorok használata). A szoftverben a mikro modellt ágens alapú szimuláció valósítja meg, amely járműszinten szimulálja a forgalmat.
Tartalomjegyzék
Története
A SUMO-t 2000-ben kezték el írni, GPLv3-el. Az első verzió 2009-ben készült el. Jelenleg 0.13.0-ás verzió a legújabb. Célja a közúti forgalom kutatások támogatása.
Telepítés
Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges Qt és Python támogatás.
Architektúra
A SUMO alapvetően C++-ban írt szoftver, a hozzá tartozó kiegészítő eszközök Pythonban írt szkriptek. A grafikus felülete Qt-ban íródott.
A szoftver objektumorientált megvalósítású, modularizált szerkezetű, jól elkülönítve a szakértői területeket. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva. A rendszert felépítő modulok a következők.
- microsim: A szimuláció futtatását biztosító modul, tartalmazza többek között a járművek jármű típusok definícióját.
- netgenerate: Absztrakt úthálózatok generálását teszi lehetővé.
- netbuild: Az útvonal hálózat gráfjának elkészítését, és módosítását valósítja meg szimuláció könnyű fútatásához (pl. hurokélek transzformálása).
- netimport: Úthálózat importálását biztosítja.
- od2trips: OD mátrixból történő útgenerálást biztosít.
- router: Az alapértelmezett útvonal kereső modell.
- Daurouter: Legrövidebb útvonal keresése.
- DFRouter: Útvonal tervezés ciklussal indukálva.
- jtrrouter: Útvonal tervezés "junction swiching" módszerrel.
- polyconvert: Az úthálózaton felülei tértképi elemek ábrázolását teszi lehetővé.
- GUI: A grafikus felhasználói felület modulja Qt-ban.
- GUInetLader: Úthálózat megjelenítése.
- GUISim: Szimuláció megjelenítése.
- Foreign: külső csomagok egységes felületét biztosítja (pl. R-fa, OpenGL támogatás).
- utils: globális segédfunkciók gyűjteménye.
Matematikai háttér
A SUMO matematikai modellek segítségével kezeli a járműveket és a forgalmat, így például a járművek haladási sebességét.
Krauss modell
A Krauss modell a biztonságos sebességet adja meg, és közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agresszív és a kevésbé jártas vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet, bár a SUMO ezt nem támogatja közvetlenül.
Wiedemann modell
A Wiedermann modellnek két változata is létezik, a 74-es és a 99-es. Utóbbival különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése. A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.
A modell leírható a következő lineáris összefüggéssel:
ahol
- a sebesség,
- a biztonságos távolság,
- a biztonságos távolsági komponens,
- paraméter 0 és 1 közti érték, általában 0.5,0.15-ös standard eltérés mellett. Ha determinisztikus modellre van szükség, akkor a választást használják.
Az első lökhárítók közti távolság az képlettel írható le, ahol a nyugalmi távolságuk, vagyis , ahol kalibrációs paraméter, pedig a követett jármű hossza. A és a értékek becsülhetők a kapacitás mértékéből. A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.
Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1.
Használata
Kiegészítő Eszközök
Hálózat generátor
A hálózat építést a netconvert modul végzi, amely XML fájlok alapján tudja felépíteni a gráfot. Ehhez három bementi fájl szükséges.
- A csúcsok leírása, ahol a
<nodes>
elemben kell megadni<node>
elemek sorozatát. Minden elem tartalmaz egy azonosítót (id
), illetve egy X és egy Y koordinátát. Pl.:
<nodes> <node id="1" x="-500.0" y="0.0" /> <node id="2" x="+500.0" y="0.0" /> <node id="3" x="+501.0" y="0.0" /> </nodes>
- Utak leírása, ahol a
<edges>
elemben kell megadni<edge>
elemek sorozatát. Minden elem tartalmaz egy azonosítót (id
), forrás (from
) és cél (to
) csúcs azonosítókat, valamint típust (type
).
<edges> <edge from="1" id="1to2" to="2" type=”a” /> <edge from="2" id="out" to="3" type=”b”/> </edges>
- kereszteződéseket leíró xml file
<edges> <edge from="1" id="1to2" to="2" type=”a” /> <edge from="2" id="out" to="3" type=”b”/> </edges>
- kereszteződéseket leíró xml file
<types> <type id="a" priority="3" numLanes="3" speed="13.889"/> <type id="b" priority="3" numLanes="2" speed="13.889"/> <type id="c" priority="2" numLanes="3" speed="13.889"/> </types>
Az utakhoz rendelhetünk prioritást, és funkcionalitást. Az utat sávokra oszthatjuk. Pontosabban minden élhez kell, hogy tartozzon egy vagy több sáv.
Alább látható egy példa a netconvert használatára, ennek az outputja a generált hálózat, példánkban a hello.net.xml
netconvert --node-files=hello.nod.xml –type-files=hello.typ.xml --edge-files=hello.edg.xml --output-file=hello.net.xml
A netconvert nem csak általunk definiált hálózat készítésére alkalmas. Ez igen hasznos funkció, mert általában egy létező topológiát akarunk használni. Azaz importálhatunk hálózatot más formátumokból. Például open streat map export fájlt a következő képen használhatjuk SUMO hálózat építésére
netconvert --osm-files asd.osm -o asd.net.xml
Táj színezés
Kevésbé fontos, de látványos eszköz a polyconverter, mellyel az importált térkép színezését is hozzá adhatjuk a hálózatunkhoz. Alább láthatunk példát a használatára
polyconvert --net-file bartok.net.xml --osm-files map.osm --type-file typemap.xml -o bartok.poly.xml
Forgalom Generáslás
Ha megvan a hálózatunk (net), akkor sokféleképpen generálhatunk forgalmat az adott hálózatra. Ez a következő képen történhet:
- útvonalak megadásával (trip definitions) : megadjuk a kezdeti és a végcsúcsot, és az indulási időt. A DUAROUTER képes az útvonalakat utakká konvertálni. Használata
duarouter --flows=<FLOW_DEFS> --net=<SUMO_NET> --output-file=MySUMORoutes.rou.xml
- forgalom folyam megadásával (flow definitions): ugyanolyan mint az útvonal megadása (xml file), csak itt A-ból B-be egy jármű halmaz halad.
- véletlenszerű (Randomization): ez a leggyorsabb módja, ha forgalmat akarunk generálni, de természetesen nagy valószínűtlenséget okozhat. Tools/Trip#randomTrips.py
- OD mátrixokkal: (OD-matrices) : gyakran elérhetőek forgalmi hatóságoktól. Az OD mátrix egy i,j eleme azt reprezentálja hogy jármű megy i. zónából j.zónába. A mátrixot át kell konvertálni útvonalakká a OD2TRIPS modullal. Használata:
od2trips -n <NET> -d <MATRIX> -o <TRIP_DEFS> duarouter --trip-files=<TRIP_DEFS> --net-file=<SUMO_NET> --output-file=MySUMORoutes.rou.xml
- forgalmi folyam és kanyarodási szándék a kereszteződésekben (JTRROUTER eszközzel): megadjuk a járművek haladási szándékát, és hogy merre kanyarodjanak minden kereszteződésnél.
- Detektorok, mérési pontok használatával (detector data, observation points) :
Indukciós hurok és egyéb eszközökkel gyakran vizsgálják a forgalmat. A DFROUTER modul képes ezekből az adatokból forgalmat generálni. Azaz olyan forgalmat, amely illeszkedik a mért adatokra. Ez önmagában a gyakorlatban, csak igen kis területre ad valóság hű eredményt. Használata:
dfrouter --net-file <asdad> --detector-files <DETECTOR_FILE>
Ahol a DETECTOR_FILE egy xml fájl, ami leírja a detektorokkal mért értékeket.
- Kézzel: mi generáljuk le a forgalmat.
- Népesség statisztikák alapján: Az ACTIVITYGEN modul képes népességi statisztikákból forgalmat generálni. Ehhez utca szintű statisztikák kellenek. Itt olyanra kell gondolni, hogy egy utcában hány háztartás van és hány munkahely, az emberek átlagosan milyen messze és mikor járnak dolgozni, stb. Tehát ilyen hipotézisek szerint dolgozik, az emberek dolgozni, vásárolni járnak, gyereket visznek az iskolába stb. Emellett meg kell adni a városból kimenő és a városba (ezt többnyire városra vagy kerületre értelmes) érkező forgalmat. Ezekhez városkapukat is definiálnunk kell, ezeken keresztül megy ki és érkezik be a forgalom.
Használata:
activitygen --net-file <NET> --stat-file <STATISTICS> --output-file <ROUTES> --random
Szimuláció
A szimuláció futtatásához meg kell adnunk egy konfigurációs fájlt. Ez a fájl írja le a szimuláció paramétereit. Ebben kell meghivatkozni a további input fájlokat, például az útvonal választási fájlt.
Az útvonal választási fájl tartalmazza a jármű típusokat is például:
<routes> <vType accel="1.0" decel="5.0" id="Car" length="2.0" maxSpeed="100.0" sigma="0.0" /> <route id="route0" edges="1to2 out"/> <vehicle depart="1" id="veh0" route="route0" type="Car" /> </routes>
Itt megadhatjuk a kategória méretét, gyorsulási és fékezési kapacitását. Illetve a hozzá tartozó jármű követési modellt és annak paramétereit. Lehetőség van a grafikus megjelenítés módosítására is. Láthatjuk, hogy egy jármű valójában egy jármű típus és a hozzá tartozó útvonal. Természetesen további paraméterek adhatók meg neki, például a kezdeti sebesség.
Azt már bemutattuk, hogyan kell hálózatot generálni, tehát a legfontosabb fájlok a hálózat és az útvonal választás. Ezek elegendők a konfiguráció elkészítéséhez. Itt meg kell adni hány virtuális ütemnyit szeretnénk szimulálni. Illetve, hogy milyen típusú outputot várunk. Egy példa konfiguráció:
<configuration> <input> <net-file value="hello.net.xml"/> <route-files value="hello.rou.xml"/> </input> <output> … </output> </configuration>
Ekkor lefuttathatjuk a szimulációt az alábbi parancssal sumo -c <konfigurációs fájl>.sumocfg Ha vizualizációt is szeretnénk akkor sumo-gui -c <konfigurációs fájl>.sumocfg
Tömegközlekedés
A SUMO képes tömegközlekedést is szimulálni a menetrend és megállók megadásával. Például a következő módon:
<vtype id="BUS" accel="2.6" decel="4.5" sigma="0.5" length="15" maxspeed="70" color="1,1,0"/>
<vehicle id="0" type="BUS" depart="0" color="1,1,0"> <route edges="2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2 0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1"/> <stop busStop="busstop1" duration="20"/> <stop busStop="busstop2" duration="20"/> <stop busStop="busstop3" duration="20"/> <stop busStop="busstop4" duration="20"/> </vehicle>
Kimenet
A szimulációt sokféle célból tehetjük, mindegyik más és más analizálási módszert követel meg. Ezért a SUMO többféle kimenet típust is támogat.
- VTK format : Minden jármű sebességét és pozíciójából készít fájlokat VTK formátumban.
- FCD Floating Car Data): Minden szimulációs ütemben, minden jármű neve, típusa, sebessége, és iránya pozíciója tárolódik.
- Detektoros mérés : Lehetőségünk van induktív hurokdetektorok és azonnali induktív hurokdetektorok elhelyezésére a hálózaton. Előbbi folyam adatokat is tud mérni, például a forgalom eloszlása időben.
- Jármű utazásokról információ : Az egyes járművek által kibocsátott káros anyag, vagy elhasznált üzemanyag adatait kaphatjuk meg.
- információk a szimuláció jelenlegi állásáról: ez nyílván online szimuláció esetén érdekes.
Grafikus Interfész
A SUMO grafikus interfésze független program a többi modultól, ő is csak a sumo parancsot hívja. Sajnos az xml szerkesztéstől sem óv meg, nem lehet benne konfigurációt szerkeszteni. Csak grafikusan adhatjuk meg a konfigurációs fájl nevét. Viszont alkalmas arra, hogy grafikus visszajelzést adjon a szimuláció aktuális állapotáról. A kirajzolása nem látványos, de könnyen értelmezhető. Az xmlben megadott színezéseket és jármű alakokat jól kezeli (ezek felül definiálhatók). Továbbá képeket is elhelyezhetünk a vizualizációba a koordináták megadásával. Például műhold vagy légi felvételt tehetünk a szimuláció mögé.
Jelentős hibája, hogy mindig kirajzolja a teljes látható szimulációs területet, még akkor is ha a felbontás miatt nem is lehet látni a járműveket. Ez jelentős korlátot szab a SUMO-ban a vizualizált szimuláció futtatására.
Lehetőség van a szimuláció szüneteltetésére is, illetve megadhatjuk a szimuláció sebességét is. A gui lehetőséget biztosít a forgalom szimuláció közbeni változtatására, például a dugó miatt az emberek későbbre halasztják a bevásárlást.
A modul felépítése lehetővé teszi, új menüpontok könnyű felvételét.
Felhasználása
Széles körben használt út hálózat tervezéshez, menetrend készítéshez. Kedvelt ingyenes mivolta miatt akadémiai körökben. A felhasználására jó példa többek közt a TurboTraffic. Ahol saját GUI-t használnak hozzá, de a sumo szimulátort.
Kapcsolódó szócikkek
Szakirodalom
- Krajzewicz, Daniel, et al. "SUMO (Simulation of Urban MObility)-an open-source traffic simulation", Proceedings of the 4th Middle East Symposium on Simulation and Modelling (MESM20002). 2002.
- Krajzewicz, Daniel. "Traffic simulation with SUMO–simulation of urban mobility", Fundamentals of traffic simulation. Springer New York, 2010. 269-293.
- Potári, Gábor, Vincellér, Zoltán , Ács, Zoltán. "A method for real-time adaptation of weather conditions within a trac simulation", Proceedings of the 9th International Conference on Applied Informatics 2:41-47. 2014.