Here’s the problem:
It can take years to learn precise motions, like a golf swing or a baseball pitch.
It’s not that the motions themselves are kinematically difficult — our natural dexterity is amazing.
The real problem is that we usually get feedback that isn’t clear and immediate, so it’s very hard to make precise corrections to our future motions.
Here’s my solution:
Give users instant haptic feedback whenever their motion deviates from the ideal.
With feedback this clear and immediate, users can, say, quickly figure out that they’re 3 degrees off when 10 centimeters into the motion.
Learning a correction that precise might take years in any other situation.
Here’s how it works:
The developers (or users) record an ideal path for the motion.
This creates a list of positions and rotations at those positions.
Since everyone’s body is different and therefore the ideal motion is slightly different too, users can start learning from the developer motion and then record their own perfect motion and start practicing their consistency.
The user gets into a start position and presses a button to spawn the path.
The start position could be anything from the address position in golf or the ready position in tennis.
Haptic feedback is triggered whenever the user deviates from the path’s rotation or position.
Deviations in rotation trigger a constant rumble and deviations in position trigger a pulsed rumble.
So that it’s easier to quickly tell whether they were incorrect in rotation or position.
And error margins can be adjusted as the user learns.
So that they can start by practicing the general motion (with something like a 15 degree error margin) and then move to more and more precise versions.
Here’s why existing solutions aren’t good enough:
Watching others
To learn from watching others, we have to map the other person’s motions to our future motions (which are often in a different perspective). This is pretty hard to do.
So, while we can quickly learn the right general motion this way, it can take a literal lifetime to spot and apply the precise corrections needed to perfect the motion.
Trial and error
Trial and error is also great for quickly learning a general motion. But the feedback we get is often sparse and unclear, like seeing the ball arc in the wrong direction or feeling that “something” was off about the swing.
Again, it takes a lifetime to learn precise motions this way.
Coaching
Coaches cost a lot of money and it can be hard to find a good one, since very few people have learned to spot small deviations in motion and then properly communicate them.
The tools that coaches use to provide feedback are imprecise (talking, drawing, making physical corrections, etc.). It’s simply hard to communicate a motion well enough that everyone can learn to, say, make a 3 degree correction at some point in their swing.
Swing analysis tools
There are phenomenal tools out there like Hackmotion and deWiz, which give you detailed feedback on your swing and provide drills for fixing issues.
But this feedback happens after your swing and is often displayed in some abstract form that’s hard to translate into your own motion (like text that tells you to do something or an image that shows the correct hand rotation).
They’re a cheaper substitute to a great coach, but they too don’t provide true real-time feedback.
To turn this into a product, we simply need (1) a way to track position and rotation (an IMU) and (2) a way to deliver haptic feedback. Here are a few options I thought of:
Virtual reality app
A VR headset already has everything you’d need, so it would be very easy to implement (I already did it).
But most people don’t have headsets and a simulation can feel different from the scenario you actually want to train for, which can cause you to learn a slightly incorrect motion.
Smart watch app
Smart watches already have an IMU and a haptic motor.
The only question is how accurately they can track position data, since IMUs tend to have a lot of position drift over time.
This is usually solved by having some sort of external reference, like maybe a phone that’s placed in front of you, or using some kind of zeroing logic, like removing all accumulated rotation/position error whenever the user is holding the recorded swing start position.
There are already some smart watch apps out there that provide swing feedback, like SwingID, but they don’t provide real-time haptic feedback (or any other kind of real-time feedback).
An IMU strapped to your wrist (and maybe your hand too)
Companies like Hackmotion already have devices like this on the market.
But they don’t offer real-time haptic feedback, which could be implemented by just adding a haptic motor to their setup (and probably figuring out how to better track position in real-time).
And here are some learnings from the project:
Haptic feedback
To provide real-time feedback for a motion, we need to communicate two things: a rotation error and a distance error.
Figuring out how to communicate both was the most difficult part of the design process, since we can usually only control the vibration’s strength and interval in most devices with haptic feedback (like the Quest 3 controllers I was using). That’s not a lot to work with.
If we make a rotation error cause stronger vibrations and a distance error cause weaker ones, users don’t really feel like the signals are different enough to be from different sources. It just feels a weaker versus stronger “general” error.
So the best solution ended up being to separate the two errors by having one cause constant vibration, while the other vibrated in pulses.
For whatever reason, pulses just feel tangibly different from constant signals (which might be why Morse code uses this separation too).
I also tried increasing the strength of vibrations to communicate the size of the error: a bigger rotation error would lead to a stronger constant pulse and so forth.
But this made it harder to quickly tell what was happening, since there were now 4 things to track, instead of 2 (stronger rotation error, weaker rotation error, stronger position error, weaker position error).
Small differences in vibration strength are also really hard to notice, so I would’ve had to use some sort of logarithmic scaling or else it’s very hard to know which way you should rotate when you’re very close to the final target.
Regardless, it turns out that keeping things discrete and simple was the best approach, especially when the feedback is immediate and so it can trigger the moment the user makes any error.
If it wasn’t immediate and instead delayed by, say, half a second, the user might’ve already accumulated a lot of error in both position and rotation. We’d need a lot of precision to communicate exactly how they need to get back.
But, since the feedback is instant, they’re stopped before they can accumulate much error at all. So they’ll intuitively know that it was exactly their last little motion that caused the error, which they can then easily roll back without the need for precise communication.
Lastly, I did also try variants where the haptic feedback was triggered while you met the conditions (as opposed to whenever you didn’t).
This worked alright, but it felt like it was easier to quickly react to a sudden vibration rather than the sudden loss of a vibration.
And constant vibration is also just distracting (since constantly saying “you’re doing things right” is a lot of unnecessary communication) and quickly drains battery life from haptic motors.
All in all, haptic feedback worked well, although it could be made even better if we had more knobs to tune, like the direction of a vibration pattern across a device.
If we had that, we could, say, trigger a vibration pattern to the right to precisely communicate that the user needs to rotate their hand to the right (although this might also just make it too hard to understand what means what).
Audio feedback
Audio feedback worked in much the same way that vibration did: it was easier to understand that the two signals (rotation error and distance error) were different when one was constant and another was pulsed. The separation wasn’t as clear when using pitch and volume (or a combination of both).
The big problem with audio feedback, though, is that you’re not directly getting feedback where you’re controlling the action (i.e., your hands).
So there’s extra processing time involved with mapping the sound you’re hearing to the error you’re making, which is a problem when we’re trying to communicate an error to you before you have time to make even more errors.
Then there’s an even bigger problem: the user’s “audio channel” is much more contested than their “haptic channel”.
In other words, while playing sports, you’re often talking to people and hearing all sorts of noises. If we give the user feedback with a beeping sound, it can disrupt conversations and get drowned out by music or wind or whatever else. A vibration isn’t really competing against much (at least until the moment of collision with a ball).
So, in a nutshell, haptic feedback is just way better for this problem and audio feedback is only in my video because it’s hard to communicate vibration otherwise.
Visual feedback
It turns out that it’s phenomenally useful to visually show the ideal path in advance, since the user will know exactly where to move, even if they’ve never seen the motion before.
With haptic feedback alone, completely inexperienced users would have to do a lot of slow swings to trace out the general path first.
But, until smart glasses come out, we can’t really rely on users having access to any form of augmented reality, so it’s not really an option.
For curiosity’s sake, I also tried visually showing rotation and distance offsets with lines around the user’s hand (see video below).
It didn’t really work well, mostly because it’s almost impossible to track changes in the lengths of lines on fast-moving objects and it takes a lot of extra time to process what some abstract lines are supposed to mean.
In sum, there’s no way you can react quick enough to correct swings in real-time with this type of visual feedback.
And, even if this weren’t a problem, the fact that you have to constantly look at your hands already makes this a non-starter for most applications.
In any sport, you’ll want to look at the ball or your target 90% of the time, which means you won’t be able to see any kind of visual feedback on your hands anyways.
Even if we moved the visual feedback somewhere where you can see it, this would just make the processing challenge even harder (because now the visual feedback isn’t even near your hands).
And it’ll also compete with other visual information that’s much more important, like the ball or the target that you’re trying to hit.