acm-header
登录

ACM通信

实践

机械CAD的新时代


摩托车车架的3D效果图,插图

信贷:3 dconcepts

回到顶部

计算机辅助设计(CAD)从20世纪50年代就出现了。第一个图形化的CAD程序,叫做Sketchpad,出自麻省理工学院(designworldonline.com).从那时起,CAD已经成为设计和制造硬件产品的必要条件。今天,CAD有多种类型。这篇文章的重点是机械CAD,用于机械工程。

深入研究计算机图形学的历史,可以发现最具野心和最臭名昭著的工程师之间存在着一些有趣的联系。1988年,伊万·萨瑟兰(Ivan Sutherland)凭借Sketchpad获得了图灵奖,他的学生是埃德温·卡特莫尔(Edwin Catmull)。卡特穆尔和帕特·汉拉汉因其对计算机图形学的贡献获得了2019年ACM A.M.图灵奖。这包括他们在皮克斯制作RenderMan (pixar.com),该片获得了其他电影制作人的授权。这导致了硬件、软件和图形处理器的创新。没有这些创新者,就不会有机械CAD,动画电影也不会像今天这样复杂。那时甚至不会有图形处理器。

随着时间的推移,建模几何图形已经发生了很大的变化。实体首先被建模为线框,通过用它的边、线曲线和顶点来表示对象。这演变成使用面、曲面、边和顶点的曲面表示。表面表示法在机器人路径规划中也很有价值。线框和表面表示只包含几何数据。今天,建模包括拓扑信息来描述对象是如何有界和连接的,以及描述它的邻域。(一个社区一个点由包含该点的一组点组成,在该点上人可以向任何方向移动一段距离而不离开该点的集合。)

OpenCascade、Parasolid和ACIS都是边界表示(B-rep)内核。B-rep模型由几何信息和拓扑信息组成。根据使用的程序不同,拓扑信息也不同。B-rep文件格式包括STEP(产品模型数据交换标准)、IGES(初始图形交换规范)、NX的prt、Solid Edge的par和asm、Creo的prt和asm、SolidWorks的sldprt和sldasm、Inventor的ipt和iam、AutoCAD的dwg。

视觉表示(vis-rep)模型的数据量往往比B-rep模型小得多。这是因为它们不包含那么多的结构或产品管理信息。Vis-rep模型是几何的近似值,由大量的平面多边形组成。Vis-rep文件格式包括obj、STL、3D XML、3D PDF、COLLADA和PLY。

CAD程序倾向于使用B-rep模型,而动画、游戏开发、增强现实和虚拟现实倾向于使用vis-rep模型。然而,两者经常互换。例如,如果你正在使用B-rep模型进行生产,但想要将其加载到苹果的ARKit中用于一些动画,你首先要将其转换为COLLADA,一种可视化rep文件格式。由于删除了所有的CAD数据,文件应该已经小了一些,但如果您想让它更小,您可以为不同的部分调整每个网格上的多边形计数。

今天用于构建的工具都是在巨人的肩膀上支撑着的,但要使它们变得更好还需要做很多工作。在某种程度上,机械CAD失去了一些创新的根基。让我们深入研究一些CAD程序目前存在的问题,并看看如何改进它们。

回到顶部

单线程的

因为大多数CAD内核都是建立在20世纪80年代的内核之上的,所以它们并不适合现代系统。即使是最新的CPU或GPU也不会对性能有太大帮助,因为大多数这些程序都是单线程的,或者具有单线程方面,并且没有GPU的感知能力。OpenSCAD和所有构建在CGAL(计算几何算法库)上的东西都是单线程的。当然,其中一些内核自20世纪80年代以来已经进行了更新,但它们的根仍然与它们的前辈联系在一起。(我相信从这些代码库中可以学到很多东西,但作为一个见过许多旧代码库的人,我知道这可能会导致一条危险的道路。)

这并不意味着所有的CAD内核都是如此完全单线程的。Para-solid是多线程的,但这仍然意味着,如果您导入或导出的文件格式不是Parasolid,您可能已经切换回单线程进程。多线程内核的另一个例子是ImplicitCAD (implicitcad.org),它是用Haskell编写的。

