一种制造车间无人搬运系统路径规划方法与流程

文档序号:15968923发布日期:2018-11-16 23:21阅读:315来源:国知局

本发明涉及调度方法中的路径规划方法,具体涉及一种制造车间无人搬运系统路径规划方法。

背景技术

制造车间无人搬运系统的核心就是调度方法,调度方法包括agv路径规划和搬运任务调度。在fms中,在确保路径规划和搬运任务调度计算结果合理的情况下,要尽量减少运算量,避免不必要的重复运算,并且在实际问题建模过程中要尽量符合实际情况,包括优化目标与约束等等。传统调度方法中,通常采取避让等待策略解决多agv冲突问题,虽然此种方法简单可靠,但是整个系统执行效率会下降,并且在任务调度层没有建立有效的数学模型来描述实际无人搬运任务的情况特点。



技术实现要素:

根据以上现有技术的不足,本发明提供一种制造车间无人搬运系统路径规划方法,根据制造车间场地环境、agv硬件设备和搬运任务特点等条件,提出一套带时间窗改进d*算法路径规划方法,旨在解决多agv在双向路条件下的路径寻优、冲突检测和冲突处理等问题。

本发明所述的一种制造车间无人搬运系统路径规划方法,其特征在于包括以下步骤:

(1)环境地图模型建立:本发明采用的导航方式为陀螺仪惯性导航与二维码视觉联合导航方法,节点与节点之间属于双向路段。相邻可通行两点之间连接成为一个边,每条边有不同的长度。由于制造车间场地布局非规则布局,二维码点分布也非规则分布,所以难以建立栅格地图模型,因此本发明采用拓扑模型中基于图论的加权无向图;

在介绍改进的d*算法之前,先对d*算法的原理进行介绍:

1)d*算法概述

d*算法最初是由卡内基梅隆机器人中心的stentz于1994年首次提出,主要用于解决机器人在部分已知环境下的动态路径规划问题。d*算法是基于a*算法和dijkstra算法的一种改进动态路径规划算法,传统的a*算法和dijkstra算法适用于静态的路径规划问题。d*算法在第一次路径规划当中使用dijkstra算法从目标点搜索到起点的路径信息,同时保存已遍历节点到目标点的路径信息,以此为动态路径规划阶段提供原始信息。当环境地图发生改变时,a*算法和dijkstra算法等静态路径规划算法需要从起点重新规划路径至终点,无法合理利用上一次规划已有的节点信息,造成了计算上的冗余,增加了内存开销,降低了计算效率。而d*算法可以有效保留上一次规划的有用节点信息,只对环境地图发生改变的部分路径进行重新局部规划。美国火星探测器核心的寻路算法就是采用的d*算法,除此之外,d*算法在其他领域的动态路径规划当中也得到了广泛的应用。

d*算法主要适用于栅格地图模型和拓扑地图模型,由于无人搬运调度系统需要良好的实时性以保证在agv运行过程当中能够对其进行精确有效的控制,因此路径规划算法的效率是一个重要的方面,因此,本文采用应用比较成熟并且实时高效的d*算法作为agv的动态路径规划核心算法。

2)d*算法流程

路径规划的目的是要找到一条蔽障路径将机器人从全局坐标系中的某一个位置移动到目标位置,并且最小化一个正的成本度量(例如,路径长度)。路径规划的问题空间是由一系列表示机器人空间位置的有序节点构成,两两互相连通节点之间的弧段都有相关的弧段代价。其中,目标节点表示为g。除了g每一个节点x都有一个回指指针y,表示为b(x)=y。d*算法使用回指指针代表各个点到目标点的路径。x点到y点的弧段的代价是用c=(x,y)表示的一个正数。如果x点到y点没有路径,则不定义c=(x,y),在程序中可以设置为无穷大。

与a*算法和dijkstra算法类似,d*算法同样使用open表传播关于弧段代价函数变化的信息,从open表中移除的节点放入到closed表中,还没有在open表中遍历访问过的节点放在new表中。每一个节点有一个关联标签t(x)用于表示节点当前所处状态,即存储该节点表的种类,其公式表示形式如下:

d*算法用代价函数h(g,x)来表示从x点到g点每次计算弧段代价的总和。在适当条件下,h(g,x)就是x点到g点的最优路径代价,由隐函数o(g,x)表示。对于open表中的每一个x节点,定义一个关键函数k(g,x)表示所有计算得到的h(g,x)中的最小值,其公式表示形式如下:

k(g,x)=min(h(g,x))

