View on GitHub


A sensor system designed to diagnose issues with squat form.

Download this project as a .zip file Download this project as a tar.gz file


As a society, we have rearranged our athletic priorities to favor performance over how well we move, often leading to injuries and limited athletic potential. Currently, the only way to obtain actionable, immediate feedback on movement technique is to perform a particular movement in front of an experienced physical therapist or coach – resources that are often expensive or unattainable to the average person.

I wanted to explore using technology to help solve these types of projects so I started working on SquatIQ -- a sensor system designed to diagnose issues with squat form. I worked with the squat because it a compound movement that can give a lot of information on an individual's mobility and imbalances; many physical therapists actually screen patients by having them perform a bodyweight squat.

Sensor System
The sensor system consists of a quad-strapped accelerometer, pressure sensing insoles, and some signal conditioning circuitry. The sensors are connected to an Arduino, which commincates with the computer running the live classifier.

Currently, the system is consists of a shoe insole fitted with force-sensing resistors (FSRs) to determine foot pressure distribution, an accelerometer strapped on the athlete’s quad to obtain depth information, and a software program running a trained multi-label SVM classifier to diagnose real footing issues (supination, pronation, heel-lift, etc) from the raw sensor data (see above picture). The sensors are connected to some signal conditioning circuitry and an Arduino, which communicates with the computer running the classifier. The athlete first calibrates the system and then performs several bodyweight squats (see above for video, below for example report). The system outputs an accurate report containing footing errors and where in the movement they occur; I have tested it with several people in my gym. It is possible to analyze data both online and offline. Currently, I have only built one insole but will soon build another. All code is available on github, with being the main script.

Squat Plot
A plot generated with data from SquatIQ, showing different errors throughout the movement. The area of the circle indicates severity of the error. This particular athlete exhibits pronation and heel-dominance during standing, and then starts to show heel-lift and slight pronation at the bottom of the squat.

Future Work

Diagnosing mobility issues

As mentioned earlier, the current output of the system is a report on footing issues during the squat and where in the movement they occur. I am currently working with a physical therapist on using the output of my system to train a model that can infer general mobility issues and imbalances. For example, if a user exhibits heel-lift in the bottom position of a squat, it could indicate that they have limited ankle dorsiflexion due to tight calf muscles. I envision a future iteration of SquatIQ as a system that people can use to diagnose their own mobility issues with minimal interaction with a physical therapist.

Minimizing strain

Currently, the system only takes into account footing position, which gives a lot of information about overall body positioning during the squat. It would be interesting to add flexion sensors on the ankles, knees, and hips to measure joint angles in an effort to reduce strain and the potential for injury. In theory, this would involve minimizing shear/torque on joints, with some joints being more important than others. This would vary with different people: some people will be able to maintain in a more forward knee position, for example. This would allow the sytem to be more useful when performing a squat with weights.

Audial feedback

Ideally, the system would be able to deliver feedback to the user about how well they are performing the movement. I think feedback in the form of musical cues is great for this application because it is easy for the brain to understand and many people already exercise to music. I am currently trying to encode different errors as different notes in a chord and modulating the pitch to signal severity of the error. When the user hears that a certain note in a chord is off, they should be able to intuitively correct for it. I am playing with the pyAudio library for this and will post any updates.