使整个CAD程序多线程化的一个问题是不同的文件格式。例如,STEP文件的格式可以追溯到20世纪80年代(iso.org),很大程度上要求使用单线程进程。(此外,STEP文件不能按顺序读取;它必须加载到内存中,然后解析。)大多数参数化CAD操作是单线程的;然而,开源项目SolveSpace (solvespace.com),它使用NURBS(非均匀有理基样条),具有一些并行操作。

回到顶部

重复

在软件开发中,指针用于获取内存地址的内容。这允许用户一遍又一遍地引用相同的内容,而不需要复制内容本身。

一些使用CAD构建的产品可能永远不会复制其模型的一部分——这对他们来说是幸运的!对于在CAD设计中有多个相似零件的人来说,大多数CAD程序都会创建这些零件的非常昂贵的副本。

例如,想象一个服务器机架模型。的默认的在SolidWorks以及许多其他行业CAD程序中复制部件(使用复制和粘贴)的方法是将子模型的全部内容复制到一个新模型中。因此,如果您在服务器机架中有32个雪橇,并且在SolidWorks中使用默认的复制方法,那么您在单独的副本中有32个完全相同的模型。这很贵。每个雪橇里面都有更多的模型,这些模型也有子模型。这将成倍地增加内核和程序的工作负载,因为程序并不知道这些都是相同的东西。

从软件开发中得到的教训是,您真正需要的是一种指向模型的指针形式。在CAD世界中,这些被称为实例。然后您可以存储模型的一个副本,而所有其他实例实际上只是对原始副本的引用。这也为用户节省了大量的时间。想象一下,当雪橇的一个部件发生变化时,必须在32个不同的位置更新模型的部件。一位智者曾经说过:“疯狂的定义就是一遍又一遍地做同一件事,却期望得到不同的结果。”

SolidWorks确实提供了另一种更符合指针操作方式的选项,但由于这不是默认的,大多数用户甚至可能没有意识到还有更好的方法。默认路径应该带来最少的痛苦。产品应该只有一个复制方法,而不是有两个复制方法。它们应该使默认方法更像指针(或实例)直到副本(不是主副本)的几何形状、表面或拓扑已经更改。在这种情况下,应该警告用户,这将像一个唯一的部分,而不是主副本。或者用户可能错误地将这些更改应用到所有副本,在这种情况下,更改应该应用到主副本。

还有一个巨大的问题。每个CAD程序都有自己实现和引用实例的方法。如果您将设计从一个CAD程序导出到另一个CAD程序,您可能仍然有32个独立的雪橇而不是一个雪橇和31个对原始的引用,只是xyz坐标发生了更改。有些程序提供了导入实例的方法,但它们都依赖于被导入的文件格式以及是否支持该格式。

即使您正在使用实例,您仍然受单线程内核的支配,并且不可能并行呈现任何副本。

回到顶部

版本控制

对于习惯于使用git的软件团队来说,能够在同一个文件上进行差异处理、修复合并冲突,并作为一个团队并行工作,可以极大地节省时间。许多初创公司正致力于将这种能力引入机械CAD。

今天使用git的人希望继续使用git,而不是为CAD重新设计版本控制,而不必在他们的工作流程中添加另一个工具。现在还没有办法将CAD文件推到git回购中,让几个人修改文件,并解决合并冲突。(好吧,也许这是可以做到的,但那将是与乐趣相反的。)对于所有致力于解决机械CAD版本控制问题的初创公司来说,这就是他们不得不重新发明轮子的原因。

在一个内核可以充分利用现代CPU和GPU的世界中,您是否也可以使用一种人类可读并允许解决合并冲突的文件格式呢?当你问:“什么东西是人类可读的,并且可以很好地使用git?”首先想到的答案是编程语言。

使用编程语言的另一个好处是:即使您不使用或不想使用git,也已经有许多不同的选项来控制人类可读文件的版本。此外,与GitHub和其他版本控制工具的集成可以通过wasm (WebAssembly)支持进行扩展,这样差异也可以可视化为渲染。

