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.
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.
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.
maxspeed:conditional. We now evaluate the rule againstthe 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.