Skip to content

Latest commit

 

History

History
483 lines (358 loc) · 23.8 KB

File metadata and controls

483 lines (358 loc) · 23.8 KB

ForgeCAD 官方 3D 打印机、键盘与灵巧手案例复现:从 benchmark GIF 到参数化装配

本章复刻 ForgeCAD public kit 里的官方 benchmark 条目 3dprinter-gpt52codex,并补充视频里很有辨识度的键盘和官方可动灵巧手案例。官方 3D 打印机公开的是 README 表格、prompt 和 GIF 结果,public kit 与 assets 仓库里没有放出对应源码;灵巧手则有可运行示例 examples/mechanical/5-finger-robot-hand.forge.js。本章把官方公开动图、本地渲染和可运行脚本都放进同一条复现链路。

ForgeCAD 官方 3D 打印机 benchmark GIF

图 1 官方 benchmark 资产 3dprinter-gpt52codex-2026-02-13-14-36-06-v2.gif。来源是 KoStard/forgecad-public-kit README 中的 LLM Benchmarks 表格,GIF 文件托管在 KoStard/ForgeCAD-assets

这章为什么替换掉简单 CAD 支架

之前的小支架能说明 ForgeCAD 的基础命令,但视觉效果和官方宣传里的“复杂装配”差距比较大。3D 打印机案例更适合放在主 README:它有龙门框架、热床、X/Y/Z 运动部件、打印头、皮带、线材、料盘和控制盒,读者一眼能看懂这是一个完整的机电装配,而不是单个小零件。视频里的键盘也适合作为第二个案例:它不是机器人机构,但能展示 ForgeCAD 对密集重复结构、按键阵列、外壳倾角和局部强调色的表达能力。

这也更接近机器人教程需要强调的能力:不是只生成一个漂亮外壳,而是把结构关系写成可编辑参数。打印头 X 位置、热床 Y 位置、龙门 Z 高度、构建体积尺寸都写在脚本参数里,后续可以用同一份源码反复修改和验证。

官方条目核对

字段 内容
官方仓库 KoStard/forgecad-public-kit
benchmark 名称 3dprinter-gpt52codex
时间与版本 2026-02-13 14-36-06 · v2
官方 prompt Make a detailed home 3D printer, showing the internal details of how it should work. Add some params for controlling positions, etc.
官方 GIF https://raw.githubusercontent.com/KoStard/ForgeCAD-assets/main/benchmarks/3dprinter-gpt52codex-2026-02-13-14-36-06-v2.gif
源码状态 public kit 当前没有公开对应 .forge.js,本章使用本地复刻脚本演示可运行流程

复查命令如下:

git clone https://github.com/KoStard/forgecad-public-kit.git ..\forgecad-public-kit
git clone https://github.com/KoStard/ForgeCAD-assets.git ..\ForgeCAD-assets

rg -n "3dprinter-gpt52codex|Make a detailed home 3D printer|ForgeCADBenchmark" ..\forgecad-public-kit\README.md
rg --files ..\forgecad-public-kit | rg -i "3dprinter|gpt52|version_2|forge\.js$"
rg --files ..\ForgeCAD-assets | rg -i "3dprinter|gpt52"

本机结论是:public kit 的 README 有官方表格行,ForgeCAD-assets 有 GIF,未找到公开的 3D 打印机 .forge.js 源文件。

本地复刻文件

本章保留的可复现资产如下:

