当前位置: 首页 > news >正文

AMCL自适应(KLD - Sampling: Adaptive Particle Filters)一种基于粒子滤波的移动机器人定位算法

1. 概览

AMCL 是什么?
AMCL 是一种基于粒子滤波(particle filter / Monte Carlo Localization, MCL)的概率定位方法,用来估计移动机器人在已知地图(通常是 2D 占据栅格地图)中的位姿 xt=(x,y,θ)x_t = (x, y, \theta)xt=(x,y,θ)。AMCL 的关键在于自适应地调整粒子数目,以在保证定位精度的同时节省计算资源(即 KLD-sampling)。

适用场景

  • 已有静态地图(占据栅格 map)
  • 传感器:激光雷达(2D LIDAR)或深度相机投影为 2D 扫描
  • 想要在线、鲁棒、近实时的定位(包括在被动重定位 / 被 kidnap 的情况表现可控)

2. 粒子滤波基础概念

粒子滤波用于递推估计后验 p(xt∣z1:t,u1:t)p(x_t \mid z_{1:t}, u_{1:t})p(xtz1:t,u1:t),其中 u1:tu_{1:t}u1:t 为控制(里程计 / odom),z1:tz_{1:t}z1:t 为观测(激光)。

粒子表示:一组加权样本 (xt[i],wt[i])i=1N{(x_t^{[i]}, w_t^{[i]})}_{i=1}^{N}(xt[i],wt[i])i=1N,逼近后验分布。过程包含三步:

  1. 预测(motion update / proposal):根据运动模型将粒子从 xt−1x_{t-1}xt1 预测到 xt′x_t'xt
  2. 测量更新(weighting):用传感器模型计算每个粒子的似然 wt[i]∝p(zt∣xt[i])w_t^{[i]} \propto p(z_t \mid x_t^{[i]})wt[i]p(ztxt[i])
  3. 重采样(resample):按权重重采样生成新粒子集合以避免退化。

AMCL 在此基础上加入**自适应粒子数(KLD-sampling)**与一些工程优化(如置信度跟踪、混合全局随机粒子注入等)。


3. 核心模块与模型

3.1 状态与粒子

  • 状态:x=(x,y,θ)x = (x, y, \theta)x=(x,y,θ)(2D 平面位姿)
  • 粒子:位姿样本 + 权重

3.2 运动模型(Motion model)

常用基于里程计的 差分驱动噪声模型(odometry-based motion model),如 Velocity motion modelodometry motion model(ROS AMCL 使用的经典模型是基于概率的 odometry model,参见 Thrun 等):

给定里程计增量 (Δx,Δy,Δθ)(\Delta x, \Delta y, \Delta \theta)(Δx,Δy,Δθ)(在机器人自身坐标系),为每个粒子采样噪声:

  • 前向与侧向位移噪声(与位移大小成比例)
  • 角度噪声(与转角大小成比例)

常见参数:alpha1..alpha4(控制不同噪声项与运动量的关系)。实现通常用下列方式(伪表示):

δ^∗rot1=δ∗rot1+N(0,α1δrot12+α2δtrans2) δ^∗trans=δ∗trans+N(0,α3δtrans2+α4δrot12+α4δrot22) δ^∗rot2=δ∗rot2+N(0,α1δrot22+α2δtrans2) \begin{aligned} \hat{\delta}*{rot1} &= \delta*{rot1} + \mathcal{N}(0, \alpha_1 \delta_{rot1}^2 + \alpha_2 \delta_{trans}^2) \ \hat{\delta}*{trans} &= \delta*{trans} + \mathcal{N}(0, \alpha_3 \delta_{trans}^2 + \alpha_4 \delta_{rot1}^2 + \alpha_4 \delta_{rot2}^2) \ \hat{\delta}*{rot2} &= \delta*{rot2} + \mathcal{N}(0, \alpha_1 \delta_{rot2}^2 + \alpha_2 \delta_{trans}^2) \end{aligned} δ^rot1=δrot1+N(0,α1δrot12+α2δtrans2) δ^trans=δtrans+N(0,α3δtrans2+α4δrot12+α4δrot22) δ^rot2=δrot2+N(0,α1δrot22+α2δtrans2)

