王 辉,王 品
1(中国科学院大学,北京 100049)
2(中国科学院 沈阳计算技术研究所 高档数控国家工程研究中心,沈阳 110168)
3(沈阳高精数控智能技术股份有限公司,沈阳 110168)
实现机器人自主移动的基础是构建环境地图和定位机器人位置.在各种研究文献中把机器人环境地图构建和位置定位问题定义成即时定位与地图生成(SLAM)[1,2],该问题的复杂性主要在于定位机器人的位置需要获得一个环境特征地图,而在构建环境特征地图时又估计机器人此刻的位置状态.地图评估特征估计与机器人位姿估计之间的高度依赖使解决SLAM 问题变得十分困难.早期解决SLAM 问题的方法是在卡尔曼滤波器(Kalman Filter,KF)[3]基础上发展而来,后来随着粒子滤波(Particle Filters,PF)[4]理论的提出,Montemerlo[5]和Paskin[6]等人提出RBPF 算法作为解决SLAM 问题的有效方法,该算法主要根据建立环境地图所需的粒子数量来衡量算法的复杂度,.因此使用较少的粒子构建较为精确地图是该算法解决的主要问题,此外重采样步骤可能潜在剔除有效粒子,从而造成粒子耗散[7]问题.
在传统的RBPF-SLAM 算法实现中需要粒子数量十分巨大,主要原因在于计算建议分布时只把运动模型数据考虑在内,造成建议分布与目标分布差距较大,需要大量的粒子进行拟合.因此通过把运动模型数据和观测数据两者相结合来优化建议分布,使之更加接近目标位姿的后验概率分布.基于优化的建议分布进行粒子采样,可以显著减少粒子数目.在传统算法实现中频繁的重采样操作会导致粒子数量枯竭,通过引入自适应重采样方法来解决该问题,该方法通过计算当前有效粒子数目来决定是否进行重采样操作,避免过度的重采样造成粒子数量枯竭现象.
为了随着时间的推移能够高效的更新粒子,本文引用了二叉树来组织栅格地图[8]特征,这种树形结构使得粒子的更新时间复杂度从线性级降低到对数级,使粒子之间共享相同的地图部分,从一定程度上节省内存消耗.
在RBPF 算法中用p(x1:t|z1:t,u1:t,c1:t)表示机器人路径后验分布,其中X表示机器人位姿,Z表示传感器观测数据,U表示运动数据,C是一致性变量.用一定数量的粒子来拟合后验分布,每个粒子表示机器人在真实环境中的一种位姿假设.采样粒子集Yt表示为:
每个粒子包含一个机器人的位姿估计 (x,y,θ)T,而且包含一个具有均值µkj和协方差Σkj的卡尔曼滤波集合,这个集合表示每个粒子对于地图中出现特征的估计和机器人位姿的状态,用 µkj和 Σkj表示出现在地图中的每个特征位置估计的均值和方差.
RBPF 粒子滤波器可以表示为如下因式分解:该公式用两个独立的后验概率乘积表示SLAM 问题:p(x1:t|z1:t,u1:t-1)表示机器人路径轨迹的后验概率,p(m|x1:t,z1:t)表示机器人的环境地图后验概率.这种概率分解在解决SLAM 问题时可以先计算机器人的位姿轨迹,然后在已知机器人位姿情况下的计算更新当前环境地图.
算法步骤描述如下:
1)采样:根据建议分布从t-1 时刻粒子集合 采样获取t 时刻粒子的先验分布集合 ,建议分布使用运动模型.2)计算权重:计算每个粒子的权重,权重w 反映了建议分布与目标后验分布的差距.Yt-1Yt- p(xt|xt-1,ut)3)重采样:根据每个粒子的权重进行重采样,从临时粒子集合中抽取更换M 个粒子,结果产生的M 个粒子形成新的最终粒子集 .z1:t xtmitYt-Yt 4)更新地图:对于每个粒子根据传感器观测数据 和机器人当前位姿 更新地图中的每个特征 .mi∼p(mi|xt,z1:t) (4)
在传统的RBPF 算法实现中,在进行粒子采样时,粒子滤波器使用机器人的远动模型计算建议分布,使用传感器观测模型计算采样粒子的权重,权重更新公式为:
如果距离传感器的精度比里程计的精度高,采用上述的建议分布会导致粒子之间的权重差距比较大,具有较高权重的粒子分布在观测后验高概率区域.而且在传统的算法实现中每一步都要进行重采样操作,频繁的重采样会潜在的提出有效粒子导致粒子耗散,以及降低算法的计算效率,影响实时性.
解决传统算法的建议分布的不足,一种普遍的解决方法,尤其是在定位方面,是使用一个平滑的似然函数,避免粒子在观测似然函数分布之外的区域权值较低.但是这种方法会丢弃一部分距离传感器采集到的信息,会导致建立的地图不准确.解决该问题的一种改进方案,在采集下一代粒子时把最近的观测数据zt考虑进来.通过把观测数据zt结合到建议分布中,从而在采样时,只采集分布在观测概率函数区域内的粒子.此改进的建议分布如下:
使用该建议分布在计算权重时,公式为:
在实际的实现中无法通过公式(6)直接采样下一代临时粒子样本集.解决办法是在建议分布的峰值附近区域内的求取一个近似的正态分布函数,并用该函数进行采样.首先,使用t-1 时刻的粒子位姿,计算期望粒子位姿:
然后,根据距离传感器采集到的数据计算具有最大观测概率的机器人目标位姿
然后在目标位姿附近选取K个样本点,依据以下公式进行采样:
然后使用采集的K个样本点{x1,x2,···,xk},使用蒙特卡洛计算正态分布函数的参数N(µit,Σit).
另xj∈{x1,x2,···,xk},则
通过此方法,我们可以获得此改进建议分布的近似公式,在此公式中融合了机器人的里程计数据ut-1和最新的观测数据zt,可以更加有效准确获取采样粒子.
在重采样时,权值wi小于阈值的粒子会被从高权值区域附近采样的粒子所替代.一方面重采样是必须的,因为只需要有限的粒子来近似目标分布;另一方面重采样可能剔除有效粒子导致粒子数量枯竭.在本文中根据当前的有效粒子数目来决定是否要执行从采样操作.有效粒子数目Neff表示粒子集的退化程度,值越小退化越严重,需要进行重采样.Neff如下定义:
其中,M为粒子数目,是粒子xi的 归一化化权重.Neff越大说明粒子集的多样性越好,不需要重采样,只有Neff<N/2时才需要重采样.
2)根据扫描匹配算法估计具有最大观测后验概率的机器人目标位姿.
3)计算建议分布:根据公式(11)~(13)计算建议分布π ∼N(µit,Σit).
4)采样:根据所求的建议分布进行粒子采样.
5)计算权重:根据公式wit∝wit-1·ηit计算粒子权重.
6)依据公式(14)计算当前粒子集的有效数目,当Neff<N/2时需要重采样.
7)根据传感器观测数据更新地图.
算法流程图见图1.
在RBPF-SLAM 算法的实现中每一步地图更新好像均需要时间O(MN),其中,M表示粒子数目,N表示地图中的特征数量.每次更新必须处理M个粒子,M的线性复杂度是必须的.N的线性复杂度是重采样的结果,当粒子在重采样步骤中不止一次被抽中时,在一般的实现中会复制属于该粒子的整个地图.通过引入更多选择性更新的数据结构来表示粒子,可以避免线性复制的开销.其基本思想是将地图组织为平衡二叉树,如图2所示.
假设在t时刻合并了一个新的控制ut和新的测量zt,Yt里 的每个新粒子与Yt-1里对应的粒子主要存在两点不同:第一,得到不同的位姿估计;第二,观察到的特征的高斯参数µki和 Σki会被更新,所有的其它特征的参数不变.因此,在复制粒子时,在代表所有特征的树里,只有一个路径被修改,所以可以在对数时间内完成更新.对于树节点的内存释放,是通过给每个节点分配一个指针计数器.新创建的节点计数器初始化为1,当其它粒子创建指针指向该节点时,计数器增加,指针移除时计数器减少,当计数器为零时释放该节点.实验表明使用树形结构组织地图可以大量节省内存,加快地图更新速度.
图1 改进算法流程图
图2 特征数M=8 的粒子地图树形结构
实验的硬件平台配置包括TurtleBot 机器人、里程计和激光雷达,TurtleBot 机器人是一款基于ROS 操作系统的机器人配备用里程计和二维激光雷达.软件平台配置采用ROS 的kinetic 版本,运行平台为Ubuntu 操作系统,并采用Python 作为脚本编程语言.ROS 自带3 维可视化工具RVIZ(如图3所示) ,可进行人机交互.
在图4中分别展示了由传统RBPF-SLAM 算法和改进算法创建的室内地图.在图中深灰色表示未探测区域,浅灰色表示已扫描区域,其中被包围的深灰色区域表示扫描到的地图特征(障碍物).本实验的地图大小为10 米 ×10 米.图4(a)是用传统算法创建的二维栅格地图,采用了20 个采样粒子;图4(c)是由改进算法创建的地图,只采用了10 个采样粒子,从效果来看创建的地图更加清晰精确.
图3 3 维可视化工具RVIZ
从图4的对比实验效果来看,相比于传统的RBPF-SLAM 算法,改进的算法使用更少的粒子数目,更少的计算资源以及更少的存储资源可以创建出精确度更高,效果更好的环境地图.在改进算法中结合传感器观测数据优化建议分布,使得建议分布更加接近于机器人真实位姿的目标分布.粒子数量是衡量RBPF算法性能的主要指标,因此改进的算法可以显著降低粒子数目,节省计算资源.
图4 室内地图效果对比
而且在改进算法的实现时采用了树形数据结构来表示粒子,这样可以大量节省内存的消耗.在图5中给出传统RBPF 算法与该进算法消耗内存的对比.纵坐标表示粒子数,横坐标表示内存消耗.通过引用树形结构可以有效减小内存使用情况.
图5 传统算法与改进算法内存使用对比
分析比较改进算法的运行时间,在表1和表2中记录了在不同的粒子数目下,改进算法和传统算法主要步骤执行时间.能够看到,建立环境地图所需时间和粒子数量近似成正比关系.改进算法所需的计算时间明显少于传统算法所需的计算时间,这是由于改进算法的采样准确度高,从而大大减少了所需的粒子数目,而且在算法实现时通过引入树形结构减少了粒子的查找与更新时间,大大提高了算法的计算效率.
表1 改进算法的平均计算时间(ms)
表2 传统算法的平均计算时间(ms)
在本文中通过对传统RBPF-SLAM 算法优化改进,在计算时把运动模型与观测信息相结合优化建议分布,可以显著减少采样的粒子数量;引入自适应的重采样策略,避免不必要的从采样操作,避免粒子耗散,根据Neff适时的采样随机粒子维持粒子集的多样性.通过引入更多选择性更新的数据结构来表示粒子,可以避免线性复制的开销.其基本思想是将地图组织为平衡二叉树,减少了粒子的查找与更新时间,提高了算法性能.从实验结果来看对算法的优化改进从计算效率,地图精度以及存储消耗等方面都要优于传统算法.