If you were sitting in on a Swim.com product management meeting you’d almost certainly hear someone reference one of our core principles; “…to push technology to provide swimmers with the best swim tracking experience possible“. This has been a core tenet for our team since the launch of Swim.com and is a key reason why we build our own swim tracking algorithms – which now includes support for open water swimming!
Some Background
This summer, we added open water support to Swim.com which included new views to analyze open water swims and integration with Garmin and Suunto. We then set out to build our own open water swim tracking algorithms. But why would we do this?
In general, companies like Garmin and Suunto do a great job of tracking open water swims as they have dedicated hardware and software that optimizes for accuracy in conditions specific to open water swimming. From how they optimize for battery power, GPS antenna placement, to implementing sophisticated smoothing algorithms such as Kalman filtering and more, these devices are quite accurate when it comes to tracking your open water swims.
However, that’s not always the case with wearables that are not dedicated activity trackers. Devices like the Apple Watch, Samsung Galaxy Active, and most WearOS devices are not necessarily optimized for deep activity tracking. By deep, we mean, providing activity-specific optimizations. A simple case in point is to look at the “Always On” differences between these wearables vs. dedicated activity-tracking devices. In this case, companies like Apple and Samsung need to balance battery conservation with a host of other features that may not be found in more specialized devices such as cellular, continuous HR monitoring, blood oxygen monitoring (check out the new Apple Watch Series 6), etc.
We understand these tradeoffs and don’t blame these companies or the products they produce. In fact, just the opposite. We see these platforms as opportunities as we can use their robust APIs to build features that otherwise would require novel hardware.
When it comes to open water swim tracking with these more generalized wearables, we see similar trade-offs that are impacting the overall accuracy for our swimmers. The results are GPS traces that are clearly not as accurate as they could be resulting in distance and pace inaccuracies. For example, check out these sample traces that are from an Apple Watch.
While we know that sighting in open water is sometimes challenging, you’d be hard pressed to swim a route that looks anything like these examples. At a (very) high level, these show a lack of filtering to remove bad GPS points. Check out the orange highlights to see some examples of bad GPS data points that create sudden changes in direction. This has nothing to do with what the swimmer was doing. Rather, it’s one or more of a series of GPS data points that have been logged with low accuracy followed by GPS data points that are more accurate. When you then draw a line through these points, you get geometric shapes and parts of the trace that are simply not possible…again, impacting the distance and therefore the pace metrics of these swims.
Want to read more about this? Check out this post by DC Rainmaker.
What We Did
If you could care less about the technical details, then you can skip to the results section below. However, if you are more like the narrator of Zen and Art of Motorcycle Maintenance, then you’ll want to dive into the below.
Note: I could spend the next few hours writing about how to capture, filter and display GPS traces but instead, I’ll highlight three example filters we have implemented in the Swim.com app.
- Reject aggressive angles: by calculating the angle between any three GPS data points, we can decide if the angle is legitimate.
- Reject improbable speeds: we calculate the speed between every two GPS data points and flag it as potentially invalid if it’s too slow or two fast.
- Implement a Kalman Filter: in short, this is a common algorithm used to remove noise from time series data.
In reality, none of the above heauristics and algorithms actually run in isolation. We take a pipeline approach to progressively apply more restrictive filters on the GPS data as you swim.
To test the accuracy of our algorithms, we followed a pretty simply but effective protocol. The process involves two people – one swimmer and one person on a stand-up paddle board (SUP).
The swimmer had an Apple Watch (with the new Swim.com open water tracking algorithms) on one wrist and a 3rd party watch (such as a Suunto 7) on the other wrist. The non-Apple Watch device served as a benchmark for our algorithms.
The person on the SUP followed the swimmer with a cell phone running an app such as Strava to capture the “truth” (the real distance which was not encumbered by any water interfering with the GPS signal).
We then repeated the above test many times in different locations and compared the results against several different dedicated activity tracking wearables.
What’s the Result?
Well, the result is what you’d kinda expect. A smoother (but not too smooth) GPS trace of your swim, a more accurate representation of the distance swum and therefore a more accurate pace calculation.
For example, here is a test swim (following the above testing protocol) that shows all three GPS traces.
As you can see, the three traces are nearly identical. This is exactly what we’d expect to see with a good open water trace. Here are the details of each trace, by device:
Summary of results from this test:
- The Swim.com app and the trace from the SUP were nearly identical. 1,526 yards for the Swim.com app and 1,531 yards (.87 * 1760) for the SUP. Only a 5 yard difference!
- The Suunto 7 was also very close to the SUP trace. It was 77 yards off which is less than 5%. However, notice the impact that even this small difference has on the overall pace. The Suunto 7 had the pace at 1:35 vs a 1:30 pace – this is a pretty significant difference and illustrates how sensitive downstream calculations, such as pace, can be in the presence of distance calculation errors.
While we have tested across many swimmers, many locations and compared against many other dedicated activity tracking devices, we are releasing these new open water tracking algorithms as beta. We’d love you to swim with it and give us your feedback so we can make any other needed adjustments before releasing them as “final”. In the meantime, we’ll be working on a Samsung and WearOS version.
#leadyourlane (or #leadyourlake ??) 🙂
Did only half the blog post get posted? You mention 3 screen shots at the bottom but nothing is showing?
Hi James – We had a minor wordpress technical issue. We’ve since fixed the issue. Thanks for supporting Swim.com!
Any chance to see those guided workouts imported to a garmin device or will you be working only on watchOS and wearos?
Right now we’re focused on iOS, then Android and WearOS for Guided Workouts. We are looking into compatibility for Garmin and Suunto devices.
👍🏻
nice stuff John, i think i will test it out tomorrow !
can you confirm aw6/watchos7 compatability…i’m having problems with quite a few other 3rd party apps not installing.
We do support Apple Watch 6 and WatchOS7 – we’ve only done limited testing at this point but we’ve seen zero issues.
I’ve been using the latest Pre Beta on my Apple watch 3 w/ios7.0.1. I have yet to try the open water feature but unfortunately the pool swimming isn’t functioning as expected for me. It consistently miss counts laps (frequently adding an extra lap) and can’t correctly identify stroke type , mixing up back and breast but also free with back. It also lacks the ability to record in yards.
How do I find a swim.com watch ?
https://www.swimoutlet.com/swimdotcom/?rd=N&Search=swim.com