然后更新粒子位姿。

直观:运动越大,噪声越大(采样范围增大)。

3.3 观测模型(Sensor model / Measurement model)

AMCL 常用的两种激光观测模型是:

  1. Beam-based model(beam model):每条激光束独立计算似然,包含多项混合分布(命中、短距、随机、失效)。数学上:

    p(zt∣xt)=∏k=1Kp(zt,k∣xt) p(z_t \mid x_t) = \prod_{k=1}^K p(z_{t,k} \mid x_t) p(ztxt)=k=1Kp(zt,kxt)

    每一项 p(zt,k∣xt)p(z_{t,k}\mid x_t)p(zt,kxt) 是 Geman-McClure / mixture of Gaussians 或 Thrun 的 beam model(包含 z_hit, z_short, z_rand, z_max 等权重与对应分布)。

  2. Likelihood Field Model(概率场 / likelihood field):先把地图转换为到最近障碍物距离的距离场(distance transform),然后用测量值与场值计算每束激光的概率(通常使用高斯于距离值上):

    p(zt,k∣xt)∝exp⁡(−(d(pk(xt),zt,k))22σ2) p(z_{t,k} \mid x_t) \propto \exp\left( -\frac{(d(p_k(x_t), z_{t,k}))^2}{2\sigma^2} \right) p(zt,kxt)exp(2σ2(d(pk(xt),zt,k))2)

    其中 pk(xt)p_k(x_t)pk(xt) 表示从位姿 xtx_txt 在该束方向上投射的在地图上的位置,d(⋅)d(\cdot)d() 为地图上点到最近障碍物的距离。


4. AMCL 的自适应(KLD)采样思想

传统粒子滤波用固定粒子数 NNN。KLD-sampling(基于 Kullback–Leibler divergence)动态决定所需粒子数 NNN,以保证近似的后验与真实后验在概率距离上小于给定误差 ϵ\epsilonϵ(置信度 1−δ1-\delta1δ)。

实现步骤概要:

  1. 将位姿空间((x,y,θ)(x,y,\theta)(x,y,θ))离散成一系列 bin(箱),通常对 (x,y)(x,y)(x,y) 做栅格,θ\thetaθ 分若干角度区间。

  2. 在重采样过程中按权重抽样,将样本落入相应 bin。

  3. 当已观测到的非空 bin 数为 kkk 时,根据 KLD 公式计算所需最小样本数 NNN

    N=k−12ϵ(1−29(k−1)+29(k−1)z1−δ)3 N = \frac{k-1}{2\epsilon} \left(1 - \frac{2}{9(k-1)} + \sqrt{\frac{2}{9(k-1)}} z_{1-\delta}\right)^3 N=2ϵk1(19(k1)2+9(k1)2z1δ)3

    其中 z1−δz_{1-\delta}z1δ 为标准正态分位数(例如:δ=0.01⇒z0.99≈2.326\delta=0.01 \Rightarrow z_{0.99} \approx 2.326δ=0.01z0.992.326)。

  4. 当当前抽样得到的样本数达到该 NNN 时停止重采样。


5. 算法完整伪代码

