一種高效的非凸體連續(xù)碰撞檢測(cè)的方法
【專(zhuān)利摘要】本發(fā)明提供了一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,包括:對(duì)非凸體進(jìn)行凸分解并分別建立凸包樹(shù),根據(jù)模型運(yùn)動(dòng)的初狀態(tài)和末狀態(tài)進(jìn)行插值,得到連續(xù)的勻速平移和旋轉(zhuǎn)運(yùn)動(dòng)過(guò)程,然后利用兩個(gè)凸包樹(shù)來(lái)計(jì)算兩物體當(dāng)前的最短距離及最短距離向量,計(jì)算緊致的運(yùn)動(dòng)上界并向前推進(jìn)一個(gè)最小時(shí)間步。循環(huán)從利用兩個(gè)凸包樹(shù)計(jì)算最短距離到向前推進(jìn)一個(gè)時(shí)間步的過(guò)程,直到兩物體之間發(fā)生碰撞,將當(dāng)前時(shí)間作為首次碰撞時(shí)間并報(bào)告接觸的特征。本發(fā)明能夠有效地減少執(zhí)行連續(xù)碰撞檢測(cè)算法的次數(shù),容易實(shí)現(xiàn)且能夠顯著提高連續(xù)碰撞檢測(cè)算法的效率。
【專(zhuān)利說(shuō)明】
一種高效的非凸體連續(xù)碰撞檢測(cè)的方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及計(jì)算機(jī)圖形學(xué)以及機(jī)器人運(yùn)動(dòng)規(guī)劃中一種非凸體的連續(xù)碰撞檢測(cè)的 方法,尤其涉及一種高效的非凸體連續(xù)碰撞檢測(cè)的方法。
【背景技術(shù)】
[0002] 碰撞檢測(cè)是指測(cè)試空間中的幾何模型之間是否會(huì)發(fā)生接觸或穿透,許多圖形學(xué)應(yīng) 用需要快速可靠的碰撞檢測(cè)算法來(lái)進(jìn)行虛擬空間中的物體仿真,如基于物理的動(dòng)畫(huà),機(jī)器 人運(yùn)動(dòng)規(guī)劃、觸覺(jué)渲染、虛擬現(xiàn)實(shí)等。三十年來(lái),許多學(xué)者對(duì)碰撞檢測(cè)問(wèn)題進(jìn)行了大量研究, 并形成了三類(lèi)主要的檢測(cè)方法:靜態(tài)碰撞檢測(cè)、離散碰撞檢測(cè)和連續(xù)碰撞檢測(cè)(Continuous Collision Detection,簡(jiǎn)稱CCD)。
[0003] 其中,連續(xù)碰撞檢測(cè)算法檢測(cè)有無(wú)碰撞時(shí)考慮物體的連續(xù)運(yùn)動(dòng),當(dāng)碰撞發(fā)生時(shí)報(bào) 告首次接觸的時(shí)間(Time of Contact,簡(jiǎn)稱T0C),并保證運(yùn)動(dòng)的物體不會(huì)與其他物體發(fā)生 穿透,因而獲得了廣泛的關(guān)注。然而,其最大的缺陷在于:連續(xù)碰撞檢測(cè)算法在算法效率上 比離散碰撞檢測(cè)算法慢很多,這導(dǎo)致連續(xù)碰撞算法在很多潛在應(yīng)用中受到限制。
[0004]在最近的研究工作中,出現(xiàn)了很多連續(xù)碰撞檢測(cè)算法,如:代數(shù)方程求解方法,掃 掠體方法,自適應(yīng)二分方法,動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)(KDS)方法和基于閔可夫斯基和方法等,但是大 多數(shù)方法都不能實(shí)時(shí)運(yùn)行且僅對(duì)簡(jiǎn)單的凸體有效。
【發(fā)明內(nèi)容】
[0005] 為克服現(xiàn)有技術(shù)的不足,提高連續(xù)碰撞檢測(cè)算法的效率,解決算法實(shí)時(shí)性和通用 性問(wèn)題,本發(fā)明提供了基于保守前進(jìn)(Conservative Advancement,簡(jiǎn)稱CA)的一種高效的 非凸體連續(xù)碰撞檢測(cè)的方法,適用于一般非凸多面體。
[0006] 本發(fā)明所提供的連續(xù)碰撞檢測(cè)算法,利用多面體的結(jié)構(gòu)信息和連續(xù)運(yùn)動(dòng)的一致 性,高效檢測(cè)連續(xù)運(yùn)動(dòng)的物體是否與空間中其他物體碰撞,具體步驟包括:
[0007] 步驟1:基于凸表面分解的方法將兩個(gè)需要進(jìn)行連續(xù)碰撞檢測(cè)的非凸體分解為多 個(gè)凸體,并分別構(gòu)造凸包樹(shù);
[0008] 步驟2:根據(jù)運(yùn)動(dòng)多面體的初狀態(tài)和末狀態(tài)計(jì)算插值運(yùn)動(dòng),得到連續(xù)的勻速平移和 旋轉(zhuǎn)運(yùn)動(dòng)過(guò)程;
[0009] 步驟3:利用兩凸包樹(shù)結(jié)構(gòu)計(jì)算兩物體當(dāng)前的最短距離及最短距離向量;
[0010] 步驟4:計(jì)算緊致的運(yùn)動(dòng)上界和當(dāng)前能推進(jìn)的時(shí)間步;
[0011] 步驟5:找出步驟4中求得的最小時(shí)間步,并向前推進(jìn)一步;
[0012] 步驟6:循環(huán)步驟3和步驟5,直到兩物體發(fā)生碰撞,將當(dāng)前時(shí)間作為首次碰撞時(shí)間 并報(bào)告此時(shí)的接觸特征。
[0013] 其中,所述凸包樹(shù)的建立方法為:作為預(yù)處理部分,算法將給定的兩個(gè)非凸體分別 分解為多個(gè)凸體塊,并迭代地建立一個(gè)層次包圍盒(Bounding Volume Hierarchy,簡(jiǎn)稱 BVH),其中每個(gè)包圍盒節(jié)點(diǎn)都對(duì)應(yīng)其孩子結(jié)點(diǎn)的凸包,即凸包樹(shù)結(jié)構(gòu)。
[0014]其中,所述計(jì)算插值運(yùn)動(dòng)的方法為:根據(jù)給定的運(yùn)動(dòng)物體A的初狀態(tài)和末狀態(tài),計(jì) 算連續(xù)的勻速平移和旋轉(zhuǎn)運(yùn)動(dòng)過(guò)程得到剛體變換矩陣M(t),使得A(t)=M(t) ·Α(0),其中, A (0)表示運(yùn)動(dòng)物體A的初狀態(tài),A (t)表示運(yùn)動(dòng)物體A在任意t時(shí)刻的狀態(tài)。
[0015] 其中,在最短距離查詢過(guò)程中,隱式建立一個(gè)BVTT,其中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一對(duì)凸包節(jié) 點(diǎn),并存儲(chǔ)其對(duì)應(yīng)的最短距離和最短距離向量,僅對(duì)BVTT的所有葉子節(jié)點(diǎn)進(jìn)行保守前進(jìn)連 續(xù)碰撞檢測(cè),提高算法效率。
[0016] 其中,計(jì)算緊致的運(yùn)動(dòng)上界和當(dāng)前能推進(jìn)的時(shí)間步的方法為:遍歷BVTT的所有葉 子節(jié)點(diǎn)對(duì)應(yīng)的凸包對(duì)。
[0017] 其中,所述計(jì)算運(yùn)動(dòng)上界方法為投影平移和旋轉(zhuǎn)運(yùn)動(dòng)到最短距離向量,將計(jì)算更 緊致的運(yùn)動(dòng)上界轉(zhuǎn)化為一個(gè)線性規(guī)劃問(wèn)題:
[0018] // = niax |c,-r, i+c·,
[0019] 滿足ri · nk<dk,k=l··· |A|,其中,ci = nX ω,C2= |v · n|,且 |A| 為凸體A上平面 的數(shù)目,x · nk=dk是凸體A上第k個(gè)平面方程,v,ω為物體質(zhì)心的線速度和角速度。
[0020] 其中,所述當(dāng)前能推進(jìn)的時(shí)間步計(jì)算方式為:
[0021]
[0022] 其中,講f,/<)為兩凸體的最短距離,y(i,j)為該凸體對(duì)最短距離所對(duì)應(yīng)的運(yùn)動(dòng) 上界。
[0023] 其中,所述向前推進(jìn)一個(gè)最小時(shí)間步的方法為:找出上一步遍歷的節(jié)點(diǎn)對(duì)中求得 的最小時(shí)間步△ tmin,并向前推進(jìn)一步,使物體A從A(t)運(yùn)動(dòng)為A(t+ △ tmin)。
[0024]其中,所述發(fā)生碰撞即認(rèn)為是兩物體之間的距離小于一個(gè)預(yù)設(shè)的閾值的狀態(tài)。
[0025] 本發(fā)明所述的高效連續(xù)碰撞檢測(cè)算法,旨在解決算法實(shí)時(shí)性和通用性問(wèn)題,減少 連續(xù)碰撞檢測(cè)的計(jì)算量,并使算法適用于一般非凸多面體。該算法能顯著提高連續(xù)碰撞檢 測(cè)效率,并在發(fā)生碰撞時(shí)報(bào)告首次接觸的時(shí)間及此時(shí)的接觸特征。
【附圖說(shuō)明】
[0026] 圖1為本發(fā)明高效連續(xù)碰撞檢測(cè)算法流程示意圖;
[0027] 圖2為本發(fā)明兩凸體使用保守前進(jìn)算法進(jìn)行連續(xù)碰撞檢測(cè)示意圖。
【具體實(shí)施方式】
[0028] 結(jié)合以下具體實(shí)施例和附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。實(shí)施本發(fā)明的過(guò)程、 條件、試驗(yàn)方法等,除以下專(zhuān)門(mén)提及的內(nèi)容之外,均為本領(lǐng)域的普遍知識(shí)和公知常識(shí),本發(fā) 明沒(méi)有特別限制內(nèi)容。
[0029] 圖1為本發(fā)明高效連續(xù)碰撞檢測(cè)算法流程示意圖,下面對(duì)其中每個(gè)步驟進(jìn)行詳細(xì) 說(shuō)明。
[0030] 步驟1凸分解并建立凸包樹(shù)
[0031] 作為預(yù)處理部分,對(duì)兩非凸多面體A,B基于凸表面分解的方法分解為多個(gè)凸體塊 并分別迭代地構(gòu)造凸包樹(shù)CTHa,CTHb,樹(shù)的每個(gè)節(jié)點(diǎn)都為其孩子節(jié)點(diǎn)的凸包。
[0032]步驟2計(jì)算插值運(yùn)動(dòng)
[0033]給定物體初狀態(tài)qo=(R(),T())和末狀態(tài)q1 = (R1,T1),其中R為平移分量,T為轉(zhuǎn)動(dòng)分 量,其插值運(yùn)動(dòng)M(t)為:
[0034]
[0035] 其中,T(t) =To+tv;R(t) = co s(c〇t) · A+sin( ω t) · B+C; V = Ti-To 是質(zhì)心的平移 速度常量,且:
[0036] A = Rq-UUt · Ro
[0037] B = U* · Ro
[0038] C = uuT · Ro
[0039] 其中,(u,ω )是從中提取出的物體的恒定角速度,W是斜對(duì)稱矩陣。
[0040] 步驟3計(jì)算最短距離,并建立BVTT
[0041 ] 根據(jù)步驟1建立的兩凸包樹(shù)CTHa ,CTHb,從根節(jié)點(diǎn)開(kāi)始遍歷地計(jì)算兩物體之間最短 距離,被遍歷的節(jié)點(diǎn)對(duì)通過(guò)遞歸地執(zhí)行泰森多邊形的匹配算法進(jìn)行距離計(jì)算,得到其 該節(jié)點(diǎn)對(duì)的最短距離并與前面已計(jì)算的全局最短距離d進(jìn)行對(duì)比,如果 <3則繼續(xù)進(jìn)行遞歸遍歷;否則結(jié)束。
[0042] 在最短距離查詢過(guò)程中,隱式建立一個(gè)BVTT,其中每個(gè)節(jié)點(diǎn)h(i,j)對(duì)應(yīng)一對(duì)凸包 節(jié)點(diǎn),并存儲(chǔ)其對(duì)應(yīng)的最短距離和最短距離向量&/,/),僅對(duì)BVTT的所有葉 子節(jié)點(diǎn)進(jìn)行保守前進(jìn)連續(xù)碰撞檢測(cè)。
[0043] 步驟4利用BVTT計(jì)算緊致運(yùn)動(dòng)上界和時(shí)間步
[0044] 遍歷BVTT的所有葉子節(jié)點(diǎn)對(duì)應(yīng)的凸包對(duì),計(jì)算緊致運(yùn)動(dòng)上界的方法為投影平移和 旋轉(zhuǎn)運(yùn)動(dòng)到最短距離向量《(/./),如圖2所示,對(duì)于運(yùn)動(dòng)物體上的一點(diǎn)p i,其速度為 爲(wèi)=V + wX ⑴,其中,v,ω為物體質(zhì)心的線速度和角速度,ri為點(diǎn)到質(zhì)心的距離,計(jì)算更緊 致的運(yùn)動(dòng)上界μ可以轉(zhuǎn)化為一個(gè)線性規(guī)劃問(wèn)題:
[0045] μ = max \ Ct-Vi |+C2
[0046] 滿足ri · nk<dk,k=l. · · |A|,其中,ci = nX ω,C2= |ν · n|,且 |A| 為凸體A上平面 的數(shù)目,x · nk=dk是凸體A上第k個(gè)平面方程。
[0047] 其中,所述當(dāng)前能推進(jìn)的時(shí)間步計(jì)算方式為:
[0048]
[0049] 其中為兩凸體的最短距離,y(i,j)為該凸體對(duì)最短距離所對(duì)應(yīng)的運(yùn)動(dòng) 上界。
[0050]步驟5向前推進(jìn)一個(gè)最小時(shí)間步
[0051]找出上一步遍歷的節(jié)點(diǎn)對(duì)中求得的最小時(shí)間步△ tmin,并向前推進(jìn)一步,使物體A 從A(t)運(yùn)動(dòng)為A(t+ Δ tmin)。
[0052] 步驟6循環(huán)執(zhí)行步驟3到步驟5,直到步驟3中計(jì)算的全局最短距離d小于一個(gè)預(yù)設(shè) 的閾值,則認(rèn)為發(fā)生碰撞,將當(dāng)前時(shí)間作為首次碰撞時(shí)間t?并報(bào)告此時(shí)的接觸特征。
[0053] 上述算法能夠更有效地計(jì)算運(yùn)動(dòng)邊界,大量減少執(zhí)行保守推進(jìn)算法的次數(shù),顯著 提高連續(xù)碰撞檢測(cè)算法的效率。
[0054] 以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了詳細(xì)描述,但其只是作為范例,本發(fā)明并不限 制于以上描述的具體實(shí)施例。對(duì)于本領(lǐng)域技術(shù)人員而言,任何對(duì)本發(fā)明進(jìn)行的等同修改和 替代也都在本發(fā)明的范疇之中。因此,在不脫離本發(fā)明的精神和范圍下所作的均等變換和 修改,都應(yīng)涵蓋在本發(fā)明的范圍內(nèi)。
【主權(quán)項(xiàng)】
1. 一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,步驟包括: 步驟1:基于凸表面分解的方法將兩個(gè)需要進(jìn)行連續(xù)碰撞檢測(cè)的非凸體分解為多個(gè)凸 體,并針對(duì)各個(gè)凸體分別構(gòu)造凸包樹(shù); 步驟2:根據(jù)運(yùn)動(dòng)多面體的初狀態(tài)和末狀態(tài)計(jì)算插值運(yùn)動(dòng),得到連續(xù)的勻速平移和旋轉(zhuǎn) 運(yùn)動(dòng)過(guò)程; 步驟3:利用兩凸包樹(shù)結(jié)構(gòu)計(jì)算兩物體當(dāng)前的最短距離及最短距離向量; 步驟4:計(jì)算緊致的運(yùn)動(dòng)上界和當(dāng)前能推進(jìn)的時(shí)間步; 步驟5:找出步驟4中求得的最小時(shí)間步,并向前推進(jìn)該最小時(shí)間步; 步驟6:循環(huán)步驟3至步驟5,直到兩物體發(fā)生碰撞,將當(dāng)前時(shí)間作為首次碰撞時(shí)間并報(bào) 告此時(shí)的接觸特征。2. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述構(gòu) 造凸包樹(shù)的方法為:通過(guò)算法將給定的兩個(gè)非凸體分別分解為多個(gè)凸體塊,并迭代地建立 一個(gè)BVH,其中每個(gè)包圍盒節(jié)點(diǎn)都對(duì)應(yīng)其孩子結(jié)點(diǎn)的凸包,即凸包樹(shù)結(jié)構(gòu)。3. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述計(jì) 算插值運(yùn)動(dòng)的方法為:根據(jù)給定的運(yùn)動(dòng)物體A的初狀態(tài)和末狀態(tài),計(jì)算連續(xù)的勻速平移和旋 轉(zhuǎn)運(yùn)動(dòng)過(guò)程得到剛體變換矩陣M(t),使得A(t)=M(t) · A(0)。4. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述利 用兩凸包樹(shù)結(jié)構(gòu)計(jì)算兩物體當(dāng)前的最短距離及最短距離向量的過(guò)程中,隱式建立一個(gè) BVTTo5. 根據(jù)權(quán)利要求4所述一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,BVTT的每 個(gè)節(jié)點(diǎn)對(duì)應(yīng)一對(duì)凸包節(jié)點(diǎn),并存儲(chǔ)其對(duì)應(yīng)的最短距離和最短距離向量,僅對(duì)BVTT的所有葉 子節(jié)點(diǎn)進(jìn)行保守前進(jìn)連續(xù)碰撞檢測(cè)。6. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述計(jì) 算精致的運(yùn)動(dòng)上界的方法為投影平移和旋轉(zhuǎn)運(yùn)動(dòng)到最短距離向量n,將計(jì)算更緊致的運(yùn)動(dòng) 上界μ轉(zhuǎn)化為一個(gè)線性規(guī)劃問(wèn)題:滿足ri · nk<dk,k=l. . . |A|,其中,ci = nX ω,C2= |ν · n|,且|A|為凸體A上平面的數(shù) 目,χ · nk二dk是凸體A上束k個(gè)平面方程,ν, ω為物體質(zhì)心的線速度和角速度。7. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述的 計(jì)算當(dāng)前能推進(jìn)的時(shí)間步的方法為·其中,d(皆為兩凸體的最短距離,μ。J)為兩凸體的最短距離所對(duì)應(yīng)的運(yùn)動(dòng)上界。8. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述向 前推進(jìn)一個(gè)最小時(shí)間步的方法為,找出上一步遍歷的節(jié)點(diǎn)對(duì)中求得的最小時(shí)間步A tmin,并 向前推進(jìn)一步,使物體A從A(t)運(yùn)動(dòng)為A(t+ Δ tmin)。9. 根據(jù)權(quán)利要求1所述的一種高效的非凸體連續(xù)碰撞檢測(cè)的方法,其特征在于,所述的 發(fā)生碰撞即認(rèn)為是兩物體之間的距離小于一個(gè)預(yù)設(shè)的闊值的狀態(tài)。
【文檔編號(hào)】G06F17/11GK105843778SQ201610210193
【公開(kāi)日】2016年8月10日
【申請(qǐng)日】2016年4月6日
【發(fā)明人】張新宇, 郭娟
【申請(qǐng)人】華東師范大學(xué)