SLAM

【Fast_SLAM算法】 Fast_SLAM算法Fast_SLAM是一个基于粒子滤波的SLAM框架,是众多现代SLAM框架的前身,经典的gmapping算法就是基于FastSLAM进行改进的。本文将通过论文和代码对FastSLAM算法框架和原理进行深入介绍。一,算法概述SLAM技术是自主移动机器...

Fast_SLAM算法

Fast_SLAM算法

Fast_SLAM是一个基于粒子滤波的SLAM框架,是众多现代SLAM框架的前身,经典的gmapping算法就是基于FastSLAM进行改进的。本文将通过论文和代码对FastSLAM算法框架和原理进行深入介绍。

一,算法概述

SLAM技术是自主移动机器人领域的重要挑战,在众多应用中扮演关键角色。FastSLAM通过利用机器人位姿的后验概率和路标点的后验概率,基于粒子滤波来预测整个机器人路径的后验概率,解决了传统基于EKF的SLAM存在的问题,如复杂度随路标点增加而激增以及错误观测导致的算法失效。因为使用的是粒子滤波,FastSLAM能够很好地解决这些问题。原理部分将详细解释。

[1]为原作者之一的博士毕业论文链接,[2][3]则是FastSLAM和FastSLAM2.0的原始论文。

二,SLAM问题定义

SLAM问题解决定位和建图两个问题,状态变量包括机器人位姿和路标点坐标两种。K表示路标点的总数量。定位和建图相互独立,当机器人位姿已知时,路标点的位置估计可看作是独立估计问题。整个SLAM问题可视为定位问题和基于定位结果的路标点位置估计问题的结合。

在FastSLAM中,利用粒子滤波模拟机器人位姿估计,每个粒子使用K个EKF进行预测,算法复杂度为O(MK),其中M为粒子数量,K为路标点数量。FastSLAM使用二叉树结构存储路标点的mean和covariance,将算法复杂度降低到O(M logK),通常比基于EKF的SLAM算法更快。FastSLAM还能解决路标点位置和数量未知的环境下的SLAM问题。

预测模型基于马尔可夫模型,认为当前时刻的状态仅依赖上一时刻的状态和当前输入。预测过程在已知当前输入和上一时刻机器人位姿的情况下,估计当前时刻机器人位姿。

观测模型基于已知当前机器人位姿、观测到的路标点位置和路标点索引时,计算得到当前观测值的概率。SLAM问题定义为已知输入和观测结果时,确定机器人位姿和路标点。

三, FastSLAM

每个路标点的位置估计相互独立,与机器人位姿估计独立,因此整个SLAM可分解为机器人位姿估计问题和K个路标点位置估计问题。表达如下:

其中,机器人位姿的估计使用modified partical filter,路标点位置估计使用EKF。假设机器人的观测模型噪声符合正态分布。

更新粒子状态,基于机器人的运动模型对粒子进行状态更新,每个粒子包含关于当前时刻位姿的“猜测”。运动模型表示当前位姿,实际代码中在计算出当前位姿后,加上一个噪声值,该噪声值遵循运动模型的噪声分布。

融合观测信息计算权重,使用贝叶斯公式和Markov模型等分解目标分布,间接求出权重。权重接近于1证明提议分布接近目标分布。基于滤波器的SLAM问题,提议分布利用上一秒的状态信息和当前的输入信息决定当前时刻的状态,目标分布由当前时刻的输入和观测决定。

权重计算利用EKF将观测模型线性化,融合后验观测信息和路标位置的后验信息。在代码中,根据EKF结果得到观测结果的后验分布,利用高斯分布的概率密度函数计算当前观测结果的概率值。

在FastSLAM中,需要每次进行重采样操作,权重只与当前观测有关。FastSLAM 2.0对此进行了改进,更新粒子位姿时加入观测信息,定义新的权重系数,并加入对路标点真实性的判断。

四, FastSLAM 2.0

FastSLAM 2.0对原始FastSLAM进行了改进,主要改进包括更新粒子位姿时融合观测信息,定义新权重系数,以及加入对路标点真实性的判断。

在FastSLAM中,仅基于预测模型随机采样粒子位姿,忽略了观测信息,导致粒子分散程度大,容易落在低概率区域。FastSLAM 2.0在更新粒子时基于EKF融合运动信息和观测信息,提高粒子状态估计的准确性。

算法改进后,权重计算基于更新后的粒子状态,利用观测信息和运动模型非线性化后的结果。权重定义为目标分布与提议分布的比值,改进后的公式考虑了观测信息,使得权重计算更加准确。

FastSLAM 2.0的改进在代码中通过更新粒子状态和权重计算实现。更新粒子状态时,基于EKF融合运动信息和观测信息;权重计算时,考虑目标分布与提议分布的差异,定义新的权重公式。

继续阅读:Fast_SLAM算法