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