关键函数k(g,x)将open表中的x节点分成两种类型,分别为raise节点和lower节点,d*算法使用open表中的raise节点来传播路径代价增加的信息,使用lower节点来传播路径代价减少的信息,raise节点和lower节点的概念主要用于区分动态规划路径过程中受影响节点和未受影响节点,其判定条件公式形式如下:

当一个节点从open表中移除,则被移除节点将其路径代价扩散到相邻节点。将相邻节点加入到open表中循环比较查找,直到最后一个点从open表中移除则代表算法结束。

open表中的节点根据关键函数值进行排序。kmin表示open表中所有节点的关键函数值中的最小值,当t(x)=open时,其公式表示形式如下:

kmin=min(k(x))

参数kmin是d*算法当中一个重要的阈值。当路径代价小于等于kmin时为较优路径,当路径代价大于kmin时则不是较优路径。定义kold为上一次移除open表中的节点的关键函数值。

d*算法定义{x1,xn}表示一个从节点xn到节点x1的回指指针路径节点序列,当{x1,xn}表示路径节点序列时,需要满足以下条件:

1≤i<j≤n

b(xi+1)=xi

xi≠xj

d*算法中定义单调节点序列,其含义为该节点序列所表示的路径代价不断减少,并且其中的每一个节点都在open表中或者closed表中。当序列{g,xn}为单调序列时,对于序列中的每一点xi,需要满足如下条件:

h(g,xi)<h(g,xi+1)

在下文中,以f(x)作为f(g,x)的简化表示;以{x}作为{g,x}的简化表示;以f(°)作为某一变量的函数表示。

d*算法主要由两个函数构成:process-state和modify-cost。process-state主要用于计算当前点到目标点的最优路径代价,modify-cost主要用于更改代价函数c(°),并将受影响节点放入open表中。算法初始化时将所有节点的t(°)设置为new,h(g)设置为0,g节点放入到open表中。然后循环执行process-state,直到节点x从open表中移除到closed表中或者返回值为-1时停止,此时当前最优路径{x}已经计算出来或者最优路径不存在。在成功计算出当前最优路径后,沿路径{x}移动过程当中,当前方弧段代价发生改变时,立即调用modify-cost函数修改c(°),并将受影响节点放到open表中。当节点y为受影响节点,通过不断执行process-state函数直到kmin≥h(y)时停止,此时弧段代价改变的影响已经传递给了节点y,此时h(y)=o(y)。此时序列{y}就是环境改变后的最优路径。

(2)基于改进的d*算法进行路径规划:

agv在运行过程当中,在连续直线段上连续行驶,当路径出现拐点时需要在拐点处将速度降为0,再重新加速行驶,agv从x点到y点所在路径弧段长度为dxy,dxy所在的直线行驶段在到达x点之前所走过的距离表示为dprev,当x点为非拐点时,则当x点为拐点时,则dprev=0;

agv在平移过程中,当连续直线移动距离大于2d的时候,agv要先后经历加速、匀速和减速三个过程;当连续直线移动距离小于等于2d的时候,agv只经历加速和减速两个过程;

以时间花费最少作为优化目标,根据agv自身参数信息对两点之间弧段代价函数c(x,y)做如下改进,其表达式形式如下:

计算h(y)时,当则说明小车在x点的速度不为0,则需要将前方所有直线行驶的点同y点合成一个两点弧段{p1,y},根据上述表达式计算出c(p1,y),然后根据公式h(y)=h(p1)+c(p1,y)求出h(y);当dprev=0,则可以直接使用公式h(y)=h(x)+c(x,y)求出h(y)。

其中,优选方案如下:

所述步骤(1)中拓扑模型中基于图论的加权无向图为g=(v,e),其中v是一个非空集合,称为g的顶点集,e为无向的边e的集合,称为g的边集,每条边e∈e有一个权值w(e)。

本发明的优点在于:基于改进的d*算法进行路径规划,则可以根据agv的实际运动求出时间花费最少路径。此种方法相比传统的以路径距离为优化目标的算法更符合制造车间无人搬运的实际要求,大大提高了agv搬运路径的合理性。

附图说明

图1为实施例1中process-state的流程图;

图2为实施例1中modify-cost的流程图;

图3为实施例1中dprev非零时路径点分布图;

图4为实施例1中dprev为零时路径点分布图;

图5为实施例1中agv直线段行驶两种情况速度时间图像表示图;

图6为实施例1中场地布局示意图;

图7为实施例1中长度最短路径示意图;

图8为实施例1中时间花费最少路径示意图。

具体实施方式

以下结合附图和实施例对本发明作进一步说明。

实施例1:

一种制造车间无人搬运系统路径规划方法,其特征在于包括以下步骤:

