首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FastSLAM算法的演进之路及原理解析

FastSLAM算法的演进之路及原理解析

作者头像
用户2423478
发布2025-10-31 19:01:54
发布2025-10-31 19:01:54
220
举报
文章被收录于专栏:具身小站具身小站

1. SLAM问题的本质

SLAM 的全称是即时定位与地图构建( Simultaneous Localization and Mapping),解决的是一个“鸡生蛋还是蛋生鸡”的经典问题:

一个机器人身处一个未知环境,它需要:

  • 定位:知道自己在哪。
  • 建图:知道环境是什么样。

麻烦的是,这两件事互相依赖:精确的地图需要精确的位姿来构建,而精确的位姿又需要精确的地图来计算。

SLAM的核心就是利用传感器数据(通常是激光雷达、摄像头、里程计等)来同时解决这两个相互依赖的问题。

2. EKF-SLAM

在FastSLAM出现之前,主流的解决方案是 EKF-SLAM(基于扩展卡尔曼滤波的SLAM),EKF-SLAM的思路:

将机器人的位姿(位置和方向 [x, y, θ])和地图中所有路标点的位置( [mx1, my1], [mx2, my2], …),全部拼接成一个巨大的状态向量,使用扩展卡尔曼滤波来估计这个巨大状态向量的均值和协方差(不确定性),但是EKF-SLAM有一些难题:

  • 计算复杂度高:状态向量的维度是 3 + 2N(N是路标数量)。每次更新(来了新的传感器数据)的计算复杂度是 O(N²),当地图很大(N很大)时,计算会变得非常缓慢,无法实时运行。
  • 数据关联脆弱:如果错误地将一个观测关联到了错误的路标(数据关联错误),整个滤波器可能会发散,导致完全错误的结果。
  • 线性化误差:EKF对非线性模型进行一阶线性化近似,在非线性程度高的场景(如急转弯)会引入较大误差。

3. FastSLAM

FastSLAM算法的开创性在于它采用了 RBPF 的方法,对SLAM问题进行了分解,认为SLAM问题中的机器人的路径(位姿轨迹)和地图,在给定路径的条件下,是条件独立的,举例来理解:

  • 想象:蒙着眼在一个房间里走路,每隔一步就伸手触摸一下周围的东西来猜房间的布局。
  • 路径:从起点到当前们置走过的所有位置(s1, s2, s3, …, st)。
  • 地图:脑海中根据在不同位置摸到的东西构建出的房间模型。
  • 关键点:如果已经准确地知道了你每一步的精确位置(即整个路径),那么构建地图就变得简单,只需要把在每个位置上感知到的物体,以其绝对位置添加到地图上即可,整个地图的估计可以分解为对每个路标的独立估计。

FastSLAM利用这个思想,将SLAM问题分解为两个问题:

  • 机器人路径估计:使用粒子滤波来估计机器人的轨迹,每个粒子都代表一条可能的历史路径假设。
  • 地图估计:在每条给定的路径假设下,地图中的每个路标都是条件独立的,因此,为每个粒子、每个路标维护一个独立的扩展卡尔曼滤波器。

这种分解将复杂度从 O(N²) 降低到了 O(N log N),这是一个巨大的提升。

4. FastSLAM 1.0 算法详解

FastSLAM主要有两个版本:1.0和2.0,先从更直观的1.0开始。一个粒子包含了以下信息:

  • 路径历史([k]是粒子索引):
  • 地图:由一组EKF组成,每个EKF负责估计一个路标的位置和不确定性。
  • 权重:w[k],表示这条路径假设正确的可能性。

算法流程是一个典型的粒子滤波循环,分为四个步骤:

4.1 采样(运动更新)

  • 输入:控制命令ut(例如,从里程计得到的“前进1米,左转10度”)。
  • 操作:对于上一个时刻的每个粒子 [k],根据运动模型采样一个新的位姿,添加到该粒子的路径历史中。
  • 效果:粒子云散开,表示在考虑了新的控制指令后,机器人可能所在的位置范围增加了(不确定性增加)。

