Jak již psal Tomáš Jecha na svém blogu, přihlásili jsme se s naším projektem City Traffic Designer do soutěže ImagineCup 2008 pořádanou společností Microsoft. Dostali jsme se až do celorepublikového kola pořádaného 15. května 2008, kde jsme získali 2. místo. Trochu nás mrzelo, že jsme to nevyhráli, bylo to jen o chlup, ale konkurence byla letos poměrně veliká. Tento ročník se soutěže zúčastnilo 550 lidí.
Na projektu jsme pracovali 4 - Tomáš Herceg, Tomáš Jecha, Tomáš Slavíček a Jan Šebetovský, zabralo nám to něco přes 2 měsíce poměrně intenzivního vývoje. Využili jsme mnoho různých techologií, hlavně Visual Studio 2008, .NET Framework 3.5, ASP.NET, Silverlight, SQL Server 2005 a mnoho dalšího.
Specifikace projektu City Traffic Designer
V dnešní době řeší většina velkých měst vážné problémy s dopravní situací. Automobilů neustále přibývá a kapacity silnic nestačí, takže se na mnoha místech tvoří kolony a dopravní zácpy, což má neblahý vliv na naše životní prostředí. To byl jeden z důvodů, proč jsme se rozhodli vytvořit projekt City Traffic Designer.
Jedná se o systém pro simulaci a plánování provozu silniční dopravy ve městech, jehož cílem je poskytnout snadno ovladatelný, ale dostatečně silný nástroj pro simulaci vytížení silnic, čekacích dob, ale i znečištění a hluku v okolí těchto pozemních komunikací. Tento systém může pomoci například navrhovat nové cesty (např. obchvaty), umožňuje sledovat změny dopravní situace při uzavření ulice či křižovatky atd.
Myšlenka projektu
Aby byl City Traffic Designer použitelný i v reálných scénářích, je zapotřebí robustnost a snadná rozšířitelnost. Proto jsme při vývoji nahlíželi na projekt těmito pohledy:
Designér - klientská aplikace
Základem celého systému je klientská aplikace, ve které se jednak vytváří a upravuje mapa města, a ve které se poté provádí samotná simulace provozu. Editor map podporuje 2 režimy zobrazení – letecký pohled shora pro modelování silnic a interaktivní 3D zobrazení, ve kterém jsou vidět podrobně konkrétní místa a křižovatky.
Pro každou mapu lze nastavit podkladové snímky, přes které se silnice zobrazují, což usnadňuje orientaci v mapě. Lze použít i letecké snímky terénu, takže vše vypadá realisticky. Díky tomu je možné jednoduše a pro účely simulace dostatečně přesně pokládat silnice tak, aby odpovídaly skutečnosti.
Do mapy lze přidávat silnice s volitelným počtem pruhů v obou směrech, křižovatky s detailní specifikací jízdních pruhů a hlavní silnice, možností přidání semaforů a přesnému nastavování jejich časování, dále pak kruhové objezdy, nájezdy a sjezdy či přechody pro chodce. Každému segmentu silniční sítě je možno nastavit přesné parametry, aby byly pokryty veškeré běžné potřeby.
Ovládání a uživatelské rozhraní klientské aplikace je intuitivní a příjemné na používání. Nejdůležitějším prvkem je bezesporu pás karet Ribbon známý ze sady Microsoft Office 2007, který velice zpříjemňuje a usnadňuje práci s aplikací. Kromě toho využíváme mnoho komponent, které vylepšují celkový vizuální dojem z uživatelského prostředí díky použití vlastních grafických stylů. GUI je ale navrženo tak, aby bylo nejen hezké na pohled, ale i snadno a kvalitně ovladatelné, a to i pomocí klávesnice, což zvyšuje produktivitu práce.
V klientské aplikaci se také provádí samotná simulace dopravy. Každé simulaci se dají přesně nastavit veškeré parametry, aby výsledky co nejvíce odpovídaly realitě. Samozřejmostí je možnost určení počtu aut na jednotlivých vjezdech a výjezdech z města, množství aut, které po městě jezdí náhodně (což simuluje jízdy obyvatel města například do práce či do supermarketů), množství lehké a těžké nákladní dopravy, počty aut v různých denních dobách atd. Po zadání denní doby, která se má simulovat, a nastavení všech parametrů, je možné simulaci spustit a sledovat její průběh.
Během simulace je možné v zadaných časových intervalech sbírat mezivýsledky (počet aut, která daným místem projela, čekací doby, hluk, znečištění atd.), aby byl zaznamenán průběh a vývoj hustoty provozu. Je samozřejmě možné měnit rychlost simulace, či simulaci úplně pozastavit a případně se podívat na konkrétní problémová místa a zobrazit si podrobné informace o každé křižovatce či silnici.
Ve 3D náhledu jsou přesně vidět jednotlivé křižovatky včetně semaforů a dopravních značek. Jako podklady lze použít leteckou mapu a pokud se přidá i výšková mapa, je možné zobrazit i kopce a údolí přesně tak, jak vypadají ve skutečnosti. Během simulace je samozřejmě možné zobrazovat aktuální informace o různých místech, např. kolik aut na daném místě projelo od začátku simulace, jaká je v daném směru průměrná rychlost atd. Ve 3D je samozřejmě umožněno nastavovat přesně pozice kamery a sledovat situaci z různých vzdáleností a úhlů.
Vytváření mapy v editoru je velmi intuitivní. Pomocí kruhové nabídky, ve které se zobrazují nejběžnější úkoly, je možné vytvářet silnice, spojovat a rozpojovat je, připojovat křižovatky, měnit geometrii jednotlivých částí atd. Detaily lze nastavit v bočním panelu, zvláště možnosti nastavené křižovatek jsou velice rozsáhlé. Lze přesně měnit počty jízdních pruhů, které do křižovatky vcházejí a vycházejí, je samozřejmě možné specifikovat, ze kterého jízdního pruhu se kam může odbočit, a do detailu lze také připravit časový plán pro semafory, které pak provoz na křižovatce řídí.
Uživatel - webový portál
Po dokončení simulace se data mohou odeslat webové aplikaci, což je druhá část celého systému. Tato webová aplikace zobrazuje mapy oblastí a výsledky všech provedených simulací, přesné statistiky a grafy počtů vozidel na konkrétních místech, dále pak čekací doby, znečištění a hluk v okolí komunikací atd.
Je možné nechat si vygenerovat přesné mapy a grafy nejvytíženějších křižovatek, dále třeba míst, kde došlo k nejvyšší koncentraci emisí či hluku, a tyto výsledky je možné prezentovat do veřejné sekce, ke které budou mít přístup běžní uživatelé Internetu.
Pomocí technologie AJAX je možné zobrazovat aktuální informace o daném místě v mapě bez klikání – stačí kurzor myši podržet nad nějakým místem a za chvíli se objeví požadované informace o hustotě provozu, hluku a znečištění. Vše je snadno a jednoduše ovladatelné, ale zároveň produktivní. Pro zobrazování map využíváme technologii Silverlight, která umožňuje udělat uživatelsky přívětivější rozhraní.
Webová aplikace je také centralizované úložiště map a výsledků simulací, díky čemuž je možné tyto mapy sdílet mezi více uživateli klientské aplikace. Není tedy nutné, aby si uživatelé mapy složitě předávali, vše se totiž ukládá a načítá buď přes webové služby API serveru, či přímo do databáze.
Administrátor - konfigurace modulů aplikace
Práce administrátora pak spočívá v naplánování a nasazení řešení (umístění SQL serveru, bezpečnost přenosů dat, protokol komunikace, webový server – všechny tyto komponenty jsou nastavitelné pomocí XML).
Aby nebyla konfigurace tak složitá, je možné k sestavování aplikačních balíčků použít nástroj Solution Designer. Pomocí něj lze vizuálně vytvořit jak stand-alone aplikaci pro jeden počítač, tak i podnikové řešení pro intranetovou síť s několika servery.
Tento nástroj obsahuje implicitně jen dvě koncové aplikace (klientská aplikace a webový portál), ale vývojář jí může snadno rozšířit pomocí XML o svoje vlastní moduly a tak nabídnout administrátorovi, který nemusí mít programátorské znalosti, možnost nasadit další funkcionalitu.
Programátor - API a struktura systému
Vývojář má pak možnost využívat silného API s vestavěným simulačním, vykreslovacím a synchronizačním jádrem. Architektura systému je navržena co nejrobustněji a s ohledem na budoucí vývoj a rozšiřitelnost. Důkazem vysoké použitelnosti je i fakt, že nad API byla napsána kompletní klientská aplikace i webový portál.
- Synchronizační jádro – dokáže odesílat provedené změny v mapách na server, automaticky slučovat změny, načítat seznamy a vůbec zajistit ukládání a načítání dat z databáze
- Vykreslovací jádro – dokáže vykreslovat mapy a grafy z údajů načtených ze serveru
- Simulační jádro – provádí nad mapou simulace, počítá statistiky a řídí auta na mapě
- Server API – tato komponenta dokáže API rozdělit na klientskou a serverovou část a zajistit tak komunikaci přes síť i pro větší množství klientů. Využití server API lze aktivovat pomocí XML konfigurace, není nutný zásah do kódu.
- Publikační jádro – slouží k publikování dat pro webový portál přímo ze simulací a map
- Testovací framework – dává možnost snadno testovat napsané doplňky a přesně sledovat průběh jednotlivých simulačních kroků
- Přihlašovací jádro – řeší přihlašování do systému, role a zabezpečení
- Pomocné komponenty – zjednodušují vytváření složitějších křižovatek, silnic, simulačních nastavení atp.
Všechny tyto části jsou přehledně rozděleny do jmenných prostorů API knihovny a disponují XML komentáři.
Použité technologie
Pro vývoj systému City Traffic Designer jsme použili programovací jazyk C# verze 3.0. Pro renderování 3D scén se využívá zobrazování XNA Framework, pro vykreslování 2D pohledů využíváme rozhraní GDI+. Komunikační jádro API je založeno na technologii Windows Communication Foundation.
Webová aplikace je napsána v jazyce Visual Basic .NET a v ASP.NET (s AJAX rozšířeními). Hojně využívá i technologii Silverlight. Data se ukládají na SQL Server 2005. Ve všech částech využíváme také mnoho funkcí z nového .NET Frameworku 3.5, především Extension Methods a LINQ. Na několika místech používáme i technologii Windows Presentation Foundation. Pro větší komfort uživatele jsme implementovali funkce řady grafických GUI knihoven, včetně pásu karet Ribbon představeného v Office 2007.
Pro samotný vývoj využíváme Visual Studio 2008 a Team Foundation Server pro verzování zdrojových kódů a Microsoft Office Groove pro sdílení nejrůznějších dokumentů v rámci týmu.
Simulace provozu v městě Třebíči
Pro demonstrační a testovací účely jsme zpracovali mapu silnic v městě Třebíči. Na ní jsme celý simulační model otestovali a odladili. Do mapy jsme na každý vjezd a výjezd nastavili průměrný počet aut, která tudy projedou za den (statistické údaje nám poskytla Správa a údržba silnic Třebíč), a prováděli jsme simulaci. Místa, kde se v simulátoru tvořily dopravní zácpy ve špičce (mezi 14. a 15. hodinou), odpovídala skutečné situaci ve městě. Zvláště centrum města bývá ve špičce ucpané, tvoří se dlouhé řady aut před semafory. Další dopravní špička nastává mezi 16. a 17. hodinou, i v tuto dobu zácpy předpovídané simulátorem odpovídaly realitě.
Kde může simulátor pomoci?
Statistiky udávají, že za 25 let se zvýší počet aut přibližně 1,3krát. V mapě je možné samozřejmě nastavit počty aut 1,3x vyšší a tak se podívat, jak může situace vypadat za 25 let. Takových příkladů jsou stovky. Do mapy můžeme přidat obchvat města, který se teprve plánuje, a ihned vidíme, jestli opravdu pomůže zlepšit dopravní situaci v centru.
Je možné zjistit, kde budou vznikat zácpy, když se uspořádá rockový koncert, na který se sjedou tisíce lidí, dá se nasimulovat, co by se stalo, když bude nějaká křižovatka či ulice muset být uzavřena. Simulace může pomoci i při nastavení časování semaforů tak, aby byl průjezd městem plynulý a člověk nečekal na zelenou na každé křižovatce.
Shrnutí
Snažili jsme se navrhnout systém, který by mohl pomoci odborníkům při plánování omezení provozu, řešení nových komunikací a obchvatů, ale zároveň by dokázal informovat širší veřejnost dostatečně srozumitelnou formou o problémech s tím spojených. Díky synchronizačnímu jádru může na jedné mapě pracovat více lidí najednou ve stejný čas a vytvořit tak podmínky pro práci i větších týmů.
Díky striktnímu rozdělení částí aplikace na uživatele / designéra / administrátora / vývojáře je možné realizovat často požadované řešení, kdy s programem pracuje řada lidí, administrátor se stará o samotný chod systému a vývojář může být externista, který administrátorovi předává hotové moduly.
Navíc v současné době jednáme s lidmi, kteří by v budoucnu mohli produkt využívat a snažíme se reagovat na jejich názory a postřehy. Naším cílem je, aby byl systém plně využitelný i mimo testovací a předváděcí rovinu.
City Traffic Designer má velký potenciál a je schopen dát relativně přesnou odpověď na mnoho různých otázek. Simulační model byl navržen tak, aby počítal s různým chováním řidičů, s různými rozměry a rychlostními možnostmi aut a samozřejmě s přesnými počty aut na jednotlivých trasách, takže výsledky dobře odpovídají realitě.
Na závěr bychom rádi uvedli několik firem a organizací, kteří nám s realizací pomohli:
- FOSS Software – s touto zahraniční firmou jsme navázali kontakt a náš projekt se jim zdál natolik zajímavý, že nám poskytli zcela zdarma komponentu ElegantRibbon pro tvorbu pásů karet.
- Český zeměměřičský úřad – ochotně nám poskytnuli mapové podklady a ortofotomapy.
- Správa a údržba silnic Třebíč – poskytnutí statistik počtů aut jako přesný podklad pro simulaci provozu ve městě Třebíči.
- T-mapy s.r.o. – poskytnutí výškové mapy města Třebíče a okolí.