Guardian Angel -Brought to you by IoT
Athletic Performance Tracker & Injury Prevention
As part of my Industrial Engineering Challenge Lab, I developed a low-cost motion and force tracking system that could deliver insights on athletic performance comparable to high-end products such as Sparta Science’s force plate system. This tracker was wearable, real time, low power, and unobtrusive, allowing athletes to play at their best while still receiving critical data.
This project is underway as a team effort in my IEOR Sports Tech Challenge Lab - a course that pairs engineers with business majors and NCAA athletes to develop innovative solutions for Cal Athletics and the world at large. The technological/coding/data science aspect of the project is entirely my responsibility.
First Working Prototype
Before doing anything else, my first goal was to get three key components of a Minimum Viable Product (MVP) working:
The Arduino should pull accelerometric data from a basic MPU 6050 IMU
The Arduino should transmit the information over bluetooth
The Arduino, Sensor, Bluetooth Module, and Battery should fit on a device that can be worn while walking and doing basic activities
Seeing data pouring in successfully over UART was one of the happiest moments of my semester (does that make me sound lame?). From there, the “only” challenge would be parsing 3-axis acceleration into usable data with value to an end user. Easy, right?
APPROACHING THE PROBLEM
What do coaches and athletes want to know? It turns out, it’s relatively straightforward. Coaches want to know if their athletes are getting balanced training, and athletes want to benchmark their performance and learn how to improve.
After interviewing athletes and coaches, I peeled back the marketing buzz on the industry leader in data-based performance analysis, Sparta Science, and realized that all their flagship plate floor plate sensor is actually doing is measuring three fairly simple quantities using an array of load cells:
“Load” is force applied by the athlete
“Explode” is jerk, or the rate of acceleration
“Drive” is change in momentum, or delivered impulse, over a short time
From there, it was just a matter of hooking up an IMU to a bluetooth module… or so I thought.
Version 2.0 - now with noise filtering!
In many ways, Version 2.0 is quite a bit “uglier” than Version 1. There are more wires sticking everywhere, the color scheme doesn’t make any sense, and sensors are being held on by command strips, thread, and a lot of hope.
However, this version packs significant and far-reaching improvements both under and above the hood. Let’s start with the exterior:
The device can now be taken on and off without removing your shoe - a major pain point I found while testing Version 1 with coaches and athletes
You can turn it on and off using a switch instead of by unplugging the battery
The strap no longer interferes with running or sports at all (the old one chafed after about 2 miles on the treadmill)
The entire setup is about 1/2 the weight of the first version
Moving to the internals, the situation is even better, resulting in actual usable data that is (mostly) free of major noise and actually captures some useful information about the wearer’s motion:
Battery life has been improved to over 50 hours of constant operation.
The sensor now has a Kalman filter reducing noise and smoothing data values
Data is now plotting in real time instead of just sending raw numbers over Bluetooth UART
Instead of using poorly-documented functions pulled from Github, the Arduino is now directly interfacing with the IMU, which allows for increased customization, more control over sensor behavior, and a faster run time
Data is now being transmitted at about 300 samples per second - a 6x improvement over version 1
Overall, a good result!
It’s Never That Easy
Moving into the benchtop prototype, I quickly realized two things:
Collecting accurate, actionable data is way harder than it seems at first glance
I don’t know how to code for Arduino
Luckily, Problem 2 could be solved over the course of a few afternoons, so I after some quality time watching YouTube tutorials, browsing StackExchange, and trawling through Github for helpful code snippets, I finally had the confidence to write a Version 1.0 Arduino program that could pull data from the MPU-6050 IMU and return values over UART that resembled real forces and accelerations.
Unfortunately, I still wasn’t getting great results, and the product was clunky, even when fitted to a knee sleeve.
Integrating machine learning
At long last, Load, Explode, and Drive was displaying and showing up as coherent data streams on the Bluefruit app.
Here you can see the results of me jumping followed by walking for a short while. Unfortunately, the actual numerical values for force, jerk, and impulse don’t scale well together for easy comparison, so in future versions, I will have to implement something that either plots the data streams separately, or turns each value into a more cloudy quantity similar to what Sparta Science does where they give performance metrics like “Explode: 60” with no additional context or information.
As much as possible, I’d like to stay away from that, since, especially after speaking to Cal Athletics, I’m a big believer that coaches and athletes are smart enough to be given real data and don’t need to play in the kiddie pool, as it were.
The next frontier is implementing machine learning models for the detection of anomalous events. While a rudimentary CART model is already working, I wish to expand to clustering, SVM, and more detailed time series analysis to unlock the true potential of the sensor platform.
Stay tuned for more updates coming soon!