Staniční hlášení

7.7. 2019

Vážení cestující, prosím pozor, motorový osobní vlak číslo 2634 ve směru Ždánice přijede na kolej první.

Podobné hlášení slyšel snad každý z nás. Bývá nedílnou součástí železničního provozu, dnes už v hlavně ve strojové formě. Řekli jsme si, že bychom mohli zkusit něco podobného vytvořit na kolejišti.

Původní myšlenka staničního hlášení vznikla na výstavě v Prostějově (už ani nevím, kdy to bylo) s tím, že cílem by bylo především včas přilákat návštěvníky k vlaku. Denně jsme svědky situací typu: přijedou dva osobní vlaky do stanice, každému modeláři je jasné, že se budou křižovat a s napětím čeká, jestli se vlaky vykřižují podle předpisů, ale návštěvník vidí zastavit dva vlaky, odvodí si, že ty teď chvíli nepojedou a vydá se k jiné části kolejiště. Staniční hlášení by tak mohlo pomoci upnout pozornost na místa, kde se bude něco dít (například aby návštěvníci stihli přijít ze sousední místnosti).

V rámci naši spolupráce s Laboratoří řízení kolejových vozidel jsme se rozhodli vypsat technické řešení staničního hlášení jako téma bakalářské práce vypracovávané právě v laboratoři. Koncem roku 2017 se ozval student Petr Řepa, který řekl, že by ho práce na staničním hlášení bavila. V rámci jeho bakalářské práce vzniklo funkční řešení staničního hlášení, které nyní postupně vylepšujeme. Staniční hlášení momentálně máme nasazeno na třech stanicích modulovky TT v testovacím provozu.

Tento článek stručně popisuje, jakou cestou jsme se vydali a na jaké problémy jsme narazili.

Požadavky na staniční hlášení

  • Staniční hlášení by mělo být automatické. Všechny informace by mělo brát z řídicího SW kolejiště a nevyžadovat žádnou další interakci dispečera (protože dispečer toho má i tak dost na práci).
  • Zvuk se bude vyrábět skládáním – „slepováním“ – předem nahraných částí vět (tak, jako ve skutečnosti), aby byl co nejvíc autentický.
  • Chceme hlášení, které je modelové věrné: tedy žádné moderní syntetické hlasy, ale snažit se vymodelovat výpravčího z druhé poloviny 20. století, který do staničního rozhlasu hlásí každý vlak osobně mluvením do mikrofonu.
  • Chceme mít v každé stanici jiný hlas (jiný výpravčí = jiný hlas).
  • Chceme mít možnost konfigurovat hlasy (jestli se má/nemá hlásit číslo vlaku, gongy, …) podle skutečné situace ve stanici/na trati.
  • Hlášení by mělo znít přímo ze staniční budovy (reproduktor v rámu), nikoliv z reproduktoru přilehlého počítače.

Realizace staničního hlášení

Zvuky

Staniční hlášení je založeno na nahrávkách zvuků, které jsou vyrobeny a nastříhány předem. Tyto nahrávky ukládáme ve veřejném repozitáři na GitHubu (repozitář využívá Git LFS). Zde si můžete poslechnout příklady nahrávek:

V repozitáři je uloženo více sad zvuků, v každé sadě je několik nahrávek: typy vlaků, názvy stanic, speciální nahrávky, … Největší počet souborů zabírají nahrávky čísel, ze kterých se skládá číslo vlaku. Nahrávek je hodně, protože je třeba mít všechna čísla dvou typů: pro situaci, kdy číslem nekončí věta a pro situaci, když číslem vlaku končí věta (na konci buď klesá). Je třeba mít nahrávky jako například: „jedna“, „dvě“, „pět set“, „tisíc“, z těch se pak vyskládá celé číslo, například „tisíc pět set osmdesát osm“.

Modul hlášení & propojení s kolejištěm

