Ett fordon på röda linjen mot Ropsten rapporterades hoppa fram och tillbaka istället för att glida jämnt. Orsaken visade sig vara en grundläggande brist i hur kartan avgör vilken riktning ett fordon färdas.
Problemet
Varje spårbundet fordon har en bearing — en kompassriktning från GPS:en. Kartan jämför denna bearing med spårets riktning vid den aktuella positionen för att avgöra om fordonet åker "framåt" eller "bakåt" längs spåret.
Vid Ropsten gör tunnelbanespåret en skarp sväng där riktningen svänger från 30° (nordost) via 325° (nordväst) tillbaka till 58° (nordost). När ett fordon var mitt i kurvan kunde dess GPS-bearing peka i en helt annan riktning än det lokala spårsegmentet — och koden tolkade det som att fordonet åkte bakåt.
Konsekvensen
När riktningen sätts fel ignoreras alla framåtförflyttningar (de ser ut som "bakåt" ur kodens perspektiv). Fordonet står stilla. Efter ett antal ignorerade uppdateringar godkänns till sist en riktningsväxling — och fordonet hoppar fram hela den ackumulerade sträckan på en gång.
16 kurvor i spårnätet
En genomsökning av hela spårnätet hittade 16 platser med skarpa kurvor (>120° riktningsändring) som kunde utlösa samma problem:
- T-Centralen — gröna linjens kurva under Gamla stan (linje 17, 18, 19)
- Tekniska högskolan — röda linjens sväng (linje 14)
- Rinkeby/Hallonbergen — blåa linjens kurva (linje 11)
- Ropsten — röda linjens terminalloop (linje 13)
- Alvik — Nockebybanan (linje 12)
- Gullmarsplan — Tvärbanan (linje 30)
Dessutom påverkades flera pendeltåg (linje 40 och 48) av liknande problem.
Lösningen
Riktningsdetekteringen har nu en dead zone: om vinkeln mellan fordonets bearing och spårets riktning ligger mellan 45° och 135° klassas riktningen som tvetydig och fordonet antas åka framåt. Bara tydliga matchningar (<45°) eller tydliga motsatser (>135°) ger ett aktivt riktningsbeslut.
Gränsen för att godkänna en äkta riktningsväxling (som vid en ändhållplats) sänktes också från 5 till 3 på varandra följande bakåtuppdateringar — så att fordon vid terminus vänder snabbare.