一种基于A*算法改进的AGV路径规划方法
技术领域
本发明涉及AGV路径规划技术领域,具体是指一种基于A*算法改进的AGV路径规划方法。
背景技术
目前,随着医疗信息化的发展,越来越多的自动化设备接入了医院信息***,使得医疗服务更加地规范和高效。智能化药房的出现,结合了自动化设备及计算机技术在数据分析、处理等领域的优势,能有效地提高药房工作人员的工作效率,缩短患者的取药时间,加强医院的信息管理。其中,药房的仓储管理作为智能化药房的一个重要环节,其主要功能是完成药品的存储、实现药品信息的管理,以提高医疗工作的整体效率。利用现代信息技术方法开发智能化、自动化、信息化的仓储管理***,已逐渐成为仓储管理的发展趋势。
与此同时,AGV具有成本低、高效率、无人化、易管理等特点,将AGV***与仓储***进行融合,开发多AGV仓储管理***能进一步地提高仓储管理的效率,使企业在库存管理、货物运输、订单处理、数据收集等方面更加有效规范。其中最关键的技术之一就是AGV的路径规划,但是传统的A*算法在应用于药房的仓储管理时会遇到一些问题,比如AGV按传统A*规划路径行驶过程中,可能需要频繁地进行转向,从而耗费时间;AGV发生故障或者遇到障碍则无法继续完成A*算法规划出来的路径等问题。因此基于A*算法设计一种新的适用于药房仓储管理的路径规划算法尤为重要。
发明内容
为解决上述现有难题,本发明提供了一种通过对传统A*算法的分析,提出了一种新的估计启发函数,改进了传统A*算法的数据结构和存储方式,还对A*算法运行速度慢,AGV发生故障或遇到障碍等问题给出了解决方法,改进了节点的扩展方式,程序运行时间也有所减少,算法运行速度快,减少了AGV的转向次数,且适用于多AGV和有障碍的环境,也提高了整个仓储***的运行效率的基于A*算法改进的AGV路径规划方法。
本发明采取的技术方案如下:本发明一种基于A*算法改进的AGV路径规划方法,包括以下步骤:
步骤S1,对A*算法的估计启发函数h(n)进行改进;
步骤S2,对A*算法的数据结构和存储方式采用优先队列的方式,对改进A*算法中OPEN列表根据堆序性使用最小二叉堆进行优化;
步骤S3,对A*算法的节点的扩展方式进行改进;
步骤S4,对A*算法中AGV的运动遇障进行改进。
步骤S1中,基于仓储环境模型,对估计启发函数h(n)进行改进,在二维平面的路径规划中,为了完成仓储***中多AGV的任务分配和路径规划,首先需要进行环境建模,本发明根据药房仓储环境模型设计电子地图,提出一些理想化假设模拟实际的仓储环境。
环境建模的方法主要有栅格建模法、几何建模法、拓扑建模法,几种方法的优缺点比较如表1所示。
表1几种环境建模方法的比较
考虑到各建模方法的特点,本发明选用拓扑建模法,在有向连接网络G=(V,E)中,V表示拓扑图中所有节点的集合,E表示拓扑图中所有边的集合,每条边可以表示为两个节点的有序元素对,关联一个权值W=(U,V)。
先设计仓储的电子地图,电子地图的设计应充分考虑实际的仓储环境,完成信息展示、数据查询等功能,体现实时的任务流程,方便管理人员的操作,良好的电子地图应满足拓扑结构简单、拓扑关系简单、数据冗余度小等原则。
在对仓储环境建立拓扑图后,本发明在建立模型时还有以下几点假设:
(1)每台AGV单次只执行一个任务;
(2)所有任务都符合各AGV的载重量等强约束;
(3)不考虑AGV的充电和随机故障,***内的所有AGV都处于良好状态;
(4)忽略AGV从车库驶出到上路之间的时间;
(5)不允许超车变道,即AGV一旦进入某条车道,就必须在此车道内从道路起点驶向道路终点,中途不允许变道,不允许超车。
对传统A*算法分析:传统A*算法是一种启发式搜索算法,在求解过程中通过对不同节点重要性的评价,对部分节点而非所有节点进行排序得到代价最小的节点,继续搜索直到找到目标节点。其评价函数表示为:
f(n)=g(n)+h(n)-f*(n)=g*(n)+h*(n) 式A
式中:n表示路径搜索中当前被扩展的节点;f(n)表示从起始节点s经过节点n到达目标节点e的所有路径中的最短路径f*(n)的估计值;g(n)表示从起始节点s到节点n的最小代价g*(n);h(n)表示从节点n到达目标节点e的最短路径代价h*(n)的估计启发函数,满足h(n)<h*(n)。
为了保证A*算法总能找到最优解,式A应满足:每个节点的后继节点个数有限;所有路径的代价值非负;h(n)<h*(n)。
由式A可知,为了确保A*算法搜索出最短路径,合理的估计启发函数h(n)的选取至关重要:如果h(n)的值小于节点n到目标节点e的实际距离值,则会增加搜索的节点数目,导致运算量增大;当h(n)越接近h*(n)时,A*算法运行越快;若h(n)的值大于节点n到目标节点e的实际距离值,则会在求解过程中舍弃部分节点,增加求解速度,但有可能最优解包含这些舍弃的节点导致规划结果为次优解。常用的估计启发函数h(n)的选用有:欧几里得距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)、切比雪夫距离(ChebyshevDistance)。
欧式距离即两点间的直线距离,如式B所示,是直角坐标系中最常用的距离量算方法:
曼哈顿距离即两点所形成的线段投影到坐标轴的长度之和,如式C所示:
切比雪夫距离将两点之间的距离定义为其各坐标数值差的最大值,如式D所示:
基于之前的拓扑建模,估计启发函数h(n)的值选用两节点间的欧几里得距离,即如式E所示:
对于节点n来讲,g(n)值固定,f(n)取决于估价启发函数h(n)的大小,由于h(n)的值与节点n到目标节点e的直线距离相关联,因此能够确保A*算法沿目标方向进行搜索,传统A*算法求解最短路径的具体步骤如表2所示。
表2传统A*算法求解最短路径步骤
算法执行完成后,Closed表中所存储的节点即为规划路径。
在实际的应用场景中,A*算法存在以下几个问题:(1)A*算法中,单纯依靠曼哈顿距离或欧几里得距离作为估价函数h(n)所生成的路径,在AGV按此路径行驶过程中,可能需要频繁地进行转向,从而耗费时间;(2)A*算法是在全局环境信息已知的情况下求解最优路径,如果在实际的运行中AGV发生故障或者遇到障碍则无法继续完成A*算法规划出来的路径(3)AGV在运行过程中,路径中节点数越多,相应地会增加AGV识别地标时间、反馈上位机时间等,从而增加运行时间。
进一步地,针对A*算法在AGV路径规划中存在的问题,步骤S1中,A*算法的估计启发函数h(n)一般采用曼哈顿距离d=|x
d-x
n|+|y
d-y
n|或欧几里得距离
或切比雪夫距离d=max(|x
d-x
n|,|y
d-y
n|),这些方法仅仅考虑了当前节点到目标节点几何上的简单关系,可以有效地处理单AGV的路径规划问题,但在面对多AGV的路径规划时,一些更为复杂的信息例如道路的拥挤程度、是否会发生死锁等,仅依靠上述方法求得的估计启发函数h(n)不能很好地解决问题;
因此,本发明对估计启发函数h(n)进行如下式(1)的改进:
其中,d为切比雪夫距离,这是因为选择曼哈顿距离作为启发函数有可能无法满足约束条件h(n)<h*(n),从而得不到最优路径;选用欧几里得距离作为启发函数的运算代价较大,还会扩展过多的无用节点;M、N分别表示路径nn1和路径nn2上的运行AGV的数量,当M、N都为0且α为1时,即为单AGV的A*路径规划算法。
进一步地,步骤S2中,为了提高A*算法的搜索效率,采用优先队列的方式进行数据的存储,A*算法一般采用链表和指针的方式进行节点存取,为了提高A*算法的搜索效率,采用优先队列的方式进行数据的存储,不同于一般的队列,优先队列总是将当前队列中的最大或最小元素出队,优先队列的实现常选用二叉堆,这种数据结构具有两个性质:①结构性:二叉堆是一颗除底层外被完全填满的二叉树,底层的节点从左到右填入,这样的树也叫做完全二叉树;②堆序性:如果需要快速找出最小元,则最小元应该在根上,任意节点都小于它的后裔,这就是小顶堆(Min-Heap);如果是查找最大元,则最大元应该在根上,任意节点都要大于它的后裔,这就是大顶堆(Max-heap);考虑到A*算法在搜索过程中总是从Open表中选取最小评价值的节点进行节点扩展,将优先队列这一数据结构应用于A*算法,根据堆序性,获取最小评价值节点的时间复杂度仅为O(1),可以提高A*算法的搜索效率。
进一步地,步骤S2中,对改进A*算法中OPEN列表根据堆序性使用最小二叉堆进行优化的步骤为:
步骤(1),初始化Open表、Closed表和初始节点s:建立Open表和Closed表,将起始节点s存入Open表,Open表采用优先队列这一数据结构存放刚生成的节点s,并对优先队列按照与原行驶方向相同的节点最优进行重排序,Closed表存放已经被扩展或者将要被扩展的节点;
步骤(2),判断与起始节点相连接的节点集P中是否包含目标节点e:如果是,则将节点e移入Closed表中,算法规划成功;如果否,则将节点集P中的所有节点移入Open表,将节点s移入Closed表中;
步骤(3),按照评价函数f(h)的值对Open表中的所有节点进行排序;
步骤(4),将排序后Open表的第一个节点作为下一个被扩展的节点n并移入Closed表中,将与节点n相连接且不在Closed表中的节点存入Open表,重复步骤(4),直到Open表中有目标点;
步骤(5),如果在AGV的运动过程中发生故障或者遇到障碍物,更新环境地图并以当前节点作为路径规划的起始节点s,跳转至步骤(2)。
进一步地,步骤S3中,为了加快AGV的运行速度,减少AGV的转向次数,提出以下优化方法:如果某节点n的多个后继节点具有相同的评价值f(n),优先选择与原行驶方向相同的节点进行扩展,减少AGV行驶路径的转向次数;如果该节点n仍存在多个相同评价值f(n)的后继节点,优先选择Open表中靠前的节点进行扩展,提高A*算法的运行速度。
进一步地,步骤S4,在AGV的运动过程中发生故障或者遇到障碍物时,更新环境地图并以当前节点作为路径规划的起始节点s。
进一步地,步骤S4中,使用RFID以及光电信号传感器对自身和障碍物的位置进行定位。
采用上述方案本发明取得的有益效果如下:本方案一种基于A*算法改进的AGV路径规划方法,通过对传统A*算法的分析,提出了一种新的估计启发函数,改进了A*算法的数据结构和存储方式,还对A*算法运行速度慢,AGV发生故障或遇到障碍等问题给出了解决方法,改进后的A*算法减少了算法的运行时间,提高了搜索效率;加快了AGV的运行速度,减少AGV的转向次数;改进后的A*算法还可以适用于多AGV的路径规划。
附图说明
图1是本发明一种基于A*算法改进的AGV路径规划方法的改进A*算法的流程图;
图2是本发明一种基于A*算法改进的AGV路径规划方法的拓扑建模的电子地图;
图3是本发明一种基于A*算法改进的AGV路径规划方法的传统A*算法的流程图;
图4是本发明一种基于A*算法改进的AGV路径规划方法的估计启发函数说明图;
图5是本发明一种基于A*算法改进的AGV路径规划方法的传统A*算法和改进A*算法规划的路径总长度对比图;
图6是本发明一种基于A*算法改进的AGV路径规划方法的传统A*算法和改进A*算法规划的路径总拐点对比图;
图7是本发明一种基于A*算法改进的AGV路径规划方法的传统A*算法一个任务的路径规划图;
图8是本发明一种基于A*算法改进的AGV路径规划方法的改进A*算法一个任务的路径规划图。
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
图1中,“1”~“36”表示路口或者货点,“101”~“130”和“201”~“230”表示道路。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例;基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1-8所示,本发明一种基于A*算法改进的AGV路径规划方法,包括以下步骤:
步骤S1,对A*算法的估计启发函数h(n)进行改进,增加了估计启发函数包含的信息;
步骤S2,对A*算法的数据结构和存储方式采用优先队列储存数据的方式,对改进A*算法中OPEN列表根据堆序性使用最小二叉堆进行优化;
步骤S3,对A*算法的节点的扩展方式进行改进;
步骤S4,对A*算法中AGV的运动遇障处理进行改进。
步骤S1中,基于仓储环境模型,对估计启发函数h(n)进行改进,采用如下
式(1)所示的估计启发函数h(n)处理多AGV的路径规划:
其中,d为切比雪夫距离d=|xd-xn|+|yd-yn|,M、N分别表示路径nn1和路径nn2上的运行AGV的数量,当M、N都为0且α为1时,即为单AGV的A*路径规划算法。其中,步骤S1中,对仓储环境模型选用拓扑建模法进行建模。
步骤S2中,为了提高A*算法的搜索效率,采用优先队列的方式进行数据的存储,不同于一般的队列,优先队列总是将当前队列中的最大或最小元素出队,优先队列的实现常选用二叉堆,考虑到A*算法在搜索过程中总是从Open表中选取最小评价值的节点进行节点扩展,将优先队列这一数据结构应用于A*算法,根据堆序性,获取最小评价值节点的时间复杂度仅为O(1),可以提高A*算法的搜索效率。
步骤S2中,对OPEN列表根据堆序性进行优化的步骤,即为改进A*算法求解最短路径步骤包括:
步骤(1),初始化Open表、Closed表和初始节点s:建立Open表和Closed表,将起始节点s存入Open表,Open表采用优先队列这一数据结构存放刚生成的节点s,并对优先队列按照与原行驶方向相同的节点最优进行重排序,Closed表存放已经被扩展或者将要被扩展的节点;
步骤(2),判断与起始节点相连接的节点集P中是否包含目标节点e:如果是,则将节点e移入Closed表中,算法规划成功;如果否,则将节点集P中的所有节点移入Open表,将节点s移入Closed表中;
步骤(3),按照评价函数f(n)的值对Open表中的所有节点进行排序;
步骤(4),将排序后Open表的第一个节点作为下一个被扩展的节点n并移入Closed表中,将与节点n相连接且不在Closed表中的节点存入Open表,重复步骤(4),直到Open表中有目标点;
步骤(5),如果在AGV的运动过程中发生故障或者遇到障碍物,更新环境地图并以当前节点作为路径规划的起始节点s,跳转至步骤(2)。
步骤S3中,如果某节点n的多个后继节点具有相同的评价值f(n),优先选择与原行驶方向相同的节点进行扩展,减少AGV行驶路径的转向次数;如果该节点n仍存在多个相同评价值f(n)的后继节点,优先选择Open表中靠前的节点进行扩展。
步骤S4,在AGV的运动过程中发生故障或者遇到障碍物时,更新环境地图并以当前节点作为路径规划的起始节点s。
实施例:
进行50次相同起始节点和终止节点的传统A*算法及改进A*算法路径规划的随机试验,记录实验结果并对以下两种情况进行比较与分析:一、两种算法得出的路径总长度是否一致;二、两种算法得出的路径的总拐点数是否相同。
如下表3所示,为传统A*算法及改进A*算法路径规划的测试案例。
表3两种规划算法拐点数不同的测试案例
两种情况下的测试结果如附图5和附图6所示,通过附图5发现,两种算法求出的路径总长度相同,通过附图6发现,改进A*算法规划的路径的总拐点数明显较少,拐点数不同的测试案例具体如表3所示。以测试序号为10003的测试结果为例,起始节点1,终止节点22,采用A*算法规划的路径图如附图7所示,采用改进A*算法规划的路径图如附图8所示。
通过对上面的实验结果进行分析,两种算法规划的路径总长度一样,但有12次的随机实验表明,改进A*算法规划出的路径的总拐点数少于未改进的,而在AGV小车的实际运行过程中,拐点数的增多,会增加AGV的运行时间,因此改进后A*算法的运行与实际环境更贴合,采用改进A*算法进行路径规划将更有效。此外,改进后的A*算法使用了优先队列存储数据,程序运行时间也有所减少,因此也提高了整个仓储***的运行效率。
以上对本发明及其实施方式进行了描述,这种描述没有限制性,附图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。总而言之如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。