《概率机器人》读书笔记——第七章_移动机器人定位-马宁-20261101
机器人要自主行动,首先得回答"我在哪"。定位是导航与规划的地基,而初始位姿未知、运行中被"搬走"等场景,都让问题颇为棘手。本文把运动模型与观测模型组装成马尔可夫定位框架,讲清位姿跟踪、全局定位与绑架问题的统一解法。读完你将掌握网格定位与 EKF 定位的原理与边界,为粒子滤波定位打好基础。
从两块拼图说起
前面几章我们已经准备好了两块关键拼图:第五章的运动模型 p(xt∣xt−1,ut)p(x_t|x_{t-1},u_t)p(xt∣xt−1,ut) 和第六章的观测模型 p(zt∣xt,m)p(z_t|x_t,m)p(zt∣xt,m)。这一次我们把它们组装成第一个完整应用:马尔可夫定位(Markov Localization)。
它的做法很直接——在整个状态空间(机器人所有可能位姿)上维护置信度 bel(xt)\mathrm{bel}(x_t)bel(xt),无论这个分布是单峰还是多峰。正因如此,它成了第 8 章 Monte Carlo 定位的理论母版,也为全局定位、绑架问题提供了统一的讨论框架。
阅读提示:本文建立在第二、三、四、五、六章的基础上;第 8 章的 MCL 会把这里的离散/网格化思想改造成粒子滤波形式。
定位问题的三种面孔
拿到一个定位需求,先问一句:**机器人的初始位姿,我们知道多少?**按已知程度,定位问题可以分成三类:
| 类型 | 含义 | 例子 |
|---|---|---|
| 位姿跟踪(position tracking) | 已知初始位姿,只需跟踪小扰动 | 工业 AGV |
| 全局定位(global localization) | 初始位姿完全未知,需在整张地图中找回自己 | 开机后的服务机器人 |
| 绑架问题(kidnapped robot) | 运行中突然被搬到新位置,需重新恢复 | 被人搬动的机器人 |
为什么这个划分重要?因为高斯滤波(KF/EKF)只适合位姿跟踪——它假设分布单峰、不确定性小;而马尔可夫定位天然能处理多峰的全局定位与绑架。这正是我们需要新框架的理由。
马尔可夫定位 = 贝叶斯滤波 + 定位状态
思路其实朴素:把贝叶斯滤波直接套到定位问题上,状态变量取机器人位姿 xt=(x,y,θ)x_t=(x,y,\theta)xt=(x,y,θ):
bel‾(xt)=∫p(xt∣xt−1,ut) bel(xt−1) dxt−1\overline{\mathrm{bel}}(x_t) = \int p(x_t\mid x_{t-1},u_t)\,\mathrm{bel}(x_{t-1})\,dx_{t-1}bel(xt)=∫p(xt∣xt−1,ut)bel(xt−1)dxt−1
bel(xt)=η p(zt∣xt,m) bel‾(xt)\mathrm{bel}(x_t) = \eta\, p(z_t\mid x_t,m)\,\overline{\mathrm{bel}}(x_t)bel(xt)=ηp(zt∣xt,m)bel(xt)
拆开看,每一件都是老朋友:
- 运动模型来自第五章;
- 观测模型来自第六章,含地图 mmm;
- bel\mathrm{bel}bel 是定义在全部可能位姿上的分布——可以是网格上的离散概率,也可以是高斯或粒子集合。
直觉:马尔可夫定位就是"对每个可能位姿都问一遍:在这个位姿下,按运动模型应该到哪?按观测模型应该看到什么?再据此更新它的概率"。
三种实现形式
理论定了,工程上怎么落地?区别只在 bel\mathrm{bel}bel 用什么表示:
| 实例 | bel\mathrm{bel}bel 的表示 | 出处 |
|---|---|---|
| 网格马尔可夫定位 | 把位姿空间切成 3D 网格 (x,y,θ)(x,y,\theta)(x,y,θ),每格存概率 | 本文 |
| EKF 定位(地标) | 单峰高斯 N(μ,Σ)\mathcal{N}(\mu,\Sigma)N(μ,Σ) | 本文后半部分 |
| Monte Carlo 定位(MCL) | 粒子集合 | 第 8 章 |
下面我们逐一展开前两种。
网格马尔可夫定位:最直观的实现
把位姿空间切块、每格存一个概率,算法便是贝叶斯滤波的逐格执行:
算法: Grid_Markov_localization
─────────────────────────────────────────────
1. 初始化: bel(x_0) 在所有网格上均匀分布(全局定位)
2. 每个时间步:
a. 预测: 对每个网格 x_t:
bel̄(x_t) = Σ_{x_{t-1}} p(x_t | x_{t-1}, u_t) bel(x_{t-1})
b. 测量更新:
bel(x_t) = η p(z_t | x_t, m) bel̄(x_t)
c. 归一化
─────────────────────────────────────────────
全局定位是如何一步步收敛的
- 初始 bel\mathrm{bel}bel 均匀分布 → 任何位姿等概率;
- 收到首次观测后,只有与地图匹配的位姿拿到高概率,bel\mathrm{bel}bel 出现多峰;
- 随着运动 + 观测不断迭代,多峰逐步收敛到唯一的真实位姿。
直觉:每次观测像"用地图做筛子",把不匹配的位姿筛掉;运动则把幸存者向前推。多峰会因后续观测/运动的差异逐渐瓦解。
EKF 定位:高效但单峰的选择
如果环境里有已知地标、初始位姿也大致已知,就没必要在整个网格上算——用 EKF(第 3 章)实现马尔可夫定位会高效得多:
- 状态 xt=(x,y,θ)⊤x_t=(x,y,\theta)^\topxt=(x,y,θ)⊤;
- 运动模型来自第五章(线性化得到雅可比 GtG_tGt);
- 观测 zt=(r,ϕ)z_t=(r,\phi)zt=(r,ϕ) 来自第六章地标模型,雅可比 HtH_tHt 对 (x,y,θ)(x,y,\theta)(x,y,θ) 求导。
算法: EKF_localization(μ_{t-1},Σ_{t-1},u_t,z_t,{c_t})
─────────────────────────────────────────────
1. 预测:
μ̄_t = g(u_t, μ_{t-1}) // 运动模型
Σ̄_t = G_t Σ_{t-1} G_t^T + R_t
2. 对每个观测到的地标 c_t:
ĥ_t = h(μ̄_t, m_{c_t})
H_t = ∂h/∂x |_{μ̄_t}
K_t = Σ̄_t H_t^T (H_t Σ̄_t H_t^T + Q_t)^{-1}
μ̄_t ← μ̄_t + K_t (z_t - ĥ_t)
Σ̄_t ← (I - K_t H_t) Σ̄_t
3. 返回 μ_t=μ̄_t, Σ_t=Σ̄_t
─────────────────────────────────────────────
局限:EKF 是单峰的,处理不了全局定位;线性化在大不确定性下可能发散;还强依赖正确的数据关联。
数据关联:最容易翻车的一步
每条地标观测在使用前,必须先回答"这是地图中的哪个地标"。两种常用策略:
- 最大似然(ML):选使 p(zt∣xt,mk)p(z_t|x_t,m_k)p(zt∣xt,mk) 最大的 kkk,简单但容易错;
- 特征匹配 + 验证:用 Mahalanobis 距离或 JCBB 检验一致性;
- 更严重的场景需要 多假设跟踪(MHT) 或 概率数据关联(PDA)。
值得警惕:错误关联是 EKF 定位发散的最常见原因之一。
要点回顾
- 马尔可夫定位 = 贝叶斯滤波 + 位姿状态,对 bel(xt)\mathrm{bel}(x_t)bel(xt) 在整个位姿空间维护;
- 三种实现:网格定位(通用但计算重)、EKF 定位(高效但单峰)、MCL(第 8 章,主流);
- 马尔可夫定位天然支持全局定位与绑架问题,EKF 只能位姿跟踪;
- 数据关联是地标定位的关键瓶颈。
下一站的第 8 章,MCL 把网格离散换成粒子,兼顾效率与多峰表达力;第 9 章则反过来——已知位姿时建地图;第 11~13 章 SLAM 同时未知位姿与地图。
延伸思考
- 网格分辨率权衡:网格越细越精确,但计算与内存按 N3N^3N3 增长;常用多分辨率或自适应网格。
- 绑架问题的难点:滤波器一旦收敛,就很难"意识到自己被搬走"。MCL 通过注入随机粒子、自适应粒子数等手段缓解(第 8 章详述)。
- 多机器人定位:多个机器人共享同一地图时,可以交换各自的 bel\mathrm{bel}bel 来加速全局定位收敛。
- 失效模式:对称长走廊、空旷大厅是定位难点(观测信息少);环境特征丰富时定位反而容易。
写在最后
回顾全文,马尔可夫定位的本质是贝叶斯滤波在位姿空间上的落地:对每个可能位姿追问"运动模型该到哪、观测模型该看到什么",再用观测修正概率。网格实现通用但计算重,EKF 高效却困于单峰假设,这一取舍为粒子滤波埋下伏笔。它是服务机器人与 ROS 导航栈的理论基石,也是通往 SLAM 的必经之路。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)