文件 作用
forgecad_3d_printer_demo.forge.js 本地可运行的 ForgeCAD 3D 打印机复刻脚本
forgecad_keyboard_demo.forge.js 本地可运行的 ForgeCAD 键盘复刻脚本
forgecad_robot_hand_publickit.forge.js 从 public kit 复制的官方 5 指灵巧手示例
assets/official_3dprinter_gpt52codex.gif 从官方 assets 仓库保存的 benchmark GIF
assets/official_robot_hand_v2.gif ForgeCAD public kit README 顶部官方可动灵巧手 GIF
assets/official_robot_hand_gpt52codex.gif robot-hand-gpt52codex benchmark GIF
assets/official_3dprinter_gpt52codex_frame.png 从官方 GIF 抽取的 README 静态预览帧
assets/forgecad_3d_printer_iso.png 本地复刻模型等轴测渲染
assets/forgecad_3d_printer_front.png 本地复刻模型前视渲染
assets/forgecad_3d_printer_top.png 本地复刻模型俯视渲染
assets/forgecad_keyboard_iso.png 本地复刻键盘等轴测渲染
assets/forgecad_keyboard_low_angle.png 本地复刻键盘低视角渲染
assets/forgecad_robot_hand_param_sweep.gif 本地用 4 组参数渲染并合成的灵巧手动作 GIF
outputs/forgecad_3d_printer_demo.step 精确 CAD 交换文件
outputs/forgecad_3d_printer_demo.stl 网格导出,适合预览或切片检查
outputs/forgecad_3d_printer_demo.3mf 3D 打印工作流常用容器格式
outputs/forgecad_keyboard_demo.step 键盘精确 CAD 交换文件
outputs/forgecad_keyboard_demo.stl 键盘 STL 导出
outputs/forgecad_keyboard_demo.3mf 键盘 3MF 导出
outputs/forgecad_robot_hand_publickit.step 官方灵巧手 STEP 导出
outputs/forgecad_robot_hand_publickit.stl 官方灵巧手 STL 导出
outputs/forgecad_robot_hand_publickit.3mf 官方灵巧手 3MF 导出

本地复刻的 ForgeCAD 3D 打印机等轴测图

图 2 本章复刻脚本生成的 3D 打印机装配。当前版本已经按官方 GIF 对齐了主要视觉特征:深色背景、黑色机架、银色导轨、蓝色热床、橙色加热板、青色构建体积框、右上红色料盘和前方控制盒。它仍然不是官方源码的逐行还原,而是围绕同一个 prompt 做的可运行教学版;如果要像素级一致,需要官方公开原始 .forge.js、相机和 scene 配置。

环境选择

这个案例不需要创建新的 micromamba 环境。ForgeCAD 走 Node.js/npm CLI,渲染 PNG 时调用本机 Chrome;不涉及 PyTorch、CUDA 或机器人仿真依赖,也不吃显卡显存。

本机复现环境:

项目 本机设置
系统 Windows PowerShell
Node.js 22.16.0
npm 10.9.2
ForgeCAD npx --yes forgecad@0.9.14
Chrome C:\Program Files\Google\Chrome\Application\chrome.exe
GPU 不需要;CLI 建模和导出主要走 CPU,渲染由 Chrome/WebGL 完成

安装检查:

node --version
npm --version
npx --yes forgecad@0.9.14 --version

建模拆解

这类案例的本质是 AI-assisted CAD,而不是“图片直接变 CAD”。大模型负责把自然语言需求、参考图观察和工程结构拆解写成 .forge.js 源码;ForgeCAD CLI 再执行这份 JavaScript/TypeScript 脚本,调用自己的几何建模、布尔、装配、渲染和导出能力,生成可查看、可导出的 CAD 几何。也就是说,.forge.js 是 CAD 的源代码,不是最终 CAD 文件;最终可交换的几何结果仍然是 STEP、STL、3MF 等文件。

一个更准确的流程是:

flowchart LR
    A["自然语言需求 / 官方 prompt"] --> B["大模型生成或修改<br/>.forge.js 源码"]
    B --> C["ForgeCAD 执行脚本<br/>生成几何对象"]
    C --> D["forgecad run<br/>参数与脚本检查"]
    C --> E["forgecad render 3d<br/>截图 / GIF 帧"]
    C --> F["forgecad export<br/>STEP / STL / 3MF"]
    C --> G["forgecad check print<br/>制造边界检查"]
Loading

本地复刻脚本按 3D 打印机的真实功能模块拆成多个对象。这里没有把所有零件合并成一个大 union,因为官方 GIF 的可读性很依赖局部颜色:黑色框架、银色导轨、蓝色热床、橙色加热板、青色构建体积框和红色料盘都需要单独保留材质。

