Table of Contents

Speed-warning app & map-matcher

A driver-facing feature that shows the current speed limit on the cluster and warns on over-speed — built on our own software, independent of the OEM and of any cloud, as a proof that we can.

On the car

The dashboard app renders a speed-limit sign on the reachable cluster panel (displays) and a “SLOW DOWN” warning when the driven speed exceeds the limit. Live speed comes from CAN; position from GPS.

The map-matcher

Naively snapping each GPS fix to the nearest road jumps around under bridges, in tunnels, and onto parallel streets. Instead we use a small HMM map-matcher (Newson–Krumm style) that fits the GPS trace to the road sequence:

same node are connected; a bridge/tunnel that merely crosses does not share a node, so it is

  correctly kept unconnected. This alone stops the "jump onto the stacked road" problem.
* **Emission + transition** scoring (GPS distance, heading, and how far you actually moved by
  odometry) plus **Viterbi backtracking** enforce a consistent path instead of per-fix guessing.
* The car's **CAN speed** (odometry) and the GPS **Doppler heading** are used as inputs — better
  than position-differencing.

Three real-world fixes (validated on a recorded drive)

the local time, so the displayed limit switches correctly through the day.

Root cause turned out to be a candidate-search bug, not direction: motorways have long

  segments with vertices hundreds of metres apart, so the correct carriageway was never even
  offered as a candidate. Fixing the spatial index (rasterizing each road's //segments//, not just
  its vertices) plus a one-way direction gate eliminated it.
* **Tunnel jump-out.** In a tunnel the GPS drifts onto the surface streets above. On this car the
  reported GPS //accuracy does not degrade// in tunnels, so we cannot rely on it. Instead we use
  the OSM ''tunnel'' flag: when the road we are on enters a tunnel we **coast along it on CAN
  odometry** and stop trusting the drifting GPS until it re-acquires at the exit. Because the
  coast is only triggered inside tunnels, open-road matching is unchanged.

The result on a real ~700 km drive: carriageway flips essentially eliminated, tunnels held, and the conditional 30/50 zone displayed correctly for the time of day.