基于缓冲区的多移动机器人路径冲突解决方法
技术领域
本发明属于移动机器人领域,尤其是一种基于缓冲区的多移动机器人路径冲突解决方法。
背景技术
在利用多个移动机器人运输货物时,经常会发生移动机器人路径冲突的情况,所谓的移动机器人路经冲突就是指两个以上的移动机器人同时抢占同一个位置。解决多移动机器人路经冲突的方法一般有以下三种:交通规则法、速率调整法和优先级法。所谓交通规则法也称为红绿灯法,当遇到交叉路口时,用红绿灯控制行人对于交叉路口的通行。所谓速率调整法也是一种用于运动协调的方法,速率调整包括减缓速度、调整速度方向和停止运行,当两个移动机器人以相反的方向挤在一个狭窄的过道里,此时,可以通过一定的策略让一个移动机器人由前进方向改为倒退方向,退回到开阔的空间完成协调。所谓优先级法是预先设置所有人的优先级别,当冲突出现时,高优先级的人有权指挥低优先级的人让路,高优先级人的路径作为低优先级人路径规划时的障碍。
以上三种解决多移动机器人路经冲突的方法都有一个共同的特点,不论冲突区是大还是小,一旦冲突出现时,整个冲突区都将被占用。如果是交通规则法,将是整个交叉路口被占用;如果是速率法,也是整个狭窄的过道被占用;如果是优先级法,也是高优先级移动机器人的路经作为低优先级移动机器人路经的障碍,这样,当冲突区面积比较大时,一方长时间等待另一方,必然影响运行效率。
发明内容
本发明的目的在于克服现有技术的不足,提供一种设计合理、效率高且实现简便的基于缓冲区的多移动机器人路径冲突解决方法。
本发明解决其技术问题是采取以下技术方案实现的:
一种基于缓冲区的多移动机器人路径冲突解决方法,包括调度服务器内的主线程以及并行执行的规划线程、路段调度线程和执行线程,
所述的主线程包括以下步骤:
步骤A1:主线程初始化网状路径图;
步骤A2:主线程实时接收移动机器人当前位置的命令反馈信息,根据反馈信息实时更新网状路径图;
所述的规划线程包括以下步骤:
步骤B1:规划线程检测到有存取货物任务时,获取起始点和目标点信息并将任务划分若干个子任务,每个子任务又设有各自的起始点和目标点,每个子任务可以是空车移动子任务或负载移动子任务;
步骤B2:规划线程根据负载移动子任务的起始点、目标点及输入参数使用图搜索法输出当前子任务的密集存储区域任务路径;
步骤B3:规划线程判断该负载移动子任务目标点是否被上一个的任务释放掉,如果已经被释放,则进入步骤B4,否则等待释放;
步骤B4:规划线程使用携带移动机器人行走方向及排序特征的任务编号标记每个任务路经;
步骤B5:规划线程标记完所有任务路径后,将标记后的任务送入路段调度队列,返回步骤B2;
所述的路段调度线程包括以下步骤:
步骤C1:路段调度队列中的各个任务抢占资源变量;
步骤C2:当前任务路径是否全部分配完成,如果完成,删除当前任务;否则,转入步骤C3;
步骤C3:路段调度线程每隔一段时间获取机器人当前位置信息,根据信息判断是否进入下一个任务的临界区,如果还未进入下一个任务的临界区则返回步骤C3,如果已经进入下一个任务的临界区,则转入步骤C4;
步骤C4:当机器人进入临界区以后,路段调度线程探测路径前方是否找到带可用缓冲区的路段或是否到达终点;
步骤C5:路段调度线程根据探测结果,定义移动机器人可占用路段:
具体处理方法为:
⑴当探测前方有可用缓冲区,则定义移动机器人可占用路段为从当前起始点直到缓冲区或终点的全部路段,并转入路段调度线程的步骤C6;
⑵探测前方没有缓冲区且无障碍物的情况,则定义移动机器人可占用路段为从当前起始点到目标点的全部路段,并转入路段调度线程的步骤C6;
⑶探测前方没有可用缓冲区且前方有障碍物的情况,则定义移动机器人当前无可占用的路段,移动机器人必须停进缓冲区进行避让,并转入路段调度线程的步骤C4;
所述可用缓冲区为多个缓冲区连续排放时,定义移动机器人可占用路段的方法为:从当前点到连续缓冲区段中的任意一个缓冲区的全部路段;
所述的当前点为当前任务的起始点或者路径上的点,或是行驶路径中的上一个缓冲区;
步骤C6:将该任务加入到执行队列中,返回步骤C1;
所述的执行线程包括以下步骤:
步骤D1:执行线程完成移动机器人行走路线的转义命令;
步骤D2:执行队列等待转义后的命令;
步骤D3:判断是否有未发送出去的命令;
步骤D4:给移动机器人发送命令;
步骤D5:返回步骤D1。
而且,所述主线程建立初始化网状路径图的方法包括以下处理过程:
⑴获得密集存储区域的存储位图纸;
⑵建立存储点:取每个存储位中心点作为存储点;
⑶建立路点:在巷道上与存储点区域大小相同的可行走区域的中心点作为路点,该路点沿直线方向在与其姿态相同的临近路点区域以外;
⑷建立连通性:将具有连通性的两个相邻点进行连线构成初始化网状路径图。
而且,所述主线程接收到移动机器人当前位置的命令反馈信息后,立即释放上一个路点所在路段。
本发明的优点和积极效果是:
本发明将巷道两侧的空车位作为缓冲区并将缓冲区作为路段划分的终点,在每个路段的临界区进行探测,当移动机器人探测前方有障碍物时,停进缓冲区进行避让,当探测前方无障碍物时,越过缓冲区继续前行,做到了最小路段的占用,解决了现有技术中当多移动机器人发生路经冲突时,整个冲突区被占用、一方必须等待另一方完全走过冲突区才可以进入冲突区造成效率低的问题,提高了移动机器人运输的效率。
附图说明
图1是本发明的整体处理流程图;
图2是前方有缓冲区时通过多次抢占资源变量定义可占用路段的示意图;
图3是前方有缓冲区时定义可占用路段的示意图(未进入临界区的情况);
图4是前方有缓冲区时定义可占用路段的示意图(已经进入临界区的情况);
图5是前方有缓冲区时定义可占用路段的示意图(取最远的那个缓冲区);
图6是前方没有缓冲区时一次性占用路段到目标点的示意图;
图7是前方有障碍物时进入缓冲区1进行避让的示意图。
具体实施方式
以下结合附图对本发明实施例做进一步详述:
一种基于缓冲区的多移动机器人路径冲突解决方法,如图1所示,包括调度服务器内的主线程和并行执行的规划线程、路段调度线程和执行线程。其中:
所述的主线程包括以下步骤:
步骤A1:主线程初始化一张网状路径图;
在本步骤中,建立初始化网状路径图的方法包括以下处理过程:
⑴获得密集存储区域的存储位图纸;
⑵建立存储点:取每个存储位中心点作为存储点;
⑶建立路点:在巷道上与存储点区域大小相同的可行走区域的中心点作为路点,该路点沿直线方向在与其姿态相同的临近路点区域以外;
⑷建立连通性:将具有连通性的两个相邻点进行连线构成初始化网状路径图。
步骤A2:主线程实时接收移动机器人当前位置的命令反馈信息,根据反馈信息实时更新网状路径图。主线程在接收到移动机器人当前位置的命令反馈信息,立即释放上一个路点所在路段。
所述的规划线程包括以下步骤:
步骤B1:规划线程检测到有存取货物任务时,获取起始点和目标点信息并将任务划分若干个子任务,每个子任务又设有各自的起始点和目标点,每个子任务可以是空车移动子任务或负载移动子任务;
步骤B2:规划线程根据负载移动子任务的起始点、目标点及输入参数使用图搜索法输出当前子任务的密集存储区域任务路径;
步骤B3:规划线程判断该负载移动子任务目标点是否被上一个的任务释放掉,如果已经被释放,则进入步骤B4,否则等待释放;
步骤B4:规划线程使用携带移动机器人行走方向及排序特征的任务编号标记每个任务路经;
步骤B5:规划线程标记完所有任务路径后,将标记后的任务送入路段调度队列,返回步骤B2。
所述的路段调度线程包括以下步骤:
步骤C1:路段调度队列中的各个任务抢占资源变量;
在本步骤中,一个负载移动子任务执行过程中,根据实际情况往往需要多次抢占资源变量(该资源变量作为标识抢占资源的权利,谁先获得资源变量,谁就可以抢先占用路段,在本例中,给资源变量赋予真值或假值,例如0或1、Y或N、T或F)。如图2所示,该任务通过3次抢占资源变量获得了从起始点到终点的全部路段使用权:当规划线程把当前负载移动子任务放入路段调度线程时,该任务第1次抢占到了资源变量,此时移动机器人位于起始点;当移动机器人接近临界区1时(38号存储位附近),该任务第2次抢占到了资源变量;当移动机器人接近临界区2时(35号存储位附近)时,该任务第3次抢占到了资源变量,此时判断前方不再有可用缓冲区,并且无障碍物,并且前方即将到达目标点,此时,路段调度线程给服务器内置一个任务分配完成的标志,并将任务交给执行线程,然后释放资源变量,返回步骤C1。
所谓的临界区是:机器人即将走出缓冲区之前的一段距离为临界区,当判定机器人进入临界区时,路段调度线程开始再次判断前方带可用缓冲区的路段。
步骤C2:当前任务路径是否全部分配完成,如果完成,删除当前任务,如果没完成,转入步骤C3;
步骤C3:路段调度线程每隔一段时间(1秒)获取移动机器人当前位置信息,根据信息判断移动机器人是否进入下一个任务的临界区,如图3所示,当路段调度线程判断移动机器人还未进入临界区1时,循环返回步骤C3继续判断移动机器人当前位置;如图4所示,当路段调度线程判断移动机器人已经进入临界区1时,此时判断前方不再有可用缓冲区,并且无障碍物,并且前方即将到达目标点,此时,路段调度线程给服务器内置一个任务分配完成的标志,并将任务交给执行线程,然后释放资源变量,则转入步骤C4;
步骤C4:当机器人进入临界区以后,路段调度线程探测路径前方是否找到带可用缓冲区的路段或是否到达终点;
步骤C5:路段调度线程根据探测结果,定义移动机器人可占用路段:
⑴探测前方有可用缓冲区,则定义移动机器人可占用路段为从当前起始点直到缓冲区或终点的全部路段,转入步骤C6;
在这种情况下,探测前方有可用缓冲区,也就是说,找到带可用缓冲区的路段或已经到达终点,此时,定义移动机器人可占用路段为从当前起始点直到该可用缓冲区或终点的全部路段,如图2所示,当在起始点处第1次抢占资源变量时,探测前方38号空车位为第1个可用缓冲区,此时,服务器占用了从起始点到第1个缓冲区的路段,该路段被占用后,此任务就交给执行线程,由执行线程发命令给移动机器人,移动机器人开始行走。当移动机器人行走到图2中的第1个缓冲区的临界区1时,先暂时不进入第1个可用缓冲区,在临界区1处参加第2轮的抢占资源变量,当第2次抢到了资源变量时,继续探测前方路段,由于发现前方35号空车位还有第2个可用缓冲区,此时,服务器又占用了从临界区1以后到临界区2以前的全部路段,路段被占用后,为了提高效率,移动机器人将越过第1个缓冲区沿着原来的路线继续向前行走,并且将第2段任务交给执行线程,执行线程命令移动机器人继续行走第2段路程,当移动机器人行走到第2段路程的临界区2时,先暂时不进入缓冲区,参加第3轮的抢占资源变量,当第3次抢到了资源变量时,探测前方路段,由于发现前方既没有可用缓冲区,也没有障碍物,并且即将到达目标点,于是,路段调度线程向调度服务器发出一个任务已经完成的标志,并释放资源变量,返回步骤C1。同时,将任务交给执行线程时,执行线程命令移动机器人直接进入目标点,完成行走任务。
在探测前方有可用缓冲区的情况下,如果存在多个缓冲区连续排放时,定义移动机器人可占用路段的方法为:从当前点到连续缓冲区段中的任意一个缓冲区的全部路段,如图5所示,图中1、2、3为连续空车位作为连续的3个缓冲区,当定义第1个可占用路段时,为从起点到空车位3的全部路段。所述的当前点可以是当前任务的起始点或者路径上的点,也可以是行驶路径中的上一个缓冲区。
⑵探测前方没有缓冲区且无障碍物的情况(从当前起始点到目标点之间没有障碍物):则定义移动机器人可占用路段为从当前起始点到目标点的全部路段,转入步骤C6;
如图6所示,当前负载移动子任务在起始点处第1次抢占到了资源变量后,探测前方路段,此时,探测前方没找到带可用缓冲区的路段,并且前方也无障碍物(从当前起始点到目标点之间没有障碍物),则定义移动机器人可占用路段为从当前起始点到目标点的全部路段,并转入步骤C6,将该任务放入执行线程;
⑶探测前方没有可用缓冲区且前方有障碍物的情况(被其它移动机器人抢先占用):如果前方有障碍物(从当前起始点到目标点之间有障碍物),则定义移动机器人当前无可占用的路段,移动机器人必须停进缓冲区进行避让,返回步骤C4。
如图7所示,两个移动机器人相向而行,移动机器人1负载车辆从右到左,移动机器人2负载车辆从左到右,各自的任务终点也是对方的任务起点,移动机器人2抢先一步先得到资源变量,从起始点出发,并占用了从左侧起始点到临界区2的全部路段,当移动机器人1行驶到临界区1时,又抢先移动机器人1第2次抢占到了资源变量,探测前方路段,发现前方路段已经被移动机器人2占用,此时必须进入缓冲区进行避让,当移动机器人2走到移动机器人2的临界区2时,由于此时移动机器人1已经避让,子任务2探测前方到达终点途中没有障碍物,此时,占用了从临界区2以后一直到终点的全部路段,当移动机器人2到达终点时,移动机器人2向服务器反馈自己当前位置,并且释放了全部路段,位于缓冲区1的路段调用线程当再次获得资源变量探测前方时,发现障碍物已经被释放,并且前方还有第2个可用缓冲区,再次进行占用,同时,将任务再次放入执行线程,执行线程命令移动机器人1从第1个缓冲区移出沿着干道继续前进,当行进到移动机器人1的临界区2时,判断前方一直到终点之前都没有障碍物,于是,直接进入终点。
步骤C6:将该任务加入到执行队列中,返回步骤C1进行下一轮的抢占资源变量。
所述的执行线程包括以下步骤:
步骤D1:执行线程完成移动机器人行走路线的转义命令;
步骤D2:执行队列等待转义后的命令;
步骤D3:判断是否有未发送出去的命令;
步骤D4:给移动机器人发送命令;
步骤D5:返回步骤D1。
如图2所示,在本实施例中,分别3次进入执行线程,由执行线程发送机器人行走的命令,第1次进入执行线程执行从起始点到路段1的行走命令;第2次进入执行线程执行从临界区1到临界区2的行走命令;第3次进入执行线程执行从临界区2到目标终点的命令。
需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。