Files
Web_FreeCAD_Bitbybit/docs/cam-native-kernel-pipeline.zh-CN.md

78 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CAM 原生内核流水线实施与任务分解
更新日期2026-08-07
## 强制执行顺序
```text
CAD 几何
-> OpenCAMLib WASM 刀位算法
-> CAMotics 源码阶段运动契约
-> 生成规范 G-code
-> LinuxCNC WASM 解析、控制器语义、执行与验收
```
CAMotics 不解析流水线产生的规范 G-code。唯一的 G-code 解析和控制器语义权威是 LinuxCNC WASM。
## 已落地能力
| 任务 | 状态 | 实现与证据 |
| --- | --- | --- |
| CAM-NATIVE-01 OpenCAMLib | 完成 | 上游提交 `95b036fe28ce6d77c97b98e5fbc337904ae49560` 通过 Emscripten 3.1.69 构建;浏览器执行 `PathDropCutter`,不是 TypeScript 重写算法。 |
| CAM-NATIVE-02 OCL 制品门禁 | 完成 | `public/vendor/opencamlib/ocl.js` 为单文件嵌入 WASMSHA-256 为 `0379040910f7af277c6e1f6411efb549292db0b071422a83954d93631253bf89`。 |
| CAM-NATIVE-03 CAMotics 源码阶段 | 完成(源码契约) | 锁定 CAMotics 提交 `e84665f2fa9d1151f03282ac7e01320bc65e015b`,依据 `GCodeMachine.cpp``start``changeTool``setFeed``move``end` 语义生成 G-code适配层不解析输出。 |
| CAM-NATIVE-03B CAMotics 原生构建 | 完成Qt5 GUI + TPL + CLI | CAMotics `e84665f2...` 使用官方 C! `9b6672a0...`、Qt5、V8 ABI `v8_compress_pointers=0` 构建 `CAMotics/camotics``CAMotics/tplang``camsim``gcodetool``planner``build/camotics.so`GUI/TPL 哈希、动态 Qt/V8 依赖、官方 TPL 10/10 测试和 Xvfb 主窗口1200x800、可见均通过 `config/camotics-native-artifact.json`。 |
| CAM-NATIVE-03C CAMotics 独立 WASM 内核 | 完成(扫掠子集) | 直接编译上游 `Sweep.cpp``ConicSweep.cpp``SpheroidSweep.cpp` 为零 imports 的 standalone WASMChrome 150 实际加载并执行 Conic/Spheroid depth、长段包围盒和确定性回放。 |
| CAM-NATIVE-04 OCCT 材料去除 | 完成(当前模型) | 使用 Bitbybit OCCT WASM 创建库存与切削工具并执行 BRep 布尔差;浏览器验证剩余体为结构有效单实体,可导出 BRep。 |
| CAM-NATIVE-05 Chrome 验收 | 完成 | Chrome 150 中 OCL 14 个刀位点、18 行 G-code、库存体积 300、去除体积 12、剩余体积 288、释放后内核引用为 0。 |
| CAM-NATIVE-06 主链 OCL 接管 | 完成(认证机型) | `prepareCamPipeline` 强制调用上游 `PathDropCutter`,以 48 个 OCL 刀位点驱动 CAMotics 源码阶段和 LinuxCNC XYZBC G-code未提供 runner 时不会静默回退。 |
当前材料去除模型是确定性采样的平底刀 BRep 模型。轴向水平直线使用单个连续段包络,任意采样折线使用定向圆柱与端点球的连续段 BRep sweep它是原生 OCCT 实体布尔,但不是 FreeCAD 原生 Path 材料去除的等价实现,能力报告固定为 `freeCadNativeEquivalent: false`
## LinuxCNC WASM 接管
`cnc_wams_gpt6/linuxcnc-master/web/src/app.js` 已提供受控 `postMessage` bridge。父页面只能发送已经生成的 G-codeLinuxCNC 页面等待 machine case ready 后调用原生 `loadProgram`,由 LinuxCNC WASM 上游解释器生成轨迹,再按请求决定是否 `run`;返回结果固定带有 `backend: linuxcnc-wasm``parserAuthority: linuxcnc-wasm`。父页面不接收或替代 RS274 解析,也不把 CAMotics parser 放入执行链。
## 真实边界
- OpenCAMLib上游算法已作为浏览器 WASM 执行。
- CAMotics工作区已具备通过哈希、Qt5/V8 动态链接、官方 TPL 测试和真实 Xvfb 窗口冒烟验证的 1.3 原生 GUI/TPL并保留 `camsim``gcodetool``planner` 和 Python 模块作为宿主 CLI/sidecar同时有直接来源编译的 standalone sweep WASM浏览器可执行该内核子集但不是完整 Qt/TPL/程序运行时。
- CAMotics 解析边界:原生 `camsim` 只在独立冒烟证据中消费仓库示例。规范生产链仍由源码运动契约生成 G-code并直接交 LinuxCNC WASM不得把 CAMotics parser 提升为第二套规范解析器。
- CAMotics 浏览器边界:`public/vendor/camotics/camotics-sweep.wasm` 只包含上游扫掠数学和包围盒,不包含 G-code parser、TPL、Qt、文件系统或完整原生 GUI。能力报告将 `browserWasmKernelExecutable=true``browserExecutable=false` 分开记录Qt5 GUI/TPL 仅在宿主进程中可用。
- LinuxCNC WASM桥接已接入根应用和 LinuxCNC 页面Chrome machine acceptance 已在重建后的 LinuxCNC WASM 产物上通过报告保留解析块、轨迹段、RTCP 模态和限位结果;同一份程序已分别通过 `dry-run``run`
- 连续工具轴:所选 XYZBC table-rotary-tilting 数字机型已完成;其他机型、完整奇异点 oracle 和生产授权仍关闭。LinuxCNC `web/evidence/production-safety-gate-matrix.json` 已覆盖 6 个 5 轴 INI所有 gate fail-closed`productionOpen=false`,没有实体运动或计量认证。
- 曲线扫掠Chrome 已验证 `continuous-segment-sweep-brep` 的结构有效单实体和非零去料;解析 NURBS/圆弧的无弦误差 sweep、刀柄/夹具实体 oracle 仍开放。
## 后续任务安排
| 优先级 | 任务 | 验收条件 | 状态/所有者 |
| --- | --- | --- | --- |
| P0 | CAM-PIPE-01 LinuxCNC WASM 接管 | 将本模块生成的 G-code 送入 LinuxCNC WASM记录解析块、模态状态、刀具/进给、执行轨迹及限位结果;不得调用 CAMotics parser。 | 已完成(认证机型) |
| P0 | CAM-PIPE-02 端到端一致性 | 比较 OCL 刀位、生成 G-code、LinuxCNC WASM 执行轨迹;建立坐标、单位、模态与容差门禁。 | 已完成Chrome 认证链;泛化容差继续) |
| P1 | CAM-SIM-01 CAMotics 原生构建 | 安装并锁定 C!/SCons构建 Qt5 `camotics` GUI、`tplang``camsim``gcodetool``planner` 与 Python 模块提供提交、编译器、Qt/V8 动态依赖、制品哈希、官方 TPL 测试和 Xvfb 窗口冒烟证据。 | 已完成(宿主 Qt5 GUI/TPL/CLI浏览器集成保持边界 |
| P1 | CAM-SIM-02 CAMotics standalone WASM | 从锁定上游 C++ sweep 源码构建零 imports WASM提供 ABI、制品哈希、Node 和 Chrome 实际执行证据;禁止引入第二套规范 G-code parser。 | 已完成sweep 子集;完整程序继续) |
| P1 | CAM-MR-02 任意曲线路径扫掠 | 对 OCL 采样段执行连续段 BRep sweep定向圆柱 + 端点球并集),每个结果通过 OCCT BRep 结构校验;解析任意曲线的无弦误差 sweep 继续保留。 | 已完成continuous-segment 子集;解析任意曲线仍开放) |
| P1 | CAM-5AXIS-01 连续工具轴 | 接入机床运动学、姿态连续性、奇异点和关节限位求解,并由 LinuxCNC WASM 执行轨迹验收。 | 已完成XYZBC 数字机型;泛化姿态/奇异点和其它机型生产门仍开放) |
| P1 | CAM-FCSTD-01 Path 对象往返 | Path Job、ToolBit、ToolController、Operation 和命令列表执行 FCStd 双向 round-trip并与 FreeCAD oracle 比较。 | 待 FCStd 所有者完成 |
## 验证命令
```bash
./npmw run build:camotics-native
./npmw run check:camotics-native
./npmw run build:camotics-wasm
./npmw run check:camotics-wasm
./npmw run test:camotics-wasm
./npmw run test:chrome-camotics-wasm
./npmw run check:chrome-camotics-wasm
node scripts/check-opencamlib-wasm.mjs
./npmw exec tsx -- --test tests/camNativeSimulation.test.ts
./npmw exec tsc -- --noEmit
node scripts/run-chrome-cam-native-simulation.mjs
node scripts/check-chrome-cam-native-simulation.mjs
npm run test:chrome-cam-linuxcnc-machine
npm run check:chrome-cam-linuxcnc-machine
```
机器可读证据位于 `config/camotics-native-artifact.json``config/camotics-wasm-artifact.json``config/chrome-camotics-wasm-verification.json``config/opencamlib-wasm-artifact.json``config/chrome-cam-native-simulation-verification.json``config/chrome-cam-linuxcnc-machine-verification.json` 与 LinuxCNC `web/evidence/digital-machine-five-axis-certification.json`