本發(fā)明涉及線纜自動布線技術(shù)領(lǐng)域,具體是一種面向分支線纜自動布線的路徑搜索方法。
背景技術(shù):
線纜布線路徑的搜索是實(shí)現(xiàn)線纜自動布線的關(guān)鍵技術(shù)之一,能快速找出一條便捷、無碰撞、平滑、貼附于壁面且連接各插座的布線路徑不僅可提升線纜的自動布線效率,同時(shí)也可提升機(jī)電產(chǎn)品的可靠性。
目前,常用到的線纜路徑搜索方法有可視圖法、啟發(fā)式圖搜索算法、人工勢場法等,這些算法有各自的優(yōu)缺點(diǎn),例如人工勢場法具有良好的實(shí)時(shí)性,但存在陷阱區(qū)域,并且在相近障礙物之間不能發(fā)現(xiàn)路徑等缺點(diǎn),算法更適用于解決單目標(biāo)優(yōu)化問題。近十年間,隨著人工智能算法的研究不斷取得進(jìn)展,許多智能算法也被用到移動機(jī)器人的路徑規(guī)劃中,包括模糊邏輯與增強(qiáng)學(xué)習(xí)算法、神經(jīng)網(wǎng)絡(luò)、遺傳算法以及蟻群算法等。這些算法都有各自的優(yōu)點(diǎn),但也存在諸多問題,例如算法收斂速度過慢、易陷入局部最優(yōu)、搜索空間過大等。
雖然現(xiàn)階段已對諸多算法進(jìn)行改進(jìn),能夠找出較好的線纜布線路徑,但是仍然存在迭代次數(shù)較多、運(yùn)算時(shí)間過長,線纜路徑處于懸空狀態(tài)等問題。并且,此類算法僅針對于無分支線纜的路徑搜索,而在現(xiàn)實(shí)中線纜存在著大量的分支,若線纜分支點(diǎn)的分布不合理,不僅會增加線纜長度,同時(shí)也將增加整個(gè)布線空間的復(fù)雜程度。這將嚴(yán)重影響機(jī)電產(chǎn)品的穩(wěn)定性,降低機(jī)電產(chǎn)品工作可靠性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,而提供一種面向分支線纜自動布線的路徑搜索方法,該方法運(yùn)算時(shí)間短,求解率高,能滿足三維空間中線纜自動布線的要求,不會影響機(jī)電產(chǎn)品的穩(wěn)定性,提高機(jī)電產(chǎn)品工作可靠性。
實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案是:
一種面向分支線纜自動布線的路徑搜索方法,包括如下步驟:
1)選取布線空間,障礙物,插座并讀入接線表,并生成附著在障礙物表面以及空間壁面附近的采樣點(diǎn),根據(jù)采樣點(diǎn)生成無相圖t(v,e);
2)采用dijkstra算法在步驟1)生成的無相圖t(v,e)中搜索出線纜主干路徑的節(jié)點(diǎn);
3)采用多區(qū)域冗余點(diǎn)剔除策略,剔除步驟2)中搜索出的線纜主干路徑的節(jié)點(diǎn)中多余的節(jié)點(diǎn);
4)采用節(jié)點(diǎn)補(bǔ)足策略,在步驟3)剔除多余節(jié)點(diǎn)后的線纜主干節(jié)點(diǎn)中補(bǔ)入節(jié)點(diǎn)便于曲線擬合;
5)采用粒子群算法,在步驟4)補(bǔ)入節(jié)點(diǎn)后的線纜主干節(jié)點(diǎn)中求解路徑主干上分支點(diǎn)的位置;
6)更新無相圖t(v,e)后采用dijkstra算法,并采用步驟3)中的多區(qū)域冗余點(diǎn)剔除策略以及步驟4)中的節(jié)點(diǎn)補(bǔ)足策略求解出分支路徑節(jié)點(diǎn);
7)采用b樣條曲線擬合路徑;
通過上述步驟,能快速找出一條便捷、無碰撞、平滑且貼附于壁面的布線路徑,在該路徑上敷設(shè)線纜即可完成線纜布線。
步驟1)中,選取布線空間,障礙物,插座并讀入接線表,并生成附著在障礙物表面的采樣點(diǎn),根據(jù)采樣點(diǎn)生成無相圖t(v,e),具體是:
a)初始化采樣點(diǎn)最小間距d和路徑連接范圍[dismin,dismax];
b)若布線環(huán)境處于密閉空間時(shí),則該密閉空間為布線空間,在該空間的壁面上分布的采樣點(diǎn)個(gè)數(shù)np_spa由下式所求:
上述公式(1)中,sspa為布線空間的表面積;
c)障礙物i表面附近分布的采樣點(diǎn)個(gè)數(shù)npi由下式所求:
上述公式(2)中,osi為障礙物i的表面積;
在求解出采樣點(diǎn)個(gè)數(shù)后,為保證生成的采樣點(diǎn)與壁面或障礙物表面的距離為線纜半徑r,獲取密閉空間縮小r后的邊界boundriesspa,以及障礙物i擴(kuò)大r后的邊界boundriesi;
此時(shí),在該空間壁面上生成的采樣點(diǎn)j坐標(biāo)由下式所求:
pj=binary_search(ptemp,boundriesspa)(3)
ptemp=censpa+vector×lspa(4)
若生成的采樣點(diǎn)pj與其余已存在的采樣點(diǎn)間距小于d時(shí),則按公式(3),(4)重新生成采樣點(diǎn)pj,
上述公式(3)、(4)式中,函數(shù)binary_search()表示使用二分法搜索出邊界上的節(jié)點(diǎn),censpa為封閉空間的中心點(diǎn),vector為隨機(jī)生成的方向單位矢量,lspa為封閉空間的中心點(diǎn)距離該空間表面上的最遠(yuǎn)距離;
障礙物i表面附近分布的采樣點(diǎn)t坐標(biāo)由下式所求:
pt=binary_search(ptemp,boundriesi)(5)
ptemp=cenobsi+vector×li(6)
若生成的采樣點(diǎn)pt與其余已存在的采樣點(diǎn)間距小于d時(shí),則按公式(5),(6)重新生成采樣點(diǎn)pt,
上述公式(5)、(6)中,函數(shù)binary_search()表示使用二分法搜索出邊界上的節(jié)點(diǎn),cenobsi為障礙物i中心點(diǎn),vector為隨機(jī)生成的方向單位矢量,li為障礙物i的中心點(diǎn)距離該障礙物表面上的最遠(yuǎn)距離;
d)根據(jù)所有采樣點(diǎn)生成無相圖t(v,e),利用二維矩陣g表示無相圖t:
上述公式(7)中,disij表示節(jié)點(diǎn)i與節(jié)點(diǎn)j之間的距離,collision_pathij=1表示節(jié)點(diǎn)i與節(jié)點(diǎn)j之間的路徑與障礙物發(fā)生碰撞。
步驟2)中,采用dijkstra算法在矩陣g中搜索出線纜主干路徑的節(jié)點(diǎn)集合route{p1,p2,p3,p4…pn},其中(xi,yi,zi)表示節(jié)點(diǎn)pi的坐標(biāo)。
步驟3)中,采用多區(qū)域冗余點(diǎn)剔除策略剔除路徑中多余的節(jié)點(diǎn),具體是:
a.首先根據(jù)步驟2)中解出的路徑節(jié)點(diǎn)集合route{p1,p2,p3,p4…pn}按下式求出子集
的邊界sep,并分解成多個(gè)節(jié)點(diǎn)子集:
dxi=|xi-xi+1|dyi=|yi-yi+1|dxi=|zi-zi+1|(8)
pi∈sepifdi≠di+1,i=1ori=n(10)
上述公式(8)、(9)(10)中,函數(shù)max(x,y,z)可求出x,y和z中的最大值;節(jié)點(diǎn)pi的坐標(biāo)為(xi,yi,zi),sep為子集的邊界;
若假設(shè)最終求得的子集邊界為sep{p1,pj,pk,pt,pn}且j≤k≤t≤n,則從路徑節(jié)點(diǎn)集合route{p1,p2,p3,p4…pn}所分解成的節(jié)點(diǎn)子集為seg1{p1,p2,…,pj-1,pj},seg2{pj,pj+1,…,pk-1,pk},seg3{pk,pk+1,…,pt-1,pt}以及seg4{pt,pt+1,…,pn-1,pn};
b.對所有節(jié)點(diǎn)子集中的冗余點(diǎn)進(jìn)行剔除:若節(jié)點(diǎn)子集segi為{pj,pj+1,…,pk-1,pk}則先令pj為起始節(jié)點(diǎn)依次與子集中起始節(jié)點(diǎn)后面的節(jié)點(diǎn)(pj+1,pj+2,…,pk-1,pk)相連進(jìn)行碰撞檢測,若未檢測到碰撞,則繼續(xù)和下一個(gè)節(jié)點(diǎn)進(jìn)行檢測;若在節(jié)點(diǎn)pt處檢測到碰撞,則記錄節(jié)點(diǎn)pt-1,并令該點(diǎn)為起始節(jié)點(diǎn)依次與該點(diǎn)之后的節(jié)點(diǎn)(pt,pt+1,…,pk-1,pk)進(jìn)行碰撞檢測,直到某一起始節(jié)點(diǎn)pr與節(jié)點(diǎn)pk相連未發(fā)生碰撞,則完成多區(qū)域冗余點(diǎn)剔除。上述方法得到的起始節(jié)點(diǎn)pj,一系列標(biāo)記的節(jié)點(diǎn)(pt,…,pr),以及終止節(jié)點(diǎn)pk構(gòu)成的集合即為節(jié)點(diǎn)子集segi剔除冗余點(diǎn)后的節(jié)點(diǎn)子集;
c.將所有剔除冗余點(diǎn)后的節(jié)點(diǎn)子集合并所得到的節(jié)點(diǎn)集合routeafd即為路徑節(jié)點(diǎn)集合route剔除冗余點(diǎn)后的節(jié)點(diǎn)集合。
步驟4)中,采用節(jié)點(diǎn)補(bǔ)足策略,優(yōu)化步驟3)搜索出線纜主干路徑的節(jié)點(diǎn)中多余的節(jié)點(diǎn),具體是:
s1、獲取步驟3)中剔除冗余點(diǎn)后的節(jié)點(diǎn)集合routeafd{p1,p2,p3,p4…pn},若節(jié)點(diǎn)p1(x1,y1,z1)與節(jié)點(diǎn)pn(xn,yn,zn)均為接插件所處位置,則在節(jié)點(diǎn)p1與p2之間,節(jié)點(diǎn)pn-1與節(jié)點(diǎn)pn之間補(bǔ)入節(jié)點(diǎn);若節(jié)點(diǎn)p1為接插件所處位置,而接插件pn不為接插件所處位置,則僅在節(jié)點(diǎn)p1與p2之間補(bǔ)入節(jié)點(diǎn);若節(jié)點(diǎn)p1不為接插件所處位置,而接插件pn為接插件所處位置,則僅在節(jié)點(diǎn)pn與pn-1之間補(bǔ)入節(jié)點(diǎn),通過下列公式求解補(bǔ)入的節(jié)點(diǎn)pinsert坐標(biāo):
(xc,yc,zc)=pi+veci×ri=1ori=n(11)
x(θ)=xc+r×cos(θ)×a1+r×sin(θ)×b1(12)
y(θ)=y(tǒng)c+r×cos(θ)×a2+r×sin(θ)×b2(13)
z(θ)=zc+r×cos(θ)×a3+r×sin(θ)×b3(14)
θ'=fmin(f(θ))(16)
pinsert=(x(θ'),y(θ'),z(θ'))(17)
上述公式(11)、(12)、(13)、(14)、(15)、(16)、(17)中,veci為節(jié)點(diǎn)pi處插座的單位方向矢量,r為線纜半徑,(a1,a2,a3)表示方向向量a,(b1,b2,b3)表示方向向量b,向量a與向量b均垂直于向量veci,并相互垂直,函數(shù)fmin(f(x))用于求解f(x)中最小值的解;
s2、對所有節(jié)點(diǎn)之間進(jìn)行節(jié)點(diǎn)補(bǔ)足,若任意兩節(jié)點(diǎn)pj與pj+1之間的距離大于d,則在節(jié)點(diǎn)pj與pj+1之間補(bǔ)入comj個(gè)節(jié)點(diǎn),把節(jié)點(diǎn)pj與節(jié)點(diǎn)pj+1之間的路徑均勻分成comj+1個(gè)部分,且補(bǔ)入節(jié)點(diǎn)的數(shù)量comj按下式進(jìn)行計(jì)算:
上述公式(18)中,函數(shù)round()表示四舍五入,disij表示節(jié)點(diǎn)pj與pj+1之間的距離;
s3、得到集合routeafa,即為在集合routeafd中補(bǔ)入節(jié)點(diǎn)后的節(jié)點(diǎn)集合。
步驟5)中,采用粒子群算法求解路徑主干上分支點(diǎn)的位置,具體是:
i.讀取步驟4)中的節(jié)點(diǎn)集合routeafa{p1,p2,p3,p4,…,pn},得到該集合的節(jié)點(diǎn)數(shù)n,以及步驟1)中插座的個(gè)數(shù)m,插座的連接關(guān)系數(shù)t,并初始化粒子個(gè)數(shù)npar,算法最大迭代次數(shù)mgen,速度最小值velmax,速度最大值velmin,學(xué)習(xí)因子c1,c2以及權(quán)值w;
ii.利用粒子i的多維度坐標(biāo)pari記錄所有分支點(diǎn)的位置,粒子i在維度j上的值parij代表著連接插座j的分支點(diǎn)的位置,并初始化粒子i的多維度坐標(biāo)pari以及速度velij如下兩式:
parij=rand(1,n)1≤j≤m-2(19)
velij=rand(0,1)(20)
上述公式(19)、(20)中,m為插座個(gè)數(shù),n為節(jié)點(diǎn)集合routeafa中的節(jié)點(diǎn)數(shù),函數(shù)rand(x,y)表示生成一個(gè)隨機(jī)數(shù),且該隨機(jī)數(shù)大于等于x小于等于y,若parij=k,則表示連接插座j的分支點(diǎn)即為節(jié)點(diǎn)集合routeafa中的節(jié)點(diǎn)pk;
iii.初始化全局最優(yōu)解gbest和局部最優(yōu)解pbest,
在完成初始化后,算法進(jìn)入下一次迭代,對粒子i在維度j(1≤j≤m-2)上的值和速度進(jìn)行更新,如下式:
velij=w×velij+c1×(gbestj-parij)+c2×(pbestj-parij)(21)
parij=parij+velij(22)
上述公式(21)中,w為權(quán)值,c1和c2為學(xué)習(xí)因子,
在更新完粒子的位置后通過下列公式計(jì)算各粒子的適應(yīng)度,適應(yīng)度越小,代表解越優(yōu):
式中,參數(shù)t(0≤t≤1)為影響系數(shù),參數(shù)
在計(jì)算完所有粒子的適應(yīng)度后,通過對比,得到該次迭代的最優(yōu)解作為局部最優(yōu)解pbest,并將局部最優(yōu)解和全局最優(yōu)解進(jìn)行對比,若局部最優(yōu)解優(yōu)于局部最優(yōu)解則gbest=pbest;
iv.若迭代尚未達(dá)到最大迭代次數(shù)或精度要求,則將進(jìn)入下一次迭代階段,否則輸出所有分支點(diǎn)位置,以及各分支點(diǎn)與插座之間的連接關(guān)系。
步驟6)中,更新無相圖t(v,e)并采用dijkstra算法,采用步驟3)中多區(qū)域冗余點(diǎn)剔除策略以及步驟4)中的節(jié)點(diǎn)補(bǔ)足策略求解出分支路徑節(jié)點(diǎn),具體是:
首先,將分支點(diǎn)位置以及分支點(diǎn)所連接的插座位置,作為路徑搜索的起點(diǎn)和終點(diǎn);
其次,將路徑搜索起點(diǎn)和重點(diǎn)添加到無相圖中,并通過公式(7)更新用以表示無相圖t(v,e)的二維矩陣g;
最后,采用步驟3)中多區(qū)域冗余點(diǎn)剔除策略以及步驟4)中的節(jié)點(diǎn)補(bǔ)足策略求解出分支路徑節(jié)點(diǎn)。
步驟7)中,采用b樣條曲線擬合路徑,具體是:
①獲取所需擬合路徑中的節(jié)點(diǎn)p0(x0,y0,z0),...,pn(xn,yn,zn),確定b樣條曲線的階數(shù)k,定義樣條曲線的支撐區(qū)間t=[t0,t1,...,tn+k]如下式:
②計(jì)算樣條曲線的基函數(shù)ni,k(t),如下兩式:
上述公式(27)、(28)中,t為樣條曲線方程中的變量,t=[t0,t1,...,tn+k]為樣條曲線的支撐區(qū)間;
③求得三階b樣條曲線的方程,如下式:
上述公式(29)式中,t為曲線方程的變量,ni,k(t)為b樣條曲線中的基函數(shù),k為的曲線階數(shù)。
有益效果:
本發(fā)明提供的一種面向分支線纜自動布線的路徑搜索方法,該方法:
(1)通過選取布線空間以及障礙物,在障礙物表面以及空間壁面上分布采樣點(diǎn),從而使得最終布線路徑敷設(shè)在障礙物表面或空間壁面上,避免了線纜懸空的情況;
(2)在無相圖中采用dijkstra算法求解線纜路徑,具有精度高、易于實(shí)現(xiàn)等優(yōu)點(diǎn);
(3)采用多區(qū)域冗余點(diǎn)剔除策略,刪除了大量的冗余節(jié)點(diǎn),在短時(shí)間內(nèi)保證路徑的非懸空狀態(tài)同時(shí),減少了布線路徑的長度;
(4)采用節(jié)點(diǎn)補(bǔ)足策略,避免了曲線擬合后所得到的布線路徑較長以及布線路徑在部分區(qū)域曲率過大;
(5)采用粒子群算法,根據(jù)線纜的長度以及空間的復(fù)雜程度從而優(yōu)化線纜分支節(jié)點(diǎn)的位置;
(6)采用b樣條曲線,完成線纜主干和線纜分支的布線路徑擬合,使得線纜路徑更加平滑,同時(shí)避免了線纜路徑中存在大量彎角較大的彎折點(diǎn)。
附圖說明
圖1為二分法求解密閉空間壁面附近采樣點(diǎn);
圖2為二分法求解障礙物i附近的采樣點(diǎn);
圖3為采用多區(qū)域冗余點(diǎn)剔除策略剔除路徑中多余的節(jié)點(diǎn);
圖4為插座附近新節(jié)點(diǎn)的補(bǔ)入方式;
圖5為粒子群算法求解分支點(diǎn)位置流程圖;
圖6為采用b樣條曲線擬合后的布線路徑實(shí)例。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明做進(jìn)一步闡述,但不是對本發(fā)明的限定。
實(shí)施例:
一種面向分支線纜自動布線的路徑搜索方法,包括如下步驟:
1)選取布線空間,障礙物,插座并讀入接線表,并生成附著在障礙物表面以及空間壁面附近的采樣點(diǎn),根據(jù)采樣點(diǎn)生成無相圖t(v,e);
2)采用dijkstra算法在步驟1)生成的無相圖t(v,e)中搜索出線纜主干路徑的節(jié)點(diǎn);
3)采用多區(qū)域冗余點(diǎn)剔除策略,剔除步驟2)中搜索出的線纜主干路徑的節(jié)點(diǎn)中多余的節(jié)點(diǎn);
4)采用節(jié)點(diǎn)補(bǔ)足策略,在步驟3)剔除多余節(jié)點(diǎn)后的線纜主干節(jié)點(diǎn)中補(bǔ)入節(jié)點(diǎn)便于曲線擬合;
5)采用粒子群算法,在步驟4)補(bǔ)入節(jié)點(diǎn)后的線纜主干節(jié)點(diǎn)中求解路徑主干上分支點(diǎn)的位置;
6)更新無相圖t(v,e)后采用dijkstra算法,并采用步驟3)中的多區(qū)域冗余點(diǎn)剔除策略以及步驟4)中的節(jié)點(diǎn)補(bǔ)足策略求解出分支路徑節(jié)點(diǎn);
7)采用b樣條曲線擬合路徑;
通過上述步驟,能快速找出一條便捷、無碰撞、平滑且貼附于壁面的布線路徑,在該路徑上敷設(shè)線纜即可完成線纜布線。
步驟1)中,選取布線空間,障礙物,插座并讀入接線表,并生成附著在障礙物表面的采樣點(diǎn),根據(jù)采樣點(diǎn)生成無相圖t(v,e),具體是:
a)初始化采樣點(diǎn)最小間距d和路徑連接范圍[dismin,dismax];
b)若布線環(huán)境處于密閉空間時(shí),則該密閉空間為布線空間,在該空間的壁面上分布的采樣點(diǎn)個(gè)數(shù)np_spa由下式所求:
上述公式(1)中,sspa為布線空間的表面積;
c)障礙物i表面附近分布的采樣點(diǎn)個(gè)數(shù)npi由下式所求:
上述公式(2)中,osi為障礙物i的表面積;
在求解出采樣點(diǎn)個(gè)數(shù)后,為保證生成的采樣點(diǎn)與壁面或障礙物表面的距離為線纜半徑r,獲取密閉空間縮小r后的邊界boundriesspa,以及障礙物i擴(kuò)大r后的邊界boundriesi;
如圖1所示,通過二分法求解出密閉空間壁面附近采樣點(diǎn),黑色圓點(diǎn)pj表示生成的采樣點(diǎn),boundriesi表示障礙物i擴(kuò)大r后的邊界,點(diǎn)cenobsi為該障礙物的中心點(diǎn),向量vector為隨機(jī)的三維單位向量;
如圖2所示,通過二分法求解障礙物i附近的采樣點(diǎn),黑色圓點(diǎn)pt表示生成的采樣點(diǎn),boundriesspa表示密閉空間縮小r后的邊界,點(diǎn)censpa為該障礙物的中心點(diǎn),向量vector為隨機(jī)的三維單位向量;
此時(shí),在該空間壁面上生成的采樣點(diǎn)j坐標(biāo)由下式所求:
pj=binary_search(ptemp,boundriesspa)(3)
ptemp=censpa+vector×lspa(4)
若生成的采樣點(diǎn)pj與其余已存在的采樣點(diǎn)間距小于d時(shí),則按公式(3),(4)重新生成采樣點(diǎn)pj,
上述公式(3)、(4)式中,函數(shù)binary_search()表示使用二分法搜索出邊界上的節(jié)點(diǎn),censpa為封閉空間的中心點(diǎn),vector為隨機(jī)生成的方向單位矢量,lspa為封閉空間的中心點(diǎn)距離該空間表面上的最遠(yuǎn)距離;
障礙物i表面附近分布的采樣點(diǎn)t坐標(biāo)由下式所求:
pt=binary_search(ptemp,boundriesi)(5)
ptemp=cenobsi+vector×li(6)
若生成的采樣點(diǎn)pt與其余已存在的采樣點(diǎn)間距小于d時(shí),則按公式(5),(6)重新生成采樣點(diǎn)pt,
上述公式(5)、(6)中,函數(shù)binary_search()表示使用二分法搜索出邊界上的節(jié)點(diǎn),cenobsi為障礙物i中心點(diǎn),vector為隨機(jī)生成的方向單位矢量,li為障礙物i的中心點(diǎn)距離該障礙物表面上的最遠(yuǎn)距離;
d)根據(jù)所有采樣點(diǎn)生成無相圖t(v,e),利用二維矩陣g表示無相圖t:
上述公式(7)中,disij表示節(jié)點(diǎn)i與節(jié)點(diǎn)j之間的距離,collision_pathij=1表示節(jié)點(diǎn)i與節(jié)點(diǎn)j之間的路徑與障礙物發(fā)生碰撞。
步驟2)中,采用dijkstra算法在矩陣g中搜索出線纜主干路徑的節(jié)點(diǎn)集合route{p1,p2,p3,p4…pn},其中(xi,yi,zi)表示節(jié)點(diǎn)pi的坐標(biāo)。
步驟3)中,采用多區(qū)域冗余點(diǎn)剔除策略剔除路徑中多余的節(jié)點(diǎn),如圖3所示,將節(jié)點(diǎn)分為4段,即{p1,…,p8},{p8,p9},{p9,…,p13}以及{p13,…,p17},分別對這4段中的冗余點(diǎn)進(jìn)行剔除,最終得到的節(jié)點(diǎn)集合為{p1,p6,p8,p9,p13,p14,p17},其中邊界為虛線的空心圓表示剔除的冗余點(diǎn),邊界為實(shí)線的空心圓表示邊界中未剔除的節(jié)點(diǎn),黑色圓點(diǎn)表示每一段節(jié)點(diǎn)的邊界,虛線表示將剔除冗余點(diǎn)后,連接所有節(jié)點(diǎn)得到的路徑,具體是:
a.首先根據(jù)步驟2)中解出的路徑節(jié)點(diǎn)集合route{p1,p2,p3,p4…pn}按下式求出子集的邊界sep,并分解成多個(gè)節(jié)點(diǎn)子集:
dxi=|xi-xi+1|dyi=|yi-yi+1|dxi=|zi-zi+1|(8)
pi∈sepifdi≠di+1,i=1ori=n(10)
上述公式(8)、(9)(10)中,函數(shù)max(x,y,z)可求出x,y和z中的最大值;節(jié)點(diǎn)pi的坐標(biāo)為(xi,yi,zi),sep為子集的邊界;
若假設(shè)最終求得的子集邊界為sep{p1,pj,pk,pt,pn}且j≤k≤t≤n,則從路徑節(jié)點(diǎn)集合route{p1,p2,p3,p4…pn}所分解成的節(jié)點(diǎn)子集為seg1{p1,p2,…,pj-1,pj},seg2{pj,pj+1,…,pk-1,pk},seg3{pk,pk+1,…,pt-1,pt}以及seg4{pt,pt+1,…,pn-1,pn};
b.對所有節(jié)點(diǎn)子集中的冗余點(diǎn)進(jìn)行剔除:若節(jié)點(diǎn)子集segi為{pj,pj+1,…,pk-1,pk}則先令pj為起始節(jié)點(diǎn)依次與子集中起始節(jié)點(diǎn)后面的節(jié)點(diǎn)(pj+1,pj+2,…,pk-1,pk)相連進(jìn)行碰撞檢測,若未檢測到碰撞,則繼續(xù)和下一個(gè)節(jié)點(diǎn)進(jìn)行檢測;若在節(jié)點(diǎn)pt處檢測到碰撞,則記錄節(jié)點(diǎn)pt-1,并令該點(diǎn)為起始節(jié)點(diǎn)依次與該點(diǎn)之后的節(jié)點(diǎn)(pt,pt+1,…,pk-1,pk)進(jìn)行碰撞檢測,直到某一起始節(jié)點(diǎn)pr與節(jié)點(diǎn)pk相連未發(fā)生碰撞,則完成多區(qū)域冗余點(diǎn)剔除。上述方法得到的起始節(jié)點(diǎn)pj,一系列標(biāo)記的節(jié)點(diǎn)(pt,…,pr),以及終止節(jié)點(diǎn)pk構(gòu)成的集合即為節(jié)點(diǎn)子集segi剔除冗余點(diǎn)后的節(jié)點(diǎn)子集;
c.將所有剔除冗余點(diǎn)后的節(jié)點(diǎn)子集合并所得到的節(jié)點(diǎn)集合routeafd即為路徑節(jié)點(diǎn)集合route剔除冗余點(diǎn)后的節(jié)點(diǎn)集合。
步驟4)中,采用節(jié)點(diǎn)補(bǔ)足策略,優(yōu)化步驟3)搜索出線纜主干路徑的節(jié)點(diǎn)中多余的節(jié)點(diǎn),具體是:
s1、獲取步驟3)中剔除冗余點(diǎn)后的節(jié)點(diǎn)集合routeafd{p1,p2,p3,p4…pn},若節(jié)點(diǎn)p1(x1,y1,z1)與節(jié)點(diǎn)pn(xn,yn,zn)均為接插件所處位置,則在節(jié)點(diǎn)p1與p2之間,節(jié)點(diǎn)pn-1與節(jié)點(diǎn)pn之間補(bǔ)入節(jié)點(diǎn);若節(jié)點(diǎn)p1為接插件所處位置,而接插件pn不為接插件所處位置,則僅在節(jié)點(diǎn)p1與p2之間補(bǔ)入節(jié)點(diǎn);若節(jié)點(diǎn)p1不為接插件所處位置,而接插件pn為接插件所處位置,則僅在節(jié)點(diǎn)pn與pn-1之間補(bǔ)入節(jié)點(diǎn),如圖4所示在插座附近補(bǔ)入節(jié)點(diǎn),黑色圓點(diǎn)屬于節(jié)點(diǎn)集合routeafd,空心圓表示為在接插件位置附近補(bǔ)足的節(jié)點(diǎn)pinsert,veci為節(jié)點(diǎn)pi處插座的單位方向矢量;并以三維圓形曲線curvei表示公式(12),公式(13),公式(14)的參數(shù)方程,通過下列公式求解補(bǔ)入的節(jié)點(diǎn)pinsert坐標(biāo):
(xc,yc,zc)=pi+veci×ri=1ori=n(11)
x(θ)=xc+r×cos(θ)×a1+r×sin(θ)×b1(12)
y(θ)=y(tǒng)c+r×cos(θ)×a2+r×sin(θ)×b2(13)
z(θ)=zc+r×cos(θ)×a3+r×sin(θ)×b3(14)
θ'=fmin(f(θ))(16)
pinsert=(x(θ'),y(θ'),z(θ'))(17)
上述公式(11)、(12)、(13)、(14)、(15)、(16)、(17)中,veci為節(jié)點(diǎn)pi處插座的單位方向矢量,r為線纜半徑,(a1,a2,a3)表示方向向量a,(b1,b2,b3)表示方向向量b,向量a與向量b均垂直于向量veci,并相互垂直,函數(shù)fmin(f(x))用于求解f(x)中最小值的解;
s2、對所有節(jié)點(diǎn)之間進(jìn)行節(jié)點(diǎn)補(bǔ)足,若任意兩節(jié)點(diǎn)pj與pj+1之間的距離大于d,則在節(jié)點(diǎn)pj與pj+1之間補(bǔ)入comj個(gè)節(jié)點(diǎn),把節(jié)點(diǎn)pj與節(jié)點(diǎn)pj+1之間的路徑均勻分成comj+1個(gè)部分,且補(bǔ)入節(jié)點(diǎn)的數(shù)量comj按下式進(jìn)行計(jì)算:
上述公式(18)中,函數(shù)round()表示四舍五入,disij表示節(jié)點(diǎn)pj與pj+1之間的距離;
s3、得到集合routeafa,即為在集合routeafd中補(bǔ)入節(jié)點(diǎn)后的節(jié)點(diǎn)集合。
步驟5)中,采用粒子群算法求解路徑主干上分支點(diǎn)的位置,如圖5所示,為采用粒子群算法求解主干路徑上分支點(diǎn)位置的流程:
s101開始
s102讀取主干路徑節(jié)點(diǎn)的信息
s103參數(shù)初始化
s104初始化粒子的速度和位置,以及局部最優(yōu)解和全局最優(yōu)解
s105迭代次數(shù)增加
s106更新粒子的速度和位置
s107計(jì)算所有粒子的適應(yīng)度
s108更新局部最優(yōu)解和全局最優(yōu)解
s109判斷是否滿足結(jié)束條件
s110輸出全局最優(yōu)解
s111得到與各接插件所連接的分支點(diǎn)坐標(biāo)
s112結(jié)束
具體是:
i.讀取步驟4)中的節(jié)點(diǎn)集合routeafa{p1,p2,p3,p4,…,pn},得到該集合的節(jié)點(diǎn)數(shù)n,以及步驟1)中插座的個(gè)數(shù)m,插座的連接關(guān)系數(shù)t,并初始化粒子個(gè)數(shù)npar,算法最大迭代次數(shù)mgen,速度最小值velmax,速度最大值velmin,學(xué)習(xí)因子c1,c2以及權(quán)值w;
ii.利用粒子i的多維度坐標(biāo)pari記錄所有分支點(diǎn)的位置,粒子i在維度j上的值parij代表著連接插座j的分支點(diǎn)的位置,并初始化粒子i的多維度坐標(biāo)pari以及速度velij如下兩式:
parij=rand(1,n)1≤j≤m-2(19)
velij=rand(0,1)(20)
上述公式(19)、(20)中,m為插座個(gè)數(shù),n為節(jié)點(diǎn)集合routeafa中的節(jié)點(diǎn)數(shù),函數(shù)rand(x,y)表示生成一個(gè)隨機(jī)數(shù),且該隨機(jī)數(shù)大于等于x小于等于y,若parij=k,則表示連接插座j的分支點(diǎn)即為節(jié)點(diǎn)集合routeafa中的節(jié)點(diǎn)pk;
iii.初始化全局最優(yōu)解gbest和局部最優(yōu)解pbest,
在完成初始化后,算法進(jìn)入下一次迭代,對粒子i在維度j(1≤j≤m-2)上的值和速度進(jìn)行更新,如下式:
velij=w×velij+c1×(gbestj-parij)+c2×(pbestj-parij)(21)
parij=parij+velij(22)
上述公式(21)中,w為權(quán)值,c1和c2為學(xué)習(xí)因子,
在更新完粒子的位置后通過下列公式計(jì)算各粒子的適應(yīng)度,適應(yīng)度越小,代表解越優(yōu):
式中,參數(shù)t(0≤t≤1)為影響系數(shù),參數(shù)
在計(jì)算完所有粒子的適應(yīng)度后,通過對比,得到該次迭代的最優(yōu)解作為局部最優(yōu)解pbest,并將局部最優(yōu)解和全局最優(yōu)解進(jìn)行對比,若局部最優(yōu)解優(yōu)于局部最優(yōu)解則gbest=pbest;
iv.若迭代尚未達(dá)到最大迭代次數(shù)或精度要求,則將進(jìn)入下一次迭代階段,否則輸出所有分支點(diǎn)位置,以及各分支點(diǎn)與插座之間的連接關(guān)系。
步驟6)中,更新無相圖t(v,e)并采用dijkstra算法,采用步驟3)中多區(qū)域冗余點(diǎn)剔除策略以及步驟4)中的節(jié)點(diǎn)補(bǔ)足策略求解出分支路徑節(jié)點(diǎn),具體是:
首先,將分支點(diǎn)位置以及分支點(diǎn)所連接的插座位置,作為路徑搜索的起點(diǎn)和終點(diǎn);
其次,將路徑搜索起點(diǎn)和重點(diǎn)添加到無相圖中,并通過公式(7)更新用以表示無相圖t(v,e)的二維矩陣g;
最后,采用步驟3)中多區(qū)域冗余點(diǎn)剔除策略以及步驟4)中的節(jié)點(diǎn)補(bǔ)足策略求解出分支路徑節(jié)點(diǎn)。
步驟7)中,采用b樣條曲線擬合路徑,如圖6所示,在箱體(100cm×120cm×50cm)中通過b樣條曲線擬合后的布線路徑實(shí)例,可明顯看出線纜以及分支線纜連接各插座,避開障礙物,并帖敷于壁面。其中,邊界為虛線線框的物體為障礙物,線纜為黑色曲線,圓柱體即為接插件(插座的位置),具體是:
①獲取所需擬合路徑中的節(jié)點(diǎn)p0(x0,y0,z0),...,pn(xn,yn,zn),確定b樣條曲線的階數(shù)k,定義樣條曲線的支撐區(qū)間t=[t0,t1,...,tn+k]如下式:
②計(jì)算樣條曲線的基函數(shù)ni,k(t),如下兩式:
上述公式(27)、(28)中,t為樣條曲線方程中的變量,t=[t0,t1,...,tn+k]為樣條曲線的支撐區(qū)間;
③求得三階b樣條曲線的方程,如下式:
上述公式(29)式中,t為曲線方程的變量,ni,k(t)為b樣條曲線中的基函數(shù),k為的曲線階數(shù)。