基于曲面精确表示的碰撞检测方法

文档序号:8361698阅读:684来源:国知局
基于曲面精确表示的碰撞检测方法
【技术领域】
[0001] 本发明提供一种基于曲面精确表示的碰撞检测方法,它涉及一种基于曲面精确表 示的干涉检查方法,由于支持多种曲面类型,该方法由若干子算法组成,属于工程应用领 域。
【背景技术】
[0002] 具有强鲁棒性的干涉检查方法在机械、机器人仿真、虚拟现实、电脑游戏和虚拟外 科手术等领域具有很大的应用价值,同时建立快速精确的干涉检查方法也是这些领域发展 的一个技术瓶颈。在数控加工、机器人路径规划等领域中对碰撞检测的实时性和精确性要 求越来越苛刻,因此,建立一种曲面之间的快速准确的干涉检查方法很有意义。
[0003] 现有技术中,可以用于圆环体之间的干涉检查方法有多种。
[0004] 现有技术一:基于包围盒的干涉检测法。该类方法通过构造形状简单且与被检 测物体相差不大的包围盒,并对其进行碰撞检测,如果包围盒不相交,则被检测物体必不相 交,如果包围盒相交,再进行被检物体进行精确检测。这类方法有轴向包围盒检测法,方向 包围盒检测法等。
[0005] 现有技术二:基于空间分解的干涉检查法。该方法通过将空间分解为体积相等的 小单元格并且只对占据同一单元格或相临单元格的被检物体进行相交测试,这类方法有八 叉树划分空间法,二叉空间剖分法等。
[0006] 现有技术一不易建立起既简单又对被检物体包裹紧密的包围盒。
[0007] 现有技术二存储空间占用大并且灵活性差。
[0008] 现有技术在干涉检查过程中不可避免地要进行几何形体的三角片离散化操作或 者曲面求交操作。本发明在干涉检查过程中不使用离散信息,而是基于曲面的原始几何信 息进行快速精确干涉检查方法。

【发明内容】

[0009] 1、目的:本发明的目的是提供一种基于曲面精确表示的碰撞检测方法,它是建立 一套基于曲面原始几何信息的干涉检查方法,该方法能快速精确地判断空间中两曲面之间 是否发生干涉。该干涉检查方法可以应用到工程实际中,如刀具的运动干涉检查及机器人 的运动干涉检查等。
[0010] 2、技术方案:本技术方案以共线法矢引理为理论依据,共线法矢引理描述为:如 果两个几何体发生干涉,则必然存在一个点和一条直线,满足该点是两个几何体和直线三 者的交集,且满足该直线同时垂直于这两个曲面,即:几何体T1/几何体T2有交点(碰撞)〈 ==>1\和T2在其极值位置处有一条TJPT2的共线法矢L,满足(T1nL)n(T2nL) # 0,其 中1\和T2至少有一个是以下曲面的一种:平面(无穷大)、圆柱体、圆锥体、球体、圆环体、 椭球体、多面体(相关算法不太完整)、裁剪曲面(不限于B样条曲面,目前实现了单张曲面 情况的相关算法),事实上,凡是等半径的球扫掠体(含等半径的管道体)都可以使用该判 断准则。以上几何体是指由基本体素(方体、球体、圆柱体等)通过有限次并、交、差集合运 算构成的点集。
[0011] 下面给出该引理的证明:
[0012] 假设^是一个球扫成体(sphere-sweptbody),即一个等半径的球,半径为ri> 0,其球心在曲面Si(u,V)上运动形成的包络体,i= 1,2。在\和D2有交(碰撞),且曲 面S1 (u,V)和S2 (u,V)无交的情况下,令X是个变量,且〇彡A彡1,令Di(A)是球缩略体 (sphere-sweptbody),其半径变化规律为A.rpi= 1,2,其球心在曲面Si (u,v)上运动, 令集合A= # 0}。可以推出%至少含有1个元素,因而不为空,取? :的 下确界A1=inf?pD1(A1)和D2(A1)必然相切,(见附图1),于是通过切点P就有共 线法矢L。
[0013](所述"下确界"的概念是数学分析中最基本的概念。考虑一个实数集合M.如果 有一个实数S,使得M中任何数都大于或等于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的内点构成Di(入)的内点,M入)的边界点 必是某个Bp^的边界点。
[0018] 下面证明D1(A1)和D2(A1)必然相切。令集合〇。= {/1网(1)〇£^(/1) = 0}, ①。至少含有〇,因而不为空,取①Cl的上确界XQ=sup?。。容易看出AtlSAi。假设入。 <A1,取n = Mn)nD2U)等于空或不等于空都导致矛盾,所以入。= 入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 的内点,则存在0〈k〈l使 5/^〇5由矣0,(见附图3),于是矣0,这与rI=SupO1矛盾,故p'只 能是B"和Bin边界上的点,p'是Bu和Bin的切点,即Di(入D和D2(A1)相切。
[0021] 根据共线法矢理论,我们可以得出几何体碰撞检测的通用算法
[0022] 输入:几何体1和几何体2,容差e>〇
[0023](该几何体1和几何体2是为了引用方便,将进行碰撞检测的两个几何体一个称为 几何体1,另一个称为几何体2)
[0024] 输出:是否碰撞及一个碰撞点
[0025] 本发明一种基于曲面精确表示的碰撞检测方法,其步骤如下:
[0026] 步骤一:包围盒粗判:若包围盒无交,则返回无碰撞;
[0027] 步骤二:利用几何体的特殊几何特性,进行粗判排除无交情况,例如利用圆柱体 的上下底面排除在上底面以上及在下底面以下的几何体;
[0028] 步骤三:利用几何体的对称性及相对特殊位置关系,对某些特殊情况(比如可能 转化为二维的情况)直接计算出碰撞点,判断出有无碰撞,例如两个轴线相交的圆环体,可 以在两轴线所在平面内判断碰撞;
[0029] 步骤四:排除几何体1和几何体2相互包含的情况:
[0030] (a)在几何体1内取一点,检测该点是否在几何体2内,若在几何体2内则返回有 碰撞;
[0031] (b)在几何体2内取一点,检测该点是否在几何体1内,若在几何体1内则返回有 碰撞;
[0032] 步骤五:几何体的边界碰撞检测:
[0033] (a)几何体1的所有边界曲线与几何体2进行碰撞检测,若边界有碰撞即返回;
[0034] (b)几何体2的所有边界曲线与几何体1进行碰撞检测,若边界有碰撞即返回;
[0035] 步骤六:几何体的表面内部碰撞检测:
[0036] 遍历几何体1的所有表面,
[0037] 遍历几何体2的所有表面,
[0038] 计算面/面的所有极值位置,
[0039] 遍历极值位置处的共线法矢L,
[0040] L在几何体1内裁断得Ll,
[0041] 若Ll不为空,
[0042] 则Ll在几何体2内裁断得L2,
[0043] 若L2不为空,则返回有碰撞,
[0044] 结束遍历极值位置
[0045] 结束遍历几何体2
[0046] 结束遍历几何体1
[0047] 对上述排版的解释:对于每一个小步骤,相对于其上一步骤向右缩进2个字符,若 有两个小步骤的第一个字在同一竖直线上,则为一个遍历循环。
[0048] 也可以这样表述:
[0049] 对于几何体1和几何体2所有曲面的两两组合都做如下操作:计算两曲面的所有 共线法矢,对于每一条共线法矢L,先在几何体1内裁断得L1,若
[0050] Ll不为空,则Ll在几何体2内裁断得L2,若L2不为空,则返回有碰撞,否则进行 下一曲面对的判断,若所有曲面对都没有碰撞,则返回无碰撞。
[0051] 步
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1