Pool Cleaner Navigation System


Based on my thesis project from the year 2000.

Test runs

Explanations of symbols

Typical film image
Reference map
Path, with the Current path segment higlighted.
Current scanned map and the Measured pose. These have the same color because they are tightly coupled together. If for example there is a erratic match, one can look at the red poolcleaner relative to the red map, and get an idea of where the poolcleaner really is.
A priori pose estimate. (Guessed pose based on odometry (wheel rotation and steering) from the last A posteriori pose estimate).
A posteriori pose estimate. That is sort of a mixture of the "A priori"-pose and the "measured pose".
Covered area (estimated from the "A posteriori"-pose estimates)
Break angle. The line originates from the breaking track, The angle represents how much the poolcleaner should steer and the length represents how far it is expected to move before next scan is ready.
Bumped end (marked with thicker line)
Often the starting pose deliberately has a large error to show robustness of the system.

The pool at Weda (summer 2002)

There is a plateau in the pool with one side sloping. When the test takes place there is also another pool cleaner in the pool, on the lower right hand side in the picture. That's why the path covers an area that is smaller than what seems possible at first glance.

Test along the long side

Path along the long-side

Test along the short side

The result after following the path along the short side. The starting pose has deliberately a large error to show that the pool cleaner must not be moved to the exact point where the path starts. The poolcleaner is scanning while moving, so it needs space enough to allow scans to complete, that's why one can't continue this test in the left side of the pool


Image 18: The match is almost totally upside down.

If one looks at the red map / poolcleaner one can see what the poolcleaner "sees" and realize where the poolcleaner really is.

One way to address this problem is too prevent matches that deviate more than +/-90 degrees.

The adventure pool at Fyrishov (summer 2002)

Only a part of the pool is mapped, and then small testruns are run in a way that one would likely let the pool cleaner run when cleaning the pool.

Test 1

Test 1 failed totally, I think it was a loose cable or something.

Test 2

This test is aborted because the bumpers don't work correctly. The bumper shall signal that one corner is depressed rather than both corners are depressed. In this test run, when the poolcleaner comes up against the wall at an angle, the poolcleaner doesn't stop at first touch, but instead continues to push until both corners touches the wall.

Test 3

The start pose has deliberately a large error to show robustness.

Test 4


The problem with the sonar angle getting faulty is because of several problems. See more in the section about the test at Sandsborg, (below).

Test 5

It looks as if the pool-cleaner has gone right through the wall. The reason is that one needs to readjust the velocity parameter of the software, which is too high.

If one looks on the individual images one can see that the 'red' poolcleaner is always behind the 'cyan' ones as the poolcleaner approaches a wall.

This problem is the same in all the Fyrishov test.

Test 6


At the end of this test (approx image 47 and onwards) the pool cleaner starts to go in an S-shape around the predetermined path, the reason I think is that the floating-cable, at one point touched the rotating sonar puck and made the stepper-motor angle faulty. The result is that the measured pose angle is faulty at every pose-update. In other words the pool-cleaner aims too much on one side when it is going forward and too much to the other side when it is going backwards, and therefore the S-shape.

Sandsborgsbadet (Jan 2003)

To get a wider range of tested pools the system was tested in this pool.

The problem with stepper motor getting a faulty angle

With a homing sensor added to the sonar unit and with the sonar puck more centrally placed on the axis of the stepper motor, the problem with missing steps should be fixed. Since after Sandsborg there is also a cage that is supposed to protect the sonar further.

The test

To avoid entanglement with a water hose lying in the pool, the lower side to the right is skipped.

A rectangular pool has two symmetry axes, which means that a local scan can match the reference map in two ways, the correct one and one that is turned 180 degrees. To avoid faulty matches in this test, only matches that are within +-90 degrees of the a priori guessed pose is used.

Last minute fix

This test was done with a different (newer) kind of b400-poolcleaner. It had its water exhaust aimed upwards from the sides of the poolcleaner, (instead of straight outwards as the old b400) This resulted in false echoes coming from the turbulence of the water exhaust. To handle this I had to adjust the sensitivity of the sonar at the range where the turbulence occurred. Unfortunately this led to a lot of missed echoes whenever the poolcleaner is close to a wall, see below.


Image 19: Matching the wrong corner.

Viewing the red poolcleaner relative to the red map one can see that the poolclener is pretty much on course. However, the poolcleaner makes its steering based on the cyan (turquoise) pose and it makes a sharp left turn which of course makes it go right into the wall.

One can see in image 20 that the front bumper is depressed as it bumps the wall. The plotted pose of image 20 is obviously wrong, in reality it stands with the nose into the wall at angle of about 45 degrees. Once the bump has occurred, the poolcleaner begins to follow the next path segment (backing) downwards again.

Image 489: Basically the same problem as on image 19: Matching the wrong corner, again makes a sharp turn and bumps the short end wall (490).

Image 494: The bumper is depressed, which means that the poolcleaner moves on to the next path segment (moving forward)

Image 495: This match is bad because there are no echoes from the short end wall. This in turn is because the last minute fix wasn't good enough.

Image 497: Same as 495

Image 498: Same as 495

Image 499: Same as 495

On image 495, 497, 498 and 499 the poolcleaner is right next to the wall, (red poolcleaner in relation to the red map) the problem is that the wall is simply not seen.

Conclusions of the tests

Other images

See also