GenCAD革命:2-10年内颠覆传统CAD

几周前,我受到最近使用LLM驱动Blender的启发,Blender是广泛用于动画的开源建模工具。鉴于LLM在生成代码方面非常出色,也许CAD建模的编程接口可以用于以类似的方式生成实体模型。我立刻想到了OpenSCAD,这是一个开发了15年多的开源编程CAD工具。代替使用点击软件来创建实体模型,用户编写软件脚本,然后将其渲染到实体CAD模型中。

LLM 擅长编写 OpenSCAD 为了测试它,我在 Cursor 中创建了一个简单的项目,制作了一个空白的 OpenSCAD 脚本(Cursor.scad),并添加了一些 Cursor 规则:

# Your rule content

  • We're creating files to model things in open scad. 
  • All the OpenScad files you create will be in Cursor.scad. I've set up this file such that if you edit it, it will automatically be read by OpenScad (it's the open file in the program). 
  • If I want to save what you've done, I'll tell you and you should create a new file and put it in the Saved folder. 
  • That's it! Overtime, if needed, we could create documentation about how to use OpenScad. 
  • If I'm asking you to create a new design, you should delete the current contents of cursor.scad and add the new design into it.
  • When I make requests you should always first develop a step by step plan. Then tell me the step by step plan. And then I'll tell you to start modeling. 
  • When you're going through the step by step plans, only execute one step at a time. 
  • When you've executed a step, ask the user if its right.

然后,我开始使用 Cursor 创建实体模型。

第一次尝试并没有成功,但经过几次迭代(包括提供屏幕截图),我们创建了一个基本案例。

您还可以利用 OpenSCAD 库(有很多公共库)。在这里,我使用库来为法兰制作螺纹。

非常巧妙的是,LLM 可以运用其机械工程方面的常识:例如,Cursor 在管道上为 M6 螺栓创建了孔,并且正确地将直径设置得略大于 6 毫米,以便螺栓可以穿过。

bolt_hole_d = 6.5; // Diameter for M6 bolts

当然,这种方法的一大优点是文件可编辑,并且 Cursor 默认会参数化设计的所有关键元素。

在上面的例子中,我要求它添加安装螺栓的孔,它确实做到了,然后我手动将孔的数量从 4 修改为 3。

// Flange parameter
flange_OD = 50; // Outer diameter of the flange in mm 
flange_thickness = 10; // Thickness of the flange in mm
pipe_size = 1/2; // NPT Pipe Size

// Bolt hole parameters
num_bolts = 3;
bolt_hold_d = 6.5; // Diameter for M6 bolts
bold_hole_circle = 35; // Diameter for the bolt circle

为 LLM -> OpenSCAD -> STL 构建评估 这些初步结果给我留下了深刻的印象,但我想了解更多。例如,模型的推理能力是否有助于它思考创建零件的步骤?因此,我决定开发一个评估工具,以测试各种 LLM 通过 OpenSCAD 生成实体模型的性能。

创建 CAD 设计评估的挑战之一是,大多数任务都有多个正确答案。例如,“制作一个 10 毫米长的 M3 螺钉”这样的任务可能会有多个正确答案,因为该任务中没有定义螺钉头的长度、直径和样式。为了解决这个问题,我决定在评估中编写任务,使几何形状只有一个正确的解释。

例如,这是评估中的一项任务:

这是一块厚度为 3 毫米、带有两个孔的矩形板。

该板的尺寸为 18 毫米 x 32 毫米。

当向下看接骨板时,它有两个穿过它的孔。在接骨板的左下角,有一个中心点距离短边(18 mm)3 mm,距离长边(32 mm)3 mm的孔。这个洞的直径为2毫米。

板的左上角大致位置有一个直径为3mm的孔,其中心点距离短边(18mm边)8mm,距离长边(32mm边)6mm。

这种方法的好处是,我们可以将每个任务评定为“通过”或“失败”,并且能够自动化完成。我总共编写了 25 个 CAD 任务,难度从单个操作(“一根 50 毫米长、外径 10 毫米、壁厚 2 毫米的管道”)到 5 个连续操作不等。对于每个任务,我都使用 Autodesk Fusion 360 设计了一个参考 CAD 模型,然后导出了 STL 网格文件。