模块 脚本对象 说明
龙门框架 frame 立柱、上下横梁和脚垫,表达 CoreXY/盒式机架轮廓
热床 orange heater plate / blue print bed / bed carriage and rails 蓝色构建板、橙色加热板、Y 轴导轨和床车
Z 轴 z motion system Z 向光轴和丝杆
构建体积 cyan build volume cage 用青色细边框模拟官方图里的透明打印空间
X 轴与打印头 x gantry / print head / belts X 横梁、导轨、皮带轮、风扇、热端、喷嘴和散热片
料盘与耗材 red spool / filament 右上角红色料盘、支架和简化耗材路径
控制与细节 front electronics / small details 前方控制盒、屏幕、旋钮和局部导向件

关键参数集中在文件开头:

const headX = Param.number("Print Head X", 22, { min: -70, max: 70, unit: "mm" });
const bedY = Param.number("Print Bed Y", 12, { min: -45, max: 45, unit: "mm" });
const gantryZ = Param.number("Gantry Z", 128, { min: 70, max: 175, unit: "mm" });
const buildVolumeW = Param.number("Build Volume Width", 118, { min: 80, max: 150, unit: "mm" });
const buildVolumeD = Param.number("Build Volume Depth", 105, { min: 80, max: 135, unit: "mm" });

这几个参数对应官方 prompt 中的 “params for controlling positions”。教程读者可以先只改这几个值,观察打印头、热床和构建体积如何变化。

运行脚本

进入本章目录:

cd 21-机械臂和机器人设计/03ForgeCAD视觉逆向工程入门

运行 ForgeCAD 脚本:

npx --yes forgecad@0.9.14 run forgecad_3d_printer_demo.forge.js

本机结果:

Objects: 13
Verifications: 5 pass, 0 fail
Params: Frame Width=180, Frame Depth=150, Frame Height=210,
        Print Head X=22, Print Bed Y=12, Gantry Z=128,
        Build Volume Width=118, Build Volume Depth=105
Time: 563ms

这里的 5 个验证包括整体宽度、深度、高度、龙门高度和打印头是否仍在机架内部。它们不是机械强度校核,只是防止参数改坏后模型明显失真。

多视角渲染

渲染需要 Chrome 路径。本机命令如下:

$chrome = "C:\Program Files\Google\Chrome\Application\chrome.exe"

npx --yes forgecad@0.9.14 render 3d forgecad_3d_printer_demo.forge.js `
  --output assets/forgecad_3d_printer_iso.png `
  --camera 55:20 `
  --background "#242424" `
  --edges thin `
  --render-style classic `
  --chrome-path $chrome `
  --fresh-server `
  --port 5180

npx --yes forgecad@0.9.14 render 3d forgecad_3d_printer_demo.forge.js `
  --output assets/forgecad_3d_printer_front.png `
  --camera 70:18 `
  --background "#242424" `
  --edges thin `
  --render-style classic `
  --chrome-path $chrome `
  --fresh-server `
  --port 5181

npx --yes forgecad@0.9.14 render 3d forgecad_3d_printer_demo.forge.js `
  --output assets/forgecad_3d_printer_top.png `
  --camera 35:58 `
  --background "#242424" `
  --edges thin `
  --render-style classic `
  --chrome-path $chrome `
  --fresh-server `
  --port 5182

如果大家想尽量接近官方 GIF 的观感,关键是这三点:使用深色背景 --background "#242424",使用 --render-style classic 保持更硬朗的 CAD 视图质感,并用 --camera 55:20 让右上角红色料盘和前方控制盒同时进入画面。官方没有公开原始 .forge.js、viewport scene、相机 JSON 和材质状态,所以无法保证像素级一模一样;要完全一致,只能拿到官方 benchmark 的源脚本和原始 viewport 配置。

本地复刻的 ForgeCAD 3D 打印机前视图

图 3 前视图能更清楚地看到打印头、热床、Z 轴光轴和控制盒。

本地复刻的 ForgeCAD 3D 打印机俯视图

图 4 高俯视图能检查机架、料盘、皮带和热床位置关系。

本机三张图的渲染输出都报告了相同几何边界:

Size:   224.0 x 224.0 x 229.0 mm
Volume: 449408.0 mm3
Bounds: [-102.0,-108.0,-3.0] -> [122.0,116.0,226.0]

第二个案例:视频里的键盘

