performance · vehicle intelligence
ubc formula electric
live and historical telemetry for a student-built electric race car, from the control unit firmware to the dashboards engineers read trackside.
- timeline
- sep 2025 — present
- role
- software engineer
- stack
- typescript, react, canvas, websockets, rust, c, stm32, can
100 → 1 ms
telemetry render latency
90%
less broadcast bandwidth
millions
of data points per view
context
ubc formula electric designs and builds an electric race car. the car’s control units publish sensor data over can, and the team needs to see it live during testing and review it afterwards. i work across that whole path: firmware on the car, the backend that streams signals, and the dashboards on the other end.
a faster renderer
the telemetry views plot millions of data points. i built a typescript and canvas renderer that downsamples to what the current viewport can actually show and writes into preallocated typed arrays instead of allocating per frame. rendering latency dropped from 100 ms to 1 ms.
streaming only what’s watched
the server originally broadcast every can signal to every client. i designed signal-level subscriptions over websockets, so each client receives only the signals it has subscribed to. broadcast bandwidth fell by 90%.
dashboards
i built react dashboards for live and historical can telemetry, with synchronized graphs, zoom and pan controls, and viewport-driven loading from a rust backend, so a long session loads only the range being looked at.
marking runs from the car
on an stm32h5 control unit, i implemented a debounced telemetry-marker input. a 100 hz task detects rising edges and sends aperiodic can events, so a driver or engineer can mark a run and find that moment in live telemetry.