发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种面向复杂环境的带实时冲突消解的多AGV智能协同调度方法,能够实现多辆AGV的并行任务调度安排和自适应的冲突消解,提升了工厂环境下多AGV小车的运输效率,不仅通过冲突预测在路径规划时规避掉了大量的冲突,同时在某些不可预测的冲突发生时,能够自动的消解冲突,实现了多AGV调度***的自动化,智能化和高效化。
为了达到上述目的,本发明所采用的具体技术方案如下:
一种面向复杂环境的带实时冲突消解的多AGV智能协同调度方法,具体包括以下步骤:
步骤一,获取复杂环境的地图和AGV路网信息,判断是否产生任务请求,若是,执行步骤二,否则执行步骤三;
步骤二,获取任务的起点位置信息、终点位置信息、所有AGV小车的位置信息,根据时间最短原则选择空闲AGV小车执行任务,获取执行任务的AGV小车的最短路径和所需时间,并为其规划执行任务的时间节点,执行步骤三;
步骤三,实时监测不同AGV小车的运行状态;
步骤四,判断是否发生冲突,若是,则执行步骤五,若未发生冲突则在等待设定时间后判断是否产生任务请求,若是,执行步骤二,否则执行步骤三;
步骤五,获取当前时刻所有AGV小车的相关信息,构建其位置信息集合、冲突小车集合、冲突的公共路径段对应的节点集合,将冲突的AGV小车调度到缓冲节点并按照先进后出的顺序依次通过冲突的公共路径段;
步骤六,判断AGV小车是否到达任务终点,若是,则将该AGV小车的状态切换为空闲状态,否则在等待设定时间后判断是否产生任务请求,若是,执行步骤二,否则执行步骤三。
优选的,步骤二具体包括以下步骤:
B、获取当前任务的起点位置信息和终点位置信息;
C、获取所有AGV小车的位置信息;
D、计算所有空闲AGV小车调度到任务起点的最短路径,并确定在与忙碌AGV小车不冲突情形下的出发时间和从任务下发到到达任务起点的时间代价;
E、从所有空闲AGV小车中选择抵达任务起点的预估时间代价最小的空闲AGV小车执行当前的任务;
F、获得响应当前第i个任务的小车到达任务起点的最短路径和对应的时间代价;
G、为响应任务的小车规划从任务起点到任务终点的路径以及其离开任务起点的时刻,并将其和该小车到达起点的最短路径,小车离开自身位置的时刻一并下发给终端AGV小车。
优选的,步骤D具体包括以下步骤:
D1、在任务下发时刻Ti,第j个空闲的AGV小车记为AFj,该车此刻的位置记为CAFj;其中,j=1,2,…,f,f为此刻空闲AGV的总数;第k个忙碌的AGV小车ABk,该车执行的任务路径记为PABk,其中,k=1,2,…,b,b为此刻忙碌AGV的总数,小车运行的平均速度为v;
D2、利用迪杰斯特拉算法搜索所有空闲AGV小车AFj从所在位置CAFj到达任务起点Si的最短路径ArrivePj和对应的路径长度Lengthj,并计算预估的通过路径的时间代价PathCostj,其中,PathCostj=Lengthj/v;
D3、初始化空闲的AGV小车AFj的出发预估时刻为Tij=Ti,设该AGV小车为了规避冲突的出发延迟时间为tjk,AGV小车的出发预估时刻更新为Tij=Tij+tjk,则AGV小车AFj从任务下发时刻Ti到调度到任务起点Si的预估时间代价为
ArriveCostj=PathCostj+(Tij-Ti)。
优选的,步骤G包括以下步骤:
G1、初始化AFj*离开起点Si的时刻TE=Ti+ArriveCostj*;
G2、生成规避掉其他空闲小车的最短路径,利用迪杰斯特拉算法规划AFj*从起点Si到达终点Ei的最短路径Pi;
G3、判断为AFj*规划的最短路径Pi和第k个忙碌的AGV小车ABk要经过的路径PABk是否存在公共路径段,如果存在公共路径段,判断二者是否会在公共路径段发生冲突,如果预测到AFj*在TE时刻出发会和AGV小车ABk发生冲突,则安排AFj*延迟tjk*s,等到ABk通过公共路径后AFj*小车再执行任务,预估小车和所有忙碌小车可能发生的冲突并做延迟规避冲突更新后,得到AFj*离开起点Si的出发预估时刻TE。
优选的,步骤五具体包括以下步骤:
I、获取当前时刻所有AGV小车的信息;
J、构建当前时刻所有小车的位置信息集合和冲突小车集合;
K、构建冲突小车集合中的所有小车发生冲突的公共路径段对应的节点集合;
L、将冲突的AGV小车从冲突路径段依次调度到缓冲节点处;
M、将发生冲突的AGV小车调离到缓冲点的顺序从其所在的缓冲点依次通过发生冲突的公共路径;
N、冲突化解,所有小车继续执行当前的调度任务。
优选的,步骤J具体包括以下步骤:
J1、从AGV小车终端读取所有小车此刻的位置,将这些位置信息存储在位置信息集合L={Location1,Location2,…,LocationN};
J2、初始化发生冲突的AGV小车集合AConflictSet为空集合,如果Ak小车沿着执行任务的规划路径Pathk经过Locationk到达的下一个节点处小车Am此刻的位置Locationm,m≠k,则将Ak与Am加入集合AConflictSet中,其中,k=1,2,…,N;
J3、从AConflictSet中移除重复元素,统计冲突小车集合AConflictSet中的剩余小车总数,记为c。
优选的,步骤K具体包括以下步骤:
K1、初始化发生冲突的公共节点集合SharedADLocations为空集合;
K2:对于任意一组小车组合(AConflictSetx,AConflictSety),将发生冲突的AGV小车AConflictSetx执行的任务的规划路径Pathx和AConflictSety执行的任务的规划路径Pathy的公共路径上的所有节点加入集合SharedADLocations中,其中i=1,2,…,c,j=i+1,i+2,…,c;
K3:从SharedADLocations移除重复出现的节点。
优选的,步骤L具体包括以下步骤:
L1、从冲突小车集合AConflictSet中随机选取一个在冲突状态下仍能够移动到其他节点的AGV小车AConflictSetk;
L2:生成规避掉其他小车的最短路径,将其他AGV小车所在的位置邻接的边删除,生成新的路网信息中的边的集合Er,然后在图Gr=(V,Er)上利用迪杰斯特拉算法规划AConflictSetk从起点当前位置Locationk移动到最近的属性为AP且不在SharedADLocations中的缓冲节点TransitLocationk处,然后恢复最初的路网信息中的边的集合E,其中k=1,2,…,c;
L3:更新所有小车的位置信息集合L,并从冲突集合AConflictSet移除AConflictSetk;
L4:如果AConflictSet集合不为空,返回L1;否则结束。
本发明的有益效果在于:能够实现多辆AGV的并行任务调度安排和自适应的冲突消解,提升了工厂环境下多AGV小车的运输效率,不仅通过冲突预测在路径规划时规避掉了大量的冲突,同时在某些不可预测的冲突发生时,能够自动的消解冲突,实现了多AGV调度***的自动化,智能化和高效化。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的其他实施例,都属于本发明保护的范围。
如图1-图6所示,本发明提出了一种面向复杂环境的带实时冲突消解的多AGV智能协同调度方法,具体包括以下步骤:
步骤一,获取复杂环境的地图和AGV路网信息,判断是否产生任务请求,若是,执行步骤二,否则执行步骤三;
具体的,包括步骤A、获取工厂地图(复杂环境的一种)和AGV路网信息:根据实际工厂的生产环境和加工设施布置,获取工厂的地图信息,以及AGV小车在工厂中的路网信息G=(V,E),其中V为图的节点集合,包含两种属性:AP或者LM;E为图中的边的集合。其中AP节点为工厂中的加工单元的入口节点,AGV可以在该节点将产品移交给相应的加工***或从该节点提取经过某个工序加工后得到的产品,LM为路网中的其他节点。附图1给出了一个简单的AGV小车在工厂中的调度路网图。
步骤二,获取任务的起点位置信息、终点位置信息、所有AGV小车的位置信息,根据时间最短原则选择空闲AGV小车执行任务,获取执行任务的AGV小车的最短路径和所需时间,并为其规划执行任务的时间节点,执行步骤三;
B、获取当前任务的起点位置信息和终点位置信息;根据服务端下发的调度任务指令,获取当前任务的起点Si(Si表示当前第i个调度任务的起点),终点Ei(Ei表示当前第i个调度任务的终点)和任务的下发时间Ti。
C、获取所有AGV小车的位置信息;从小车终端读取在Ti时刻所有小车的位置信息Lj。其中,Lj表示第j辆AGV小车在Ti时刻的位置信息。
D、计算所有空闲AGV小车调度到任务起点的最短路径,并确定在与忙碌AGV小车不冲突情形下的出发时间和从任务下发到到达任务起点的时间代价;在任务下发时间Ti时刻,使用迪杰斯特拉最短路径算法搜索每一辆空闲AGV小车AFj从停放位置CAFj调度到当前任务的起点Si的最短路径ArrivePj和预估的通过路径的时间代价PathCostj。并根据其他忙碌小车状态确定小车出发时间Tij(其中Tij表示安排第j辆空闲AGV小车离开CAFj调度到起点Si的预估出发时刻)和从从任务下发Ti时刻到到达起点的时间代价ArriveCostj。其中,j=1,2,…,f,f为所有空闲AGV小车的总数。
E、从所有空闲AGV小车中选择抵达任务起点的预估时间代价最小的空闲AGV小车执行当前的任务;从f辆空闲AGV小车中选择到达任务起点S
i的时间代价最小的小车AFj*执行当前第i个的任务。其中,
F、获得响应当前第i个任务的小车到达任务起点的最短路径和对应的时间代价;记录AGV小车AFj*到达任务起点Si的最短路径ArrivePj*,从任务下发的Ti时刻到到达起点的时间代价ArriveCostj*和AFj*离开CAFj*位置的时刻Tij*。
G、为响应任务的小车规划从任务起点到任务终点的路径以及其离开任务起点的时刻,并将其和该小车到达起点的最短路径,小车离开自身位置的时刻一并下发给终端AGV小车。根据当前其他空闲小车AFj(j≠j*)和所有忙碌小车ABk的状态信息和任务信息,预测AFj*在执行任务时可能出现的冲突,在潜在的冲突约束下规划从任务起点到终点的路径,从而规划出一条规避掉潜在冲突的路径Pi和AFj*离开起点Si的时刻TE,将其和到达起点Si的最短路径ArrivePj*,离开CAFj*的时刻Tij*一并下发给终端小车AFj*。
步骤三,实时监测不同AGV小车的运行状态;
H、实时监测不同AGV运行状态:实时监测AGV小车的运行状态,监测AGV小车是否出现发生任务冲突。
步骤四,判断是否发生冲突,若是,则执行步骤五,若未发生冲突则在等待设定时间后判断是否产生任务请求,若是,执行步骤二,否则执行步骤三;
步骤五,获取当前时刻所有AGV小车的相关信息,构建其位置信息集合、冲突小车集合、冲突的公共路径段对应的节点集合,将冲突的AGV小车调度到缓冲节点并按照先进后出的顺序依次通过冲突的公共路径段;
I、获取当前时刻所有AGV小车的信息;获取当前时刻所有AGV小车Ak(Ak表示第k辆AGV小车)的信息InformationAk,包含所有小车此刻的位置信息Locationk,小车的状态信息Statek,和小车此刻执行的任务路径信息Pathk。其中,k=1,2,…,N,N为AGV小车的总数。
J、构建当前时刻所有小车的位置信息集合和冲突小车集合;根据所有AGV小车的信息InformationAk构建所有AGV小车的位置集合L={Location1,Location2,…,LocationN}。初始化发生冲突的AGV小车集合AConflictSet为空,如果Ak小车沿着执行任务的规划路径Pathk经过Locationk到达的下一个节点处为Locationm,m≠k,则将Ak与Am加入集合AConflictSet中。其中,k=1,2,…,N。检测完所有小车的位置信息后,从AConflictSet中移除重复元素,得到的冲突小车集合中的小车总数为c。
K、构建冲突小车集合中的所有小车发生冲突的公共路径段对应的节点集合;初始化冲突场景对应节点集合SharedADLocations为空。对于任意一组小车组合(AConflictSeti,AConflictSetj),将AGV小车AConflictSeti和AConflictSetj对应的任务路径的公共路段上的所有节点加入集合SharedADLocations中。其中i=1,2,…,c,j=i+1,i+2,…,c。然后从SharedADLocations移除重复出现的节点。
L、将冲突的AGV小车从冲突路径段依次调度到缓冲节点处;从冲突小车集合AConflictSet中查找在冲突状态下,能够移动到其他节点的AGV小车AConflictSetk,在不途径所有小车的位置信息集合L的约束下,利用迪杰斯特拉算法规划新路径Pnewk,将其从Locationk移动到最近的属性为AP且不在公共路径段对应的节点集合SharedADLocations中的缓冲节点TransitLocationk处,然后更新所有小车的位置信息集合L。其中k=1,2,…,c。并从AConflictSet移除AConflictSetk。当AConflictSetk到达TransitLocationk后,依次移动其他在AConflictSet中的冲突小车,直到AConflictSet集合为空。
M、将发生冲突的AGV小车调离到缓冲点的顺序从其所在的缓冲点依次通过发生冲突的公共路径;按照移出冲突小车集合AConflictSet的先后顺序,将第一个调离的小车AConflictSetk沿着Pnewk从TransitLocationk出发移动回到Locationk,并继续沿着未完成的任务路径Pathk继续执行任务。当AConflictSetk离开公共路径段对应的节点集合SharedADLocations后,安排第二个小车通过发生冲突的公共路径段,依次类推,直到所有小车离开发生冲突的公共路径段。
N、冲突化解,所有小车继续执行当前的调度任务。
步骤六,判断AGV小车是否到达任务终点,若是,则将该AGV小车的状态切换为空闲状态,否则在等待设定时间后判断是否产生任务请求,若是,执行步骤二,否则执行步骤三。
O、将对应的小车状态切换为空闲态:执行调度任务的AGV小车到达任务的终点,小车将货物移交给加工单元,小车状态置为空闲状态。
优选的,步骤D计算所有空闲AGV小车调度到任务起点的最短路径,并确定在与忙碌AGV小车不冲突情形下的出发时间和从任务下发到到达任务起点的时间代价。具体包括以下步骤:
D1、在任务下发时刻Ti,第j个空闲的AGV小车记为AFj,该车此刻的位置记为CAFj;其中,j=1,2,…,f,f为此刻空闲AGV的总数;第k个忙碌的AGV小车ABk,该车执行的任务路径记为PABk,其中,k=1,2,…,b,b为此刻忙碌AGV的总数,小车运行的平均速度为v;
D2、利用迪杰斯特拉算法搜索所有空闲AGV小车AFj从所在位置CAFj到达任务起点Si的最短路径ArrivePj和对应的路径长度Lengthj,并计算预估的通过路径的时间代价PathCostj,其中,PathCostj=Lengthj/v;
D3、初始化空闲的AGV小车AFj的出发预估时刻Tij=Ti。判断为AFj规划的最短路径ArrivePj和第k个忙碌的AGV小车ABk要经过的路径PABk是否存在公共路径段。如果存在公共路径段,判断二者是否会在公共路径段发生冲突,如果预测到AFj在Tij时刻出发会和AGV小车ABk发生冲突,则安排AFj延迟tjks,等到ABk通过公共路径后AFj小车再执行任务。即小车的出发预估时刻更新为Tij=Tij+tjk。其中,tjk为为了避免小车AFj和ABk在公共路径段发生冲突的等待时间。预估小车和所有忙碌小车可能发生的冲突并做延迟规避冲突更新后,得到第j辆空闲AGV小车AFj的出发预估时刻Tij。相应地,AFj从任务下发时刻Ti到调度到任务起点Si的预估时间代价为ArriveCostj=PathCostj+(Tij-Ti)。
如图2左图所示,如果在t=Ti时刻,空闲AGV小车AF1按照紫色虚线开始执行调度任务,则会和按照红色虚线正在忙碌的AGV小车AB1在公共路径e(LM1,LM2)(图2中的橙色边)产生调度冲突;为了避免冲突,将AF1的出发时刻延迟t11,此时忙碌的小车AB1离开公共路径到达节点LM2,在t=Ti+t11时刻安排AF1按照紫色虚线开始执行调度任务,此时两辆小车可能发生的冲突被规避掉。
优选的,步骤G为响应任务的小车规划从任务起点到任务终点的路径以及其离开任务起点的时刻,并将其和该小车到达起点的最短路径,小车离开自身位置的时刻一并下发给该终端AGV小车。包括以下步骤:
G1、初始化AFj*离开起点Si的时刻TE=Ti+ArriveCostj*;
G2、生成规避掉其他空闲小车的最短路径。将其他空闲AGV小车AFj(j≠j*)所在的位置邻接的边删除,生成新的路网信息中的边的集合Er。然后在图Gr=(V,Er)上利用迪杰斯特拉算法规划AFj*从起点Si到达终点Ei的最短路径Pi。然后恢复最初的路网信息。附图3给出了一个规避空闲小车规划最短路径的简单例子。
如图3所示,在G中规划得到的将空闲小车AF1调度到节点AP3的最短路径如图3左图中的紫色虚线所示。然而该最短路径忽略了其他空闲的AGV小车对路线的阻断,因此若按照该路径调度小车AF1则会发生冲突。为此,我们将空闲小车AF2所在的节点连接的边删除,生成新的图Gr=(V,Er),然后在Gr上利用迪杰斯特拉算法规划将空闲小车AF1调度到节点AP3的最短路径,路径如图3右图中的紫色虚线所示。
G3、判断为AFj*规划的最短路径Pi和第k个忙碌的AGV小车ABk要经过的路径PABk是否存在公共路径段,如果存在公共路径段,判断二者是否会在公共路径段发生冲突,如果预测到AFj*在TE时刻出发会和AGV小车ABk发生冲突,则安排AFj*延迟tjk*s,等到ABk通过公共路径后AFj*小车再执行任务,预估小车和所有忙碌小车可能发生的冲突并做延迟规避冲突更新后,得到AFj*离开起点Si的出发预估时刻TE。
优选的,步骤J构建当前时刻所有小车的位置信息集合和冲突小车集合。具体包括以下步骤:
J1、从AGV小车终端读取所有小车此刻的位置,将这些位置信息存储在位置信息集合L={Location1,Location2,…,LocationN};
J2、初始化发生冲突的AGV小车集合AConflictSet为空集合,如果Ak小车沿着执行任务的规划路径Pathk经过Locationk到达的下一个节点处小车Am此刻的位置Locationm,m≠k,则将Ak与Am加入集合AConflictSet中,其中,k=1,2,…,N;
J3、从AConflictSet中移除重复元素,统计冲突小车集合AConflictSet中的剩余小车总数,记为c。
优选的,步骤K构建冲突小车集合中的所有小车发生冲突的公共路径段对应的节点集合。具体包括以下步骤:
K1、初始化发生冲突的公共节点集合SharedADLocations为空集合;
K2:对于任意一组小车组合(AConflictSetx,AConflictSety),将发生冲突的AGV小车AConflictSetx执行的任务的规划路径Pathx和AConflictSety执行的任务的规划路径Pathy的公共路径上的所有节点加入集合SharedADLocations中,其中i=1,2,…,c,j=i+1,i+2,…,c;
K3:从SharedADLocations移除重复出现的节点。
优选的,步骤L将冲突的AGV小车从冲突路径段依次调度到缓冲节点处。具体包括以下步骤:
L1、从冲突小车集合AConflictSet中随机选取一个在冲突状态下仍能够移动到其他节点的AGV小车AConflictSetk;
L2:生成规避掉其他小车的最短路径,将其他AGV小车所在的位置邻接的边删除,生成新的路网信息中的边的集合Er,然后在图Gr=(V,Er)上利用迪杰斯特拉算法规划AConflictSetk从起点当前位置Locationk移动到最近的属性为AP且不在SharedADLocations中的缓冲节点TransitLocationk处,然后恢复最初的路网信息中的边的集合E,其中k=1,2,…,c;
L3:更新所有小车的位置信息集合L,并从冲突集合AConflictSet移除AConflictSetk;
L4:如果AConflictSet集合不为空,返回L1;否则结束。附图4给出了一个将冲突AGV小车调度到缓冲节点处的简单例子。
如图4所示,忙碌的五辆AGV小车AB1,AB2,AB3,AB4和AB5在工厂中相互锁死在了公共路径{LM4-LM5-LM6-LM7-LM8},他们的部分调度路径如图4中的红色虚线所示。可以看到,在这种情形下,小车AB2,AB3和AB4的所有邻居均有其他小车,处于完全锁死的状态。小车AB1和AB5仍旧可以移动到其他没有小车停放的节点。(小车AB1可以被安排调度到LM3节点,小车AB5可以被安排调度到LM9节点)。我们随机选取小车AB1移动到其他节点来实现冲突消解。需要注意的是,尽管将AB1调度到LM3节点后,小车AB2的锁死状态解除(小车AB2所在的节点LM5的邻居节点位LM4没有小车),然而小车AB1在主干道节点LM3上,会制约AB2的进一步移动。因此,在调动小车AB1解冲突时,将其移动到最近的属性为AP的节点处。如图4所示,首先将AB1调度到最近的空闲AP节点处AP3,类似地,依次调度AB1到最近的空闲AP2节点,然后调动AB3到最近的空闲AP1节点,然后调动AB5到最近的空闲AP9,最后调动AB4到最近的空闲AP6,至此,冲突路径中不再有任何小车,冲突消解。此时所有忙碌小车的位置如图5所示。冲突消解的轨迹如图5中绿色虚线所示。随后,按照调离冲突路径的次序,依次让所有小车调离总共冲突路径,冲突消解。
对比传统的AGV调度算法,本发明提出了面向复杂工厂环境的带实时冲突消解的多AGV智能协同调度规划方法,本方法的特色之处是能够实现多辆AGV的并行任务调度安排和自适应的冲突消解,提升了工厂环境下多AGV小车的运输效率。本发明不仅通过冲突预测模块在路径规划时规避掉了大量的冲突,同时在某些不可预测的冲突发生时,能够自动的消解冲突,实现了多AGV调度***的自动化,智能化和高效化。
以上述依据本发明的理想实施例为启示,通过上述的说明内容,本领域技术人员完全可以在不偏离本发明技术思想的范围内,进行多样的变更以及修改。本发明的技术性范围并不局限于说明书上的内容,必须要根据权利要求书范围来确定其技术性范围。