Changes between Initial Version and Version 1 of Plugins/amcl


Ignore:
Timestamp:
09/17/12 18:09:10 (7 years ago)
Author:
tim
Comment:

amcl: Adaptive Monte Carlo Localization plugin

Legend:

Unmodified
Added
Removed
Modified
  • Plugins/amcl

    v1 v1  
     1= Adaptive Monte Carlo Localization (AMCL) = 
     2This plugin implements Adaptive Monte Carlo Localization (AMCL) based on [http://www.probabilistic-robotics.org/ "Probabilistic Robotics" by Thrun, Burgard, and Fox]. It essentially wraps a plugin interface around an AMCL library ported from the [http://ros.org/wiki/amcl ROS AMCL package] and originating from the [http://playerstage.sourceforge.net/doc/Player-3.0.2/player/group__driver__amcl.html Player amcl driver]. It assumes a grid map and one or more laser scans, and odometry updates as input. The Fawkes plugin currently can only pass a single laser scan at the moment, which most often suffices. 
     3 
     4The map is usually generated once before running amcl, for example "by hand", e.g. drawing a map according to an existing plan of the building or measurements, or automated for example using [http://carmen.sourceforge.net/ CARMEN]. A number of configuration parameters can be tuned to balance accuracy and computational demands as well as convergence behavior or to cope with differing sensor or odometry precision. 
     5 
     6At run-time, laser scans and odometry are frequently passed to AMCL. The odometry is used as motion model to update and move the localization samples (see the book), the laser is used to weigh hypotheses and make the algorithm converge to ideally a single position. Two modes of initialization of the positions are possible: uniform resampling, which randomly samples the free space with a uniform distribution, or a gaussian reset, where samples are drawn with a gaussian distribution around a specified starting position. 
     7 
     8Currently, the most convenient way to initialize the localization is to run Fawkes with the amcl plugin and the ROS integration. Then [http://ros.org/wiki/rviz ROS' rviz] can be used to set an initial position. Another very convenient way is to set a known starting position in the configuration. Once AMCL is started a gaussian reset is done at the specified position. 
     9 
     10There are some performance improvements that disable updating the filter unless certain configurable conditions are met. These are a positional and angular odometry thresholds and a certain time after a motion. The latter is a specific improvement in the Fawkes amcl plugin (and not available in the ROS package). It is particularly useful to improve convergence on platforms with small computational resources. 
     11 
     12== Requires == 
     13=== Config Values === 
     14Besides the configuration values listed above, certain transformations must exist. In particular, there must be a transform from the laser sensor to the base frame. More information about the configuration values can also be found on the [http://www.ros.org/wiki/amcl#Parameters ROS amcl page]. 
     15 
     16||'''Path'''||'''Type'''||'''Description'''||'''Default'''||'''R'''|| 
     17||/plugins/amcl/map_file||string||Image file containing the map, must be a PNG file and a path relative to the config dir||map.png||||*|| 
     18||/plugins/amcl/resolution||float||Resolution of the map; meters per pixel ||0.05||||*|| 
     19||/plugins/amcl/origin_x||float||The X coordinate of the 2-D pose of the lower-left pixel in the map, as (x, y, yaw), with yaw as counterclockwise rotation (yaw=0 means no rotation) around Z axis. Many parts of the system currently ignore yaw.; m||0.0||||*|| 
     20||/plugins/amcl/origin_y||float||The Y coordinate of the 2-D pose of the lower-left pixel in the map, as (x, y, yaw), with yaw as counterclockwise rotation (yaw=0 means no rotation) around Z axis. Many parts of the system currently ignore yaw.; m||0.0||||*|| 
     21||/plugins/amcl/origin_theta||float||The yaw of the 2-D pose of the lower-left pixel in the map, as (x, y, yaw), with yaw as counterclockwise rotation (yaw=0 means no rotation) around Z axis. Many parts of the system currently ignore yaw.; rad||0.0||||*|| 
     22||/plugins/amcl/occupied_threshold||float||Pixels with occupancy probability greater than this threshold are considered completely occupied. Occupancy probability is the luminance value divided by 255.||0.65||||*|| 
     23||/plugins/amcl/free_threshold||float||Pixels with occupancy probability less than this threshold are considered completely free.||0.2||||*|| 
     24||/plugins/amcl/save_pose_rate||float||Save Pose Rate||0.5||||*|| 
     25||/plugins/amcl/laser_min_range||float||Laser Minimum Range||0.01||||*|| 
     26||/plugins/amcl/laser_max_range||float||Laser Maximum Range||5.6||||*|| 
     27||/plugins/amcl/max_beams||unsigned int||Laser Maximum Beams||30||||*|| 
     28||/plugins/amcl/min_particles||unsigned int||Minimum Particles||100||||*|| 
     29||/plugins/amcl/max_particles||unsigned int||Maximum Particles||2000||||*|| 
     30||/plugins/amcl/kld_err||float||Pf error||0.01||||*|| 
     31||/plugins/amcl/kld_z||float||Pf Z Value||0.99||||*|| 
     32||/plugins/amcl/alpha1||float||Odometry model parameter, specifies the expected noise in odometry''s rotation estimate from the rotational component of the robot''s motion.||0.2||||*|| 
     33||/plugins/amcl/alpha2||float||Odometry model parameter, specifies the expected noise in odometry''s rotation estimate from translational component of the robot''s motion. ||0.2||||*|| 
     34||/plugins/amcl/alpha3||float||Odometry model parameter, specifies the expected noise in odometry''s translation estimate from the translational component of the robot''s motion.||0.2||||*|| 
     35||/plugins/amcl/alpha4||float||Odometry model parameter, pecifies the expected noise in odometry''s translation estimate from the rotational component of the robot''s motion.||0.2||||*|| 
     36||/plugins/amcl/alpha5||float||Odometry model parameter, Translation-related noise parameter (only used if model is "omni")||0.2||||*|| 
     37||/plugins/amcl/z_hit||float||Z Hit||0.95||||*|| 
     38||/plugins/amcl/z_short||float||Z Short||0.1||||*|| 
     39||/plugins/amcl/z_max||float||Z Max||0.05||||*|| 
     40||/plugins/amcl/z_rand||float||Z Rand||0.05||||*|| 
     41||/plugins/amcl/sigma_hit||float||Sigma Hit||0.2||||*|| 
     42||/plugins/amcl/lambda_short||float||Lambda Short||0.1||||*|| 
     43||/plugins/amcl/laser_likelihood_max_dist||float||Likelihood Maximum Laser Distance||2.0||||*|| 
     44||/plugins/amcl/laser_interface_id||string||Laser interface ID||Laser urg filtered||||*|| 
     45||/plugins/amcl/pose_interface_id||string||Pose interface ID||Pose||||*|| 
     46||/plugins/amcl/laser_model_type||string||Laser Model type, either beam or likelihood_field||likelihood_field||||*|| 
     47||/plugins/amcl/odom_model_type||string||Odometry Model type - diff or omni||omni||||*|| 
     48||/plugins/amcl/d_thresh||float||Update minimum D Thresh; m||0.2||||*|| 
     49||/plugins/amcl/a_thresh||float||Update minimum A Thresh; rad||0.5||||*|| 
     50||/plugins/amcl/t_thresh||float||Time to keep updating after stopping; sec||3.0||||*|| 
     51||/plugins/amcl/odom_frame_id||string||Odometry Frame ID||/odom||||*|| 
     52||/plugins/amcl/base_frame_id||string||Base Frame ID||/base_link||||*|| 
     53||/plugins/amcl/global_frame_id||string||Global Frame ID||/map||||*|| 
     54||/plugins/amcl/laser_frame_id||string||Laser Frame ID||/base_laser||||*|| 
     55||/plugins/amcl/resample_interval||unsigned int||Resample Interval||1||||*|| 
     56||/plugins/amcl/transform_tolerance||float||Transform Tolerance; sec||2.0||||*|| 
     57||/plugins/amcl/alpha_slow||float||Alpha Slow Recovery||0.0||||*|| 
     58||/plugins/amcl/alpha_fast||float||Alpha Fast Recovery||0.0||||*|| 
     59||/plugins/amcl/init_pose_x||float||Initial Position x||0.0||||*|| 
     60||/plugins/amcl/init_pose_y||float||Initial Position y||0.0||||*|| 
     61||/plugins/amcl/init_pose_a||float||Initial Position yaw||0.0||||*|| 
     62||/plugins/amcl/angle_increment||float||Angle increment between two rays in degree||1.0||||*|| 
     63 
     64== Provides == 
     65=== !BlackBoard Interfaces === 
     66 * Position3DInterface::Pose: Position of the robot in global frame coordinates. 
     67 
     68=== Transforms === 
     69 * Provides a transform from the global to the odometry frame (usually /map to /odom) in such a way that the base frame (usually /base_link) position is at the correct position in the global frame. 
     70 
     71== Requirements == 
     72=== !BlackBoard Interfaces === 
     73 * Laser360Interface::<Laser Interface ID>: Input laser data, the interface ID is read from the config file. 
     74 
     75=== Transforms === 
     76 * Laser frame to base frame: position of laser relative to base frame (e.g. /base_link to /base_laser) 
     77 * Odometry to base frame: position of base frame relative to odometry frame (e.g. /odom to /base_link) 
     78 
     79== Usage Instructions == 
     80First prepare a map of the environment to localize in. Start with a small map, preferably hand-made, with a resolution of 0.05cm. Then configure your [wiki:Plugins/static-transforms static transforms], [wiki:Plugins/laser laser], and possibly [wiki:Plugins/laser-filter laser-filter]. Set a valid initial position in the configuration and make sure that all static and dynamic transforms are properly published, in particular the laser transform and odometry. It is best to setup the [wiki:ROSIntegration ROS integration] and visualize the environment using rviz. Add visualizations for the map, the laser scan, and the pose array. Once the plugin is loaded (and configured at the proper position), you should quickly see the localization converge at the given point. By default it will stop updating after three seconds unless moving. As long as the odometry is properly updated moving the robot should still have the correct position in the map. 
     81 
     82More documentation on mapping and usage needs to be written.