蒙特卡罗定位
概述
蒙特卡罗定位(Monte Carlo Localization, MCL)是 Thrun、Fox、Burgard 于 1999 年提出的机器人全局定位算法:用一组带权粒子(样本)表示机器人位置的概率分布,通过预测-更新-重采样迭代,从"完全不知道在哪"收敛到"精确定位"。
关键内容
核心思想
粒子滤波(Particle Filter)在定位问题上的应用。将"机器人在哪里"表示为一组假设(粒子),每个粒子代表一个可能位置及其概率权重:
初始化:在地图上均匀随机撒 N 个粒子(全局不确定)
循环:
1. 预测:按运动模型随机移动每个粒子(传播不确定性)
2. 更新:按观测模型重新加权(传感器数据修正权重)
3. 重采样:按权重抽样,淘汰低权重粒子,复制高权重粒子
关键能力
| 问题类型 | MCL 处理方式 |
|---|---|
| 位置跟踪(已知初始位置) | 粒子聚集在初始位置附近,随运动更新 |
| 全局定位(初始位置未知) | 粒子均匀分布,随观测逐步聚集 |
| 绑架机器人问题 | 在重采样时注入随机粒子,从定位失败中恢复 |
全局定位能力是 MCL 相对于 EKF 的决定性优势——EKF 假设单峰高斯分布,无法表示"机器人可能在走廊两端之一"的多模态情形。
与 EKF 对比
| 维度 | 卡尔曼滤波(EKF) | 蒙特卡罗定位(MCL) |
|---|---|---|
| 分布假设 | 高斯(单峰) | 任意(多峰) |
| 全局定位 | 不支持 | 支持 |
| 计算效率 | 解析更新(快) | 粒子数决定(可调) |
| 非线性处理 | 泰勒线性化(近似) | 精确采样(准确) |
工程化标准(amcl)
MCL 被实现为 ROS 导航栈的核心模块 amcl(Adaptive Monte Carlo Localization),在全球无数机器人上运行——从扫地机器人到仓库 AGV:
- KLD-Sampling:自适应调整粒子数量,高不确定时多粒子,收敛后减粒子
- 系统重采样:低方差重采样,减少粒子退化
- 传感器模型:beam model(激光雷达)/ likelihood field model
来源
- raw/books/机器人学/12-thrun-probabilistic-robotics.md
相关
- SLAM — MCL 解决定位子问题,SLAM 同时解决定位+建图
- 卡尔曼滤波 — EKF 是替代方案,适合高斯单峰分布
- 贝叶斯推理 — MCL 是贝叶斯滤波在定位上的非参数实现
- Sebastian Thrun — MCL 主要提出者