The amcl driver implements the Adaptive Monte-Carlo Localization algorithm described by Dieter Fox.

At the conceptual level, the amcl driver maintains a probability distribution over the set of all possible robot poses, and updates this distribution using data from odometry, sonar and/or laser range-finders. The driver also requires a pre-defined map of the environment against which to compare observed sensor values.

At the implementation level, the amcl driver represents the probability distribution using a particle filter. The filter is "adaptive" because it dynamically adjusts the number of particles in the filter: when the robot's pose is highly uncertain, the number of particles is increased; when the robot's pose is well determined, the number of particles is decreased. The driver is therefore able make a trade-off between processing speed and localization accuracy.

As an example, consider the sequence of images shown below. This sequence shows the filter converging from an initial configuration in which the pose of the robot is entirely unknown to a final configuration in which the pose of the robot is well determined. At the same time, the number of particles in the filter decreases from 100,000 to less than 100. Convergence in this case is relatively slow.


t = 1 sec, approx 100,000 particles


t = 40 sec, approx 1,000 particles


t = 80 sec, approx 100 particles


t = 120 sec, approx 100 particles

The amcl driver has the the usual features -- and failures -- associated with simple Monte-Carlo Localization techniques:

The amcl driver also has some slightly unusual temporal behavior:

At the time of writing, this driver is still evolving. The sensor models, in particular, are currently over-simplified and under-parameterized (there are lots of magic numbers lurking about the place). Consequently, while this driver is known to work for certain hardware configurations (think Pioneer2DX with a SICKLMS200 laser range-finder), other configurations may require some refinement of the sensor models.


The amcl driver requires the following interfaces, some of them named:

Configuration requests

Configuration file options


Example: Using the amcl driver with a Pioneer robot
The following configuration file illustrates the use of the amcl driver on a Pioneer robot equipped with a SICK LMS200 scanning laser range finder:
  name "p2os_position"
  provides ["odometry:::position2d:0"]
  port "/dev/ttyS0"
  name "sicklms200"
  provides ["laser:0"]
  port "/dev/ttyS2"
  name "mapfile"
  provides ["map:0"]
  resolution 0.05
  filename "mymap.pgm"
  name "amcl"
  provides ["localize:0"]
  requires ["odometry:::position2d:0" "laser:0" "laser:::map:0"]
Naturally, the port, filename and resolution values should be changed to match your particular configuration.

Andrew Howard
  • Implement / update other sensor models

Last updated 12 September 2005 21:38:45