发明内容
本发明的目的在于克服现有技术的不足,提供一种基于三维空间密集存储区域的多机器人路径规划方法,解决了移动机器人只能通过人工切换方法致使移动机器人跨楼层搬运时在电梯机器人口出现停顿、前后任务不衔接不连贯的问题。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于三维空间密集存储区域的多机器人路径规划方法,包括调度服务器内的主线程和并行执行的规划线程、避碰线程和执行线程,
所述的主线程包括以下步骤:
步骤1:主线程初始化一张三维立体网状路径图;
步骤2:主线程实时接收移动机器人当前位置的命令反馈信息,根据反馈信息实时更新三维网状立体路径图;
所述的规划线程包括以下步骤:
步骤1:规划线程检测到有存取货物任务时,获取起始点和目标点信息并将任务划分若干个子任务,每个子任务下又划分任务阶段,每个任务阶段又设有各自的起始点和目标点;
步骤2:规划线程根据子任务的起始点、目标点及输入参数使用图搜索法输出当前子任务的密集存储区域三维空间任务路径;
步骤3:规划线程判断该子任务目标点是否被上一个的任务释放掉,如果已经被释放,则进入步骤4,否则等待释放;
步骤4:规划线程标记每个任务路经;
步骤5:规划线程标记完所有任务路径后,将标记后的任务送入执行队列,返回步骤2;
所述的避碰线程包括以下步骤:
步骤1:避碰线程执行任务队列的各任务抢占资源变量;
步骤2:避碰线程根据当前环境信息划分冲突区;
步骤3:避碰线程判断冲突区是否释放干净,如果释放干净转入步骤4;如果没有释放干净,继续等待;
步骤4:避碰线程完成移动机器人和电梯机器人执行命令前的命令转义任务;
步骤5:避碰线程释放资源变量给调度服务器;
所述的执行线程包括以下步骤:
步骤1:执行线程到执行队列等待经过转义后的任务;
步骤2:执行线程判断是否有未发送出去的命令,如果有未发送命令,进入步骤3,如果没有未发送命令,返回步骤1;
步骤3:执行线程根据执行体类型的不同,划分阶段,每个阶段内最后一个命令为本阶段的阶段结束命令;
步骤4:判断上一阶段命令是否全部执行完成,如果完成,则发送当前阶段除阶段结束命令以外的其它命令,并且转入步骤5,如果上一阶段命令还未完成,执行步骤6;
步骤5:执行线程判断下一个任务阶段的机器人执行体,是否准备就绪,如果准备就绪,发送本阶段的阶段结束命令,并将下一阶段指定为当前阶段,转入步骤7;如果没有准备就绪,转入步骤6;
步骤6:将当前未完成的任务放回执行队列,并且返回步骤4;
步骤7:返回步骤1。
而且,所述建立初始化三维立体网状路径图的方法包括以下处理步骤:
⑴获得存储区域的存储位图纸;
⑵建立存储点:取每个存储位中心点作为存储点;
⑶建立路点:非存储区域与存储点区域大小相同的可行走区域的中心点作为路点,该路点包括巷道路点、车辆存取间路点、电梯机器人路点;
⑷建立连通性:将具有连通性的两个相邻点进行连线构成初始化网状路径图,所述的连通性包括同一个楼层的两个相邻存储点之间、存储点和路点之间以及不同楼层的电梯机器人路点之间。
而且,所述主线程实时接收移动机器人当前位置的命令反馈信息是包括:移动机器人每经过一个路点时反馈当前路点所在位置坐标(X、Y、Z),路点包括电梯机器人路点和存储层地面上的路点,其中,X、Y代表水平面坐标,Z代表楼层信息。
而且,所述密集存储区域三维空间路径包括由水平面内的线段和竖直面内的线段组成的路径。
而且,所述规划线程标记任务路经的方法为:使用携带行走方向以及排序特征的任务编号来标记每个任务路经;所述的行走方向可以是同一个水平面或竖直面的行走方向,也可以是既包括水平面也包括竖直面的行走方向;
而且,所述避碰线程的某个任务释放资源变量给调度服务器后,重新返回线程抢占资源变量,当这个任务再次获得资源变量后,根据此时变化的环境重新识别当前冲突区。
而且,所述执行线程的某个任务当给不同执行体发送命令后,这个任务还会重新返回线程开始处,获得更新后的该任务的转义命令,并根据更新后的该任务的转义命令重新给不同的执行体发送命令。
而且,所述的任务阶段,其相临两个任务阶段的机器人执行体是不同的:由地面上行走的机器人和竖直面内行走的电梯机器人分别执行各个阶段的任务。
而且,所述冲突区的划分方法为:将所有路点上被标记至少两个任务编号、以及行走方向相反的路点组合的区域划分为冲突区;所述冲突区包括由存储层地面路点和电梯机器人路点组成的冲突区。
本发明的优点和积极效果是:
1、本发明通过不同种类机器人接力操作、共同完成该任务行走路线的方法,实现了移动机器人和电梯机器人自动切换并且跨楼层任意存取货物的需求;解决了移动机器人一般只能在单层地面上行走、或只有通过人工切换方法才可以跨楼层行走,而不能自动切换到其它楼层行走的问题。
2、本发明将地面路点和电梯路点、地面坐标和楼层位置坐标、移动机器人和电梯机器人有机地结合为一个整体,共同构成一个由调度服务器实时控制机器人行走的三维网状路径,从而保证了移动机器人在各个楼层之间平滑地送货和取货的可能性,解决了由于人工切换方法致使机器人跨楼层搬运时在电梯机器入口出现停顿、前后任务不衔接不连贯的问题。
3、本发明通过主线程实时获取和更新环境、规划线程实时获取任务和实时规划路径、避碰线程实时更新冲突区、执行线程实时切换任务阶段和实时发送命令等手段,具有高效率、合理性、实时性等特点。
具体实施方式
以下结合附图对本发明实施例做进一步详述:
一种基于三维空间密集存储区域的多机器人路径规划方法所依据的路径规划条件是:(1)所述多机器人路径规划主要解决碰撞和冲突问题;(2)机器人执行体包括地面上行走的移动机器人和电梯机器人;(3)移动机器人的碰撞和冲突不仅来自水平面内的碰撞和冲突而且来自竖直面内的碰撞和冲突;(4)移动机器人的碰撞和冲突指的是由于相向而行而发生的任务死锁(在水平面内的相向而行和竖直面内的相向而行);(5)移动机器人组成了其它机器人成员的动态障碍;(6)移动机器人和调度服务器之间通过无线网络进行通讯。
如图1所示,一种基于三维空间密集存储区域的多机器人路径规划方法,包括调度服务器内的主线程和并行执行的规划线程、避碰线程和执行线程的协调处理方法。其中,所述的主线程包括以下步骤:
步骤1:调度服务器初始化一张三维立体网状路径图;
如图2至图5所示,初始化三维立体网状路径图的具体方法为:
①获得存储区域的存储位图纸;
②建立存储点:取每个存储位中心点作为存储点;
③建立路点:非存储区域与存储点区域大小相同的可行走区域的中心点作为路点。所述路点包括巷道路点、车辆存取间路点(图2中的5号标识、10号标识)、电梯机器人路点(图3中的61标识、61-1标识、61-2标识、66标识、66-1标识、66-2标识)。
④建立连通性:同一个楼层的两个相邻存储点之间、存储点和路点之间具有连通性;不同楼层的电梯机器人路点之间也具有连通性;
步骤2:调度服务器主线程实时接收移动机器人当前位置的命令反馈信息,根据反馈信息实时更新包括环境信息的三维网状立体路径图,主线程实时接收移动机器人当前位置的命令反馈信息是包括:移动机器人每经过一个路点时反馈当前路点所在位置坐标(X、Y、Z),路点包括电梯机器人路点和存储层地面上的路点。其中,X、Y代表水平面坐标,Z代表楼层信息:0、1、2分别代表一、二、三层楼。
所述的规划线程包括以下步骤:
步骤1:规划线程检测到有存取货物任务时,获取起始点和目标点信息并将任务划分若干个子任务,每个子任务下又划分任务阶段,每个任务阶段又设有各自的起始点和目标点;相临两个任务阶段的机器人执行体是不同的:由地面上行走的移动机器人和竖直面内行走的电梯机器人分别执行各个阶段的任务。
步骤2:规划线程根据子任务的起始点、目标点及输入参数使用图搜索法输出当前子任务的密集存储区域三维空间任务路径,如图6,密集存储区域三维空间路径包括由水平面内的线段(66-2、52-2、38-2、24-2、23-2)和竖直面内的线段(66、66-1、66-2)组成的路径;如图8,三位空间路径包括由水平面内的第一条线段(53-2、52-2、66-2)、竖直面内的线段(66-2、66-1、66)、水平面内的第二条线段(66、52、53)组成的路径;
步骤3:规划线程判断该子任务目标点(图6中,A任务目标点为23-2,图8中,B任务目标点为53)是否被上一个的任务释放掉,如果已经被释放,则进入步骤4,否则等待释放;
步骤4:规划线程使用携带行走方向以及排序特征的任务编号标记每个任务路经,所述的行走方向可以是同一个水平面或竖直面的行走方向,也可以是跨楼层的行走方向;
步骤5:规划线程标记完所有任务路径后,将标记后的任务送入执行队列,返回步骤2;
所述的避碰线程包括以下步骤:
步骤1:避碰线程执行任务队列的各任务抢占资源变量,所述各个任务抢占资源变量不只1次,而是循环抢占,直至任务结束:这是由于服务器主线程实时更新环境信息,所以需要不断根据变化的环境信息重新识别冲突区;
步骤2:避碰线程根据当前环境信息划分冲突区:将所有路点上被标记至少两个任务编号、以及行走方向相反(在水平面或电梯机器人空间的竖直面内)的路点组合的区域划分为冲突区;冲突区包括由存储层地面上的路点和电梯机器人路点组成的冲突区;
步骤3:避碰线程判断冲突区是否释放干净,如果释放干净转入步骤4;如果没有释放干净,继续等待;
步骤4:避碰线程完成移动机器人和电梯机器人执行命令前的命令转义任务;
步骤5:避碰线程释放资源变量给调度服务器。当释放资源变量给调度服务器后,还会重新返回线程抢占资源变量,当再次获得资源变量后,根据此时变化的环境重新识别当前冲突区。
所述的执行线程包括以下步骤:
步骤1:执行线程到执行队列等待经过转义后的任务,每次收到的转义后的命令可能是同一个任务的,但每次转义的内容可能不相同,这是由于同一个任务所处环境信息实时更新,冲突区实时更新、转义命令实时更新的缘故;
步骤2:执行线程判断是否有未发送出去的命令,如果有未发送命令,进入步骤3,如果没有未发送命令,返回步骤1;
步骤3:执行线程根据执行体类型的不同,划分阶段,每个阶段内最后一个命令为本阶段的阶段结束命令。
步骤4:判断上一阶段命令是否全部执行完成(包括阶段结束命令),如果完成,则发送当前阶段除阶段结束命令以外的其它命令,并且转入步骤5,如果上一阶段命令(包括阶段结束命令)还未完成,执行步骤6;
步骤5:执行线程判断下一个任务阶段的机器人执行体,是否准备就绪。如果准备就绪,发送本阶段的阶段结束命令,并将下一阶段指定为当前阶段,转入步骤7;如果没有准备就绪,转入步骤6;
步骤6:将当前未完成的任务放回执行队列,并且返回步骤4;
步骤7:返回步骤1。
下面以三层停车场为例,如图6至图9所示,调度服务器同时处理两个子任务(一个存车任务、一个取车任务)的详细处理过程:
步骤1、调度服务器规划线程接收任务并划分子任务:送货子任务(A任务)和取货子任务(B任务);
步骤2、调度服务器规划线程用图搜索法给这两个子任务输出路径,A任务输出路径为:10→24→38→52→66→66-1→66-2→52-2→38-2→24-2→23-2,其任务标记为:A1→A2→A3→A4→A5→A6→A7→A8→A9→A10→A11;B任务输出路径为:53-2→52-2→66-2→61-2→66→52→53,任务标记为B1→B2→B3→B4→B5→B6→B7;
步骤3、调度服务器规划线程判断这两个任务的目标点23-2,53都已经被释放;
步骤4、调度服务器规划线程将A、B任务放入执行队列;
步骤5、调度服务器避碰线程各个任务抢占资源变量;
步骤6、调度服务器避碰线程的A任务抢到了资源变量;
步骤7、调度服务器规划线程的A任务根据更新后的环境信息划分和识别当前冲突区,冲突区为52、66、66-1、66-2、52-2所包围的区域;
步骤8、调度服务器避碰线程的A任务获得A任务移动机器人距离冲突区的位置(A任务刚刚拿到资源变量时,A移动机器人初始位置在路点10),如果没有到达紧贴冲突区的前一个路点,(冲突去前一个路点在此例中其标识为38),则生成移动机器人行走路线转义命令给执行线程,进入步骤9;如果已经到达紧贴冲突区的前一个路点,则增加生成一个呼叫电梯机器人的转义命令给执行线程,并锁定这个冲突区,锁定期间,这个冲突区不能再被其它任务占用;
步骤9、调度服务器避碰线程的A任务释放资源变量给服务器,当释放资源变量给调度服务器后,还会重新返回线程的开始执行处,抢占资源变量,当再次获得资源变量后,根据此时变化的环境重新识别当前冲突区。并返回步骤5;
步骤10、调度服务器避碰线程的B任务抢到了资源变量;
步骤11、调度服务器规划线程的B任务根据更新后的环境信息划分和识别当前冲突区,由于没有第三个任务插入,因此,B任务和A任务所识别的是相同的,冲突区均为52、66、66-1、66-2、52-2所包围的区域,如果有第三个任务,并且该任务行走路径部分包括52、66、66-1、66-2、52-2组成的冲突区,则B任务此时所识别的冲突区将有别于A任务识别的冲突区;
步骤12、调度服务器避碰线程的B任务获得B任务移动机器人距离冲突区的位置(B任务刚刚拿到资源变量时,B移动机器人初始位置在路点53-2),如果没有到达紧贴冲突区的前一个路点,(冲突去前一个路点在此例中其标识为52-2),则生成移动机器人行走路线转义命令给执行线程,进入步骤9;如果已经到达紧贴冲突区的前一个路点,则增加生成一个呼叫电梯机器人的转义命令给执行线程,并锁定这个冲突区,锁定期间,这个冲突区不能再被其它任务占用;
步骤13、调度服务器避碰线程的B任务释放资源变量给服务器,并返回步骤5,当释放资源变量给调度服务器后,还会重新返回线程的开始执行处,抢占资源变量,当再次获得资源变量后,根据此时变化的环境重新识别当前冲突区。
下面以A子任务为例,说明执行线程的工作情况。
步骤14:执行线程的A任务获得转义后的命令;
步骤15:执行线程根据执行体类型的不同,划分阶段,每个阶段内最后一个命令为本阶段的阶段结束命令。A子任务的任务阶段分为3个任务阶段:路点:10、24、38、52、66为一段;路点:66、66-1、66-2为一段;路点:66-2、52-2、38-2、24-2、23-2为一段;第一段的最后一个命令是从52到66的命令;第二段的最后一个命令是从66-1到66-2的命令;
步骤16:判断上一阶段命令是否全部执行完成(包括阶段结束命令),如果完成,则发送当前阶段除阶段结束命令以外的其它命令,并且转入步骤17,如果上一阶段命令(包括阶段结束命令)还未完成,执行步骤18。假设A任务已经走完了第一段任务路程(路点:10、24、38、52、66),下面该走第二段任务路程,此时要判断上个阶段的最后1个命令,也就是52到66的命令是否完成,如果上个阶段最后1个命令完成,则发送66、66-1的命令(不包括66-1到66-2的命令),转入步骤17,如果上个阶段最后1个命令没完成,则转入步骤18;
步骤17:执行线程判断下一个任务阶段的机器人执行体,是否准备就绪。如果准备就绪,发送本阶段的阶段结束命令,并将下一阶段指定为当前阶段,转入步骤19;如果没有准备就绪,转入步骤18。以上所述的下一个阶段任务机器人执行体是移动机器人,执行路点66-2、52-2、38-2、24-2、23-2的任务,由于此实施例中移动机器人始终被电梯机器人携带,所以可以认为下一阶段机器人执行体已经准备就绪,于是执行线程发送当前阶段最后一个命令66-1到66-2的命令,也就是本阶段的阶段结束命令,并将下个(第三阶段)阶段(路点为:6-2、52-2、38-2、24-2、23-2)的任务作为当前任务(A任务执行第三阶段任务的方法可以以此类推),同时转入步骤19;
步骤18:将当前未完成的任务放回执行队列,并且返回步骤17;
步骤19:返回步骤14。
通过上述步骤即可实现基于三维空间密集存储区域的多机器人路径规划方法。
需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。