veloVigil — open source HRV and crash detection for Karoo (Polar H10)
Built an open source Karoo extension this week that connects directly to a Polar H10 over BLE for real HRV (RMSSD, SDNN, pNN50 from RR intervals) and crash detection (3-axis accelerometer, filtered g-force).
What it does:
- Registers as a Karoo HR sensor so it can own the H10 BLE connection
- Computes HRV on-device from beat-to-beat RR intervals
- Crash detection via 50ms sliding window g-force filter (rejects road vibration, catches real impacts)
- Streams everything to a Cloudflare backend for live dashboards and post-ride AI coaching
- Works with any BLE HR strap for basic HR, H10 required for HRV and crash detection
- Free. MIT licensed.
GitHub: https://github.com/velovigil/velovigil-karoo
Site: https://velovigil.com
Built with karoo-ext 1.1.8 and the Polar BLE SDK. Uses the virtual sensor pattern from
lockevod/Karoo-Power_Extension for the HR bridge.
Looking for beta testers with a Karoo 2/3 and Polar H10. Feedback welcome.
******still in closed beta, working on a reliability fix.
-
-
Hey everyone — beta is opening up! Sign up at https://velovigil.com/beta to get on the list. Limited to 100 spots. You'll need a Karoo 2/3 and ideally a Polar H10 (any BLE HR strap works for basic HR). I'll send invite codes out as spots open. Thanks for your patience!
-
Update, four months late, and an apology to everyone who signed up here and heard nothing. Łukasz, Javiuchi — you were right, and invites went out to everyone on the list last night. Check your inbox (and spam).
The bug. Early beta rides recorded a heart rate of 0, every one. I found the cause this week with the Karoo on a USB cable and the Bluetooth logs open. The extension talks to the H10 through Android's Bluetooth stack, while the Karoo's own sensor list uses a separate radio, which is why pairing the strap natively always worked. The H10 asks for an encrypted link, and Android answers with a "Pairing request" in a notification shade the Karoo never shows you. Nobody taps it, it times out after 30 seconds, the link drops, and it repeats every 40 seconds for the whole ride.
The fix is one swipe down from the very top of the screen and one tap on PAIR & CONNECT. The Karoo remembers it after that. Version 0.3.2 tells you on its settings page when that request is waiting, and the install guide has a screenshot of the exact prompt: https://velovigil.com/start (step 6).
Measured today on two Karoo 2 units on one rider account: HR 64–80 bpm and RMSSD 26 ms arriving every 5 seconds. One rider at a desk with a strap on, not a lab, but it is the first non-zero heart rate this extension has ever uploaded and I would rather show that than promise more.
What you get today: H10 heart rate and HRV (RMSSD, SDNN, pNN50, computed on the Karoo from the RR intervals) as data fields and in the ride log; a per-rider dashboard where your rider ID is the only key; and a markdown export of any ride you can paste into your own Claude or GPT for a debrief, if you use one. The ride log goes to a small Cloudflare backend I run. No account with me, no email needed to ride.
In the code but not yet proven on a real ride: jump and crash events from the H10's accelerometer (hang time, landing g). If you jump things, I want your ride.
Karoo 2 and Karoo 3. Sign up at https://velovigil.com/beta if you are not on the list yet. Source is MIT: https://github.com/velovigil/velovigil-karoo
Rob
Please sign in to leave a comment.
Comments
17 comments