视频画面里的键盘很适合补充到本章后半部分。它和 3D 打印机的教学重点不同:3D 打印机强调复杂装配和运动部件,键盘强调规则阵列、外壳倾角、局部强调色和大量重复零件的组织方式。大家可以把它看成 ForgeCAD 的“产品外观 + 参数化阵列”练习。

键盘案例采用可复现建模脚本作为主体:forgecad_keyboard_demo.forge.js。视频画面用于帮助大家观察外观特征,教程里的结果则由本地脚本重新生成。脚本里保留了这些可调参数:

const cols = Param.number("Columns", 12, { min: 8, max: 14, unit: "keys" });
const keyPitch = Param.number("Key Pitch", 15, { min: 12, max: 18, unit: "mm" });
const caseAngle = Param.number("Case Angle", 6, { min: 0, max: 12, unit: "deg" });
const knobOffset = Param.number("Knob Offset", 0, { min: -18, max: 18, unit: "mm" });
const accentKeyX = Param.number("Accent Key X", 2, { min: -4, max: 4, unit: "keys" });

运行键盘模型:

npx --yes forgecad@0.9.14 run forgecad_keyboard_demo.forge.js

本机结果:

Objects: 5
Verifications: 4 pass, 0 fail
Params: Columns=12, Key Pitch=15, Case Angle=6, Knob Offset=0, Accent Key X=2
Time: 3127ms

渲染命令:

$chrome = "C:\Program Files\Google\Chrome\Application\chrome.exe"

npx --yes forgecad@0.9.14 render 3d forgecad_keyboard_demo.forge.js `
  --output assets/forgecad_keyboard_iso.png `
  --camera 48:31 `
  --edges thin `
  --render-style studio `
  --chrome-path $chrome `
  --fresh-server `
  --port 5184

npx --yes forgecad@0.9.14 render 3d forgecad_keyboard_demo.forge.js `
  --output assets/forgecad_keyboard_low_angle.png `
  --camera 35:16 `
  --edges thin `
  --render-style studio `
  --chrome-path $chrome `
  --fresh-server `
  --port 5185

本地复刻的 ForgeCAD 键盘等轴测图

图 5 键盘等轴测图。这里重点看按键阵列、右侧旋钮、深色功能键区和红色点按键。

本地复刻的 ForgeCAD 键盘低视角图

图 6 低视角更容易看出外壳厚度和轻微上扬的键盘角度。

键盘渲染输出的几何边界:

Size:   214.0 x 119.9 x 33.9 mm
Volume: 327930.0 mm3
Bounds: [-107.0,-58.2,-6.1] -> [107.0,61.7,27.8]

第三个案例:官方可动灵巧手

ForgeCAD public kit 顶部还有一个很吸引人的可动灵巧手 GIF。这个案例比键盘更适合机器人方向,因为它把参数、连杆、铰链、肌腱线缆和装配对象都放在同一个 .forge.js 里。我们直接复用官方示例:

Copy-Item ..\forgecad-public-kit\examples\mechanical\5-finger-robot-hand.forge.js `
  .\forgecad_robot_hand_publickit.forge.js
npx --yes forgecad@0.9.14 run forgecad_robot_hand_publickit.forge.js

本机结果:

Objects: 76
Params: Scale=1, Finger Curl=40, Thumb Curl=35, Finger Spread=8
Time: 530ms

“能动”的核心不是视频播放器,而是参数驱动姿态。下面 4 帧分别修改 Finger CurlThumb CurlFinger Spread,再合成一个本地 GIF:

npx --yes forgecad@0.9.14 render 3d forgecad_robot_hand_publickit.forge.js `
  --param "Finger Curl=45" `
  --param "Thumb Curl=38" `
  --param "Finger Spread=12" `
  --output assets/forgecad_robot_hand_02.png `
  --camera 42:28 `
  --background "#101318" `
  --edges thin `
  --render-style classic `
  --chrome-path $chrome

本地参数驱动的 ForgeCAD 灵巧手动作 GIF

图 7 本地用官方灵巧手示例渲染出的参数动作。大家可以把它理解为“低成本动画”:每一帧都是同一个 CAD 脚本在不同参数下的真实渲染,而不是手动剪视频。

官方动图也保存在本章,方便对比:

