BowlSense Learn
From Raw IMU Data to Community Ball Stats — How BowlSense Turns Sensor Data Into Useful Insights
We built a pipeline that takes raw accelerometer and gyroscope data from inside a bowling ball and turns it into real trajectory paths, speed profiles, and community-wide ball comparisons. Here's how it works.
This week we shipped something I've been wanting to build since day one: Community Ball Stats — a page where you can see how a specific ball actually performs across different bowler speeds and rev rates, based on real sensor data from the BowlSense puck. But getting there required solving a harder problem first: turning raw accelerometer noise into a real ball trajectory.
The Problem With Double Integration When you have an IMU (accelerometer + gyroscope) spinning inside a bowling ball at 300+ RPM, the raw data is... a lot. 4,500+ samples at 416Hz, with gravity mixed into every reading, the sensor rotating through all orientations multiple times per second, and tiny accelerometer bias errors that compound every millisecond.
The textbook approach is straightforward: subtract gravity, double integrate acceleration to get position. In practice, this fails spectacularly. Accelerometer bias of even 0.01g accumulates through two layers of integration (velocity then position) and after 2 3 seconds of lane contact, your calculated ball speed drifts to absurd values — some of our test throws showed 260 mph at the pins.