Teaching a Garmin Watch to Recognise Nordic Walking Poles
Several of us at Kuore Lab are keen Nordic walkers. The sport was born here in Finland, and it's a great way to exercise, particularly if you want to involve more than just your legs.
So this didn't start as a client project. It was a side project, something we worked on in our free time, out on walks and in the evenings: could the watch we already wear tell us how we use our poles?
Modern sports watches can tell you almost everything about a walk: distance, pace, heart rate, calories, steps and even elevation changes. But there's one thing they don't normally measure — what you're doing with your poles.
We wanted to change that.
Our goal was to develop a Garmin app that could recognise and count pole plants automatically, using nothing more than the accelerometer already built into the watch. No additional sensors, no modified poles, no special equipment.
It sounded fairly straightforward. As it turned out, it wasn't.
The first attempt: counting everything
The obvious approach was to look for sudden changes in acceleration.
A smartwatch contains a three-axis accelerometer, which measures movement along three directions. When a Nordic walking pole hits the ground, some of that impact travels through the hand and wrist, producing a measurable signal.
So we started with a simple algorithm: detect acceleration peaks, count them, and ignore any additional peaks occurring within the next 450 milliseconds.
It worked. Unfortunately, it worked far too enthusiastically.
During one recorded walk, the first detector reported 6,960 pole plants. Our later algorithm counted 3,948 on exactly the same recording.
The reason became clear when we looked at the raw accelerometer data.
The wrist doesn't experience just one acceleration peak per pole plant. There are also peaks when the arm changes direction, when the body moves, and when the hand swings forward.
A regular walking motion can produce very convincing signals even when no pole touches the ground.
We needed to teach the algorithm the difference.
Finding the rhythm
The first useful observation was that Nordic walking has a predictable rhythm.
In normal alternating technique, each pole plants once every two steps. And since the watch is attached to only one wrist, it measures the movements of one arm.
We can use Garmin's own walking cadence to estimate how long one arm swing takes, and so how soon the next pole plant can come.
If the walker is taking 100 steps per minute, for example, each arm should produce approximately 50 pole plants per minute.
This allows us to reject the many acceleration peaks that come too soon after the last plant: the peaks of the other step.
But timing alone isn't enough. Someone can swing their arms at exactly the same rhythm while carrying the poles without planting them.
We needed another clue.
The small sideways movement that made the difference
After examining recordings from actual walks, we found something interesting.
A pole plant produces not only a change in overall acceleration but also a distinct movement along the watch's sideways axis.
Ordinary arm swings can generate equally large acceleration peaks, but they don't necessarily produce the same sideways jolt.
That gave us a second condition: a candidate pole plant must show both a sufficiently strong acceleration peak and a characteristic sideways movement.
The watch samples acceleration 25 times per second. We analyse these readings using an adaptive threshold, so the detector can respond to different movement intensities.
We then check whether the sideways acceleration exceeds a defined threshold within a short window just before the detected peak (240 milliseconds).
The combination of acceleration, timing and sideways movement proved much more useful than any one of those signals on its own.
Teaching the detector when not to count
Another problem appeared during pauses.
Pressing the watch buttons, lifting the poles at the end of a walk or putting them down at a road crossing could create isolated acceleration peaks that looked like genuine pole plants.
Our solution was to stop treating every event independently.
The detector now looks for a sequence of movements forming a consistent walking rhythm. It waits for three qualifying events before confirming that pole planting has started.
It also allows for an occasional weak plant that might otherwise be missed.
The first two plants are not lost: they are added as soon as the third one confirms the rhythm. This introduced a small delay on the counter at the beginning of a walking sequence, but greatly reduced false positives from random movements.
The most satisfying test was walking while carrying the poles without using them.
The improved detector correctly dropped to zero during the five-minute carrying period, despite the continued walking motion. The first detector, recorded on the same walk, kept counting all the way through (see Figure 1).
Testing it in the real world
We didn't want to tune the algorithm by looking at a handful of accelerometer peaks and guessing what they meant.
Instead, we recorded actual walking sessions, including controlled tests with exactly 100 manually counted pole plants, walking with poles carried, and ordinary walking without poles.
We also developed a Python version of the detector that could replay recorded accelerometer data. This let us test algorithm changes against the same recordings without repeating the walks every time.
Some results from our development tests:
| Development stage | Test | Before this stage | After this stage |
|---|---|---|---|
| Stride rhythm | Two walks of 100 manually counted plants | 168 and 116 | 98 and 88 |
| Sideways movement | Two walks of 100 manually counted plants | 96 and 98 | |
| 30 seconds carrying poles | 50 | 4 | |
| Rhythm confirmation | 85 steps without poles | 5 | 0 |
| Walks of 100 manually counted plants | 104–106 |
The "before" column of the first row is the original 450-millisecond peak counter. Each stage was checked on its own calibration walks, so the table shows the development step by step rather than a single final benchmark.
The results were encouraging, particularly the reduction in false positives.
Of course, this isn't a laboratory-grade measurement system. The watch only monitors one arm, so we estimate the combined total by doubling that arm's detected plants. Unusual walking styles, terrain and very light pole contacts can still affect accuracy.
We're continuing to collect data and improve the detector.
A little mathematics, a lot of walking
The resulting algorithm runs directly on the Garmin watch, written in Monkey C for the Connect IQ platform.
It doesn't need an internet connection or a separate processing device. The detector is a relatively small piece of code, roughly 300 lines, combining signal filtering, adaptive thresholds, cadence analysis and rhythm recognition.
That is perhaps what we enjoyed most about this project.
The hardware was already there. We didn't need a new sensor or a more powerful watch. We simply needed to understand the signal well enough to extract the information we were looking for.
And it took considerably more walking than we initially expected.
The pole-counting algorithm is now part of our Nordic Walking and Nordic Walking Pro applications for Garmin. Alongside the usual GPS and fitness metrics, they can track pole cadence, total pole plants and the relationship between steps and pole use.
It's a small feature, but one that makes a sports watch a little more useful for a sport we genuinely enjoy.
Made in Finland. Inspired by Nordic walking. Powered by mathematics.