(1)环境地图模型建立:本发明采用的导航方式为陀螺仪惯性导航与二维码视觉联合导航方法,节点与节点之间属于双向路段。相邻可通行两点之间连接成为一个边,每条边有不同的长度。由于制造车间场地布局非规则布局,二维码点分布也非规则分布,所以难以建立栅格地图模型,因此本发明采用拓扑模型中基于图论的加权无向图,即g=(v,e),其中v是一个非空集合,称为g的顶点集,e为无向的边e的集合,称为g的边集,每条边e∈e有一个权值w(e)。;

在介绍改进的d*算法之前,先对d*算法的原理进行介绍:

1)d*算法概述

d*算法最初是由卡内基梅隆机器人中心的stentz于1994年首次提出,主要用于解决机器人在部分已知环境下的动态路径规划问题。d*算法是基于a*算法和dijkstra算法的一种改进动态路径规划算法,传统的a*算法和dijkstra算法适用于静态的路径规划问题。d*算法在第一次路径规划当中使用dijkstra算法从目标点搜索到起点的路径信息,同时保存已遍历节点到目标点的路径信息,以此为动态路径规划阶段提供原始信息。当环境地图发生改变时,a*算法和dijkstra算法等静态路径规划算法需要从起点重新规划路径至终点,无法合理利用上一次规划已有的节点信息,造成了计算上的冗余,增加了内存开销,降低了计算效率。而d*算法可以有效保留上一次规划的有用节点信息,只对环境地图发生改变的部分路径进行重新局部规划。美国火星探测器核心的寻路算法就是采用的d*算法,除此之外,d*算法在其他领域的动态路径规划当中也得到了广泛的应用。

d*算法主要适用于栅格地图模型和拓扑地图模型,由于无人搬运调度系统需要良好的实时性以保证在agv运行过程当中能够对其进行精确有效的控制,因此路径规划算法的效率是一个重要的方面,因此,本文采用应用比较成熟并且实时高效的d*算法作为agv的动态路径规划核心算法。

2)d*算法流程

路径规划的目的是要找到一条蔽障路径将机器人从全局坐标系中的某一个位置移动到目标位置,并且最小化一个正的成本度量(例如,路径长度)。路径规划的问题空间是由一系列表示机器人空间位置的有序节点构成,两两互相连通节点之间的弧段都有相关的弧段代价。其中,目标节点表示为g。除了g每一个节点x都有一个回指指针y,表示为b(x)=y。d*算法使用回指指针代表各个点到目标点的路径。x点到y点的弧段的代价是用c=(x,y)表示的一个正数。如果x点到y点没有路径,则不定义c=(x,y),在程序中可以设置为无穷大。

与a*算法和dijkstra算法类似,d*算法同样使用open表传播关于弧段代价函数变化的信息,从open表中移除的节点放入到closed表中,还没有在open表中遍历访问过的节点放在new表中。每一个节点有一个关联标签t(x)用于表示节点当前所处状态,即存储该节点表的种类,其公式表示形式如下:

d*算法用代价函数h(g,x)来表示从x点到g点每次计算弧段代价的总和。在适当条件下,h(g,x)就是x点到g点的最优路径代价,由隐函数o(g,x)表示。对于open表中的每一个x节点,定义一个关键函数k(g,x)表示所有计算得到的h(g,x)中的最小值,其公式表示形式如下:

k(g,x)=min(h(g,x))

关键函数k(g,x)将open表中的x节点分成两种类型,分别为raise节点和lower节点,d*算法使用open表中的raise节点来传播路径代价增加的信息,使用lower节点来传播路径代价减少的信息,raise节点和lower节点的概念主要用于区分动态规划路径过程中受影响节点和未受影响节点,其判定条件公式形式如下:

当一个节点从open表中移除,则被移除节点将其路径代价扩散到相邻节点。将相邻节点加入到open表中循环比较查找,直到最后一个点从open表中移除则代表算法结束。

open表中的节点根据关键函数值进行排序。kmin表示open表中所有节点的关键函数值中的最小值,当t(x)=open时,其公式表示形式如下:

kmin=min(k(x))

参数kmin是d*算法当中一个重要的阈值。当路径代价小于等于kmin时为较优路径,当路径代价大于kmin时则不是较优路径。定义kold为上一次移除open表中的节点的关键函数值。

d*算法定义{x1,xn}表示一个从节点xn到节点x1的回指指针路径节点序列,当{x1,xn}表示路径节点序列时,需要满足以下条件:

1≤i<j≤n

b(xi+1)=xi

xi≠xj

