NOTE: The results described here are obtained from an older version of the positioning software, for more up to date
results see this page.
Here is a brief description of some of the tests that I performed using the positioning algorithm and my robot.
These tests were done some time ago, I will update this page when I have the time to make a new one.
Bellow is a hand drawn figure of the room that the tests were performed (not to scale and some objects missing).
Each test consists of a total of five steps, one for each of the dots in the figure above. The initial state of the global
map is empty. In other words no predefined map of the room is given to the controller, the map is created 'on the fly' while
the robot changes positions and sweeps its range sensor (sonar). The green dot at the center of the room (position 1) is the starting point.
As I said at this point the map is empty so obviously no localization can be performed (since there is no map to compare with), instead
the range sensor is swept and the result is used to update the global map at a pre-defined point. For this test I choose to
use the center cell of the map (125,125).
A total of two tests are presented here, in one test (Single Map Update) a sweep is taken at position 1 and the global map is updated.
Thereafter all other sweeps will not be used to update the map but only to localize. In the second test (Multiple Map Update) a higher resolution
map was used and the map was updated after every localization. Each approach has its pros and cons.
The single map update is pretty accurate (typically ~4cm accuracy), when the robot's orientation is not changed compared to position 1. When the robot
is rotated a large error was observed (~15cm). This is due to the fact that only one sweep was used to update the map,
hence the robot only has a view of the room from a single point, when the perspective is changed errors are introduced.
In addition only a 180deg sweep is used to localize giving only a limited view of the local map.
Some of the problems seen in the single map update approach were solved in the multiple map update test. In this test
every sweep was used to update the global map, thus keeping it up to date. Also by increasing the map resolution a considerable
increase in accuracy was seen. In same cases sub-centimeter errors were seen! In addition when the robot was rotated, a smaller
localization error was seen (~8cm). The disadvantage of this approach is that small positioning errors tend to distort the map,
thus producing further errors later on.
There are a number of ways to battle the problems seen in the two tests, see the to-do page for more details.
One more thing to keep in mind is that my robot sensors are not perfect (well they could be better), the following may introduce considerable errors
in the sensor readings:
Compass and Sonar position (off center)
Compass noise from motors and metallic items
Sonar ghost ranges (reflections)
The following images are screenshots from the positioning controller GUI. On the left you see the occupancy representation
of the grid map, black cells are occupied, white are free and gray are unexplored. In the middle you see the location
certainty map (zoomed in). Different colors are used for each certainty value, starting from white then yellow, shades of red and finally black cells are
the ones with the maximum certainty. Since usually there will be more than one black cell, the algorithm will select the average location (that
could be done more elegantly if an approximate position was available). On the right you see an overlay of the occupancy and location
certainty map. On all map views a blue target is used to display the current position (green targets are past locations).
More information on the tests can be found by following the links bellow.