输入:前一时刻粒子集 { (x_{t-1}^{[i]}, w_{t-1}^{[i]}) }, 控制 u_t, 观测 z_t, map
输出:当前粒子集 { (x_t^{[i]}, w_t^{[i]}) }1. 预测(对 i=1..N_prev)x'_i ~ p(x_t | x_{t-1}^{[i]}, u_t)2. 计算权重w'_i = p(z_t | x'_i)3. 归一化权重w'_i = w'_i / sum_j w'_j4. 自适应重采样(KLD-sampling)Initialize empty new particle set S_newwhile size(S_new) < N_required:draw index i with probability w'_iadd x'_i to S_newupdate occupied bins & krecompute N_required by KLD formula5. 随机粒子注入(recovery)
6. 输出粒子集 S_new

7. 细节推导与关键公式

当然可以,以下是你提供的这段内容,所有数学公式都已改写为符合 LaTeX Markdown 语法的形式:


7. 细节推导与关键公式

7.1 权重计算(观测似然)

权重(未归一化)通常取观测模型似然:

wt[i]=p(zt∣xt[i]) w_t^{[i]} = p(z_t \mid x_t^{[i]}) wt[i]=p(ztxt[i])

若采用 beam model(独立假设):

p(zt∣x)=∏k=1Kp(zt,k∣x) p(z_t \mid x) = \prod_{k=1}^K p(z_{t,k} \mid x) p(ztx)=k=1Kp(zt,kx)

实现中为避免数值下溢,常在对数域累积或仅使用部分 beams(例如每 5 梁取一梁)。

若用 likelihood field:

p(zt,k∣x)∝exp⁡(−dk(x)22σ2) p(z_{t,k} \mid x) \propto \exp\left(-\frac{d_k(x)^2}{2\sigma^2}\right) p(zt,kx)exp(2σ2dk(x)2)

其中 dk(x)d_k(x)dk(x) 是在位姿 xxx 下第 kkk 梁对应点到最近障碍物的距离(distance transform 查得)。


7.2 KLD-sampling 公式(详见 Thrun 等)

给定 kkk 个非空箱,误差 ϵ\epsilonϵ、置信度 1−δ1-\delta1δ,需要的样本数约为:

N≈k−12ϵ(1−29(k−1)+29(k−1)z1−δ)3 N \approx \frac{k-1}{2\epsilon} \left(1 - \frac{2}{9(k-1)} + \sqrt{\frac{2}{9(k-1)}} z_{1-\delta}\right)^3 N2ϵk1(19(k1)2+9(k1)2z1δ)3

(对小 kkk 有数值近似注意)


8. 恢复(Recovery)与 Kidnap 处理

AMCL 通常实现如下机制:

  • 随机粒子注入:周期性地在地图范围内注入随机粒子。
  • 短期 / 长期平均似然对比alpha_slow, alpha_fast):若短期均值远低于长期均值,则加大随机注入比例。
  • 全局定位触发:定位失败时重新进行全局采样。

9. 重采样方法

常见重采样算法:

  • multinomial resampling(多项式)
  • systematic resampling(系统重采样)——效率高且方差低,常用
  • stratified resampling(分层)
    ROS AMCL 默认用 系统重采样(systematic),因为方差较低且实现简单。

10. 参数设置经验

以下为常见经验值(具体系统需调整):

  • min_particles:100
  • max_particles:2000(或更高,视计算资源)
  • kld_err:0.05(较宽松,粒子较少);若需更高精度可设 0.01
  • kld_z:0.99(对应 z≈2.326)
  • motion alpha1..4:如果使用里程计且其噪声小,alpha 可设小值如 0.01~0.05;若里程计漂移大,适当增大
  • laser_sigma_hit:通常 0.1~0.2(米),取决于激光精度与 map 分辨率
  • laser_z_hit:0.8,laser_z_rand:0.1(beam model 的混合系数作为起点)
  • update_min_d:0.2 m,update_min_a:0.2 rad(避免更新过频)

建议调参流程

  1. 先让 system 能稳定运行:min_particles 设较大以保证稳定性(例如 500)。
  2. 调整 motion noise 使粒子随里程计移动但不过度发散。
  3. 调整 sensor noise(sigma)使得权重更新对真实 pose 有判别力(不是所有粒子权重都趋于 0)。
  4. 开启 KLD,调小 kld_err 观察粒子数量与精度折中。
  5. 最后降低 max_particles 以节省 CPU。

