基于自学习蚁群算法的条形机器人路径规划方法
技术领域
本发明涉及一种基于自学习蚁群算法的条形机器人路径规划方法。
背景技术
蚁群算法是一种基于群智能的仿生算法,在科研和工程领域中有着广泛的应用。蚁群算法的基础是概率计算,这类计算方法不能保证每次计算一定得到最优解,但能够以较高的效率得到相对优的问题解。在精度要求不高的工程领域中,大部分情况下相对优的问题解是可以接受的,这也是蚁群算法得到广泛研究和应用的主要原因之一。
机器人路径规划是机器人领域的主要研究方向之一。已存在的各类基于栅格法环境建模的机器人路径规划方法中,移动机器人通常被建模为栅格地图中的某个单元格,机器人的具体外部形态不被考虑。如果考虑移动机器人的外部形态,已有的做法通常是对栅格地图中表示障碍物的单元格做膨胀处理。由于膨胀后的单元格被视为障碍物单元格,因此这样的做法虽然可以有效避免碰撞,但也会造成栅格密度低或可行单元格数量大幅减少,直接影响算法的计算效果。此外,基于蚁群算法的机器人路径规划方法中,蚁群算法较少具备自学习能力,因此算法的效率和稳定性都有待提高。
发明内容
针对上述问题,本发明的目的是:设计一种基于自学习蚁群算法的条形机器人路径规划方法,该方法针对蚁群算法计算过程做了改进,引入了自学习策略,对栅格法环境建模做了处理,所使用的栅格法使蚁群算法在无需对障碍物单元格膨胀处理的情况下处理条形机器人路径规划问题;路径计算方面,提供一种新的最短路径计算法,是在蚁群算法中融合机器学习的思想,并有效结合信息素、启发信息、正反馈、贪婪搜索等方法提高蚁群算法路径规划的效率,移动条形机器人根据自身外形完成穿越狭窄通道,以实现最短路径规划。
为实现上述目的,本发明采取以下技术解决方案:
步骤1、环境建模:将真实机器人工作空间转化为密度为m×n栅格地图,以实现计算机存储;在栅格地图中标记好可行单元格、障碍物单元格、出发点单元格S和目标点单元格T;
步骤2、初始化阶段:确定条形机器人的姿态;在栅格地图出发点单元格初始化一个规模为G的种群;初始化每个单元格的信息素为θ=1/(m×n);
步骤3、初始搜索阶段:当蚂蚁个体Anti行进至某一单元格时,将综合条形机器人的姿态信息和栅格地图中的障碍物信息建立可行域;当蚂蚁个体Anti的可行域中发现了目标单元格,则建立一条可行路径;当种群搜索到C条可行路径后,选出长度最短的一条作为算法当前最优解Pbest,计算C条可行路径长度的平均值Lave,初始搜索结束;
步骤4、全局更新栅格地图信息素阶段:根据生成的C条可行路径,使用贪婪选择策略,更新整个栅格地图信息素;
步骤5、自学习搜索阶段:对蚂蚁个体Anti,根据合条形机器人的姿态信息和栅格地图中的障碍物信息建立Anti的搜索域,通过自学习搜索,完成Anti的下一步行进单元格选择,当Anti的搜索域中发现目标单元格,则建立一条可行路径Pi;如果Pi路径长度Lpi小于当前路径平均长度Lave,则更新Lave,进一步更新Pi路径上单元格的信息素;如果Pi路径长度Lpi小于当前最优路径Pbest的长度Lpb,则更新Pbest;
步骤6、输出规划路径阶段:输出Pbest作为条形机器人的最终行进路径。
更具体地,所述步骤1的环境建模中,具体包括:将机器人工作空间,用m×n栅格建模,建模形成的地图称为栅格地图,并置于二维坐标系内;栅格地图中的单元格记为Bθ (x,y),这里(x,y)为单元格坐标,且有x=1,…,m和y=1,…,n;θ为单元格信息素浓度;为方便存储,在栅格地图中,可行单元格被标记为“1”,障碍物单元格被标记为“0”。
更具体地,所述步骤2的初始化阶段中,具体包括:将条形机器人姿态划分为0,π/2,π,3π/2,四种;其中0姿态表示条状机器人机器人姿态与坐标系X轴平行,且头向右;π姿态表示条状机器人机器人姿态与坐标系X轴平行,且头向左;π/2姿态表示条状机器人机器人姿态与坐标系Y轴平行,且头向上;3π/2姿态表示条状机器人机器人姿态与坐标系Y轴平行,且头向下;为了便于描述,接下来的叙述都以条状机器人姿态为π/2情况姿态为例,其余三个姿态的路径规划处理与该情况类似。
更具体地,所述步骤3的初始搜索阶段中,具体包括:记录Anti当前行进的路径为一个禁忌栈Pi={pi 1,pi 2,pi 3,…pi t},其中代表栅格地图中的单元格,pi 1是出发点单元格S,pi t是Anti当前所在单元格;所谓禁忌栈是指Pi的第t+1个单元格pi t+1只许从栈顶pi t插入且不允许与栈中已有单元格重复;综合条形机器人的姿态信息和栅格地图中的障碍物信息建在pt周围计算可行域Fi;以姿态π/2为例,第pi t+1个单元格的选择包括如下步骤:
(1)计算出pt周围临近的九个单元格中,除pt-1以外的可行单元格;Pi为禁忌栈不能有重复单元格,因此pt-1不被作为下一步行进单元格;
(2)根据条形机器人的姿态进一步筛选单元格;以三单元格描述条形机器人为例,假设机器人的姿态为π/2,如坐标为(x,y)的单元格B(x,y)为pt周围的可行单元格,并且B(x ,y+1)和B(x,y+2)也为可行单元格,则B(x,y)被加入到Anti的可行域Fi;
(3)在可行域Fi选择第pt+1个单元格,通过如下公式:
上面公式中表示表示蚂蚁个体Anti第t步时候所生成的可行域;表示使用贪婪策略,在中选择一个离目标点单元格T直线距离最近的单元格;表示从中随机选择一个单元格;r0为[0,1]上均匀分布的随机数,每次计算r0被重新生成;
(4)对于Anti如果中存在目标单元格T,则算法发现一条可行路径;当整个总群搜索到C条可行路径后,选出一条距离最短的可行路径作为Pbest,并计算C条可行路径的平均路径长度Lave。
更具体地,所述步骤4的使用贪婪选择策略更新整个栅格地图的信息素中,具体包括:将搜索到的C条路径的每条路径长度值取倒数,该倒数值作为每条路径沿途所经过的单元格的信息素值,如果多条路径经过同一个单元格,则通过贪婪选择策略,选则路径长度倒数值最大的作为该单元格信息素值。
更具体地,所述步骤5的自学习搜索阶段中,具体包括:种群中蚂蚁个体Anti执行自学习搜索;自学习搜索阶段Anti建立可行域的过程与发现可行路径的过程同步骤3类似;自学习搜索阶段Anti将通过自学习的方法完成下一步单元格选择:
r1为[0,1]上均匀分布的随机数,每次计算r1被重新生成,自学习方式的具体搜索过程如下:
(1)当0≤r1≤0.7时,执行自学习搜索,表示Anti在可行域中通过自学习的方式选择信息素最大的单元格作为pt+1;
(2)当0.7<r1≤0.9时,执行贪婪搜索,表示Anti在可行域中选择距离目标单元格T直线距离最近的单元格作为pt+1;
(3)当0.9<r1≤1时,执行随机搜索,表示Anti在可行域中随机选择一个单元格作为pt+1;
如果Pi路径长Lpi度小于当前路径平均长度Lave,则更新Lave,公式为:
Lave=(Lpi+Lave)/2
进一步更新Pi路径上单元格的信息素,公式为:
θ(x,y)=min{θ(x,y),1/Lpi}
如果Pi路径长Lpi小于当前最优路径Pbest的长度Lpb,则更新Lpb和当前最优路径Pbest,公式为:
Lpb=min{Lpb,Lpi}
Pbest=Opt{Pbest,Pi}。
本发明具有以下优点:
(1)改变传统栅格建模方法,实现条形机器人在栅格地图中多格描述,相较于膨胀单元格的方法处理条形机器人路径规划,同等条件下增加了可行单元格数量和栅格地图单元格密度。
(2)将蚂蚁个体搜索到的路径长度倒数作为栅格信息素值,实现了蚁群算法的正反馈思想;某一蚂蚁搜索到某条可行路径长度小于当前搜索到路径的平均值Lave,则路径上的单元格信息素值可能被更新;因此,整个栅格地图的信息素分布处于实时地动态更新中。
(3)自学习搜索阶段,蚂蚁个体将以一定概率,机动地执行贪婪搜索、自学习搜索和随机搜索,执行自学习搜索的概率高于贪婪搜索和随机搜索,这样的设计使算法在具备确定性的同时也具备一定的随机性,符合概率搜索思想。
(4)自学习搜索是以栅格地图中的信息素作为判断依据,使蚂蚁个体通过修正当前的最优路径得到更优路径,信息素的更新本质上是整个蚁群搜索经验积累,蚁群个体通过信息素相互沟通,使得整个算法具备自学习能力。
(5)上述策略的使用,最终使得条形机器人高效率的搜索到最优或相对最优的可行路径,必要时根据自身形态和周围障碍物的信息以穿越狭窄通道的形式实现路径规划。
附图说明
图1是本发明所提供算法的总体流程;
图2是算法建模生成栅格地图的过程;
图3是条形机器人的四种姿态;
图4是条形机器人生成可行域的过程;
图5是算法初始搜索流程;
图6是算法自学习搜索流程;
具体实施方式
下面结合附图和实施例,对本发明的技术方案进行详细地说明,但不应理解为是对技术方案的限制。在下文的描述中,给出了大量具体细节以便对本发明更为彻底的理解。然而,对于本领域技术人员而言,本发明可以无需一个或多个这些细节而得以实施。在其它的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。
图1给出了本发明机器人路径规划方法的总体流程,请参见图1,下面是对方法中各个步骤的详细描述。
步骤S101:对工作空间建模,生成m×n栅格地图,实现计算机存储;栅格地图中的单元格记为Bθ (x,y),这里(x,y)为单元格坐标,且有x=1,…,m和y=1,…,n;如图2所示:栅格地图中标记起点100(用符号S表示),障碍物单元格200(标记为0),可行单300元格(标记为1)和终点400(用符号T表示);
步骤S102:如图3所示,条形机器人的姿态包括:0(500)、π/2(600)、π(700)和3π/2(800);确定条形机器人的姿态(本实施例以π/2为例),起点100初始化一个规模为G的种群,所有单元格信息素初始化为:θ(x,y)=1/(m×n),这里x=1,…,m且y=1,…,n;
步骤S103:种群中蚂蚁个体搜索,如图4所示,当蚂蚁个体行进至某一单元格时,将综合条形机器人的姿态信息和栅格地图中的障碍物信息建立可行域900;当种群中第i只蚂蚁Anti的可行域中发现了目标单元格,则建立一条可行路径;当种群搜索到C条可行路径后,选出长度最短的一条作为算法当前最优解Pbest,计算C条可行路径长度的平均值Lave,初始搜索结束;
步骤S104:根据生成的C条可行路径,使用贪婪选择策略,更新整个栅格地图的信息素;具体做法为:将所发现的C条路径,每条路径的径长度值取倒数,作为每条路径沿途所经过的单元格的信息素值,如果多条路径经过同一个单元格,则通过贪婪选择策略,选择路径长度倒数值最大的作为该单元格信息素;
步骤S105:完成种群的自学习搜索,根据发现的路径不断更新信息素和Pbest;种群中的蚂蚁个体Anti,根据合条形机器人的姿态信息和栅格地图中的障碍物信息建立Anti的可行域900,通过自学习搜索,完成Anti的下一步行进单元格选择,当Anti的搜索域中发现目标单元格,则建立一条可行路径Pi;如果Pi路径长Lpi度小于当前路径平均长度Lave,则更新Lave,公式为:
Lave=(Lpi+Lave)/2 (1)
进一步更新Pi路径上单元格的信息素,公式为:
θ(x,y)=min{θ(x,y),1/Lpi} (2)
如果Pi路径长Lpi小于当前最优路径Pbest的长度Lpb,则更新Lpb和当前最优路径Pbest,公式为:
Lpb=min{Lpb,Lpi} (3)
Pbest=Opt{Pbest,Pi} (4);
S106:判断算法执行是否达到结束条件;算法结束条件为:生成的Pbest满足要求或算法迭代次数达到预定值;如果达到,则执行S107;否则,执行S105;
S107:输出Pbest作为真实机器人最终规划路径。
下面结合图5的流程,对初始搜索阶段步骤S103进行详细描述:
S201:设置循环控制变量i=0;
S202:循环控制变量i自增1;
S203:判断i是否小于总群规模G,如果i≤G,则执行S204;否则,执行S201;
S204:总群中第i只蚂蚁Anti根据初始搜索策略,向前行进一步;记录Anti当前行进的路径为一个禁忌栈Pi={pi 1,pi 2,pi 3,…pi t},其中代表栅格地图中的单元格,pi 1是出发点单元格100,pi t是Anti当前所在单元格;所谓禁忌栈是指Pi的第t+1个单元格pi t +1只许从栈顶pi t插入且不允许与栈中已有单元格重复;综合条形机器人的姿态信息和栅格地图中的障碍物信息建在pt周围计算可行域Fi;以姿态π/2为例,第pi t+1个单元格的选择包括如下步骤:
(1)计算出pt周围临近的九个单元格中,除pt-1以外的可行单元格(Pi为禁忌栈不能有重复单元格,因此pt-1不被作为下一步行进单元格);
(2)根据条形机器人的姿态进一步筛选单元格;以三单元格描述条形机器人为例,假设机器人的姿态为π/2,如坐标为(x,y)的单元格B(x,y)为pt周围的可行单元格,并且B(x ,y+1)和B(x,y+2)也为可行单元格,则B(x,y)被加入到Anti的可行域Fi;
(3)在可行域Fi选择第pt+1个单元格,通过如下公式:
上面公式中表示表示蚂蚁个体Anti第t步时候所生成的可行域;表示使用贪婪策略,在中选择一个离目标点单元格T直线距离最近的单元格;表示从中随机选择一个单元格;r0为[0,1]上均匀分布的随机数,每次计算随机数r0被重新生成;
S205:判断Anti可行域中是否存在目标单元格;如果Anti可行域中存在目标单元格,则执行S206;否则,执行S202;
S206:建立一条可行路径被Pi记录,并且Anti返回初始单元格位置;
S207:判断记录的可行路径数量是否达到C条;如果可行路径数量达到C条,则执行S208;否则,执行S202;
S208:根据C条可行路径,选出最优的一条被Pbest记录;
S209:根据发现的C条可行路径,计算所有可行路径的平均距离Lave。
下面结合图6的流程,对种群的自学习搜索阶段步骤S105进行详细描述:
S301:设置循环控制变量i=0;
S302:循环控制变量i自增1;
S303:判断i是否小于总群规模G;如果i≤G,则执行S304;否则,执行S301;
S304:Anti根据自学习搜索策略,向前行进一步;蚂蚁个体Anti,根据合条形机器人的姿态信息和栅格地图中的障碍物信息建立Anti的搜索域,通过自学习搜索,完成Anti的下一步行进单元格选择;自学习搜索过程描述如下:
上式中,r1为[0,1]上均匀分布的随机数,每次计算r1被重新生成,自学习方式的具体搜索过程如下:
(1)当0≤r1≤0.7时,执行自学习搜索,表示Anti在可行域中通过自学习的方式选择信息素最大的单元格作为p t+1;
(2)当0.7<r1≤0.9时,执行贪婪搜索,表示Anti在可行域中选择距离目标单元格T直线距离最近的单元格作为p t+1;
(3)当0.9<r1≤1时,执行随机搜索,表示Anti在可行域中随机选择一个单元格作为p t+1;
S305:判断第i只蚂蚁Anti是否发现目标单元格;如果Anti发现目标单元格,则执行S306;否则,执行S302;
S306:第i只蚂蚁Anti建立一条可行路径Pi,Anti返回初始位置单元格S;
S307:判断Pi的路径长度Lpi是否小于算法记录的平均路径长度Lave;如果小于,则执行S308;否则,执行S302;
S308:更新发现的可行路径所经过的单元格信息素为θ(x,y)=1/Lpi;
S309:重新计算Lave,计算公式为:
Lave=(Lpi+Lave)/2 (7)
S310:用Pi更新当前最优路径Pbest
Pbest=Opt{Pbest,Pi} (8)。