d*算法中定义单调节点序列,其含义为该节点序列所表示的路径代价不断减少,并且其中的每一个节点都在open表中或者closed表中。当序列{g,xn}为单调序列时,对于序列中的每一点xi,需要满足如下条件:

h(g,xi)<h(g,xi+1)

在下文中,以f(x)作为f(g,x)的简化表示;以{x}作为{g,x}的简化表示;以f(°)作为某一变量的函数表示。

d*算法主要由两个函数构成:process-state和modify-cost。process-state主要用于计算当前点到目标点的最优路径代价,modify-cost主要用于更改代价函数c(°),并将受影响节点放入open表中。算法初始化时将所有节点的t(°)设置为new,h(g)设置为0,g节点放入到open表中。然后循环执行process-state,直到节点x从open表中移除到closed表中或者返回值为-1时停止,此时当前最优路径{x}已经计算出来或者最优路径不存在。在成功计算出当前最优路径后,沿路径{x}移动过程当中,当前方弧段代价发生改变时,立即调用modify-cost函数修改c(°),并将受影响节点放到open表中。当节点y为受影响节点,通过不断执行process-state函数直到kmin≥h(y)时停止,此时弧段代价改变的影响已经传递给了节点y,此时h(y)=o(y)。此时序列{y}就是环境改变后的最优路径。

process-state和modify-cost的流程图如图1和图2所示。

图中各名词含义如下:

min-state:返回open表中k值最小的节点(如果open表为空,则返回null)。

get-kmin:返回open表中最小k值kmin(如果open表为空,则返回-1)。

delete(x):将x从open表中删除,并且设置t(x)=closed。

insert(x,hnew):根据下式计算k(x),当t(x)=open时设置h(x)=hnew,并重新将节点x放入到open表中,然后根据k(°)值进行排序。

(2)基于改进的d*算法进行路径规划:

如图3和图4所示,agv在运行过程当中,在连续直线段上连续行驶,当路径出现拐点时需要在拐点处将速度降为0,再重新加速行驶,agv从x点到y点所在路径弧段长度为dxy,dxy所在的直线行驶段在到达x点之前所走过的距离表示为dprev。如图3,当x点为非拐点时,则如图4,当x点为拐点时,则dprev=0;

如图5所示,agv在平移过程中,当连续直线移动距离大于2d的时候,agv要先后经历加速、匀速和减速三个过程;当连续直线移动距离小于等于2d的时候,agv只经历加速和减速两个过程;

以时间花费最少作为优化目标,根据agv自身参数信息对两点之间弧段代价函数c(x,y)做如下改进,其表达式形式如下:

计算h(y)时,当则说明小车在x点的速度不为0,则需要将前方所有直线行驶的点同y点合成一个两点弧段{p1,y},根据上述表达式计算出c(p1,y),然后根据公式h(y)=h(p1)+c(p1,y)求出h(y);当dprev=0,则可以直接使用公式h(y)=h(x)+c(x,y)求出h(y)。

由此改进,则可以根据agv的实际运动求出时间花费最少路径。此种方法相比传统的以路径距离为优化目标的算法更符合制造车间无人搬运的实际要求,大大提高了agv搬运路径的合理性。

如图6所示场地布局,现给定起始点和终点,其中相邻两节点连线表明此弧段可行走,即弧段代价非无穷大,相邻两节点没有连线说明此弧段不可行走,弧段代价为无穷大。由于本发明的agv采用麦克纳姆轮,因此agv在路径拐点可以不进行转向操作,而是直接侧移行走。

运用以路径长度最短作为优化目标的d*算法,对起始点和终点两点路径进行路径规划,得到的路径如图7所示,图中组黑线所示折线为最优路径。

当以时间花费最少作为优化目标时,需要根据c(x,y)表达式计算弧段代价。而agv的运行参数影响着弧段代价的计算,当agv最大速度较大,加速度比较小时,通过较短弧段会出现图5中下方的运动状态,即无法达到最大速度,此时的弧段则为瓶颈弧段,在路径规划过程当中在拐点数相同的情况下要尽量避免出现瓶颈弧段。当agv最大速度较小,同时加速度较大的情况下,图8(b)中所示路径则没有瓶颈弧段,此种参数条件下经改进d*算法计算,图8(a)中路径代价和图8(b)中路径代价相同,因此图8(a)和图8(b)中的路径都有可能为最优路径;反之如果图8(b)中出现瓶颈弧段而图8(a)中没有瓶颈弧段时,此时经改进d*算法计算,图8(a)中的路径代价小于图8(b)中的路径代价,图8(a)中路径可能为最优路径,而图8(b)中路径不可能为最优路径。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1