机器人要自主行动,首先得回答"我在哪"。定位是导航与规划的地基,而初始位姿未知、运行中被"搬走"等场景,都让问题颇为棘手。本文把运动模型与观测模型组装成马尔可夫定位框架,讲清位姿跟踪、全局定位与绑架问题的统一解法。读完你将掌握网格定位与 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 的必经之路。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