机器人定位方法及装置、存储介质
技术领域
本发明涉及机器人定位领域,具体而言,涉及一种机器人定位方法及装置、存储介质。
背景技术
移动机器人在进行任务操作时,当运行环境发生变化时移动机器人需要在变换的环境中知道自己在当前环境的位置,从而能够准确地执行任务。
当环境发生变化时,比如新增或者减少环境中的物体,或者环境中存在移动物体时,当前的环境信息与先验地图发生较大的变化,如果没有对当前的激光数据进行处理,直接使用当前激光数据与先验地图进行匹配,则必然匹配的误差比较大,定位精度不高。此外,当环境发生变化时,当前的环境信息与先验构建的地图存在明显的差异,如果不对先验地图进行更新,或者没有构建新的地图来实时反馈当前环境的变化,直接使用先验地图来与当前激光数据匹配,也会导致定位精度不高。
针对相关技术中,当环境发生变化时,机器人的定位不精准的问题,目前尚未存在有效的解决方案。
发明内容
本发明实施例提供了一种机器人定位方法及装置、存储介质,以至少解决相关技术中当环境发生变化时,机器人的定位不精准的问题。
根据本发明的一个实施例,提供了一种机器人定位方法,包括:根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,其中,所述当前位姿信息通过机器人在运行环境中的先验地图和运行参数预测得到;根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,其中,所述障碍物的变化情况包括:局部子地图中的栅格是否被障碍物占据的变化情况;将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息;将所述先验地图与所述运行参数匹配得到第一相对位姿信息;根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息。
根据本发明的另一个实施例,提供了一种机器人定位装置,包括: 构建模块,用于根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,其中,所述当前位姿信息通过机器人在运行环境中的先验地图和运行参数预测得到;更新模块,用于根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,其中,所述障碍物的变化情况包括:局部子地图中的栅格是否被障碍物占据的变化情况;第一匹配模块,用于将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息;第二匹配模块,用于将所述先验地图与所述运行参数匹配得到第一相对位姿信息;修正模块,用于根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,由于在动态环境中,通过根据实时构建的局部子地图来反映出当前真实环境信息,没有修改原有的先验地图,从而保证环境大概恢复成原样时还能继续充分利用原有先验地图。因此,可以解决当环境发生变化时,机器人的定位不精准的问题,达到提高机器人精准定位的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1(a)是根据本发明实施例的机器人结构示意图;
图1(b)是根据本发明实施例的机器人工作示意图;
图2是根据本发明可选实施例的机器人定位方法的流程图;
图3是根据本发明可选实施例的 机器人定位装置的结构框图;
图4是根据本发明可选实施例的机器人定位方法的流程图;
图5(a)-图5(b)是根据本发明可选实施例的局部子地图的新增占据栅格的lower步骤示意图;
图5(c)-图5(f)是根据本发明可选实施例的局部子地图中栅格的raise流程示意图;
图6是根据本发明可选实施例的SPA图模型。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中使用到的的技术术语如下:
里程计,用于初步估算出移动机器人角度和距离的变化量,常见的有轮式编码器,从而能够根据前后时刻的位姿变化量和前一时刻的位姿来估计出当前时刻机器人的位姿。
二维激光雷达,用于获取二维平面信息的传感器,用于检测周围环境的二维平面轮廓信息。
似然域模型,先验地图中的障碍物所在的位置的概率值为1。以障碍物所在的栅格为中心,向外扩展,离障碍物越近,对应概率值越高;离障碍物越远,对应的概率值越低。其中概率值的计算,以一个均值为0,协方差为
的正态分布进行分布。
submap即局部子地图,在机器人实时定位建图时,利用估算的位姿,将若干帧激光点云数据构建一张子地图,这样的子地图叫做submap。利用激光雷达数据与submap匹配,可以进一步估算机器人当前的位姿。
实施例1
本申请实施例一所提供的方法实施例可以在移动机器人或者类似的机器人中执行。如图1(a)所示,移动机器人100包括了2D激光雷达传感器200和带编码器的主动轮300。此外,所述移动机器人100还包括:运动控制器、电机、电池、嵌入式计算机、里程计等。如图1(b)所示,该机器人在基于仓储环境下生成的二维栅格地图中进行高精度定位。该地图包括:货架、工作台、房屋支撑架以及需要搬运的货物等部件。
在本实施例中所述移动机器人利用里程计、激光数据和先验地图进行自主定位,并实时构建和更新子地图,当环境发生较大变化时,也能利用子地图对当前的位姿进行纠正,从而达到高精度定位的目的。
在本实施例中提供了一种运行于机器人的机器人定位方法,图2是根据本发明实施例的机器人定位方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,其中,所述当前位姿信息通过机器人在运行环境中的先验地图和运行参数预测得到;
步骤S204,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,其中,所述障碍物的变化情况包括:局部子地图中的栅格是否被障碍物占据的变化情况;
步骤S206,将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息;
步骤S208,将所述先验地图与所述运行参数匹配得到第一相对位姿信息;
步骤S210,根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息。
本实施例中基于里程计、激光传感器和先验地图估计移动机器人位姿的基础上,首先对当前激光数据进行预处理,分离出环境中原有物体产生的长期激光数据和环境中变化物体产生的短期激光数据,利用长期数据与地图匹配,估计当前位姿。然后根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图。并且根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图对构建的局部子地图进行实时动态膨胀来构建似然域,实时反馈出当前的真实环境。
进一步,将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息和将所述先验地图与所述运行参数匹配得到第一相对位姿信息建立图优化模型,通过激光数据与子地图匹配的位姿对通过先验地图估计的位姿进行纠正。
通过上述步骤,由于在动态环境中,通过根据实时构建的局部子地图来反映出当前真实环境信息,没有修改原有的先验地图,从而保证环境大概恢复成原样时还能继续充分利用原有先验地图。因此,可以解决当环境发生变化时,机器人的定位不精准的问题,目前尚未存在有效的问题,达到提高机器人精准定位的效果。
优选地,根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,包括:将所述机器人的运行参数中的N个激光数据作为关键帧插入到所述机器人的当前位姿信息对应的第一张局部子地图,其中,所述N为自然数;在所述关键帧插入到所述第一张局部子地图中的数量达到N/2的情况下,构建得到第二张局部子地图;在所述关键帧插入到所述第二张局部子地图中的数量达到N的情况下,构建得到第三张局部子地图;将所述第二张局部子地图和所述第三张局部子地图作为当前位姿信息所述机器人运行环境的局部子地图。即在构建局部子地图时,只将最近的N帧激光数据构建一个局部子地图;除了第一张局部子地图,之后都同时构建两张局部子地图,当前一张局部子地图构建达到一定数量N1(N1=N/2)时,就构建一张新局部子地图,直到前一张局部子地图中包含的关键数量达到N,此时该局部子地图构建完毕。
优选地,根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图之后,还包括:通过所述机器人的运行参数中的激光数据更新所述局部子地图中的栅格的占据概率;在所述局部子地图中的栅格的占据概率大于阈值的情况下,确定所述局部子地图中的栅格被占据;在所述局部子地图中的栅格的占据概率小于阈值的情况下,确定所述局部子地图中的栅格为空闲。比如,当占据概率值大于0.65时,认为此栅格是被障碍物占据的,标记为1;当占据概率值小于0.2时,认为此栅格是空闲的,该栅格对应的标记为0。
优选地,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,包括:根据所述机器人运行环境中新增或者移除了障碍物的栅格更新概率栅格地图M;当所述概率栅格地图M的栅格s被占据的情况下,与栅格s对应的距离地图D(s)=0,确定距离所述栅格s最近的障碍物的坐标为所述栅格s所在的坐标位置,其中,所述栅格s对应的距离地图D(s)是所述栅格s距离最近障碍物栅格的欧式距离;当所述概率栅格地图M的所述栅格s从被占据变换为空闲的情况下,与所述栅格s对应的距离地图D(s)为无穷大,其中,所述栅格s对应的距离最近的障碍物坐标为空闲;将所述概率栅格地图M的栅格s放入预设处理队列更新所述局部子地图。
具体实施时,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图的更新方式中对扫描到栅格的占据概率做更新,当占据概率增大或减小到超过一定阈值后,则认为该栅格为新增或者移除的障碍物,需对该障碍物周围栅格进行似然概率更新。
进一步,对于新增的障碍物栅格或者移除的栅格的附近的栅格进行快速的动态更新,记概率栅格地图为M,对应的距离地图为D,保存的是当前栅格距离最近障碍物栅格的欧式距离,该距离地图初始化为无穷大,而每个栅格对应的最近障碍物坐标记为obst。
优选地,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,包括:在所述概率栅格地图M中的栅格s是被占据的情况下,遍历所述栅格s的周围领域的栅格n并确定所述栅格n距离栅格s的距离d;在与所述栅格n对应的距离地图D(n)大于预设距离值的情况下,将所述栅格n的坐标和与所述栅格n对应的距离地图不放入预设处理队列;在所述距离d小于与所述栅格n对应的距离地图D(n)情况下,所述栅格n的所述对应的距离地图的距离为d,所述栅格n对应的距离最近的障碍物坐标为所述栅格n所在的坐标位置,将栅格n的坐标和与所述栅格n对应的距离地图放入预设处理队列后更新所述局部子地图。
具体实施时,当环境中新增了概率栅格坐标s时,动态更新该栅格周围栅格的最近障碍物距离,直到更新到一定范围或者碰到周围栅格(n)的最近障碍物距离比d离栅格s的距离更近的栅格为止。
优选地,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,包括:在所述概率栅格地图M中的栅格s是从被占据变换为空闲的情况下,遍历所述栅格s的周围领域的栅格n并确定所述栅格n距离栅格s的距离d;在与所述栅格n对应的距离地图的距离d大于预设距离值的情况下,将所述栅格n的坐标和与所述栅格n对应的距离地图不放入预设处理队列;在所述栅格s没有从被占据变换为空闲的情况下,将所述栅格s的坐标和与所述栅格s对应的距离地图放入预设处理队列;在所述栅格s不是被占据的情况下,将与所述栅格s对应的距离地图D(s)为无穷大,并且将所述栅格s对应的距离最近的障碍物坐标复位为空闲。
具体实施时,而当栅格的障碍物由占据变为空闲时,将周围栅格全部复位为空闲,对应的最近障碍物距离复位为无穷大,直至到一定范围(比如0.4m)或者碰到周围的栅格n,其最近栅格坐标不是s为止,然后进行lower操作。
通过上述操作,在动态环境中,通过根据实时构建的局部子地图来反映出当前真实环境信息,没有修改原有的先验地图,从而保证环境大概恢复成原样时还能继续充分利用原有先验地图;同时,在构建局部子地图时,通过改进的Brushfire Algorithm算法,对于环境中新增或者减少以及移动的物体,能够实时动态更新环境的似然域,构建与真实环境一致的子地图,保证后期定位更新的精度。
可选地,根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息,包括:根据机器人的所述运行参数中的激光数据更新所述局部子地图中栅格的占据概率;根据所述局部子地图中栅格的占据概率确定所述局部子地图的更新结果;根据通过所述局部子地图的更新结果与所述运行参数中的激光数据匹配得到第二相对位姿信息,修正通过所述先验地图与所述运行参数中的激光数据匹配得到的所述第一相对位姿信息得到机器人定位信息。
具体实施时,将当前激光数据与当前的构建的局部子地图进行匹配,使用scan tosubmap的方法,得到匹配的位姿以及匹配的得分score;当score大于一定阈值时,将该激光数据插入到当前的局部子地图和下一个局部子地图中,不断扩大当前的局部子地图和下一个相邻的局部子地图。然后将当前的激光数据与先验地图进行匹配后得到的位姿,即使用scan to map的方法,得到位姿xj。即利用Scan 和先验地图的匹配的结果作为初步位姿估计,然后使用scan to submap的方法作为更新量,使用更新量来进一步更新初步估计的位姿。
当先验地图对应的环境发生较大变化时,通过当前激光数据与实时构建子地图submap进行匹配作为位姿的更新量,结合先验地图估计的位姿建立后端图优化模型,进行SPA优化,从而进一步提高定位精度,避免了动态环境中布置过多的反光柱或者二维码。
可选地,根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图之前,还包括:根据所述机器人的运行参数中的里程计数据和前一时刻的位姿信息,预测所述机器人的第一位姿信息;将所述机器人的运行参数中的激光数据特征与所述先验地图进行匹配,预测所述机器人的第二位姿信息,其中,所述激光数据特征是由机器人运行环境中新增的障碍物产生的;将所述机器人的第一位姿信息和机器人的第二位姿信息融合得到所述机器人的当前位姿信息。
具体实施时,对当前激光数据进行预处理,分离出环境中原有物体产生的长期激光数据和环境中变化物体产生的短期激光数据,利用长期数据与地图匹配,估计当前位姿信息。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种机器人定位装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图3是根据本发明实施例的机器人定位装置的结构框图,如图3所示,该装置包括:
构建模块30,用于根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,其中,所述当前位姿信息通过机器人在运行环境中的先验地图和运行参数预测得到;
更新模块32,用于根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,其中,所述障碍物的变化情况包括:局部子地图中的栅格是否被障碍物占据的变化情况;
第一匹配模块34,用于将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息;
第二匹配模块36,用于将所述先验地图与所述运行参数匹配得到第一相对位姿信息;
修正模块38,用于根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息。
本实施例中基于里程计、激光传感器和先验地图估计移动机器人位姿的基础上,首先对当前激光数据进行预处理,分离出环境中原有物体产生的长期激光数据和环境中变化物体产生的短期激光数据,利用长期数据与地图匹配,估计当前位姿。然后根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图。并且根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图对构建的局部子地图进行实时动态膨胀来构建似然域,实时反馈出当前的真实环境。
进一步,将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息和将所述先验地图与所述运行参数匹配得到第一相对位姿信息建立图优化模型,通过激光数据与子地图匹配的位姿对通过先验地图估计的位姿进行纠正。
通过上述模块,由于在动态环境中,通过根据实时构建的局部子地图来反映出当前真实环境信息,没有修改原有的先验地图,从而保证环境大概恢复成原样时还能继续充分利用原有先验地图。因此,可以解决当环境发生变化时,机器人的定位不精准的问题,目前尚未存在有效的问题,达到提高机器人精准定位的效果。
所述构建模块30用于将所述机器人的运行参数中的N个激光数据作为关键帧插入到所述机器人的当前位姿信息对应的第一张局部子地图,其中,所述N为自然数;在所述关键帧插入到所述第一张局部子地图中的数量达到N/2的情况下,构建得到第二张局部子地图;在所述关键帧插入到所述第二张局部子地图中的数量达到N的情况下,构建得到第三张局部子地图;将所述第二张局部子地图和所述第三张局部子地图作为当前位姿信息所述机器人运行环境的局部子地图。
所述装置还包括:更新模块,用于通过所述机器人的运行参数中的激光数据更新所述局部子地图中的栅格的占据概率;在所述局部子地图中的栅格的占据概率大于阈值的情况下,确定所述局部子地图中的栅格被占据;在所述局部子地图中的栅格的占据概率小于阈值的情况下,确定所述局部子地图中的栅格为空闲。
所述更新模块32,用于根据所述机器人运行环境中新增或者移除了障碍物的栅格更新概率栅格地图M;当所述概率栅格地图M的栅格s被占据的情况下,与栅格s对应的距离地图D(s)=0,确定距离所述栅格s最近的障碍物的坐标为所述栅格s所在的坐标位置,其中,所述栅格s对应的距离地图D(s)是所述栅格s距离最近障碍物栅格的欧式距离;当所述概率栅格地图M的所述栅格s从被占据变换为空闲的情况下,与所述栅格s对应的距离地图D(s)为无穷大,其中,所述栅格s对应的距离最近的障碍物坐标为空闲;将所述概率栅格地图M的栅格s放入预设处理队列更新所述局部子地图。
所述更新模块32,用于在所述概率栅格地图M中的栅格s是被占据的情况下,遍历所述栅格s的周围领域的栅格n并确定所述栅格n距离栅格s的距离d;在与所述栅格n对应的距离地图D(n)大于预设距离值的情况下,将所述栅格n的坐标和与所述栅格n对应的距离地图不放入预设处理队列;在所述距离d小于与所述栅格n对应的距离地图D(n)情况下,所述栅格n的所述对应的距离地图的距离为d,所述栅格n对应的距离最近的障碍物坐标为所述栅格n所在的坐标位置,将栅格n的坐标和与所述栅格n对应的距离地图放入预设处理队列后更新所述局部子地图。
所述更新模块32,用于在所述概率栅格地图M中的栅格s是从被占据变换为空闲的情况下,遍历所述栅格s的周围领域的栅格n并确定所述栅格n距离栅格s的距离d;在与所述栅格n对应的距离地图的距离d大于预设距离值的情况下,将所述栅格n的坐标和与所述栅格n对应的距离地图不放入预设处理队列;在所述栅格s没有从被占据变换为空闲的情况下,将所述栅格s的坐标和与所述栅格s对应的距离地图放入预设处理队列;在所述栅格s不是被占据的情况下,将与所述栅格s对应的距离地图D(s)为无穷大,并且将所述栅格s对应的距离最近的障碍物坐标复位为空闲。
所述修正模块38,用于根据机器人的所述运行参数中的激光数据更新所述局部子地图中栅格的占据概率;根据所述局部子地图中栅格的占据概率确定所述局部子地图的更新结果;根据通过所述局部子地图的更新结果与所述运行参数中的激光数据匹配得到第二相对位姿信息,修正通过所述先验地图与所述运行参数中的激光数据匹配得到的所述第一相对位姿信息得到机器人定位信息。
所述装置还包括位姿信息估计模块,用于根据所述机器人的运行参数中的里程计数据和前一时刻的位姿信息,预测所述机器人的第一位姿信息;将所述机器人的运行参数中的激光数据特征与所述先验地图进行匹配,预测所述机器人的第二位姿信息,其中,所述激光数据特征是由机器人运行环境中新增的障碍物产生的;将所述机器人的第一位姿信息和机器人的第二位姿信息融合得到所述机器人的当前位姿信息。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
为了更好的理解上述机器人定位方法流程,以下结合优选实施例对上述技术方案进行解释说明,但不用于限定本发明实施例的技术方案。
本发明优选实施例根据机器人的里程计和2D激光雷达传感器,配合移动机器人在已知栅格地图上进行高精度的移动机器人定位,并实时构建和更新submap子地图,根据子地图来进一步纠正当前位姿,从而达到在动态环境中移动机器人也能进行高精度定位。
如图4所示,是本申请实施例中的机器人定位方法流程图。
步骤S400,获取里程计数据信息,根据里程计数据和前一时刻位姿预测当前时刻位姿。
步骤S401,判断里程计信息该变量是否大于阈值或者时间间隔是否大于阈值。
步骤S402,如若是,则对最近一次获取的激光点云进行降采样,并根据在先验地图中离最近障碍物的距离分为短期特征和长期特征。
在上述步骤S400至S402中基于实时定位与建图算法(SLAM)建立当前仓库环境的地图,生成概率栅格地图(M)。遍历整张概率栅格地图,计算地图中每一个栅格离地图中最近的障碍物点的距离生成距离地图(D),而有障碍物处的栅格距离值直接设置为零。
以图1(b)中机器人在仓库环境中移动时为例进行说明,在所述机器人上能够同时获取里程计数据和激光数据。
首先,利用里程计数据u
t和前一时刻的位姿
,其中x、y分别为世界坐标系下横纵坐标,表示机器人在x轴、y轴所在二维平面的位置,θ表示机器人在x轴、y轴所在二维平面的方向。利用运动模型,能够预测出当前时刻的位姿。运动模型方程如公式(1)所示。
其次,如果前一时刻和当前时刻的里程计变化量大于一定阈值或者该时间差大于一定阈值,则利用当前时刻的激光数据来估算当前时刻的位姿。具体操作流程为:
首先,里程计在t时刻估计位姿为
x t ,记
,假设激光雷达的第k束激光数据相对于机器人坐标系的坐标为
,则第k束激光数据
在世界坐标系下的坐标为:
其中,
为第k束激光在世界坐标系下的坐标。计算该坐标离最近栅格坐标的距离,当该距离小于一定阈值m表示该激光点云是由地图中原有的物体产生的,成为长期激光点云特征;如果该距离大于阈值m,则表示该激光点云是由地图中新增的物体产生的,称为短期激光点云特征。
步骤S403,基于里程计估计的位姿,利用长期特征和先验地图进行匹配,得到匹配后的位姿。
将上述长期激光数据特征与先验地图进行匹配,使用scan to map的方法,进一步估计出当前移动机器人的位姿。
步骤S404,基于里程计估计的位姿,结合激光与地图匹配的位姿,结合EKF算法进行融合,获取融合后位姿Xj。
进一步,再使用扩展卡尔曼滤波器(EKF),将里程计预测的位姿和激光数据与地图匹配的位姿进行融合,求取融合后的位姿。
步骤S405,利用scan数据生成submap,submap的位姿为Xi。
在仓储环境中,比如行人、设备和货物的移动以及货物的增加或者减少都会环境经常发生比较大的变化,如果此时只是根据先验地图进行移动机器人定位,定位精度差且容易出现定位异常的情况。而如果根据情况实时对先验地图进行更新,由于此时设备本身的定位精度差,基于该位姿对地图更新会影响原先建立得地图,从而影响后期先验地图的使用。在本实施例中提出使用构建局部子地图submap,即实时构建两个submap子地图来反馈环境中的实时情况。每个Submap有个位姿,该位姿是插入到该submap中的第一帧的位姿,为了保证构建的submap足够准确,当设备检测到反光柱或者设备上的双目相机检测到二维码或者激光与先验地图的匹配得分足够高(大于65分)时,可以认为构建新的submap。
在构建submap时,只将最近的N帧激光数据构建一个submap;除了第一张submap,之后都同时构建两张submap,当前一张submap构建达到一定数量N1(N1=N/2)时,就构建一张新submap,直到前一张submap中包含的关键数量达到N,此时该submap构建完毕。具体流程如下:
步骤S4051,基于先验地图的位姿得分高于一定值时,将此激光点云数据作为关键帧插入到submap中。
步骤S4052,激光数据会更新submap中栅格的占据概率,栅格概率更新公式:
其中:p—认为栅格被障碍物占据的概率值; x—栅格地图中的位置;
步骤S4053,当占据概率值大于0.65时,认为此栅格是被障碍物占据的,标记为1;当占据概率值小于0.2时,认为此栅格是空闲的,该栅格对应的标记为0。
步骤S406,Submap中的栅格是否为占据。
步骤S407,对新增的占据栅格周围栅格进行lower操作。
步骤S408,Submap中的栅格是否为占据。
步骤S409,对新增的占据栅格周围栅格进行raise操作。
步骤S410,将当前scan数据与submap进行匹配,获取scan to submap的位姿Xij。
在上述步骤S406至步骤S410中具体包括:
在步骤S405中的更新方式对扫描到栅格的占据概率做更新,当占据概率增大或减小到超过一定阈值后,则认为该栅格为新增或者移除的障碍物,需对该障碍物周围栅格进行似然概率更新。
本实施例中基于Brushfire Algorithm,对于新增的障碍物栅格或者移除的栅格的附近的栅格进行快速的动态更新,记概率栅格地图为M,对应的距离地图为D,保存的是当前栅格距离最近障碍物栅格的欧式距离,该距离地图初始化为无穷大,而每个栅格对应的最近障碍物坐标记为obst。
具体流程如下:
首先,根据当前更新的概率栅格地图M,当其中的某个栅格s认为是被占据时,对应的距离地图中D(s)=0,其最近的障碍物栅格坐标为自身,即obst(s)=s;而当概率栅格小于0.2,submap的栅格由占据变为空闲时,此时需要将对应的D(s)复位为无穷大,obst(s)=free;将上述两种情况的栅格坐标s都压如到优先队列open中,该队列根据当前栅格对应的最近障碍物距离进行排序;
其次,遍历上述队列中每一个元素并取出。如果该栅格(s)是被占据的,则进行lower操作,如图5(a)-图5(b)所示。即动态更新该栅格周围栅格的最近障碍物距离,直到更新到一定范围或者碰到周围栅格(n)的最近障碍物距离比d离s的距离更近的栅格为止。具体操作为:遍历栅格s周围的八个栅格adj(s),记该领域中的栅格为n,计算栅格n离栅格s的距离d,如果d小于D(n),则栅格n的最近障碍物栅格距离D(n)=d,最近障碍物栅格坐标obst(n)赋值为obst(s),且将栅格n和对应的最近障碍物栅格距离d一并压入到优先队列open中进行循环遍历。当栅格n的最近障碍物距离D(n)大于0.4m时,则不将该栅格坐标及其对应的最近障碍物距离压入到open队列中。
然后,遍历上述队列中每一个元素并取出。如果该栅格是由占据栅格变为空闲时,则进行raise操作,如图5(c)-图5(f)所示。即动态更新当前栅格(s)周围的栅格,将周围栅格全部复位为空闲,对应的最近障碍物距离复位为无穷大,直至到一定范围(0.4m)或者碰到周围的栅格n,其最近栅格坐标不是s为止,然后由栅格n进行lower操作,直到距离原最近栅格坐标s’一定范围(0.4m)为止。具体操作为:遍历栅格周围的八领域adj(s)的栅格s,如果该栅格没有被free过,则将该栅格坐标和对应的最近障碍物距离压入到优先队列open中,若栅格n的最近障碍物栅格距离d大于0.4m时,则不压入优先队列open中;同时,当该栅格本身不是占据栅格时,则将该栅格对应的最近栅格坐标obst(n)复位为无穷大,同时对应的概率栅格坐标复位为free。
最后,当优先队列open中的元素不为空,则一直重复执行上述lower操作和raise操作步骤,直至优先队列open中的元素为空为止。根据动态更新的距离地图D,将该距离地图D转换为地图的似然域模型,用于激光数据与submap子地图进行匹配求解机器人的位姿。
步骤S411,利用Xi,Xj和Xij构建图优化模型,进行SPA优化,即利用当前激光与局部子地图匹配的位姿来进一步纠正EKF融合的位姿,获取最终估计的位姿。
在所述步骤S411中进行SPA后端优化位姿。
如图6所示,sparse pose adjustment(SPA)图模型所示,其中每个圆形是节点,代表移动机器人的位姿,节点之间的线段表示节点之间的约束,节点与地图之间的线段表示节点和地图之间产生的约束。首先将当前激光数据与当前的构建的submap进行匹配,使用scan to submap的方法,得到匹配的位姿以及匹配的得分score;当score大于一定阈值时,将该激光数据插入到当前的submap和下一个submap中,不断扩大当前的submap和下一个相邻的submap。然后将当前的激光数据与先验地图进行匹配后得到的位姿,即使用scan tomap的方法,得到位姿xj。即利用Scan 和先验地图的匹配的结果作为初步位姿估计,然后使用scan to submap的方法作为更新量,使用更新量来进一步更新初步估计的位姿。同时,当能检测到二维码、反光柱时或者当前激光数据与先验地图的匹配得分很高时,固定当前设备的位姿进行SPA时,能进一步优化submap的位姿,从而提高后期移动机器人与子地图匹配的准确度,进一步提高后期的定位精度。
具体实施时的步骤如下:
记当前submap的位姿为xi,当前激光数据与当前submap匹配的相对位姿为xij,当前submap与先验地图匹配的位姿记为xj,则误差方程为:
其中:ti—位姿xi对应的平移部分;
tj—位姿xj对应的平移部分;
tij—位姿xj在位姿xi下的相对位姿xij对应的平移部分;
Ri—位姿xi对应的旋转矩阵;
Rj—位姿xj对应的旋转矩阵;
Rij—相对位姿xij对应的旋转矩阵;
误差项对应的雅克比矩阵:
而误差函数eij只和xi和xj有关,则雅克比矩阵具有如下形式:
将误差函数进行线性化,得到对应的线性化方程、雅克比矩阵和更新增量:
则所有的待求优化变量的增量和待求的优化变量为:
利用上述公式(6)-(11)不断迭代更新,直至满足收敛条件,迭代终止。
每次进行spa计算时,都会把当前正在构建的两个submap位姿以及两个submap包含的移动机器人位姿放入到SPA优化器中。当激光能检测到反光柱或者移动机器人上的相机能检测到二维码时,此时认为机器人估计的位姿是更加准确的,在进行SPA优化求解的过程中,将此时的xj固定住,而对其他时刻的位姿和submap的位姿进行优化更新,从而对后面时刻进行scan to submap求取的位姿更加准确。同时,为了加快SPA求解的速度,选择最近的5个的submap的位姿以及所包含的各个时刻移动机器人的位姿进行优化求解。当滑动窗口在所求的位姿节点间进行滑动时,需要将滑窗前的约束转化到当前滑窗中作为先验约束,否则会影响最终的位姿求解结果。
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,其中,所述当前位姿信息通过机器人在运行环境中的先验地图和运行参数预测得到;
S2,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,其中,所述障碍物的变化情况包括:局部子地图中的栅格是否被障碍物占据的变化情况;
S3,将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息;
S4,将所述先验地图与所述运行参数匹配得到第一相对位姿信息;
S5,根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,根据机器人的当前位姿信息构建所述机器人运行环境的局部子地图,其中,所述当前位姿信息通过机器人在运行环境中的先验地图和运行参数预测得到;
S2,根据所述机器人运行环境中障碍物的变化情况更新所述局部子地图,其中,所述障碍物的变化情况包括:局部子地图中的栅格是否被障碍物占据的变化情况;
S3,将所述局部子地图的更新结果与所述运行参数匹配得到第二相对位姿信息;
S4,将所述先验地图与所述运行参数匹配得到第一相对位姿信息;
S5,根据所述第二相对位姿信息修正所述第一相对位姿信息得到机器人定位信息。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。