ForgeCAD 官方 Robot Hand V2 动图

导出 CAD 与打印文件

导出 STEP:

npx --yes forgecad@0.9.14 export step forgecad_3d_printer_demo.forge.js `
  --output outputs/forgecad_3d_printer_demo.step

导出 STL:

npx --yes forgecad@0.9.14 export stl forgecad_3d_printer_demo.forge.js `
  --output outputs/forgecad_3d_printer_demo.stl

导出 3MF:

npx --yes forgecad@0.9.14 export 3mf forgecad_3d_printer_demo.forge.js `
  --output outputs/forgecad_3d_printer_demo.3mf

键盘案例使用同样的命令,只需把脚本名和输出名换成 forgecad_keyboard_demo

npx --yes forgecad@0.9.14 export step forgecad_keyboard_demo.forge.js `
  --output outputs/forgecad_keyboard_demo.step

npx --yes forgecad@0.9.14 export stl forgecad_keyboard_demo.forge.js `
  --output outputs/forgecad_keyboard_demo.stl

npx --yes forgecad@0.9.14 export 3mf forgecad_keyboard_demo.forge.js `
  --output outputs/forgecad_keyboard_demo.3mf

灵巧手同样可以导出:

npx --yes forgecad@0.9.14 export step forgecad_robot_hand_publickit.forge.js `
  --output outputs/forgecad_robot_hand_publickit.step
npx --yes forgecad@0.9.14 export stl forgecad_robot_hand_publickit.forge.js `
  --output outputs/forgecad_robot_hand_publickit.stl