4.2 观测更新(测量更新)

  • 输入:传感器观测 z_t(例如,激光雷达测到的多个路标的距离和角度)。
  • 操作:对于每个粒子 [k] 和每一个观测到的路标 i进行数据关联,首先,采用最大似然关联,粒子判断这个观测 z_t 来自于地图中的哪个已知路标,或者一个新路标,即为观测计算它与地图中所有已知路标的匹配概率,选择概率最高的那个。如果概率都低于阈值,则认为是一个新路标并初始化它;如果关联到已知路标 j,则使用这个观测 z_t 去更新该粒子内部负责路标 j 的那个EKF。(每个粒子的地图都是独立维护的)
  • 效果:每个粒子根据自己的路径历史和自己维护的地图,对观测做出解释,并更新自己地图中路标位置的信度(均值和协方差)。

4.3 计算重要性权重

不是所有粒子都是平等的,有的粒子提出的路径假设更能解释所有的观测数据,它就应该拥有更高的权重。

  • 操作:计算每个粒子 [k] 的新权重 wt[k],权重的正比于 在当前位姿下,看到实际观测值 z_t 的似然概率,即

这个概率可以根据粒子中EKF的协方差来计算,简单说,如果观测值和粒子地图的预测值越吻合,这个粒子的权重就越高。

4.4 重采样

经过几轮迭代后,少数粒子的权重会非常高,而绝大多数粒子的权重会趋近于零,这意味着计算资源被浪费在了那些不可能的假设上。

  • 操作:根据粒子的权重分布,丢弃低权重的粒子,复制高权重的粒子,复制后,所有新粒子的权重被重置为相同的值(如 1/N)。
  • 风险:重采样可能导致粒子耗散,即丢失了合理的路径假设多样性。

至此,一个循环结束,得到了t时刻的粒子集合,它们代表了机器人的位姿和地图的后验概率分布估计。

5. FastSLAM 2.0 的改进

FastSLAM 1.0的一个主要问题是它在采样阶段没有考虑最新的观测信息,它只根据运动模型(里程计)来采样,这相当于瞎猜,然后再用观测来修正权重,如果运动噪声很大,这种方法效率很低,需要大量粒子才能覆盖可能性。

FastSLAM 2.0的核心改进是:在采样新位姿时,融入最新的观测信息。

这被称为最优重要性采样,通过观测 z_t 来缩小采样范围,使得提出的位姿假设更有可能接近真实位置,这使得算法效率大大提高,在相同粒子数下,精度远高于1.0版本。当然,计算这个提议分布本身也更复杂一些。

6. 总结

优势:

  • 计算高效:巧妙分解,将复杂度降至 O(N log N),能处理大规模环境。
  • 多假设性:粒子滤波天然支持多模态分布,能处理“从两个相似走廊中选一个”这类歧义问题。
  • 地图表示:易于构建任何类型的地图(特征地图、栅格地图等)。

劣势与挑战:

  • 粒子耗散:重采样可能导致粒子多样性丧失,如果正确的路径假设在初期权重不高,可能会被永久丢弃。
  • 数据关联:数据关联错误对FastSLAM是灾难性的。一旦关联错误,会更新错误的路标,并给粒子一个错误的高权重。
  • 参数调整:粒子数量、运动噪声模型等需要仔细调整。

希望这份详细解析能为你打开FastSLAM的大门。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 具身小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. SLAM问题的本质
  • 2. EKF-SLAM
  • 3. FastSLAM
  • 4. FastSLAM 1.0 算法详解
  • 4.1 采样(运动更新)
  • 4.2 观测更新(测量更新)
  • 4.3 计算重要性权重
  • 4.4 重采样
  • 5. FastSLAM 2.0 的改进
  • 6. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档