Skip to content
alexbeh.me
Log in

Tuning logAMCL stack

2026-09-19-v1

In force on

19Sep

Parameters

58

across 1 nodes

Annotated

9

carry a trailing comment

Changes

8

against 2026-09-18-v1

File

2.8 KB

87 lines · 638c21333e1b

What changed

2026-09-18-v12026-09-19-v1

~6 changed#2 annotated

  • added— not in the earlier version
  • removed— gone, or commented out
  • changed— the value moved
  • annotated— same value, different comment

amcl

StatusParameterBeforeAfter
changedalpha10.100.05# 0.10
changedalpha20.050.02# 0.05
changedalpha30.10.05# 0.1 # 0.05 # 0.1
changedalpha40.10.05# 0.1
changedalpha50.40.1# 0.4 # 0.1 # 0.4
changedsigma_hit0.20.05# 0.1 #0.2
annotatedupdate_min_a0.010.01# 0.05 # 0.01
annotatedupdate_min_d0.010.01# 0.05 # 0.01

The file

Exactly as uploaded.

Download

parameters.yaml

87 lines · 2.8 KB · 638c21333e1b

amcl:
  ros__parameters:
    robot_model_type: hmc_amcl::OmniMotionModel

    alpha1: 0.05  #0.10
    alpha2: 0.02  #0.05
    alpha3: 0.05  #0.1  # 0.05  # 0.1
    alpha4: 0.05  #0.1
    # Lateral uncertainty from translation. alpha5=0.4 was the conservative point in the
    # measured plateau: it removed most reverse-arc error without increasing particle count.
    alpha5: 0.1  #0.4  # 0.1   # 0.4

    global_frame_id: map
    odom_frame_id: odom
    base_frame_id: base_link
    map_topic: map_nav

    scan_topic: /scan_merged_filtered

    initial_pose_topic: initialpose

    max_particles: 5000
    min_particles: 1000
    pf_err: 0.05

    # [CHANGED] 0.99 -> 3.0. Beluga's kld_z is a standard-normal z-SCORE, not a
    # probability (see AmclParams::kld_z, default 3.0). Passing 0.99 makes the KLD
    # bound far too loose, so the filter never adapts above min_particles.
    pf_z: 3.0

    recovery_alpha_fast: 0.0
    recovery_alpha_slow: 0.0
    resample_interval: 1

    # [ADDED] Resampling on every update with no ESS test depletes particle diversity
    # and makes the filter over-confident, which is exactly the failure mode when a
    # systematic odometry bias needs to be corrected continuously.
    selective_resampling: false  #true

    update_min_a: 0.01  # 0.05  # 0.01
    update_min_d: 0.01  # 0.05  # 0.01

    laser_model_type: likelihood_field
    laser_likelihood_max_dist: 2.0
    laser_max_range: 30.0

    laser_min_range: 0.8

    max_beams: 200
    z_hit: 0.9
    z_rand: 0.1
    # NOTE: z_short and z_max are read only by the beam model. LikelihoodFieldModelBase
    # uses z_hit, z_random and sigma_hit only, so the two lines below were dead
    # parameters and have been removed to avoid implying they do something.
    sigma_hit: 0.05  #0.1  #0.2

    tf_broadcast: true
    transform_tolerance: 0.05
    execution_policy: seq
    first_map_only: false

    set_initial_pose: false
    save_pose_rate: 0.5
    initialize_at_saved_pose: true
    saved_pose_filepath: /tmp/amcl_saved_pose
    always_reset_initial_pose: false

    global_localization_scan_matching: true
    global_localization_max_beams: 200
    global_localization_coarse_xy_step: 0.5
    global_localization_yaw_bins: 36
    global_localization_max_candidates: 8
    global_localization_refine_xy_radius: 0.25
    global_localization_refine_xy_step: 0.1
    global_localization_refine_yaw_step: 0.08726646259971647
    global_localization_xy_noise: 0.2
    global_localization_yaw_noise: 0.17453292519943295

    initial_pose.x: 0.0
    initial_pose.y: -2.0
    initial_pose.yaw: 0.0
    initial_pose.covariance_x: 0.25
    initial_pose.covariance_y: 0.25
    initial_pose.covariance_yaw: 0.0685
    initial_pose.covariance_xy: 0.0
    initial_pose.covariance_xyaw: 0.0
    initial_pose.covariance_yyaw: 0.0

8 lines are marked where a parameter arrived or moved in this version. Removals are not marked — the line they were on is not in this file.