npx --yes forgecad@0.9.14 export 3mf forgecad_robot_hand_publickit.forge.js `
  --output outputs/forgecad_robot_hand_publickit.3mf

本机输出文件大小:

文件 大小
forgecad_3d_printer_demo.step 1.1 MB
forgecad_3d_printer_demo.stl 256 KB
forgecad_3d_printer_demo.3mf 54 KB
forgecad_keyboard_demo.step 3.2 MB
forgecad_keyboard_demo.stl 153 KB
forgecad_keyboard_demo.3mf 39 KB
forgecad_robot_hand_publickit.step 3.7 MB
forgecad_robot_hand_publickit.stl 717 KB
forgecad_robot_hand_publickit.3mf 261 KB

STEP 更适合导入 CAD 软件继续编辑;STL/3MF 更适合切片软件预览。这个模型是教学装配,不是可直接打印的一体化零件。

打印检查结果怎么理解

命令:

npx --yes forgecad@0.9.14 check print forgecad_3d_printer_demo.forge.js

本机结果是 FAIL,这不是脚本运行失败,而是检查器指出了装配展示模型不适合当作单件直接 FDM 打印:

Scene: 13 shape(s), 5128 triangle(s), bbox 224.0 x 224.0 x 229.0mm
PASS print.script.verifications: 5 script verification(s) passed.
FAIL print.geometry.collisions: 14 positive-volume collision(s) found.
FAIL print.fdm.wall-thickness: 1 object(s) have sampled wall area below 1.2mm.
WARN print.fdm.overhangs: 8 object(s) exceed 45deg unsupported overhang budget.
PASS print.mesh.validity: Meshes are closed and manifold at the sampled tolerance.

这正好是一个教学点:官方 GIF 展示的是复杂装配能力,不能把它等价成“整台打印机可一次性打印”。如果目标是制造,需要把机架、热床、导轨支座、打印头壳体等拆成单件,再分别加壁厚、倒角、螺孔、公差和支撑策略。

键盘案例也会得到类似的装配检查结论:

Scene: 5 shape(s), 3056 triangle(s), bbox 214.0 x 119.9 x 33.9mm
PASS print.script.verifications: 4 script verification(s) passed.
FAIL print.geometry.collisions: 4 positive-volume collision(s) found.
PASS print.mesh.validity: Meshes are closed and manifold at the sampled tolerance.
FAIL print.fdm.wall-thickness: 1 object(s) have sampled wall area below 1.2mm.

这里的碰撞主要来自键帽、外壳和功能区被当成同一个展示装配来检查。真实键盘外壳如果要打印,需要把键帽、底壳、上盖、旋钮和接口挡板拆成单独零件。

资源占用与耗时

本机用 PowerShell 采样 cmd -> npm/npx -> node/chrome 子进程的 Working Set,得到大致峰值:

步骤 耗时 峰值内存 说明
forgecad run 4.67 s 262 MB CLI 冷启动总耗时;ForgeCAD 自报建模时间约 0.5 s
单张 render 3d 7.77 s 826 MB 含 Chrome 渲染服务冷启动
export stl 5.07 s 未单独采样 输出 256 KB STL
export 3mf 5.10 s 未单独采样 输出 54 KB 3MF
export step 19.41 s 未单独采样 精确 STEP 导出更慢,输出 1.1 MB
check print 5.53 s 未单独采样 网格检查约 5128 triangles
键盘 run 约 9.8 s 未单独采样 ForgeCAD 自报建模时间约 3.1 s
键盘单张 render 3d 约 15 s 未单独采样 按键数量更多,冷启动渲染稍慢
键盘 export stl 10.14 s 未单独采样 输出 153 KB STL
键盘 export 3mf 8.13 s 未单独采样 输出 39 KB 3MF
键盘 export step 30.81 s 未单独采样 精确 STEP 导出 3.2 MB
灵巧手 export stl 3.94 s 未单独采样 输出 717 KB STL
灵巧手 export 3mf 4.23 s 未单独采样 输出 261 KB 3MF
灵巧手 export step 32.36 s 未单独采样 精确 STEP 导出 3.7 MB

这个量级对普通笔记本很轻,不需要 6GB 显卡。真正可能吃资源的是更复杂的曲面、布尔操作、超高分辨率网格或浏览器端动画渲染。

复现边界

1. 官方资产和本地复刻的关系

本章使用了两类资产。第一类是官方公开资产,例如 3dprinter-gpt52codex GIF、Robot Hand V2 GIF 和 public kit 里的灵巧手源码;这些用于帮助大家对齐官方展示效果。第二类是本地教学复刻脚本,例如 forgecad_3d_printer_demo.forge.jsforgecad_keyboard_demo.forge.js;这些用于让大家真正跑通“需求到源码、源码到 CAD 几何、几何到渲染和导出”的完整链路。

其中 3D 打印机 benchmark 当前公开了 GIF 和 prompt,没有公开对应 .forge.js。所以本章提供的是对齐官方视觉特征的教学版复刻;灵巧手示例则直接来自 public kit 的官方源码。

2. 怎么让大模型生成类似 CAD 模型

更推荐把需求写成“结构化工程任务”,而不是只说“生成一个好看的 3D 打印机”。例如:

请用 ForgeCAD 编写一个参数化 CoreXY 风格 3D 打印机 .forge.js。
要求包含:黑色方框机架、蓝色热床、橙色加热板、银色 Z 轴导轨、
X 轴横梁、打印头、皮带、右上角红色料盘、前方控制盒和青色构建体积框。
暴露参数:Print Head X、Print Bed Y、Gantry Z、Build Volume Width、Build Volume Depth。
返回对象要按模块命名,便于 render 时保留材质颜色。
最后添加 bounding box 和参数范围验证。

大模型生成初稿后,不要把结果当成最终 CAD。正确迭代方式是:运行 forgecad run 看脚本是否可执行;渲染 PNG 检查比例和视角;导出 STEP/STL/3MF 检查交换文件;必要时把错误信息或截图反馈给大模型,让它继续修改 .forge.js

3. 这个流程是否需要 micromamba

本章主线不需要。ForgeCAD 案例只依赖 Node.js/npm 和 Chrome 渲染,不涉及 PyTorch、CUDA 或机器人仿真环境。只有当大家把 ForgeCAD 和 Python CAD、仿真训练、机器人学习算法放进同一个实验工程时,才需要再考虑 micromamba 或 conda 环境隔离。

4. 这些模型能直接用于真实制造吗

不能直接用于真实机器制造。它们是教学级参数化装配,用来演示 AI-assisted CAD、code-first CAD、复杂结构拆解、CLI 验证和文件导出。真实机械设计还要继续做强度、刚度、传动、公差、采购件、装配、材料和安全检查。

参考资料