王建军,王金鑫,张晨,李翠明
(兰州理工大学机电工程学院,甘肃 兰州 730050)
我国西北地区拥有丰富的太阳能资源,近些年,国家在西北地区大力发展光伏发电项目[1]。但西北地区扬尘严重,沙尘附着在光伏组件表面造成发电量减少,进而形成“热岛效应”破坏光伏组件,严重影响光伏组件的使用寿命,利用自主移动清洁机器人及时清洁光伏组件表面至关重要。为降低清洁成本,提高清洁效率,需要在全覆盖清洁的基础上优先清洁安装在风口位置积灰严重的光伏组件,为此,需要规划出一条清洁机器人从起始位置到风口位置光伏组件的最优无碰撞路径;同时基于地形识别结果,机器人可根据规划出的最优无碰撞路径及时地重新调整清洁作业路线,避免规划不当的路线导致机器人浪费太多的能量,甚至丧失机动性。
目前,静态环境下常用的路径规划算法包括A* 算法[2],粒子群算法[3],遗传算法[4],蚁群算法[5]等。其中蚁群算法具有强鲁棒性和正反馈机制的优点,受到了专家学者的广泛关注。但由于算法本身存在收敛速度慢,易陷入局部最优等缺陷[6],针对不同问题改进的蚁群算法被广泛提出。文献[7]引入A*算法的估价函数,对蚁群算法启发函数进行调整,降低算法陷入局部最优解的概率。文献[8]通过候选点到目标点的距离动态调整启发函数,提高算法收敛速度。文献[9]运用A*算法确定蚁群初始信息素的设置,从而提高算法收敛速度。
光伏电站的全局静态环境先验信息可以通过遥感卫星系统等方式获得[10]。针对实际环境中存在不确定性的障碍物,需要研究更高效实时的算法,以降低清洁机器人与障碍物发生碰撞的可能性[11,12]。目前,国内外对于移动机器人在动态环境下的路径规划方法方面的研究已经取得了一定的进展。文献[13]针对机器人在动态环境下的路径规划提出了正面碰撞和侧面碰撞两种策略。文献[14]针对动态障碍物的速度和大小,提出三种不同的避障策略。但由于实际光伏电站中狭长地带较多,上述文献采取的策略常常会失效。
针对清洁机器人对风口位置光伏组件清洁作业时的路径规划问题,本文提出一种基于改进A*蚁群系统算法的路径规划新方法。首先,运用改进估价函数的A*算法,通过较小的工作量优化生成蚁群初始信息素,以解决蚁群系统(ACS)算法初次搜索的盲目性。其次,设计群体返巢搜索策略和分区惩罚因子,分别用于提高ACS 算法的收敛速度和减小后续蚂蚁死锁的概率。最后,机器人沿着静态环境先验信息规划出的最优路径移动时,结合自带传感器获取到的动态障碍物信息,实施不同的防碰撞策略,使机器人能够有效躲避障碍直至到达目标位置。
考虑到光伏组件的排列结构(见图1),本文采用栅格法[15]对环境进行抽象建模,将可行栅格在栅格地图上由白色块表示,障碍栅格由黑色块表示,栅格长度l 定义为
图1 某光伏电站的实际场景
式中 δ--安全距离
R--机器人半径
r--太阳能板长宽的最大值
以栅格地图右下角为原点,栅格长度l 为单位长度,从左到右为x 轴正方向,从下到上设为y轴正方向,建立平面直角坐标系。
为了研究的方便,对清洁机器人及其工作环境信息作出如下假设:
(1)光伏电站的全局静态信息与清洁机器人起始点和目标点的信息已知。
(2) 环境中存在动态障碍物做匀速直线运动,但障碍物方向、速度和大小未知。
(3)移动机器人通过自带的传感器,能够感知检测范围内动态障碍物的方向、速度和大小。
(4)由于栅格法建模时,栅格长度l 已考虑了清洁机器人的大小,因此通过全局静态信息规划路径时,移动机器人可以视为质点;但躲避动态障碍物时,由于障碍物的大小会对避开障碍物产生较大影响,此时需要考虑机器人自身的大小。
(5)移动机器人能够计算在某位置处沿着本文算法规划出的路径到达目标点的距离。
由于初始信息素均匀分布,导致ACS 算法初次搜索的盲目性。文献[9]提出运用A*算法设置蚁群初始信息素以解决此问题,但其忽视了A*算法启发信息的恰当控制,导致A*算法搜索较多栅格,加大了算法的工作量。本文采用改进估价函数的A*算法,根据不同环境选取权重系数,使A*算法搜索工作量减小的同时获得较优的蚁群初始信息素。
A*算法结合了BFS 算法和Dijkstra 算法,进行启发式搜索[16]。本文将A* 算法估价函数重新定义为
式中 f(n)--从初始点到目标点的估价函数
g(n)--初始点到当前点的实际距离
h(n)--当前点到目标点的估计距离
x--自变量,x 的取值范围是[0,+∞)
公式(2)中当自变量x 增大,h(n)的权重比例减小,f(n)的启发信息减弱,规划的路径质量提高但算法搜索工作量增加;当x 减小,h(n)的权重比例增大,f(n)的启发信息增强,减少了路径搜索的工作量但规划的路径质量较差。
本文通过调整自变量x 控制启发信息的强度,运用较小的A*算法搜索工作量即可获得较优的路径质量。将A*算法得到的路径记为RA,这条路径上信息素设置为
式中 k--信息素放大倍数,且k>1。
蚂蚁初始搜索时信息素τ1=τ0+τ(RA)。
3.2.1 群体返巢搜索策略
为了加大蚂蚁的重复利用率,提高ACS 算法的收敛速度,文献[17]将单个蚂蚁的一次迭代中增加了从目标点返回初始点这一过程。这虽然提高了蚁群算法的收敛速度,但使得在相同的迭代次数下,算法搜索工作量是原先的两倍,并且文献[17]也未考虑蚂蚁陷入死锁后是否能够返回初始点。
在实际的觅食过程中,蚂蚁到达目标点发现食物后,携带食物返回巢穴并通知其它蚂蚁,在食物运输到巢穴的过程中会释放额外的气味。本文基于ACS 算法,结合蚂蚁实际觅食,提出群体返巢搜索策略。蚂蚁从初始点出发,搜索目标点并沿途进行局部信息素更新。当蚂蚁陷入死锁或到达目标点,则表示该只搜索完成,之后进行下一只蚂蚁搜索。等到本波次所有蚂蚁搜索完成后,进行全局信息素更新并记做算法一次迭代完成。只有到达目标点的蚂蚁,才可以进行目标点出发搜索回初始点的第二次算法迭代。蚂蚁沿途进行局部信息素更新,当所有可行的蚂蚁返回初始点后进行ACS 算法全局信息素更新,并记为算法的第二次迭代完成。每次从初始点开始搜索时,重新生成蚂蚁。蚂蚁群体返巢策略示意如图2 所示。在蚂蚁群体返巢过程中,因为食物在沿途释放气味,所以需要将ACS 算法中局部信息素更新公式改为
图2 蚂蚁群体返巢搜索策略示意图
式中 Δτf--食物信息素增量
蚂蚁在返回巢穴后,判断搜索和返巢这两次算法迭代中是否为相同的蚂蚁搜索路径最优,如果是的话,对这些蚂蚁进行一次额外的信息素更新。
式中 ω--额外增量系数
通过蚂蚁搜索波次和返巢波次信息素差异化设置,防止蚂蚁返巢时沿着搜索波次相同的路径行走。在算法相同迭代次数下,采用群体返巢策略后,减少了蚂蚁反向搜索增加的算法搜索工作量,增加了蚂蚁的重复利用率并且提高了ACS算法的收敛速度。
3.2.2 自适应进化机制
在ACS 算法中蚂蚁选择下一个点j 时采用由参数q0控制的伪随机比率规则。本文改进蚁群系统算法,通过参数q0与随机数q1、q2的比较结果来选择不同的比率规则
设置停止门限N,当最优路径长度连续N 波数不变时,此时算法极有可能陷入局部最优,为防止此情况发生,通过式(7)调节q0值。
式中 μ--可调参数,且μ∈(0,1)
根据公式(7)可知,参数q0越小,蚂蚁通过随机的方式选择下一个点j 的可能性增大,以此提高蚂蚁对环境的搜索力度。
公式(6)中,启发函数ηij(t)表示边(i,j)的能见度,ACS 算法中启发函数表达式为
此时ηij(t)仅考虑点i 到可行点j 的距离,没有考虑到点j 到目标点G 的距离因素。因此造成蚂蚁在选择下一个点时,容易选择距离点i 较近的点j,从而忽视了全局最优的情况。因此需要对启发函数ηij(t)进行改进。首先,由式(9)计算出可行点j 到目标点G 的欧式距离djG
其次,将djG由大到小,以序号n=1,2,3,4,…的方式依次排列(若djG大小相等时,序号n 也相同)。由于候选点的选择最多有8 个,故n 的最大值为8。然后,将得到的n 值带入公式(10)求出点j 对应的势能
由式(10)可知可行点j 到目标G 点距离越近(即序号n 增大),j 对应的势能E 减小。并且势能E 减小的速度随着序号n 的增大而加快,借此扩大最优点与较优点之间的差异。最后,改进后的启发函数ηij(t)为
采用自适应进化机制后,可以增加全局信息的使用比例,从而提高获得全局最优解的概率。当算法陷入停滞时,通过减小q0值,加大算法的随机性,提高蚂蚁搜索力度防止算法陷入局部最优。
3.2.3 分区惩罚因子
蚂蚁算法在搜索过程中,易受到障碍物分布的影响,使得在环境复杂时蚂蚁经常找不到目标点而陷入死锁。但在ACS 算法中,蚂蚁每经过边(i,j)时都将调用局部更新策略,这导致了陷入死锁的蚂蚁也会进行正常的局部信息素更新,降低了后续蚂蚁陷入死锁的概率。现如今,很多改进蚁群算法仅仅针对死锁蚂蚁所在的整条路径采用惩罚函数进行处理。但在绝大多数情况下,死锁的蚂蚁走过的路径中既包含了较差路段也包含了优秀路段。如果仅对整条路径进行处理,这造成了优秀路段的信息素一并减少,严重影响了ACS 算法的收敛速度。
本文提出一种根据优秀路段存在的可能性进行分区惩罚的方式,区域划分示意图如图3 所示,虚线为运用3.2 小节改进A*算法生成的RA。将初始区域和目标区域设成核心区域,离目标点和初始点较远的两个顶角区域设为非核心区域,中间地带视为重要区域。地图区域划分后,将蚂蚁死锁时信息素处理过程分为两步。首先,将死锁的蚂蚁局部信息素增量消除,同时保证正常的信息素挥发;其次,引入分区惩罚因子,对死锁蚂蚁行走路线的不同区域路段进行信息素惩罚。
图3 区域划分示意图
式中 λe--分区惩罚因子
ξ--局部信息素挥发系数
核心区域λe1,非核心区域λe2=0.5λe1,重要区域λe3=0.9λe1
由式(12)可知运用分区惩罚因子后,当蚂蚁死锁时,将非核心区域路段的信息素浓度大幅下降,以防止后续的蚂蚁再次陷入此区域;将重要区域路段进行较小的信息素下降,与此同时核心区域路段只进行正常的信息素挥发,以此防止惩罚因子造成的优秀路段信息素浓度大幅减小。
改进A*蚁群算法具体的算法流程如下:
Step1 初始化工作空间以及算法的参数。
Step2 运用改进A*算法进行蚁群系统算法初始信息素浓度的设置。
Step3 蚂蚁根据公式(6)选择下一个点,并进行局部信息素更新。重复此操作,直至蚂蚁达到目标点或处于死锁状态。若蚂蚁达到目标点,则直接进入Step4;若蚂蚁陷入死锁状态,调用公式(12)进行惩罚,之后进入Step4。
Step4 判断是否走完本波次所有蚂蚁,如果是,则进入Step5,否则继续执行Step3。
Step5 找到该波次路程最短的蚂蚁,之后进行全局信息素更新。若最短路径长度连续N 波没有发生改变,则调用公式(7)来加大蚂蚁搜索力度,之后进入Step6;若未达到N 次,则直接进入Step6。
Step6 判断蚁群是否已返回初始点,若没有,则将初始点设为目标点,执行群体返巢策略,之后返回Step3;若蚁群已经返回初始点,则进行额外的全局信息素更新并重新产生蚂蚁,之后进入Step7。
Step7 判断是否达到最大波次,如果是,则输出最优路径,否则执行Step3。
光伏电站中,不仅存在动态障碍物,而且西北地区气候恶劣,该地区光伏电站中多为泥泞的非结构化道路,使得在沙尘暴或暴雨后,道路中常常会出现水坑、碎石等障碍物。因此,清洁机器人仅沿着静态全局先验信息规划出的最优路径行走,而不采取避开障碍物的策略,发生碰撞事故的概率大大增加,降低了清洁机器人的实用性。光伏电站中,机器人行走的道路多为狭长地带,但现如今所提出的避开障碍物的策略少有提及机器人在陷入狭长地带时如何避开障碍物,且大部分都是在障碍物和机器人大小相同的基础上进行,鲜有障碍物大小不同时对移动机器人避开障碍物造成的影响进行讨论的。
在本文路径规划方法中,机器人首先从起始点出发沿着H 行进,机器人路径坐标集合记为P,P={pt1,pt2,pt3,…,ptn}。在传感器检测范围内,机器人能够预测与障碍物相碰撞的点并预测障碍物的运动路径,障碍物路径坐标集合记为B,B={bti,bti+1,…,bti+m}。当集合P 与集合B 中有元素在t 时刻相同或移动机器人与障碍物的欧氏距离小于规定距离时,判断机器人将受到障碍物影响。针对光伏电站的场景,根据障碍物的不同特点,设计如下几条防碰撞策略。
策略1:当机器人在感知范围内察觉到障碍物集合B 为定值且继续沿着H 会受其影响时,则将该障碍物暂时设置成障碍物栅格,重新规划到目标点的路径。
策略2:当B 不为定值时,机器人判断之后是否可以一直沿着H。若可以,则将集合B 和集合P 中t 时刻相同的元素错开,即机器人到达碰撞点前一格,通过暂时停止运动躲避障碍物。并且传感器实时检测,等到障碍物完全通过碰撞点后,机器人继续沿着H 行走。
策略3:当B 不为定值,并且继续沿着H 会受其影响时,机器人检测障碍物大小,若障碍物比机器人大或速度比机器人快,则检测周围有哪些可以在碰撞前到达的安全位置。之后机器人以各个安全点到达目标点的路径距离为依据,进行安全点的选择(距离相同时,优先选取与障碍物距离较远的安全点)。机器人移动到该安全点后重新规划路径。
策略4:当B 不为定值,并且继续沿着H 会受其影响,检测到障碍物速度和半径不大于移动机器人时,采用文献[13]策略,将预测的碰撞点视为障碍物栅格,机器人将碰撞点前一格设为局部初始点,并在H 上确定局部目标点,为机器人重新规划一条局部无碰撞路径。机器人达到局部目标点后,继续沿着H 行走。
策略5:当机器人采用上述策,略局部路径规划均不成功时,判断机器人已经陷入狭长地带。机器人必须根据走过的路径集合P 回退,并实时判断是否可以通过策略2~策略4 进行避障。当机器人判断成功时,随即在后退位置采取相应策略。
为了验证本文所提出的路径规划方法的效果,在CPU 赛扬N3150,内存4G 的Win8.1 操作平台上,使用MATLAB 2016a 软件从以下两方面进行仿真实验:
(1)验证改进A*蚁群系统算法的性能。
(2)验证本文所提方法的可行性。
本文算法实验参数如下:蚂蚁数目m=20,信息素启发因子α=1,能见度启发因子β=8,局部挥发系数ξ=0.1,全局挥发系数ρ=0.1,最大迭代次数NCmax=200,信息素放大倍数k=4,核心区域惩罚因子λe1=1。
5.1.1 与ACS 算法的比较
环境1 是一张模拟实际光伏电站的20×20栅格地图。本文提出的改进A*蚁群系统算法中估价函数自变量x=0.2。ACS 算法与本文算法搜索最优路径长度对比和算法收敛曲线对比分别如图4、图5 所示(用最短路径为100 来表示算法某次迭代中所有蚂蚁均没有找到目标点),运行20 次的结果见表1 环境1。
表1 算法仿真结果表
图4 环境1 中算法全局路径对比图
图5 环境1 中算法收敛曲线对比图
从图4 可以看出,本文算法和ACS 算法相比,在遇到凹型障碍物时,算法不易陷入局部最优。由图5 可以看出,ACS 算法初次搜索的盲目搜索性导致了在前两次算法迭代中两波蚂蚁均没有找到目标点 (即图5 中ACS 算法前两次最小路径长度为100)。本文算法运用改进A* 算法调整ACS 算法初始信息素的分布后,有效地解决了ACS 算法初次搜索的盲目性问题。
由表1 环境1 对比可知,本文算法得到的最优路径长度和平均路径长度都明显优于ACS 算法,分别减少了1.6566 和4.782。环境1 实验表明,环境1 实验表明,本文算法和ACS 算法相比,在最优路径的质量、算法收敛性和稳定性上都具有明显的优势。
5.1.2 与其他改进ACS 算法的比较
为了进一步验证本文算法的性能,将本文算法与文献[8]中基于启发式机制的改进ACS 算法进行比较。环境2 是文献[8]中一张在起始点和终止点处存在凹型陷阱的20×20 栅格地图。文献[8]与本文算法在环境2 下的全局最优路径对比和算法收敛曲线对比分别如图6、图7 所示,运行50 次的结果如表1 环境2 所示。本文算法自变量x=0.2。
图6 环境2 中算法全局路径对比图
图7 环境2 中算法收敛曲线对比图
由表1 环境2 可知,两种算法都可以找到最短路径,但本文算法平均路径较文献[8]算法减少了0.3649。文献[8]算法需要38 代达到收敛,本文算法仅需要11 代达到收敛,较文献[8]算法减少了71%;文献[8] 算法最优路径总转折角度为720°,本文算法最优路径总转折角度为585°,本文算法转折角度相对减少了19%。
和环境2 相比,环境3 是文献[8]中一张地图更大且障碍物较多的50×50 栅格地图。由于环境3 地图较大障碍物较多,本文算法选取自变量x=0.4。文献[8]算法和本文算法最优全局路径对比如图8 所示,仿真结果如表1 环境3 所示。由表1环境3 可知,本文算法与文献[8]算法最优全局路径长度均为73.9828,但本文算法收敛代数和路径转折角度较文献[8]算法分别减少了78%和50%。
图8 环境3 中算法全局路径对比图
结合环境2 和环境3 实验结果可得,在保证最优路径长度相等的同时,本文算法的收敛速度、稳定性以及最优路径转折角度都优于文献[8]算法,进一步说明了本文改进算法的有效性。
为了验证本文光伏电站中机器人清洁风口处太阳能板时路径规划方法的可行性,下面通过仿真实例进行说明。首先,机器人根据光伏电站全局静态先验信息规划出一条静态环境下的全局最优路径H,随后机器人沿着H 行走,每移动一个格栅后通过传感器检测周围的环境信息,并根据不同的情况采取相应的策略。设机器人速度为1 单位长度/min。
如图9 所示,环境4 是一张20×20 大小的栅格地图,起始点和终止点分别为 (0.5,19.5)和(19.5,0.5)。当机器人(* 号表示)沿着H(虚线表示)行进。经过图9(a)所示位置时,检测到一动态障碍物以2 单位长度/min 向左上方运动,且大小是机器人四倍。机器人判断障碍物比自身大且H 会受其影响,符合策略3 执行条件。机器人根据障碍物的速度和方向检测到{(5.5,14.5),(4.5,14.5),…,(8.5,17.5)}是周围符合条件的安全点,判断(8.5,17.5)到达目标点的距离较短并向该点移动。如图9(c)所示,清洁机器人到达该安全点后,根据障碍物信息重新规划到目标点的路径 (加粗虚线表示),之后沿着该路径行走至目标点。
图9 环境4 中机器人避障过程图
图10 为在仿真环境4 下,本文所提出的路径规划方法指引清洁机器人获得的全局无碰撞路径。
图10 环境4 中机器人避障过程图
针对清洁机器人对风口位置光伏组件进行作业时的路径规划问题,基于光伏电站全局静态环境先验信息,提出了一种基于改进A*蚁群系统算法的路径规划方法。
首先,运用改进估价函数的A*算法,根据环境采用不同的权重系数,降低算法搜索工作量并且解决ACS 算法初次搜索的盲目性。提出群体返巢搜索策略和分区惩罚因子,分别用于提高ACS 算法的收敛速度和降低蚂蚁陷入死锁的概率。运用自适应进化机制,以增加全局信息的使用比例,提高算法获得全局最优解的概率。当算法陷入停滞时,通过调节q0值,防止算法陷入局部最优。最后,机器人沿着改进A*蚁群系统算法根据已知静态环境信息规划出的全局最优路径移动,并根据障碍物不同的特点采用不同策略进行避障。
仿真结果表明,本文所提方法能够在光伏电站的环境下实时地为清洁机器人规划出一条到风口位置光伏组件处安全且较短的路径,同时也可为清洁机器人在光伏电站地形识别提供后续理论保障。