一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)仿真學(xué)及動(dòng)畫學(xué),尤其涉及在動(dòng)態(tài)環(huán)境中模擬現(xiàn)實(shí)中的人行為模型的路徑規(guī)劃方法,屬于計(jì)算機(jī)應(yīng)用領(lǐng)域。
技術(shù)背景
[0002]動(dòng)態(tài)環(huán)境中的路徑規(guī)劃問(wèn)題是在計(jì)算機(jī)動(dòng)畫領(lǐng)域中人群導(dǎo)航的重要課題之一,在模擬現(xiàn)實(shí)生活中的人行為模型、場(chǎng)景布局等方面有著重要應(yīng)用。因此對(duì)于這些應(yīng)用來(lái)說(shuō),找到合適的、優(yōu)化的而且適用于各種額外條件如動(dòng)態(tài)環(huán)境、大規(guī)模人群、任意寬度路徑等成為路徑規(guī)劃算法的研究方向。
[0003]動(dòng)態(tài)環(huán)境中的路徑規(guī)劃過(guò)程中會(huì)發(fā)生路徑方向改變、個(gè)體群體碰撞等問(wèn)題。針對(duì)這些問(wèn)題,在一些算法如彈性線路圖、多群體導(dǎo)航圖中已提出相對(duì)應(yīng)的解決辦法,然而這些算法只是針對(duì)多群體的導(dǎo)航而沒(méi)有具體的動(dòng)態(tài)地圖中的路徑解決方案。
[0004]在路徑規(guī)劃中基于傳統(tǒng)三角網(wǎng)格的算法,無(wú)法直接從三角網(wǎng)格中求出一條從源點(diǎn)到目標(biāo)點(diǎn)并且?guī)в凶钚¢g隙值的路徑。然而加利福尼亞大學(xué)Marcelo Kallmann提出的局部通道三角網(wǎng)格即Local Clearance Triangulat1n(LCT三角網(wǎng)格)劃分中,賦予三角形網(wǎng)格中每條有向邊一個(gè)Local Clearance值,該值可以保證精確和有效的計(jì)算出從源點(diǎn)到目標(biāo)點(diǎn)具有最小間隙值的最優(yōu)路徑。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提出一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,能夠?qū)Νh(huán)境進(jìn)行構(gòu)造基于動(dòng)態(tài)局部通道三角網(wǎng)格的導(dǎo)航網(wǎng)格,并能夠針對(duì)不同Agents在動(dòng)態(tài)環(huán)境發(fā)生變化前后進(jìn)行搜索路徑選擇和碰撞規(guī)避方法的研究。
[0006]本發(fā)明的一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,包括以下步驟:
[0007 ] 步驟一、對(duì)動(dòng)態(tài)環(huán)境構(gòu)造實(shí)現(xiàn)局部通道三角網(wǎng)格Local ClearanceTriangulat1n(LCT);
[0008]步驟二、保持原有的局部通道三角網(wǎng)格中對(duì)通道寬度Clearance值的要求,構(gòu)建動(dòng)態(tài)局部通道三角網(wǎng)格Dynamic Local Clearance Triangulat1n(DLCT);
[0009]步驟三、將AD*算法作為啟發(fā)式動(dòng)態(tài)路徑規(guī)劃方法,通過(guò)建立新的數(shù)據(jù)結(jié)構(gòu)使得動(dòng)態(tài)搜索算法能在動(dòng)態(tài)環(huán)境中實(shí)時(shí)獲取地圖?目息進(jìn)行規(guī)劃路徑。
[0010]進(jìn)一步地,所述的新的數(shù)據(jù)結(jié)構(gòu)包括:Map_Node中存儲(chǔ)了動(dòng)態(tài)網(wǎng)格中障礙物發(fā)生變化后節(jié)點(diǎn)的構(gòu)建網(wǎng)格信息;Agent_N0de中記錄了當(dāng)移動(dòng)個(gè)體在尋路過(guò)程所擴(kuò)展的三角網(wǎng)格邊;0pen_Node中記錄了用來(lái)計(jì)算最優(yōu)路徑而在節(jié)點(diǎn)中存放的信息。
[0011 ]進(jìn)一步地,所述的AD*算法的執(zhí)行步驟如下:
[0012]步驟3.1、程序初始化;構(gòu)建OPEN、CL0SED和INCONS表,并將該三個(gè)表清空,膨脹因子初始值;其中OPEN表保存所有已生成而未考察的節(jié)點(diǎn),CLOSED表中記錄已訪問(wèn)過(guò)的節(jié)點(diǎn),INCONS表存儲(chǔ)在OPEN表中已擴(kuò)展過(guò)需要再次擴(kuò)展的節(jié)點(diǎn);膨脹因子e通過(guò)在搜索過(guò)程中遞減來(lái)找到最優(yōu)路徑;
[0013]步驟3.2、計(jì)算最短路徑:計(jì)算最短路徑的過(guò)程中節(jié)點(diǎn)的擴(kuò)展順序?yàn)閺哪繕?biāo)點(diǎn)goal到起始點(diǎn)start進(jìn)行擴(kuò)展,尋找出從源點(diǎn)到目標(biāo)點(diǎn)的最短路徑;
[0014]步驟3.3、個(gè)體從起始點(diǎn)start開(kāi)始沿路徑向目標(biāo)點(diǎn)goal前進(jìn);
[0015]步驟3.4、在擴(kuò)展過(guò)程中,通過(guò)將個(gè)體的寬度和通道寬度Clearance值進(jìn)行對(duì)比,將已擴(kuò)展過(guò)的節(jié)點(diǎn)存儲(chǔ)在INCONS表中,并不斷減小膨脹因子e的值;
[0016]步驟3.5、判斷前進(jìn)過(guò)程中網(wǎng)格代價(jià)值是否發(fā)生變化,如果發(fā)生變化,則以當(dāng)前節(jié)點(diǎn)為新的起始點(diǎn),并減小膨脹因子e的值;
[0017]步驟3.6、在下一次擴(kuò)展過(guò)程中,在對(duì)比個(gè)體的寬度和通道寬度Clearance值的基礎(chǔ)上,用啟發(fā)函數(shù)擴(kuò)展OPEN表中剩余的點(diǎn)之前,把上一輪INCONS表中的點(diǎn)插入OPEN表中,在原來(lái)OPEN表的基礎(chǔ)上修改所有與變化節(jié)點(diǎn)相關(guān)的最小代價(jià)值g、繼承最小代價(jià)值rhs、節(jié)點(diǎn)值key的值,清空CLOSE表;
[0018]步驟3.7、從新的start點(diǎn)為起始點(diǎn),goal為目標(biāo)點(diǎn),返回步驟3.3直至到達(dá)目標(biāo)點(diǎn)。
[0019]進(jìn)一步地,所述的構(gòu)建動(dòng)態(tài)局部通道三角網(wǎng)格具體包括以下步驟:
[0020]步驟2.1、獲取三角網(wǎng)格在發(fā)生變化后的地圖信息;
[0021 ]步驟2.2、獲取地圖中障礙物變化信息;
[0022]步驟2.3、地圖網(wǎng)格中障礙物節(jié)點(diǎn)信息發(fā)生改變時(shí),若有新節(jié)點(diǎn)加入,則添加后更新相鄰接點(diǎn);若有節(jié)點(diǎn)刪除,則刪除后更新相鄰節(jié)點(diǎn)信息;
[0023]步驟2.4、反復(fù)執(zhí)行步驟2.3直至所有的更新信息都處理完畢;
[0024]步驟2.5、更新地圖中三角網(wǎng)格節(jié)點(diǎn)信息。
[0025]本發(fā)明的有益效果:對(duì)動(dòng)態(tài)環(huán)境構(gòu)造實(shí)現(xiàn)局部通道三角網(wǎng)格,保持原有的局部通道三角網(wǎng)格中對(duì)通道寬度Clearance值的要求,構(gòu)建動(dòng)態(tài)局部通道三角網(wǎng)格;通過(guò)建立新的數(shù)據(jù)結(jié)構(gòu)改進(jìn)AD*算法,并將其作為啟發(fā)式動(dòng)態(tài)路徑規(guī)劃方法,使其能在動(dòng)態(tài)環(huán)境中實(shí)時(shí)獲取地圖信息進(jìn)行規(guī)劃路徑。
【附圖說(shuō)明】
[0026]圖1為本發(fā)明基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法的流程圖。
【具體實(shí)施方式】
[0027]下面結(jié)合附圖舉例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
[0028]具體步驟如下:
[0029]I)獲取地圖網(wǎng)格中的41506個(gè)障礙物頂點(diǎn)信息,根據(jù)Delaunay三角剖分原理對(duì)地圖劃分得到基于約束的三角網(wǎng)格即Constrained Delaunay Triangulat1n(CDT三角網(wǎng)格)。
[0030]3)在CDT三角網(wǎng)的頂點(diǎn)集合T中遍歷圓弧查找干擾點(diǎn),將存在干擾點(diǎn)的圓弧插入鏈表中。
[0031]4)遍歷完成后,對(duì)鏈表中干擾點(diǎn)進(jìn)行重新劃分得到(CDT函數(shù)為將頂點(diǎn)集合S轉(zhuǎn)化為基于約束的三角網(wǎng)格的頂點(diǎn)集合T)。
[0032]5)重復(fù)進(jìn)行(4)直到鏈表中所有干擾點(diǎn)消除,且有成立,構(gòu)造實(shí)現(xiàn)局部通道三角網(wǎng)格。
[0033 ] 6)讓每?jī)蓚€(gè)Agents在同一條路徑上反向移動(dòng)。
[0034]7)獲取三角網(wǎng)格在發(fā)生變化后的地圖信息和地圖中障礙物變化信息。
[0035]8)地圖網(wǎng)格中障礙物節(jié)點(diǎn)信息發(fā)生改變時(shí),若有新節(jié)點(diǎn)加入,則添加后更新相鄰接點(diǎn);若有節(jié)點(diǎn)消失,則刪除后更新相鄰接點(diǎn)信息。
[0036]9)在Agent移動(dòng)過(guò)程中,當(dāng)碰撞即將發(fā)生時(shí),每個(gè)Agent都把對(duì)面?zhèn)€體視為動(dòng)態(tài)障礙物,反復(fù)執(zhí)行過(guò)程(8)直至所有的更新信息都處理完畢。
[0037]10)更新地圖中三角網(wǎng)格節(jié)點(diǎn)信息,從而繞過(guò)之后繼續(xù)前行,在避免了碰撞發(fā)生的同時(shí)沿院方向到達(dá)目的地。
【主權(quán)項(xiàng)】
1.一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,其特征在于,包括以下步驟: 步驟一、對(duì)動(dòng)態(tài)環(huán)境構(gòu)造實(shí)現(xiàn)局部通道三角網(wǎng)格Local Clearance Triangulat1n(LCT); 步驟二、保持原有的局部通道三角網(wǎng)格中對(duì)通道寬度Clearance值的要求,構(gòu)建動(dòng)態(tài)局部通道三角網(wǎng)格Dynamic Local Clearance Triangulat1n(DLCT); 步驟三、將AD*算法作為啟發(fā)式動(dòng)態(tài)路徑規(guī)劃方法,通過(guò)建立新的數(shù)據(jù)結(jié)構(gòu)使得動(dòng)態(tài)搜索算法能在動(dòng)態(tài)環(huán)境中實(shí)時(shí)獲取地圖?目息進(jìn)行規(guī)劃路徑。2.如權(quán)利要求1所述的一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,其特征在于,進(jìn)一步地,所述的新的數(shù)據(jù)結(jié)構(gòu)包括:Map_Node中存儲(chǔ)了動(dòng)態(tài)網(wǎng)格中障礙物發(fā)生變化后節(jié)點(diǎn)的構(gòu)建網(wǎng)格信息;Agent_Node中記錄了當(dāng)移動(dòng)個(gè)體在尋路過(guò)程所擴(kuò)展的三角網(wǎng)格邊;Open_Node中記錄了用來(lái)計(jì)算最優(yōu)路徑而在節(jié)點(diǎn)中存放的信息。3.如權(quán)利要求1或2所述的一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,其特征在于,進(jìn)一步地,所述的AD*算法的執(zhí)行步驟如下: 步驟3.1、程序初始化;構(gòu)建OPEN、CL0SED和IN⑶NS表,并將該三個(gè)表清空,膨脹因子初始值;其中OPEN表保存所有已生成而未考察的節(jié)點(diǎn),CLOSED表中記錄已訪問(wèn)過(guò)的節(jié)點(diǎn),INCONS表存儲(chǔ)在OPEN表中已擴(kuò)展過(guò)需要再次擴(kuò)展的節(jié)點(diǎn);膨脹因子e通過(guò)在搜索過(guò)程中遞減來(lái)找到最優(yōu)路徑; 步驟3.2、計(jì)算最短路徑:計(jì)算最短路徑的過(guò)程中節(jié)點(diǎn)的擴(kuò)展順序?yàn)閺哪繕?biāo)點(diǎn)goal到起始點(diǎn)start進(jìn)行擴(kuò)展,尋找出從源點(diǎn)到目標(biāo)點(diǎn)的最短路徑; 步驟3.3、個(gè)體從起始點(diǎn)start開(kāi)始沿路徑向目標(biāo)點(diǎn)goal前進(jìn); 步驟3.4、在擴(kuò)展過(guò)程中,通過(guò)將個(gè)體的寬度和通道寬度Clearance值進(jìn)行對(duì)比,將已擴(kuò)展過(guò)的節(jié)點(diǎn)存儲(chǔ)在INCONS表中,并不斷減小膨脹因子e的值; 步驟3.5、判斷前進(jìn)過(guò)程中網(wǎng)格代價(jià)值是否發(fā)生變化,如果發(fā)生變化,則以當(dāng)前節(jié)點(diǎn)為新的起始點(diǎn),并減小膨脹因子e的值; 步驟3.6、在下一次擴(kuò)展過(guò)程中,在對(duì)比個(gè)體的寬度和通道寬度Clearance值的基礎(chǔ)上,用啟發(fā)函數(shù)擴(kuò)展OPEN表中剩余的點(diǎn)之前,把上一輪INCONS表中的點(diǎn)插入OPEN表中,在原來(lái)OPEN表的基礎(chǔ)上修改所有與變化節(jié)點(diǎn)相關(guān)的最小代價(jià)值g、繼承最小代價(jià)值rhs、節(jié)點(diǎn)值key的值,清空CLOSE表; 步驟3.7、從新的start點(diǎn)為起始點(diǎn),goal為目標(biāo)點(diǎn),返回步驟3.3直至到達(dá)目標(biāo)點(diǎn)。4.如權(quán)利要求1或2所述的一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,其特征在于,進(jìn)一步地,所述的構(gòu)建動(dòng)態(tài)局部通道三角網(wǎng)格具體包括以下步驟: 步驟2.1、獲取三角網(wǎng)格在發(fā)生變化后的地圖信息; 步驟2.2、獲取地圖中障礙物變化信息; 步驟2.3、地圖網(wǎng)格中障礙物節(jié)點(diǎn)信息發(fā)生改變時(shí),若有新節(jié)點(diǎn)加入,則添加后更新相鄰接點(diǎn);若有節(jié)點(diǎn)刪除,則刪除后更新相鄰節(jié)點(diǎn)信息; 步驟2.4、反復(fù)執(zhí)行步驟2.3直至所有的更新信息都處理完畢; 步驟2.5、更新地圖中三角網(wǎng)格節(jié)點(diǎn)信息。
【專利摘要】本發(fā)明提出一種基于動(dòng)態(tài)環(huán)境的路徑規(guī)劃方法,能夠?qū)Νh(huán)境進(jìn)行構(gòu)造基于動(dòng)態(tài)局部通道三角網(wǎng)格的導(dǎo)航網(wǎng)格,并能夠針對(duì)不同Agents在動(dòng)態(tài)環(huán)境發(fā)生變化前后進(jìn)行搜索路徑選擇和碰撞規(guī)避方法的研究。包括以下步驟:步驟一、對(duì)動(dòng)態(tài)環(huán)境構(gòu)造實(shí)現(xiàn)局部通道三角網(wǎng)格Local?Clearance?Triangulation(LCT);步驟二、保持原有的局部通道三角網(wǎng)格中對(duì)通道寬度Clearance值的要求,構(gòu)建動(dòng)態(tài)局部通道三角網(wǎng)格Dynamic?Local?Clearance?Triangulation(DLCT);步驟三、將AD*算法作為啟發(fā)式動(dòng)態(tài)路徑規(guī)劃方法,通過(guò)建立新的數(shù)據(jù)結(jié)構(gòu)使得動(dòng)態(tài)搜索算法能在動(dòng)態(tài)環(huán)境中實(shí)時(shí)獲取地圖信息進(jìn)行規(guī)劃路徑。
【IPC分類】G01C21/20, G01C21/00
【公開(kāi)號(hào)】CN105606088
【申請(qǐng)?zhí)枴緾N201610069368
【發(fā)明人】黃天羽, 王磊, 裴高軍, 權(quán)子曦
【申請(qǐng)人】北京理工大學(xué)
【公開(kāi)日】2016年5月25日
【申請(qǐng)日】2016年2月1日