然后,我开始编写自动化评估管道(当然,我实际上并没有编写太多代码)。

eval 管道的工作原理如下:

  1. 对于每个任务和模型,eval 通过 API 将文本提示(以及系统提示)发送到 LLM。
  2. LLM 发回 openSCAD 代码。
  3. openSCAD 代码被渲染成 STL
  4. 自动根据参考 STL 检查生成的 STL
  5. 如果任务通过了一系列几何检查,则该任务“通过”。
  6. 然后将结果输出到仪表板中。

几何检查的工作原理如下:

  • 使用迭代最近点 (ICP) 算法对生成的 STL 和参考 STL 进行对齐。
  • 然后通过以下方式比较对齐的网格:
    • 其数量(通过 = <2% 差异)
    • 它们的边界框(通过 = <1 毫米)
    • 零件间平均倒角距离(通道数 = <1 毫米)
    • 豪斯多夫距离(95% 百分位数)(通过 = <1 毫米)
  • 为了“通过”评估,必须通过所有几何检查。

评估流程有几个地方可以改进。特别是,误报很常见(估计约为 5%)。我还注意到,自动几何检查偶尔会捕捉到一些不正确的小特征(例如小半径圆角)。尽管如此,评估流程仍然足够好,可以看到有趣的结果,并比较不同 LLM 的性能。

如果您想了解有关评估的更多信息、使用它或查看任务,请查看GitHub repo

最后,有很多方法可以改进评估。以下是我下一步想做的几件事:

  • 任务更多,覆盖范围更广
  • 优化系统提示,特别是通过添加OpenSCAD文档和代码片段
  • 创建一个使用草图和图纸作为输入的eval变体
  • 添加另一个变体,测试 LLM 向现有 OpenSCAD 脚本和 STL 添加操作的能力
  • 评估 LLM 修复现有 STL / OpenSCAD 代码中错误的能力

下一步是什么? 我认为这些初步结果很有希望。Cursor(或其他编码代理)+ OpenSCAD 提供了一种自动化生成实体模型的解决方案。

然而,我认为这种方法不会在 CAD 设计生态系统中迅速普及。目前的设置非常笨重,我认为需要对产品进行实质性的改进才能使其更好地发挥作用。与 Cursor、Windsurf 和其他工具为代码生成开发了特定的用户体验 (UX) 和 LLM 工作流程类似,我认为开发适用于 CAD 生成的工作流程和用户体验 (UX) 也需要大量的工作。以下是我认为值得在这方面尝试的一些想法:

  • 将控制台日志和视口图像从 OpenSCAD 引入 Cursor 以进行迭代改进和调试的工具。
  • 用于突出显示(和测量)零件的某些面、线或方面的 UI,这些内容将被输入到 LLM 以获取更多上下文。
  • 绘图或草图输入,以便用户可以快速直观地传达他们的想法。
  • 带有滑块的 UI 可以调整参数,而无需编辑代码。
此外,我预计模型的进一步发展将继续解锁这一应用。特别是,改进空间推理是一个活跃的研究领域。我认为,改进的空间推理可以极大地提升模型逐步设计零件的能力。

那么,文本转 CAD 什么时候才能成为机械工程师常用的工具呢?随着初创企业积极打造产品,以及前沿模型的快速改进,我估计大概需要 6-24 个月。

从中长期来看(2-10年),我预计大多数零件都会采用某种形式的GenCAD来创建。请允许我进行一些推测。

  • 最初,GenCAD 将用于创建可与现有组件配合的零件。例如,您可能会说:“我需要一个适合这里的支架。” GenCAD 工具将创建一个与现有组件完美连接的支架。想要使用 FEA 分析三种变体吗?那就提出要求吧。我预计主流 CAD 软件(Autodesk、Solidworks、Onshape)会将这些功能直接添加到其产品套件中。
  • 从长远来看,我认为 GenCAD 将覆盖 CAD 套件的方方面面:草图、配合、装配体、爆炸视图、CAM 刀具路径、渲染可视化和 CAE。想象一下,在设计评审中,你突出显示一个子组件,并说“用 M6 沉头螺钉替换这些铆钉,并重新生成 BOM”。模型、图纸和采购电子表格都会在几秒钟内更新。
我们正在见证CAD逐渐告别手动输入时代。我个人对此感到非常兴奋。