11. 常见问题和解决方法

  • 问题:收敛到错误位置 / 跟踪丢失

    • 检查里程计 frame 是否正确(tf)、map 与 sensor 的坐标变换是否准确。
    • motion noise 过小会导致粒子不散开从而无法覆盖正确位置;过大则不稳定。
    • sensor model mismatch:检查 map 和传感器是否对齐,distance field 是否正确计算。
  • 问题:粒子数量一直很大 / 计算慢

    • kld_err 过小或 bin 分辨率设得过细会导致需要大量 bin,从而需要大量粒子。
    • 减小 kld_err、增大 kld_z(降低置信)或放粗 bin 分辨率。
  • 问题:在狭长走廊里姿态不确定(朝向不稳定)

    • 提高 yaw 分辨率或增加角度观测信息(若激光对于角度区分度低,可结合视觉或扫描匹配)。

调试技巧

  • 可视化粒子云(RViz 的 ParticleCloud),观察是否多峰或收敛到不合理位置。
  • 打印短期/长期平均似然(alpha_fast/alpha_slow)以调试恢复注入策略。
  • 通过限制 laser_max_beams 减少计算(例如每 5th beam)来加速调试。

12. 性能与复杂度

  • 观测更新通常是最昂贵部分(与 beams 数量与每束 ray-casting 相关)。如果使用 likelihood field 并预先做 distance transform,单束代价较低。
  • 粒子数 (N) 直接决定运算成本(motion + weight + resample,整体复杂度大致 (O(N \times \text{beams_used})))。KLD 旨在在多峰情况下自动增加 N,而在单峰时降低 N,从而更有效率。

13. 核心要点总结

  • AMCL 是基于粒子滤波的定位方法,适合在已知 2D 地图下使用激光进行定位。
  • 核心流程:里程计预测 → 激光似然权重 → 自适应重采样(KLD) → 重复。
  • 关键技术点:运动噪声模型、观测模型(beam / likelihood field)、KLD-sampling、重采样策略、恢复机制。
  • 调参要点:关注 motion noise、sensor sigma、KLD 参数与 min/max 粒子数。

14、参考文献

Dieter Fox, “KLD-Sampling: Adaptive Particle Filters and Mobile Robot Localization,” Advances in Neural Information Processing Systems, vol. 14, 2001.

Sebastian Thrun, Wolfram Burgard, Dieter Fox, Probabilistic Robotics, MIT Press, 2005.

F. Dellaert, D. Fox, W. Burgard, S. Thrun, “Monte Carlo Localization for Mobile Robots,” IEEE International Conference on Robotics and Automation (ICRA), 1999.


http://www.dtcms.com/a/507855.html

相关文章:

  • NOR FLASH
  • 网站代码优化方案网站建设和编程的区别
  • 重庆建设工程造价管理协会网站直播网站开发价格
  • 【Nest】集成测试
  • ELK运维之路(Logstash基础使用-7.17.24)
  • 快速排序(JAVA详细讲解快速排序的四种方式)
  • 数据结构四大简单排序算法详解:直接插入排序、选择排序、基数排序和冒泡排序
  • 官渡网站建设wordpress单页面制作
  • 企业电子商务网站开发数据库设计昆明seo博客
  • 东道 网站建设erp系统哪家做得好
  • 现代 Web 开发中检测用户离开页面的完整方案(附 Vue 实现)
  • [crackme]029-figugegl.1
  • 网站建站分辨率腾讯企点怎么注册
  • 第四章:L2CAP 的“数据语言”——揭秘蓝牙通信的报文格式
  • 【代码随想录算法训练营——Day43(Day42周日休息)】动态规划——300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
  • block的样式有哪些?如果copy的话分别会有啥样式
  • 如何做网络投票网站大数据开发工程师
  • 提示词 prompt 快速上手
  • 网站降权查询工具lnmp中安装wordpress
  • 一个空间放两个网站蓟门桥网站建设
  • DPC和DPC-KNN算法
  • git中tag标签远程管理
  • Babylon.js UtilityLayerRenderer 深度解析:创建3D工具与调试层的完整指南
  • 如何制造一个网站网站的图片怎么更换
  • 区块链安全评估:守护数字世界的“安全密码”
  • 多语言网站建设公司教你做企业网站
  • 第19节-非规范化数据类型-Drop-Type
  • docker desktop的容器间通信
  • 宝安做网站的公司企业文化经典句子
  • 学校二级网站建设百度关键词优化怎么做