基于曲面精確表示的碰撞檢測方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明提供一種基于曲面精確表示的碰撞檢測方法,它涉及一種基于曲面精確表 示的干涉檢查方法,由于支持多種曲面類型,該方法由若干子算法組成,屬于工程應(yīng)用領(lǐng) 域。
【背景技術(shù)】
[0002] 具有強(qiáng)魯棒性的干涉檢查方法在機(jī)械、機(jī)器人仿真、虛擬現(xiàn)實、電腦游戲和虛擬外 科手術(shù)等領(lǐng)域具有很大的應(yīng)用價值,同時建立快速精確的干涉檢查方法也是這些領(lǐng)域發(fā)展 的一個技術(shù)瓶頸。在數(shù)控加工、機(jī)器人路徑規(guī)劃等領(lǐng)域中對碰撞檢測的實時性和精確性要 求越來越苛刻,因此,建立一種曲面之間的快速準(zhǔn)確的干涉檢查方法很有意義。
[0003] 現(xiàn)有技術(shù)中,可以用于圓環(huán)體之間的干涉檢查方法有多種。
[0004] 現(xiàn)有技術(shù)一:基于包圍盒的干涉檢測法。該類方法通過構(gòu)造形狀簡單且與被檢 測物體相差不大的包圍盒,并對其進(jìn)行碰撞檢測,如果包圍盒不相交,則被檢測物體必不相 交,如果包圍盒相交,再進(jìn)行被檢物體進(jìn)行精確檢測。這類方法有軸向包圍盒檢測法,方向 包圍盒檢測法等。
[0005] 現(xiàn)有技術(shù)二:基于空間分解的干涉檢查法。該方法通過將空間分解為體積相等的 小單元格并且只對占據(jù)同一單元格或相臨單元格的被檢物體進(jìn)行相交測試,這類方法有八 叉樹劃分空間法,二叉空間剖分法等。
[0006] 現(xiàn)有技術(shù)一不易建立起既簡單又對被檢物體包裹緊密的包圍盒。
[0007] 現(xiàn)有技術(shù)二存儲空間占用大并且靈活性差。
[0008] 現(xiàn)有技術(shù)在干涉檢查過程中不可避免地要進(jìn)行幾何形體的三角片離散化操作或 者曲面求交操作。本發(fā)明在干涉檢查過程中不使用離散信息,而是基于曲面的原始幾何信 息進(jìn)行快速精確干涉檢查方法。
【發(fā)明內(nèi)容】
[0009] 1、目的:本發(fā)明的目的是提供一種基于曲面精確表示的碰撞檢測方法,它是建立 一套基于曲面原始幾何信息的干涉檢查方法,該方法能快速精確地判斷空間中兩曲面之間 是否發(fā)生干涉。該干涉檢查方法可以應(yīng)用到工程實際中,如刀具的運動干涉檢查及機(jī)器人 的運動干涉檢查等。
[0010] 2、技術(shù)方案:本技術(shù)方案以共線法矢引理為理論依據(jù),共線法矢引理描述為:如 果兩個幾何體發(fā)生干涉,則必然存在一個點和一條直線,滿足該點是兩個幾何體和直線三 者的交集,且滿足該直線同時垂直于這兩個曲面,即:幾何體T1/幾何體T2有交點(碰撞)〈 ==>1\和T2在其極值位置處有一條TJPT2的共線法矢L,滿足(T1nL)n(T2nL) # 0,其 中1\和T2至少有一個是以下曲面的一種:平面(無窮大)、圓柱體、圓錐體、球體、圓環(huán)體、 橢球體、多面體(相關(guān)算法不太完整)、裁剪曲面(不限于B樣條曲面,目前實現(xiàn)了單張曲面 情況的相關(guān)算法),事實上,凡是等半徑的球掃掠體(含等半徑的管道體)都可以使用該判 斷準(zhǔn)則。以上幾何體是指由基本體素(方體、球體、圓柱體等)通過有限次并、交、差集合運 算構(gòu)成的點集。
[0011] 下面給出該引理的證明:
[0012] 假設(shè)^是一個球掃成體(sphere-sweptbody),即一個等半徑的球,半徑為ri> 0,其球心在曲面Si(u,V)上運動形成的包絡(luò)體,i= 1,2。在\和D2有交(碰撞),且曲 面S1 (u,V)和S2 (u,V)無交的情況下,令X是個變量,且〇彡A彡1,令Di(A)是球縮略體 (sphere-sweptbody),其半徑變化規(guī)律為A.rpi= 1,2,其球心在曲面Si (u,v)上運動, 令集合A= # 0}。可以推出%至少含有1個元素,因而不為空,取? :的 下確界A1=inf?pD1(A1)和D2(A1)必然相切,(見附圖1),于是通過切點P就有共 線法矢L。
[0013](所述"下確界"的概念是數(shù)學(xué)分析中最基本的概念??紤]一個實數(shù)集合M.如果 有一個實數(shù)S,使得M中任何數(shù)都大于或等于S,那么就稱S是M的一個下界。
[0014] 在所有那些下界中如果有一個最大的下界,就稱為M的下確界。)
[0015]注意:
[0016] (I)M入)=UBp,人,其中Bp,X表示以P為球心、入為半徑的球,PeSi(U1V)0若 I< n,則,所以D,(#)〔n,(;7)。
[0017] (2)Di(入)是有界閉集,所有Bp,x的內(nèi)點構(gòu)成Di(入)的內(nèi)點,M入)的邊界點 必是某個Bp^的邊界點。
[0018] 下面證明D1(A1)和D2(A1)必然相切。令集合〇。= {/1網(wǎng)(1)〇£^(/1) = 0}, ①。至少含有〇,因而不為空,取①Cl的上確界XQ=sup?。。容易看出AtlSAi。假設(shè)入。 <A1,取n = Mn)nD2U)等于空或不等于空都導(dǎo)致矛盾,所以入。= 入1,記H入0。
[0019] ⑴如果q㈨nn2(?/) = 0,由于Kn)、D2U)都是有界閉集,所以存在e>0 使I|p_q|I〉e,對任何的peQ1,qeA都成立。總可以找到k>i,也就是把Q:(n)和 Mn)都放大一點,使Q(切)nn2(切)=0,(見附圖2),這就與n=sup?。矛盾,故 Q1(^)OD2(ZZ) ^ 0:
[0020] ⑵任取Mn)nD2U)=中的一點P',于是存在P和q兩點,使 /eD1 ("),且IcD2(?/),如果 p' 是B"或Bq,n 的內(nèi)點,則存在0〈k〈l使 5/^〇5由矣0,(見附圖3),于是矣0,這與rI=SupO1矛盾,故p'只 能是B"和Bin邊界上的點,p'是Bu和Bin的切點,即Di(入D和D2(A1)相切。
[0021] 根據(jù)共線法矢理論,我們可以得出幾何體碰撞檢測的通用算法
[0022] 輸入:幾何體1和幾何體2,容差e>〇
[0023](該幾何體1和幾何體2是為了引用方便,將進(jìn)行碰撞檢測的兩個幾何體一個稱為 幾何體1,另一個稱為幾何體2)
[0024] 輸出:是否碰撞及一個碰撞點
[0025] 本發(fā)明一種基于曲面精確表示的碰撞檢測方法,其步驟如下:
[0026] 步驟一:包圍盒粗判:若包圍盒無交,則返回?zé)o碰撞;
[0027] 步驟二:利用幾何體的特殊幾何特性,進(jìn)行粗判排除無交情況,例如利用圓柱體 的上下底面排除在上底面以上及在下底面以下的幾何體;
[0028] 步驟三:利用幾何體的對稱性及相對特殊位置關(guān)系,對某些特殊情況(比如可能 轉(zhuǎn)化為二維的情況)直接計算出碰撞點,判斷出有無碰撞,例如兩個軸線相交的圓環(huán)體,可 以在兩軸線所在平面內(nèi)判斷碰撞;
[0029] 步驟四:排除幾何體1和幾何體2相互包含的情況:
[0030] (a)在幾何體1內(nèi)取一點,檢測該點是否在幾何體2內(nèi),若在幾何體2內(nèi)則返回有 碰撞;
[0031] (b)在幾何體2內(nèi)取一點,檢測該點是否在幾何體1內(nèi),若在幾何體1內(nèi)則返回有 碰撞;
[0032] 步驟五:幾何體的邊界碰撞檢測:
[0033] (a)幾何體1的所有邊界曲線與幾何體2進(jìn)行碰撞檢測,若邊界有碰撞即返回;
[0034] (b)幾何體2的所有邊界曲線與幾何體1進(jìn)行碰撞檢測,若邊界有碰撞即返回;
[0035] 步驟六:幾何體的表面內(nèi)部碰撞檢測:
[0036] 遍歷幾何體1的所有表面,
[0037] 遍歷幾何體2的所有表面,
[0038] 計算面/面的所有極值位置,
[0039] 遍歷極值位置處的共線法矢L,
[0040] L在幾何體1內(nèi)裁斷得Ll,
[0041] 若Ll不為空,
[0042] 則Ll在幾何體2內(nèi)裁斷得L2,
[0043] 若L2不為空,則返回有碰撞,
[0044] 結(jié)束遍歷極值位置
[0045] 結(jié)束遍歷幾何體2
[0046] 結(jié)束遍歷幾何體1
[0047] 對上述排版的解釋:對于每一個小步驟,相對于其上一步驟向右縮進(jìn)2個字符,若 有兩個小步驟的第一個字在同一豎直線上,則為一個遍歷循環(huán)。
[0048] 也可以這樣表述:
[0049] 對于幾何體1和幾何體2所有曲面的兩兩組合都做如下操作:計算兩曲面的所有 共線法矢,對于每一條共線法矢L,先在幾何體1內(nèi)裁斷得L1,若
[0050] Ll不為空,則Ll在幾何體2內(nèi)裁斷得L2,若L2不為空,則返回有碰撞,否則進(jìn)行 下一曲面對的判斷,若所有曲面對都沒有碰撞,則返回?zé)o碰撞。
[0051] 步