回到顶部

可编程的

回想一下服务器机架的例子。如果机架的一部分包含您正在Mathematica等程序中计算的复杂数学,那么您将不得不在另一个程序中不断地重新评估数学,并在您的模型中更新它。相反,如果您可以在CAD产品本身进行编程,那么您可以在一个地方进行所有的计算,如果方程中的任何内容发生变化,模型将会更新。

服务器机架中的每个滑道都有连接到滑道背面的网线。在使用GUI时,您将很难使它们与滑车上的连接器完全对齐。有人必须坐在模型旁边一个小时左右,仅仅是调整每根电缆以使其完美对齐——这是一种巨大的时间浪费。相反,如果可以对电缆的对齐进行编程,就可以确保每根电缆都与连接器完美对齐。

如果您想要进行网格或拓扑优化,那么对编程的需求就会变得更加迫切。不幸的是,大多数优化都是通过GUI单击界面实现的,考虑到其定义的复杂性,往往会带来比它们本身更大的麻烦。今天,一些程序允许脚本化,但是它们的api是基于COM(组件对象模型)的,并且正如您所想象的,是在20世纪90年代构建的。不过,他们提供这种服务还是很不错的。(谢谢AutoCAD,这是我用过的第一个CAD命令行界面。)

对于现代世界来说,为每一种语言的CAD程序生成SDK客户端将是非常棒的,就像生成API客户端一样。这将允许任何人用任何语言进行编程。它将降低入门门槛,因为不需要学习一门新的语言。这将允许复杂的数学在CAD程序中完成,而不是使用Mathematica, MATLAB或Wolfram Alpha。

目前存在一些可脚本化的CAD程序,它们正在为这种转变铺平道路:implic-itcad.org, libfive Studio (libfive.com), OpenSCAD (openscad.org), CadQuery (github.com), FreeCAD (freecadweb.org)和ruckus (github.com).搅拌机(blender.org)拥有很棒的控制台界面。Three.js (threejs.org),虽然不是面向CAD的,但也是3D编程语言的另一个很好的例子。Jonathan Blow的Jai (oxide.computer)是用于编写系统级代码的,也是创建一种高度考虑性能的语言的一个很好的例子。(这还没有向公众开放,但他已经广泛地谈论过了。)

大多数机械工程社区都与GUI绑定在一起,因此从GUI交互中生成代码是必要的。这与在后端生成代码的HTML指向-点击GUI非常相似。这使得想要编写脚本的人可以编写脚本,而想要单击的人可以单击。两个世界都可以是快乐的-代码在左边,渲染在右边,就像markdown编辑器一样。

如果有一个用于CAD程序和底层内核的SDK客户端,您可以想象一个插件和工具的丰富生态系统正在出现,就像围绕VSCode、Vim和Emacs的生态系统一样。大多数用于产品的CAD编辑器都是封闭的,不允许这种基于社区的开发和共享。插件可以为任何用例编写:例如,网格/拓扑优化和供应链系统集成。这包括查找部件、创建bom(材料清单)和计算模型部件的交付时间的功能。如今,这通常是在单独的程序甚至电子表格中完成的。

支持命令+P函数的插件是受欢迎的。在大多数程序中,当您想要打印一些东西时,您可以敲击command+P。(Creo可能拥有最接近这个功能的东西,但缺乏一个开放的生态系统。)对于机械CAD,当您想打印模型时,底层程序应该发现本地网络上的所有3D打印机和机器(或直接插入到您的机器),并发送与要打印的每台机器兼容的模型部件。这甚至可以更进一步——在一个有机器人的全自动工厂里,程序应该设置并启动模型和所有部件的组装。

说到3D打印,让我们看看STL文件格式。这种格式是在1987年定义的,它的名字来自于立体平版印刷,这是增材制造的第一种方法。STL文件表示一系列三角形曲面中的几何图形。由于STL是一种vis-rep格式,它不包含任何关于内部结构、颜色、纹理或B-rep格式所包含的任何其他CAD数据。现代3D打印机已经超越了STL格式的简单性。例如,要打印一个全彩模型,用户需要一个VRML(虚拟现实建模语言)文件,或一个与纹理相关联的STL文件,以便打印机向对象添加颜色和纹理。插件可以确保打印机为要打印的特定模型获得正确的数据,而不需要进行转换,并确保没有遗漏任何材料或纹理。

回到顶部

测试

CAD模型的测试流程通常由运行仿真组成。让我们以气流和热气流为例。

在软件世界中,在推送代码更新之后,通常会对更改运行持续集成(CI),让您和您的团队知道您是否破坏了什么,或者您的代码是否可以安全地合并。CAD应该以同样的方式工作。如果您对模型进行了更改,您的模拟应该在CI中运行,以便让您的队友知道您的代码是否可以安全地合并。大多数这些模拟都是计算密集型的,因此能够将模拟卸载到云或远程服务器上也是理想的。

就像VSCode和其他编辑器有很好的插件可以将测试卸载到其他计算机上一样,现代的CAD程序也应该有同样的插件。

回到顶部

用户体验与设计

在尝试了许多不同的工业CAD程序后,我发现大多数都有一个共同的特点:用户界面看起来就像来自20世纪90年代。具有讽刺意味的是,一个用于机械设计的工具没有考虑到其用户界面的设计和体验。大多数CAD程序都需要改头换面,尽管有一些例外的程序在界面设计方面做得很好:shapr3d.com)是一款iPad应用程序,设计出色,界面直观;草图大师(sketchup.com)有直观和漂亮的设计。

此外,CAD应用程序需要在MacOS、Linux和Windows上是本地的。为其特定平台构建的本机应用程序比使用Electron和类似工具构建的应用程序性能更好。(也就是说,VSCode是一个很好的电子应用程序)特别是对于像CAD这样的图形密集型程序,使用底层操作系统图形机制有助于实现尽可能好的性能。今天,CAD程序只能在该特定程序支持的操作系统上使用。此外,大多数使用的都是过时的GUI框架,真正显示了它们的年代。

Onshape (onshape.com)通过提供SaaS(软件即服务)CAD程序改变了模式。这使得昂贵的计算过程可以轻松地卸载到云上。这是一个真正革命性的想法,但它限制了用户离线工作的能力。相比之下,本地应用程序可以离线工作,但当连接到网络时,也有能力将工作负载卸载到云端。

如果CAD程序能够专注于直观的设计而不陷入复杂的陷阱,那么新用户和专业人员都应该是高效的。就像我在业余项目和专业工作中使用Vim一样,我也希望我的CAD工具在构建一个有趣的玩具时和在复杂的项目中一样好用。很多这种功能都归结于通过插件进行的接口设计和可扩展性。

回到顶部

一个更好的明天

新的CAD程序的开发人员必须仔细考虑这些方面。没有一个现有的CAD程序能够解决所有这些问题。

这个世界在很大程度上归功于计算机图形学的惊人创新,这些杰出的人包括伊万·萨瑟兰、帕特·汉拉汉、艾德·卡特穆尔、约翰·卡马克和其他许多人。我只希望计算机辅助设计的世界会发生一些真正革命性的变化,就像计算机图形学的先驱们为渲染、动画和虚拟现实铺平了道路一样。

硬件行业迫切需要一种现代的机械设计方法。为现代世界创造的一种新的CAD程序将降低建造硬件的障碍,减少开发时间,并迎来一个新的建筑时代。

回到顶部

作者

杰西Frazelle是氧化物电脑公司的联合创始人和首席产品官。在此之前,她从事Linux的各个部分,包括容器,以及Go编程语言。

回到顶部

脚注

更多在线内容:本文的一个版本包含了嵌入的信息链接https://queue.acm.org/detail.cfm?id=3469844


版权归作者/所有者所有。授权ACM出版权利。
请求发布的权限permissions@acm.org

数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc.


没有发现记录

登录为完全访问
»忘记密码? »创建ACM Web帐号
文章内容:
Baidu
map