Staniční hlášení je po programové stránce jeden opensource Pythoní program. Program se spouští na RaspberryPi, které je instalováno v rámu stanice. K RaspberryPi je připojený zesilovač zvuku a následně reproduktor, který bývá umístěn přímo pod výpravní budovou. RaspberryPi je napájeno ze standardního napájecího rozvodu stanice (+12 V), na který je připojen měnič na +5 V. K technologii kolejiště se RaspberryPi připojuje pomocí WiFi. Všechna Raspberry jsou nastavena tak, aby se automaticky připojovala k WiFi „stanicni-hlaseni“, jakmile se připojí, provedou vyhledání všech serverů kolejiště v lokální síti. Pokud je nalezen server, který staniční hlášení chce (jeho jméno má napsáno v konfiguračním souboru), připojí se k němu: staniční hlášení otevře TCP spojení s technologickým serverem kolejiště, které udržuje otevřené. Po spojení chodí zprávy jako například

Klb;SH;PRIJEDE;{608522;Os;1;Zd;Oc;9:22;9:25}

Tato zpráva instruuje modul ve stanici Klb (Klobouky u Brna) k zahlášení příjezdu osobního vlaku číslo 608522 ze stanice Ždánice do stanice Čejč na první kolej (odjezd v 9:25).

Celý proces je automatický, RaspberryPi je nakonfigurováno jen jednou při instalaci, pak už hlášení funguje plně autonomně.

Celý protokol je popsán zde.

Pohled zespodu stanice: vlevo měnič 12 V → 5 V, uprostřed zesilovač zvuku, vpravo RaspberryPi.

Spouštění hlášení

Existují 4 typy hlášení:

  • Očekávaný příjezd vlaku.
  • Očekávaný odjezd vlaku.
  • Průjezd vlaku po koleji („Nepřibližujte se ke koleji.“)
  • Speciální ručně spouštěná hlášení („Pozor, probíhá posun“, …).

Hlášení příjezdu a průjezdu vlaku je spouštěno automaticky z řídicího SW kolejiště v momentě, kdy vlak vstoupí do přibližovacího úseku stanice. Nepřišli jsme však na to, jak automaticky spouštět hlášení odjezdu (je třeba ho spouštět dřív, než při stavění odjezdové jízdní cesty, protože to vlak už pojede), hlášení odjezdu se tedy spouští ručně z menu vlaku. Speciální hlášení se spouští také ručně z panelu stanice.

Hlášení odjezdu soupravy z hJOP
Hlášení odjezdu v menu soupravy v hJOP

Finální hlášení pak zní například takto:

Zajímavé konstrukční problémy

Napájení

Na RaspberryPi běží poměrně běžný operační systém (v našem případě Raspbian), který bootuje z paměťové karty. Nojo, ale napájení stanice může být kdykoliv přerušeno. Jak předejít ztrátě dat? Spoléhat se jen na žurnálování?

Ne! Celá paměťová karta je mountována jen pro čtení. Světe div se, funguje to, už to přežilo desítky vypnutí a zapnutí a zatím bez problému. Využili jsme tento projekt.

Neautentičnost nahrávek

Jak jste sami mohli slyšet, skládání zvuků ještě není ideální. Chceme vylepšit nahrávání tak, aby probíhalo v celých větách. Snad se to podaří, byla by škoda takový projekt nedotáhnout.

Šumící reproduktor

Dlouhou dobu se nám dělo to, že reproduktor ve stanici prskal. V reproduktoru prskalo podle toho, jaké znaky jsem zrovna psal do ssh spojení k Raspberry, no prostě děs. Vyzkoušeli jsme reproduktor přípojit jak přes jack, tak přes HDMI výstup z RaspberryPi. Ukázalo se, že problém byl v tom, že zesilovač zvuku byl napájený k vstupnímu napájení RaspberryPi. Jakmile jsme připojili napájení zesilovače do A USB portů RaspberryPi („výstupní“ porty Raspberry), prskání zmizelo.

Čím bylo prskání způsobeno, to doteď netušíme.

Závěr

Myslím si, že po technické stránce je projekt výborně zvládnutý. Vše šlape jako hodinky. Zbývá doladit spojování nahrávek tak, aby zněly dobře.

Více informací je k dispozici v bakalářské práci Petra Řepy, která se realizací staničního hlášení zabývá podrobně. Pokud vás náš projekt zaujal nebo máte třeba nějaký dotaz, neváhejte se ozvat v komentářích :).

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *