赞
踩
现代计算机辅助设计系统通常依赖二维草图为基础来创建大多数三维几何图形。这些草图中的形状以及它们的几何信息加上它们之间的一系列约束,被用于量化组成草图的各个线段、圆、弧和样条曲线的精确大小和形状。示例约束包括总体长度、对称性、平行和/或垂直段以及圆弧半径。对于一个给定的草图,有许多约束集可以明确地定义该形状。示例约束包括长度、对称性、平行或垂直线段段以及圆弧半径。对于一个给定的草图,有不同得约束组合可以明确地定义该形状。但更多的时候,用户采用的约束组合无法准确定义形状,致使与用户的预期不符。所以用户提供关于如何更改约束定义来补救该问题的反馈就是一个棘手的问题。本文描述了一系列帮助用户诊断约束问题的技术方案,通过这项方案向用户提供一系列选项,以使草图约束问题得到正确的处理。
在大多数计算机辅助设计(CAD)系统中,二维草图是允许生成三维模型的基本元素。创建草图的方法通常是从一般形状开始,然后添加一组特定的约束来生成预期图形。草图约束的例子有线段长度、半径、夹角、平行等。通常,用户需要不断对草图中的线段、圆弧和样条曲线等添加相互关联的约束条件。然后,约束求解器负责更新彼此之间的几何关系,并提供预览效果供用户参考。
草图的概念起源于第一个图形系统,它是在20世纪50年代中期在林肯实验室的麻省理工学院开发出来的。1960年,在麻省理工学院实验室开发的一个叫做素描板的项目为CAD行业迈出了第一步。随着时间的推移,草图的概念与“参数化”的概念紧密联系。自从引入参数化以来,大多数开发者的关注点都集中在集成参数化上,而很少关注帮助用户理解如何正确地约束草图。
本文介绍了以用户为导向约束求解的一种方案。由于其纯粹性使得它可以用于任何CAD系统的实现。
草图是由线段、圆弧和样条曲线组成的二维图形。图1显示了由三个线段和一个弧组成的非常简单的草图。在图上的是几个字母和数字,它们描述了用户为“解决”草图而指定的约束条件。
表1定义了草图中这些字母的含义。表1中的“临时固定”约束是求解器在诊断草图时添加的临时约束;它们将在下一节中进一步讨论。人们可能会注意到,共线点和共线中心在图上都用“c”表示;区别在于共线点把“c”放在顶点上,共线中心把“c”放在弧的中心。共线性、距离关系和长度关系的约束将在后面的例子中进行解释和证明。
由于几乎所有的约束都引用了一个顶点数,所以其他每个顶点数都被标记在图上,如图1所示。请注意,所有的线段和线弧都使用它的起始顶点进行标记,这是通过绕着图的逆时针方向来确定的
约束名 | 约束描述 | 约束名 | 约束描述 |
---|---|---|---|
X | 临时固定 X分量 | l | 长度 |
Y | 临时固定 Y分量 | lr | 长度关系 |
C | 临时固定 曲率 | h | 水平 |
x | 固定x分量 | v | 垂直 |
y | 固定y分量 | i | 倾角 |
p | 夹角垂直 | r | 半径 |
t | 相切 | T | 圆弧转角 |
c | 共线点 | c | 共线中心 |
d | 距离关系 |
表1 简易的约束对照表
根据霍夫曼和维米尔的理论,求解约束系统有四种基本方法:
1、数值法:基于代数方法的几何约束求解方法,简单地说,是指首先通过建立一个坐标系将几何约束转化为一组代数方程组,继而采用数值计算的方法和符号计算的方法求解。其中Newton-Raphson 方法(简称牛顿法)是数值计算中用得最多的一种方法。这种方法的求解速度快,但是需要一个好的初值而且对初值的选取比较感。
2、符号法:符号方法也是先将约束转化为一组代数方程,然后采用符号推理的方法,如 Wu-Ritt分解算法或 Grobner 基方法将方程组映射成符号系统来实现非线性方程组的分解,最后采用数值方法求解。
3、规则法:阿尔德菲尔德提出的基于规则的约束构造法,将手工绘图的过程分解为最基本的作图规则,运用经典的人工智能的符号运算、知识表达、匹配技术,采用通用的推理机进行几何推理与计算,从而得到满足约束的几何图形。
4、图构造法:基于图的求解方法首先分析约束,得到反映约束对象之间依赖关系和求解次序的约束依赖图(简称约束图),然后根据约束图进行约束求解得到最终的设计结果。
数值法由于其通用性,是最常用的方法,是本文描述的技术的基础。
牛顿法法是通过调整草图的自由变量,将一组残差R(每个残差都来自用户指定的约束)驱动为零。对于图1中的草图,变量是x和y顶点位置以及弧曲率C。
x
T
=
[
x
1
y
1
x
2
y
2
x
3
y
3
x
4
y
4
C
3
]
x^T=
(1)
系统中变量的数量决定了定义约束方程的数量,这是唯一地求解草图和定位顶点坐标所必需的。这个例子有9个变量,因此需要9个残差方程来定义草图。如等式(1)所示:
表2 定义残差方程
表2中的残差方程全部排列好,当求解草图并满足约束条件时,残差将消失(为0或无限接近于0)。注意,相切函数,这里没有具体的实现,你可以根据你自己的实际情况来定义相切方程。
牛顿方法使用了一个由∂Rn/∂Xn定义的雅可比矩阵。该问题是用一个矩阵系统来建立的,如等式(2)所示:
(2)
通过将一个点(初始或当前猜测)线性化,并应用有限差分表达式来求解雅可比矩阵中的单个项。通过约束公式的符号微分来直接评价导数是可能的,但在目前的工作中已被发现没有什么好处。为了用迭代的方法求解方程组,每次迭代都更新∆x向量,将R向量驱动为零。当R向量的最大值小于给定的公差,迭代停止,认为求解完成。
在等式中的矩阵(2)设置的优势是,如果定义准确,任何的问题将被解决。
该数值方法用于寻找草图解,因为给定一个定义良好的系统和高质量的初始值,该方法总是会找到一个解。该系统的主要缺点是它依赖于初始条件,以及迭代方法可能会很耗时。尽管有这些缺点,理论上用数值方法能够解决任何定义良好的约束问题。
为了进一步演示,将使用图2所示的草图。这个草图由8个顶点和三个弧的曲率定义,总共有19个变量,如等式(3)所示:
x
T
=
[
x
1
y
1
x
2
y
2
x
3
y
3
x
4
y
4
x
5
y
5
x
6
y
6
x
7
y
7
x
8
y
8
C
1
C
2
C
7
]
x^T=
(3)
此草图使用了长度关系,这是用于关联不同长度的约束条件。在这个测试草图中,使用一个“长度关系”来定义段4-5段是段6-7段长度的三倍。标签只出现在图5中(后面)关系的第一段上。
完全约束的结果如图2所示:
用于定义此定义的约束草图如表3所示。虽然图2可能看起来并不复杂,但有许多不同的方法来定义草图的约束,以得到一个完全约束的系统,这是最终的目标。表中显示的约束只是完全定义所需草图的各种方法中的一种,这将在后面详细探讨。
一个草图可以分为四种不同的状态之一;完全约束、过度约束、欠约束或不当约束。一个完全约束的系统具有适当数量的约束,并且是可解的,因为在没有奇点存在,这导致了草图的一个明确的解决方案。过度约束系统有太多的约束,这些约束可能也可能不能正确地定义草图。一个欠约束的系统没有足够的约束来唯一地定义草图,需要继续添加约束。不适当的约束系统具有正确数量的约束条件,但可能存在相互冲突的约束条件,从而导致一个奇点,而某些坐标是不可解的。下面将描述每种情况。
大多数CAD系统将识别给定草图上的约束状态。商业系统对可以添加的约束类型也有限制;因此,在ProEngen5中对草图的定义方式和之前的定义方式略有不同。本商业包装中没有整体长度和高度的限制。此外,要使用长度关系,必须定义其中一个长度,这与在我们在上面草图求解器中使用的长度不同。
当确定约束系统的状态时,原工程师采用了一种独特的方法。项目工程师为防止草图因其意图而在约束下开始。作为对象(直线、圆弧等)被添加到草图中,添加“弱”约束,这是纯粹的维度约束,创建和维护一个完全定义的草图。用户向系统中添加约束以创建所需的对象,随着约束的添加,自动添加的弱约束将被删除。虽然这使复杂草图的系统处于可解状态,但添加的尺寸通常不是用户真正想要定义的,并且没有关于可以添加哪些其他约束的反馈。使用我们在原工程师中的测试形状,完全定义的草图如图3所示。当我们去掉段8-1(底部水平段)的长度时,给图4所示的形状增加了一个新的尺寸。
在草图求解器中,草图是根据用户的反馈进行诊断和修复的,而不是像在项目工程师中那样自动修补。系统首先通过行简化雅可比矩阵来识别奇点的位置。对于一个定义良好的系统,行缩减将会产生单位矩阵,但对于欠约束的系统,将至少会有一个零列。奇点的位置,由一个零列标识,显示了哪个参数是未定义的。
草图求解器会暂时为缺失的参数添加一个固定点,并再次检查该矩阵。之所以使用这种迭代方法,是因为它有可能在约束系统中普遍存在多个问题。如果矩阵只有一个问题,那么就不需要临时约束。一旦所有的奇点都被替换为临时不动点,求解器将逐个检查表4中的所有约束,以确定对用户有意义的替换。
顶点约束 | 线段约束 |
---|---|
固定x分量 | 长度 |
固定y分量 | 水平 |
夹角垂直 | 垂直 |
相切 | 半径 |
折转角 | |
表4 要添加到草图中的约束选项 |
其中一些约束需要值,如长度、半径和转弯角;对于这些,来自用户绘制草图的初始预估值用作约束的值。对于垂直度,约束可以是凸的或凹的交点。在所有这些实例中,用于验证约束的自动生成的值都将显示给用户,然后要求用户提供一个值。用户使用的内部值只是为用户提供指导,以帮助选择合适的值。如果用户输入的值与测试的值差异太大,矩阵可能会发展一个奇点并导致牛顿求解器发散;有关更多细节,请参阅实现问题部分。
为了演示来自草图器的反馈,我们从表3中删除了两个约束条件。删除的约束垂直于顶点6(靠近图左侧的内角)和水平段3-4(在顶部)。去除这些约束会导致一个定义不足的草图,无法解决y6和曲率C2的位置,如图5所示。
在添加这些临时约束之后,用户将给出替换临时固定的y6的所有可能选项,以选择要添加到系统中的选项。本案例有9种可能的选择,如图6所示。
对于这个示例,用户选择在顶点6处添加凹垂直度,这是从原始完全定义的系统中删除的约束;呈现给用户的九个选项中的任何一个都将允许草图被求解。由于从系统中删除了两个约束,因此还有另一个临时约束需要用一个更符合用户设计意图的约束来替换。
有15个选项可以替换临时固定的C2点,如图7所示。
选择段3-4是水平的选项将导致最初使用的相同的约束集和相同的图形。与前面一样,这15个选项中的任何一个都将产生一个完全定义的草图。
该系统的优点是,添加的约束是暂时的,仅仅是识别当前草图系统的所有问题的一个步骤,并被用户选择的约束所取代。为未定义的草图替换临时约束的过程同样用于修复不适当约束的系统(后面将描述)。
过约束的草图是所有被测试的商业CAD系统都承认并提供一些修复建议的唯一状态。在AutoCAD中,当添加一个新的约束导致系统过渡约束时,通知用户添加该约束将过度约束系统,因此不能添加,如图8所示。AutoCAD对如何解决该问题没有提供任何帮助,而只通知用户存在该问题。
从所显示的消息来看,AutoCAD并不区分不正确和过度约束的系统。如果不清楚所有的约束都应该是什么,这可能会使一个完全定义的草图难以获得。另一个挑战是AutoCAD不允许某些约束(例如在图2中的顶点1处的垂直度约束)。为了绕过这一点,下一个逻辑约束将是将圆弧1的中心设置为与线段8-1共线。共线性约束,与其他约束一起,将在该顶点保持垂直交点。遗憾的是,这也不是AutoCAD中的一个选项,演示提供如何完全约束草图的建议对用户有帮助。
项目工程师提供了更多的信息,发布一个窗口,标识与被添加的约束冲突的约束,并允许用户选择删除哪个,如图9所示。
修复草图以更好地限制原工程师当然更友好;然而,这对所有的情况都没有帮助。偶尔,每个约束都作为一个选项呈现出来,这可能实际上对用户没有帮助。SolidWorks查看了一个过度约束的草图,并提供了一个手动修复或诊断工具。手动修复类似于原始工程师,因为它只是提供了一个相互冲突的约束条件的列表。该诊断工具更为复杂,使用起来需要时间。诊断工具消除了相互冲突的约束,并提供了解决方案来修复草图的适当约束。图10显示了提供给用户的反馈的一个示例。
SolidWorks中的诊断工具提供了修复草图的所有选项,在选择之后,草图将完全定义。注意,虽然在诊断工具中,草图在用户进行选择之前定义不足。草图通过基于草图的灵敏度对解决方案进行排序,进一步提高了这个反馈,并提出了在最终草图中与原始猜测差异最小的选项,将在灵敏度部分中进一步讨论。
草图求解器识别冗余的约束选项,并通过在图中以红色突出显示约束来将它们呈现给用户。然后,用户可以选择从系统中删除哪些约束,以生成一个完全定义的系统。下一节将使用一个例子来演示过度约束的反馈。
诊断不当约束系统使用欠约束和过约束方法的组合。首先,需要确定未确定的坐标,这与欠约束问题的处理方式相同。要向问题添加临时约束,草图将成为过度约束,并且临时约束必须替换系统中的当前约束之一。标识可以添加临时约束的执行方式与过度约束的系统相同。一旦约束系统具有适当数量的约束,并且能够确定所有的坐标,草图求解器就可以像以前一样开始替换临时约束的过程。
专业的工程师和SolidWorks除了不允许添加冲突约束的对话框外,都没有为不适当约束的系统提供任何反馈。这样做的问题是,有时有些约束比其他约束更重要,而且约束不一定是由用户按重要性的顺序添加的。在商业CAD系统中,如果没有关于冲突约束的信息,用户可以尝试找出问题在哪里,或者重新开始,并希望得到更好的结果。
使用图2所示的草图,并修改约束得到一个不当约束问题,可以演示草图求解器。将顶点6(靠近图左侧的内角)处的垂直度约束替换为弧2半径(右侧较大的顶部弧)的设定值,将创建冗余信息。y6的位置不能用这个方程组来确定,因此必须添加一个临时的约束。然而,一个不适当的约束系统有9个约束。为了给方程组添加一个临时的约束,必须删除一个方程组。图11显示了可以用临时固定点替换的约束选项。
对于这种特殊情况,只有一个选项可用来消除约束。一旦将所有必要的临时固定点约束添加到系统中,草图求解器将寻找替换之前的临时约束的选项,如图12所示。当前的设置将产生8个选项来替换临时约束。
其中的任何一个都可以被选择来得到一个完全约束的系统。这些选项以有序列表的形式呈现给用户,首先列出与原始猜测偏差最小的选项。
图2中定义的草图已用于演示草图求解器在不同情况下将提供的各种类型的反馈。草图求解器也已经使用更复杂的、真实世界的草图进行了测试。图13中的草图是工程图形7中的一部分的改编,使用OpenCSM素描图复制。
并不是所有的草图约束都在工程图纸中被清楚地识别出来,求解器被用于帮助确定完全定义系统所必需的一些最终约束。
这个草图也提供了一个例子来讨论“距离关系”是什么,特别是因为它通常用于描述机械部件。距离关系是从顶点到直线的约束。例如,在图13中,顶点3距离图的右侧有3.30英寸。这在顶点用“d”标记。与长度关系相似,只有该关系中的第一个顶点被标记。
这个新系统面临的最大挑战是奇点问题。最终,草图的状态依赖于由约束和初始或当前猜测产生的雅可比矩阵。奇异雅可比矩阵是两个问题之一的指示:一个错误的猜测或一个不正确的约束方程。当用户通过在空间中放置点来在屏幕上绘制图形时,就可以获得初始猜测。因此,对顶点的位置得到了一个合理的初始猜测。当向系统添加约束时,最初的猜测可能会产生一个通过选择智能约束来解决的问题。
首先,人们可以预测,如果一个矩阵有一个奇异点,当矩阵最初建立时会很明显。然而,由于牛顿法中固有的迭代过程,一个奇点可能会在几次迭代后“出现”。例如,初始猜测可能在水平段两端的y值上有差异,当求解草图时,当水平约束满足了时,这个差异会变小。如果在同一段上也有长度约束,则当满足水平约束时,段两端的y坐标可能成为未定义。
在替换临时约束时,也会考虑到同样的问题。如果草图求解器试图确定一个y值,并且线段几乎是水平的,那么线段的长度将在几次迭代后产生一个奇点。这是因为水平段的长度只依赖于水平段两端的x值。这将是一个很差的约束选择,所以草图求解器在这些情况下不会测试长度。
当一些约束得到满足时,奇点“出现”在矩阵中的问题,使得简单地看雅可比矩阵不足以确定添加该约束是否是一个合理的选择。为了防止在最终草图中出现问题,矩阵被每个约束测试完全约束,以确定被测试的约束的有效性。
草图器的功能是巨大的,并为用户提供有价值的反馈,以帮助创建和维护一个完全定义的草图。如前所述,检查所有的约束选项可能是一个耗时的过程。除了只检查不会产生奇点的合理选项外,直观上的坏约束也会被跳过。例如,检查线段的长度,但如果线段是弧,则跳过长度。类似地,半径和转弯角约束只检查弧,因为它们不适用于线性问题。
除了发现和纠正奇点问题外,还有敏感性问题。偶尔,在设计过程中,用户可能想知道的不仅仅是解决方案是什么。当试图优化一个形状以满足其他一些工程目标时,每个点对其中一个约束条件中的扰动的敏感性可以是有价值的信息。例如,再次查看图2中的测试草图,用户可能需要稍微改变总长度,以满足空气动力学目标。当改变一个约束时,就会对整个系统产生影响,并且某些点比其他点受到的影响更大。
了解每个顶点如何受到不同约束的影响,可以为设计者提供有价值的信息,了解在其他领域可以进行影响最小的更改。灵敏度矩阵可以简单地使用有限差分来确定,如等式所示 (4)。
(5)
检查这个矩阵的单个元素可以阐明灵敏度矩阵是如何形成的。例如,在等式中(5)L是总长度,它是9个单位,然后扰动为9.02个单位,以找到第二个顶点的x坐标对总长度约束的敏感性。灵敏度矩阵的每个元素都使用相同的过程找到。全灵敏度矩阵的转置如表5所示,其中每个约束方程都被2π/180扰动。转置矩阵的行表示如表3所示的约束方程,列是每个点的x和y位置,然后是三个弧曲率。
从灵敏度矩阵来看,每个约束对系统的每个定义坐标的影响是清楚的。例如,看看转置的灵敏度矩阵的第一行,我们可以看到只有x坐标受到第一个约束(固定的x1)中的扰动的影响。这一观察结果既合乎逻辑又微不足道。然而,最后一个约束(圆弧1的固定半径)对草图另一边的x坐标的影响很小或没有影响,这在直观上并不明显,但通过灵敏度矩阵很容易看出。
灵敏度信息在绘制器中用于对解进行排序,通过将使所有顶点最接近初始猜测的解首先进行排序。对于一个复杂的草图,哪种约束替换是最好的,哪一个最接近用户的意图,因此对解决方案进行排序可以帮助用户决定添加哪个约束。
草图是现代几何生成技术的基石,而理解如何正确地约束它们已经被证明是具有挑战性的。向用户提供关于草图在哪里有约束问题的信息,将帮助用户以更有效的方式构建草图。理解敏感性可以帮助工程师就几何图形和约束选项做出更明智的优化决策。
1、约束问题是几何内核中的一个核心内容。在成熟的商业CAD软件中,是否拥有完善的约束功能通常是一个重要的衡量标准。
2、约束问题由于其问题规模的庞大,成为了大部分开发工程都不能轻松面对的问题。
3、本文的目的,主要还是提供一种从数值层面求解约束问题的思路,但其完备性有待检验。如果你是一个约束问题的初心者,那么这个思路可以成为你入门的参考。如果你是一个经验丰富者,那么希望本篇中提到的细节能成为你优化自身产品的建议。
4、目前的主流约束求解器通常都会采用多种策略来进行工作。包括本文所用到的数值法,更为理想的求解模型还需要加入符号法与图构造法来联合求解,这又是另一个话题了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。