云计算百科
云计算领域专业知识百科平台

AMCL(Adaptive Monte Carlo Localization)算法的原理详解

1. AMCL 的背景与定位任务

在移动机器人中,我们常遇到 定位问题: 已知机器人的地图(Map)和传感器观测数据(激光雷达、里程计等),推断机器人在地图中的位置与姿态(

x

,

y

,

θ

x, y, \\theta

x,y,θ)。

这个任务属于 全局定位问题 或 跟踪定位问题:

  • 全局定位(Global Localization):机器人初始位置未知
  • 跟踪定位(Tracking):已知初始位置,大部分时候是位置跟踪

AMCL 是 蒙特卡洛定位(MCL) 的改进版,本质是 基于粒子滤波的贝叶斯定位方法,并引入 KLD-采样 动态调整粒子数量,减少计算量。


2. 粒子滤波(MCL)的基本原理

粒子滤波是通过一组粒子

{

x

t

[

m

]

}

m

=

1

M

\\{x_t^{[m]}\\}_{m=1}^M

{xt[m]}m=1M 来近似位置的概率分布

p

(

x

t

z

1

:

t

,

u

1

:

t

)

p(x_t|z_{1:t}, u_{1:t})

p(xtz1:t,u1:t)

粒子滤波步骤:

  • 初始化(Initialize):在地图上均匀采样粒子,或围绕初始估计采样

  • 预测(Prediction / Motion Update):根据运动模型更新粒子位置

    x

    t

    [

    m

    ]

    p

    (

    x

    t

    u

    t

    ,

    x

    t

    1

    [

    m

    ]

    )

    x_t^{[m]} \\sim p(x_t | u_t, x_{t-1}^{[m]})

    xt[m]p(xtut,xt1[m])

  • 更新(Update / Measurement Update):根据传感器观测更新粒子权重

    w

    t

    [

    m

    ]

    p

    (

    z

    t

    x

    t

    [

    m

    ]

    ,

    m

    )

    w_t^{[m]} \\propto p(z_t | x_t^{[m]}, m)

    wt[m]p(ztxt[m],m)

  • 重采样(Resampling):根据权重采样新粒子,避免权重退化


  • 3. AMCL 的核心改进:KLD-Sampling

    标准 MCL 缺点:

    • 粒子数固定,计算量大
    • 如果粒子数太少 → 定位精度差
    • 如果粒子数太多 → 浪费计算资源

    AMCL 引入自适应采样(KLD-sampling): 根据当前估计的 位置分布复杂度 动态调整粒子数。

    3.1 KLD-Sampling 原理

    使用 Kullback–Leibler Divergence(KL散度)来约束近似分布和真实分布的差距。

    KL 散度定义:

    D

    K

    L

    (

    p

    q

    )

    =

    x

    p

    (

    x

    )

    log

    p

    (

    x

    )

    q

    (

    x

    )

    D_{KL}(p||q) = \\sum_{x} p(x) \\log \\frac{p(x)}{q(x)}

    DKL(p∣∣q)=xp(x)logq(x)p(x)

    AMCL 要求:

    • 在置信度

      1

      δ

      1 – \\delta

      1δ

    • 近似误差不超过

      ϵ

      \\epsilon

      ϵ

    推导后得到粒子数上界公式:

    M

    =

    k

    1

    2

    ϵ

    [

    1

    2

    9

    (

    k

    1

    )

    +

    2

    9

    (

    k

    1

    )

    z

    1

    δ

    ]

    3

    M = \\frac{k-1}{2\\epsilon} \\left[1 – \\frac{2}{9(k-1)} + \\sqrt{\\frac{2}{9(k-1)}} z_{1-\\delta} \\right]^3

    M=2ϵk1[19(k1)2+9(k1)2

    z1δ]3

    其中:

    • k

      k

      k 是离散位置格子的数量(已被粒子覆盖的 bins)

    • z

      1

      δ

      z_{1-\\delta}

      z1δ 是标准正态分布分位数

    粒子数

    M

    M

    M 会根据观测和分布稀疏程度动态调整。


    4. AMCL 数学推导流程

    4.1 贝叶斯定位公式

    机器人定位问题可用递归贝叶斯滤波表示:

    p

    (

    x

    t

    z

    1

    :

    t

    ,

    u

    1

    :

    t

    )

    =

    η

    p

    (

    z

    t

    x

    t

    ,

    m

    )

    p

    (

    x

    t

    u

    t

    ,

    x

    t

    1

    )

    p

    (

    x

    t

    1

    z

    1

    :

    t

    1

    ,

    u

    1

    :

    t

    1

    )

    d

    x

    t

    1

    p(x_t|z_{1:t}, u_{1:t}) = \\eta \\, p(z_t|x_t, m) \\int p(x_t|u_t, x_{t-1}) \\, p(x_{t-1}|z_{1:t-1}, u_{1:t-1}) \\, dx_{t-1}

    p(xtz1:t,u1:t)=ηp(ztxt,m)p(xtut,xt1)p(xt1z1:t1,u1:t1)dxt1

    4.2 粒子滤波近似

    用粒子集合近似:

    p

    (

    x

    t

    z

    1

    :

    t

    ,

    u

    1

    :

    t

    )

    m

    =

    1

    M

    w

    t

    [

    m

    ]

    δ

    (

    x

    t

    x

    t

    [

    m

    ]

    )

    p(x_t|z_{1:t}, u_{1:t}) \\approx \\sum_{m=1}^M w_t^{[m]} \\delta(x_t – x_t^{[m]})

    p(xtz1:t,u1:t)m=1Mwt[m]δ(xtxt[m])

    4.3 权重更新公式

    激光雷达测量模型:

    w

    t

    [

    m

    ]

    exp

    (

    1

    2

    σ

    2

    i

    =

    1

    K

    [

    z

    t

    i

    z

    ^

    (

    x

    t

    [

    m

    ]

    ,

    m

    )

    ]

    2

    )

    w_t^{[m]} \\propto \\exp\\left(-\\frac{1}{2\\sigma^2} \\sum_{i=1}^K \\left[ z_t^i – \\hat{z}(x_t^{[m]}, m) \\right]^2 \\right)

    wt[m]exp(2σ21i=1K[ztiz^(xt[m],m)]2)

    其中:

    • z

      t

      i

      z_t^i

      zti 是实际激光测距值

    • z

      ^

      (

      )

      \\hat{z}(\\cdot)

      z^() 是地图预测测距

    4.4 自适应采样条件

    当粒子数量满足 KLD-sampling 公式时停止采样,否则继续采样更多粒子。


    5. AMCL 算法流程图

    ┌──────────────┐
    │ 初始化粒子集 │
    └──────┬───────┘

    ┌──────────────┐
    │ 运动更新(Pred)│ ← 里程计数据
    └──────┬───────┘

    ┌──────────────┐
    │ 测量更新(Upd) │ ← 激光雷达数据
    └──────┬───────┘

    ┌──────────────┐
    │ 权重归一化 │
    └──────┬───────┘

    ┌──────────────┐
    │ KLD采样计算 │
    └──────┬───────┘

    ┌──────────────┐
    │ 重采样 │
    └──────┬───────┘

    ┌──────────────┐
    │ 输出位姿估计 │
    └──────────────┘


    6. AMCL 的优缺点

    优点:

    • 粒子数自适应,节省计算
    • 能处理全局定位与跟踪
    • 对传感器噪声有鲁棒性

    缺点:

    • 初始全局定位仍然耗时
    • 对运动模型和测量模型依赖大
    • 地图不准确时会漂移

    7. Python 简易 AMCL 示例

    import numpy as np

    class SimpleAMCL:
    def __init__(self, num_particles, map_size):
    self.num_particles = num_particles
    self.particles = np.random.rand(num_particles, 3) * map_size # x, y, theta
    self.weights = np.ones(num_particles) / num_particles

    def motion_update(self, u, noise_std=0.1):
    self.particles[:, 0] += u[0] + np.random.randn(self.num_particles) * noise_std
    self.particles[:, 1] += u[1] + np.random.randn(self.num_particles) * noise_std
    self.particles[:, 2] += u[2] + np.random.randn(self.num_particles) * noise_std

    def measurement_update(self, z, z_pred, sigma=0.5):
    error = z z_pred(self.particles)
    self.weights = np.exp(0.5 * (error / sigma)**2)
    self.weights /= np.sum(self.weights)

    def resample(self):
    indices = np.random.choice(self.num_particles, self.num_particles, p=self.weights)
    self.particles = self.particles[indices]
    self.weights.fill(1.0 / self.num_particles)

    def estimate(self):
    return np.average(self.particles, axis=0, weights=self.weights)

    # 使用示例
    if __name__ == "__main__":
    amcl = SimpleAMCL(500, map_size=10)
    amcl.motion_update((0.5, 0, 0.1))
    amcl.measurement_update(z=5.0, z_pred=lambda p: p[:, 0])
    amcl.resample()
    print("估计位置:", amcl.estimate())


    8.参考文献


    1. 原始论文与开创性工作

  • Fox, D. (2001). KLD-sampling: Adaptive particle filters. In Advances in Neural Information Processing Systems (NeurIPS), 14, pp. 713–720.

    • 这是 AMCL 核心思想的奠基论文,引入了基于 Kullback–Leibler Divergence 的自适应粒子数调整方法。
    • PDF 下载(CMU)
  • Fox, D., Burgard, W., Dellaert, F., & Thrun, S. (1999). Monte Carlo Localization: Efficient position estimation for mobile robots. In Proceedings of AAAI.

    • 早期 MCL 方法的提出,AMCL 是它的改进版本。
    • PDF 下载(AAAI)

  • 2. 机器人学与概率机器人学经典教材

  • Thrun, S., Burgard, W., & Fox, D. (2005). Probabilistic Robotics. MIT Press.

    • 第 8 章详细介绍了 MCL 和 AMCL,包括数学推导、算法流程和改进方法。
    • 官方网站(含部分代码):http://probabilistic-robotics.org/
  • Siegwart, R., Nourbakhsh, I. R., & Scaramuzza, D. (2011). Introduction to Autonomous Mobile Robots. MIT Press.

    • 第 6 章对粒子滤波定位有较好的直观解释。

  • 3. ROS 与工程实现相关资料

  • ROS Wiki – AMCL: http://wiki.ros.org/amcl

    • 包含 ROS 中 amcl 节点的配置参数、源码链接、运行方法。
    • ROS 版本实现基于 Fox 的 KLD-sampling AMCL。
  • ROS Navigation Stack 源码:

    • GitHub: https://github.com/ros-planning/navigation/tree/noetic-devel/amcl
    • 可直接查看 amcl 的 C++ 实现细节,包括运动模型、传感器模型、粒子滤波更新等。

  • 4. 扩展与改进性论文

  • Zhang, J., & Singh, S. (2014). LOAM: Lidar Odometry and Mapping in Real-time. In Robotics: Science and Systems (RSS).

    • 虽然不是 AMCL,但其地图配准思想可与 AMCL 融合做多传感器定位。
  • Pfaff, P., Triebel, R., & Burgard, W. (2006). An Efficient Extension to Monte Carlo Localization for Robust Localization in Dynamic Environments. In Robotics and Autonomous Systems, 54(2), 131–143.

    • 针对动态环境的改进版本 AMCL。
  • Koide, K., Yokozuka, M., Oishi, S., & Menegatti, E. (2019). Portable 3D LiDAR-based System for Long-term and Wide-area People Behavior Measurement. In IEEE RA-L, 4(2), 820–827.

    • 使用 AMCL 思想的三维定位变体。

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » AMCL(Adaptive Monte Carlo Localization)算法的原理详解
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!