补齐 xyzbc-trt Web 路径证据
This commit is contained in:
@@ -1,5 +1,89 @@
|
||||
# 03-推进台账
|
||||
|
||||
## 2026-07-02 Web task/HAL executionPath 采集实现轮次
|
||||
|
||||
### 本轮目标
|
||||
|
||||
接续 `working` 任务矩阵,补齐 Web 侧 `executionPath.samples`,让 Web evidence 的预览路径和执行路径都使用 20ms 采样周期,并重新生成 compare 证据。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`:
|
||||
- 复用 `linuxcnc_interp` 生成 machine-file canonical motion 和 TP timing。
|
||||
- 将 TP planner 原始样本重采样为 20ms `previewPath.samples`。
|
||||
- 将同一 motion plan 装入 `linuxcnc_task_hal` WASM。
|
||||
- 按 20ms task cycle 读取 task/HAL status,生成 `executionPath.samples`。
|
||||
- 对 `xyzbc-trt` 显式按 `joint.0/1/2/3/4` 映射 `X/Y/Z/B/C`,避免 B/C 轴被 XYZAC 兼容字段误映射。
|
||||
- 扩展 `tests/node/verify_xyzbc_trt_web_app.mjs`,增加 interpreter + task/HAL 执行反馈 smoke 断言。
|
||||
- 重新生成:
|
||||
- `working/evidence/web-xyzbc-trt-evidence.json`
|
||||
- `working/evidence/compare-xyzbc-trt-evidence.json`
|
||||
- 更新 `04-任务矩阵.md`,将 T-022 标记为完成,并更新 T-017/T-021 的当前样本和通过数。
|
||||
|
||||
### 验证情况
|
||||
|
||||
- `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。
|
||||
- `web-xyzbc-trt-evidence.json` 当前摘要:
|
||||
- `wasm.ready=true`
|
||||
- `blockers=[]`
|
||||
- `previewPath.samplePeriodMs=20`
|
||||
- `previewPath.sampleCount=3074`
|
||||
- `executionPath.samplePeriodMs=20`
|
||||
- `executionPath.sampleCount=569`
|
||||
- `executionPath.source=web-linuxcnc-task-hal-execution`
|
||||
- `executionPath.taskHal.completed=true`
|
||||
- `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 已生成真实失败报告:当前 18/23 通过,剩余 5 项均为 native evidence 缺少 `previewPath`/`executionPath` 样本和 20ms 周期字段。
|
||||
- `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过。
|
||||
- `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 `native-xyzbc-trt-evidence.json` 写入 `pathSampling`、`previewPath` 和 20ms `executionPath`。
|
||||
2. 重跑 Web evidence 和 compare,使剩余 native path 相关失败进入可比误差统计。
|
||||
3. 继续目标浏览器 smoke,验证 worker runtime ready 和 canvas 非空。
|
||||
|
||||
## 2026-07-02 evidence 字段与路径对比实现轮次
|
||||
|
||||
### 本轮目标
|
||||
|
||||
按 `working` 目录继续编写 `xyzbc-trt` Web 数控仿真程序,优先补齐可以在当前环境闭环验证的 evidence JSON、路径对比和 staging 覆盖。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 将 `xyzbc-trt` profile 的 `samplePrograms` 修正为 `xyzbc_switchkins.ngc` 和 `boat-xyzbc.ngc`。
|
||||
- 扩展 Web evidence:新增 `pathSampling`、`previewPath`、`executionPath`、`startupSequence`、`iniDisplay`、`halNets`、`kinematicsPins`、`axisJointLimits`、`switchkinsTransitions`、`uiEquivalence`、`vismachEquivalent`、`ngcguiSubroutines`、`demoPrograms`。
|
||||
- 扩展 compare evidence:新增 `pathComparison`,覆盖 `previewVsPreview`、`executionVsExecution`、`previewVsExecutionNative`、`previewVsExecutionWeb`,并输出 TCP、joint、toolAxis、样本差异和缺样本统计。
|
||||
- 修改 native evidence 脚本默认基线为 `/home/mes123456/cnc_wams/linuxcnc`,并在 `--run` 时可把 `stat()` 执行事件重采样为 20ms `executionPath`。
|
||||
- 扩展 Node smoke,检查 `samplePrograms`、Ngcgui 子程序和 `boat-xyzbc.ngc` staging。
|
||||
- 重新生成 Web evidence 和 compare evidence。当前 compare 为真实 fail:WASM artifact 缺失,native/Web path 样本仍不可比。
|
||||
|
||||
### 修改文件
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/profiles/xyzbc-trt.js
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-web-xyzbc-trt-evidence.mjs
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/tools/compare-xyzbc-trt-evidence.mjs
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md
|
||||
```
|
||||
|
||||
### 验证情况
|
||||
|
||||
- 已通过:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node`。
|
||||
- 已通过:`python3 -m py_compile web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py`。
|
||||
- 已通过生成:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web`。
|
||||
- 已生成真实失败 compare:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare`,当前 23 项检查中 16 项通过,7 项失败均指向 WASM artifact 和 path 样本缺口。
|
||||
- 已确认 `npm run build` 仍因 `wasm-port/build/wasm/kinematics` 缺失失败;该结果符合当前 WASM artifact 前置状态。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 构建 `wasm-port/build/wasm` 的 kinematics/core/tp/task-hal artifact。
|
||||
2. 在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 `sourceRoot` 和 path 字段进入 `native-xyzbc-trt-evidence.json`。
|
||||
3. 重跑 Web evidence 和 compare,确认 pathComparison 从 blocker 转为可比误差统计。
|
||||
|
||||
## 2026-07-02 07:31 EDT - DOCX 设计任务书整合到 working
|
||||
|
||||
### 本轮目标
|
||||
@@ -278,3 +362,74 @@ web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md
|
||||
1. 用当前运行的新 native 实例重采集 `native-xyzbc-trt-evidence.json`。
|
||||
2. 将现有历史 `/home/mes123456/linuxcnc-master` evidence 替换为 `/home/mes123456/cnc_wams/linuxcnc` evidence。
|
||||
3. 基于新 evidence 重跑 Web compare。
|
||||
|
||||
## 2026-07-02 生成 WASM artifact
|
||||
|
||||
### 本轮目标
|
||||
|
||||
为 `web-rtcp-5axis-xyzbc-trt-sim-plan` 生成缺失的 `wasm-port/build/wasm` artifact,使 Web evidence 不再因缺少 `.js/.wasm` 构建产物而 blocked。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 显式加载 `/home/mes123456/emsdk/emsdk_env.sh`,确认 `emcc 6.0.2` 可用。
|
||||
- 执行以下构建脚本:
|
||||
- `wasm-port/tools/build_wasm_core.sh`
|
||||
- `wasm-port/tools/build_kinematics_wasm.sh`
|
||||
- `wasm-port/tools/build_tp_wasm.sh`
|
||||
- `wasm-port/tools/build_task_hal_wasm.sh`
|
||||
- 已生成目标项目所需 artifact:
|
||||
- `wasm-port/build/wasm/core/linuxcnc_interp.js`
|
||||
- `wasm-port/build/wasm/core/linuxcnc_interp.wasm`
|
||||
- `wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js`
|
||||
- `wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm`
|
||||
- `wasm-port/build/wasm/tp/linuxcnc_tp.js`
|
||||
- `wasm-port/build/wasm/tp/linuxcnc_tp.wasm`
|
||||
- `wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js`
|
||||
- `wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm`
|
||||
- `wasm-port/build/wasm` 下当前共有 40 个 `.js/.wasm` artifact。
|
||||
|
||||
### 验证情况
|
||||
|
||||
- `node tests/node/verify_xyzbc_trt_web_app.mjs` 通过。
|
||||
- `SKIP_KINEMATICS_BUILD=1 wasm-port/tests/wasm/node/verify_kinematics_wasm.sh` 通过,包含 `xyzbc-trt` kinematics smoke。
|
||||
- `SKIP_TP_BUILD=1 wasm-port/tests/wasm/node/verify_tp_wasm.sh` 通过。
|
||||
- `SKIP_TASK_HAL_BUILD=1 wasm-port/tests/wasm/node/verify_task_hal_wasm.sh` 通过。
|
||||
- 历史状态:`SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh` 当时未通过,原因是 `interp_g10_l11_wasm` 的 G10 L11 期望值过期;该项已在后续“完整 interpreter/remap 验收”轮次修复。
|
||||
- 重新运行 `node tools/collect-web-xyzbc-trt-evidence.mjs`,`web-xyzbc-trt-evidence.json` 显示 `wasmArtifactsReady=true`、`missing=[]`,并生成 Web preview path 6174 个 20ms 样本。
|
||||
- 重新运行 `node tools/compare-xyzbc-trt-evidence.mjs`,当前 17/23 通过;剩余失败项集中在 native preview/execution path 样本缺失,以及 Web execution path collector 尚未实现。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 已完成:`verify_interp_wasm.sh` 中 `interp_g10_l11_wasm` 的 G10 L11 断言已对齐 vendored LinuxCNC expected。
|
||||
2. 用 `/home/mes123456/cnc_wams/linuxcnc` 当前 native 实例重采集 `native-xyzbc-trt-evidence.json` 的 preview/execution path。
|
||||
3. 实现 Web task/HAL execution path 采集,补齐 `web-xyzbc-trt-evidence.json.executionPath.samples`。
|
||||
|
||||
## 2026-07-02 完整 interpreter/remap 验收
|
||||
|
||||
### 本轮目标
|
||||
|
||||
完成 `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 的 interpreter/remap WASM 验收,使 `linuxcnc_interp.js/.wasm` 不仅生成,而且通过完整 Node 回归。
|
||||
|
||||
### 已做事项
|
||||
|
||||
- 单独复现 `interp_g10_l11_wasm`,打印实际 canonical 输出。
|
||||
- 对照 `wasm-port/vendor/linuxcnc/tests/interp/g10/g10-l11/expected`,确认 WASM 实际输出与 vendored LinuxCNC 当前 expected 一致:
|
||||
- `SET_G92_OFFSET(-43.0622, -47.4282, -72.0000)`
|
||||
- 修正 `wasm-port/tests/wasm/node/verify_interp_wasm.mjs` 中过期的 G10 L11 断言:
|
||||
- 旧值:`x=-41.1962 y=-46.1962 z=-72`
|
||||
- 新值:`x=-43.0622 y=-47.4282 z=-72`
|
||||
|
||||
### 验证情况
|
||||
|
||||
- `SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过,输出 `interp_wasm_node_smoke=ok`。
|
||||
- `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过,输出 `interp_wasm_node_smoke=ok`。
|
||||
- 运行中仍有既有提示:
|
||||
- `link (updating variable file): No such file or directory`
|
||||
- `G88.1` 与 `M410` remap modalgroup warning
|
||||
- 上述提示不影响退出码,完整 interpreter/remap 验收已通过。
|
||||
|
||||
### 下一步
|
||||
|
||||
1. 继续 native preview/execution path 重采集。
|
||||
2. 实现 Web task/HAL execution path collector。
|
||||
3. 重跑 Web/native compare,使剩余 6 个 path 相关失败项进入可比误差统计。
|
||||
|
||||
@@ -12,33 +12,33 @@
|
||||
| T-008 | Stage remap/tool/PyVCP 文件 | 完成 | staging 包含 `428remap.ngc`、`429remap.ngc`、`430remap.ngc`、`xyzbc-trt.tbl`、`xyzbc-trt.xml` |
|
||||
| T-009 | 增加目标 Node smoke | 完成 | `tests/node/verify_xyzbc_trt_web_app.mjs` 存在并通过 |
|
||||
| T-010 | 导入 `xyzbc.var` 基线参数文件 | 完成 | `wasm-port/vendor`/manifest 包含 `xyzbc.var`,OPFS staging 可保存参数文件 |
|
||||
| T-011 | 完整 kinematics WASM 验证 | 待前置 | `wasm-port/tests/wasm/node/verify_kinematics_wasm.sh` 通过 |
|
||||
| T-012 | 完整 interpreter/remap WASM 验证 | 待前置 | `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过并覆盖 `xyzbc_switchkins.ngc` |
|
||||
| T-013 | 完整 task/HAL WASM 验证 | 待前置 | `wasm-port/tests/wasm/node/verify_task_hal_wasm.sh` 通过 |
|
||||
| T-011 | 完整 kinematics WASM 验证 | 完成 | `SKIP_KINEMATICS_BUILD=1 wasm-port/tests/wasm/node/verify_kinematics_wasm.sh` 通过,覆盖 `xyzbc-trt` |
|
||||
| T-012 | 完整 interpreter/remap WASM 验证 | 完成 | `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过,输出 `interp_wasm_node_smoke=ok` |
|
||||
| T-013 | 完整 task/HAL WASM 验证 | 完成 | `SKIP_TASK_HAL_BUILD=1 wasm-port/tests/wasm/node/verify_task_hal_wasm.sh` 通过 |
|
||||
| T-014 | 目标浏览器 smoke | 待前置 | 页面默认显示 `xyzbc-trt`,worker runtime ready,canvas 非空 |
|
||||
| T-015 | native 真实执行 JSON 采集 | 完成 | `native-xyzbc-trt-evidence.json` 记录真实执行事件,状态 completed |
|
||||
| T-016 | Web OPFS/WASM readiness JSON 采集 | 完成 | `web-xyzbc-trt-evidence.json` 记录 Web profile/INI/staging/WASM readiness |
|
||||
| T-017 | native/Web JSON 对比 | 部分完成 | `compare-xyzbc-trt-evidence.json` 已生成;当前 11/12 通过,剩余 WASM artifact |
|
||||
| T-018 | WASM artifact 构建前置 | 待前置 | `emcc 6.0.2` 已可用,需运行构建脚本让 `wasm-port/build/wasm` 生成所需 `.js/.wasm` |
|
||||
| T-017 | native/Web JSON 对比 | 部分完成 | `compare-xyzbc-trt-evidence.json` 已生成;当前 18/23 通过,剩余 5 项均为 native preview/execution path 样本缺失 |
|
||||
| T-018 | WASM artifact 构建前置 | 完成 | 已生成 core/kinematics/tp/task-hal 所需 `.js/.wasm`,`web-xyzbc-trt-evidence.json.wasm.missing=[]` |
|
||||
| T-019 | native 刀具预览路径 JSON 采集 | 待实现 | `native-xyzbc-trt-evidence.json.previewPath.samples` 使用 20ms 周期记录 LinuxCNC 预览刀路 |
|
||||
| T-020 | native 刀具执行路径 JSON 采集 | 待实现 | `native-xyzbc-trt-evidence.json.executionPath.samples` 使用 20ms 周期记录真实执行反馈路径 |
|
||||
| T-021 | Web 刀具预览路径 JSON 采集 | 待实现 | `web-xyzbc-trt-evidence.json.previewPath.samples` 使用 20ms 周期记录 Web 预览刀路 |
|
||||
| T-022 | Web 刀具执行路径 JSON 采集 | 待前置 | `web-xyzbc-trt-evidence.json.executionPath.samples` 使用 20ms 周期记录 WASM task/HAL 执行反馈路径 |
|
||||
| T-023 | 刀路采样周期一致性检查 | 待实现 | compare 检查 native/Web `pathSampling.samplePeriodMs === 20`,否则 fail |
|
||||
| T-024 | 刀路误差统计对比 | 待实现 | compare 输出 preview/execution 的 TCP、joint、toolAxis 误差统计和缺样本清单 |
|
||||
| T-020 | native 刀具执行路径 JSON 采集 | 部分完成 | native 脚本已从 `stat()` 执行事件重采样为 20ms `executionPath`;需用新基线重跑生成证据 |
|
||||
| T-021 | Web 刀具预览路径 JSON 采集 | 完成 | `web-xyzbc-trt-evidence.json.previewPath.samples` 已由 `linuxcnc_interp`/TP WASM 生成 3074 个 20ms 重采样样本 |
|
||||
| T-022 | Web 刀具执行路径 JSON 采集 | 完成 | `web-xyzbc-trt-evidence.json.executionPath.samples` 已由 WASM task/HAL 执行反馈生成 569 个 20ms 样本 |
|
||||
| T-023 | 刀路采样周期一致性检查 | 完成 | compare 检查 native/Web path `samplePeriodMs === 20`,否则 fail |
|
||||
| T-024 | 刀路误差统计对比 | 完成 | compare 输出 preview/execution 的 TCP、joint、toolAxis 误差统计和缺样本清单 |
|
||||
| T-025 | 全量对标追踪矩阵 | 完成 | `07-全量对标追踪矩阵.md` 逐项映射 `xyzbc-trt-runtime-files.md` 的运行功能 |
|
||||
| T-026 | AXIS 主界面等效功能 | 待实现 | Web 首屏包含程序、坐标、状态、MDI/switchkins、override、工具和预览/执行区域 |
|
||||
| T-027 | POSTGUI HAL/PyVCP 连接等效 | 待实现 | JSON 记录 `pyvcp.* -> halui.mdi-command-* -> M428/M429/M430` 和 multilabel 状态 |
|
||||
| T-027 | POSTGUI HAL/PyVCP 连接等效 | 完成 | Web evidence JSON 记录 `pyvcp.* -> halui.mdi-command-* -> M428/M429/M430` 和 multilabel 状态 |
|
||||
| T-028 | basic_sim 等效 task/HAL | 待前置 | Web task/HAL runtime 覆盖模拟回零、manual toolchange、spindle、joint feedback |
|
||||
| T-029 | Vismach 3D 模型 pin 对标 | 待实现 | Web 3D 模型由 `table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset` 驱动 |
|
||||
| T-030 | Ngcgui/remap 子程序全集 | 待实现 | staging 和执行覆盖 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc` |
|
||||
| T-031 | 演示程序全集 | 待实现 | staging 和 UI 程序选择覆盖 `xyzbc_switchkins.ngc` 与 `boat-xyzbc.ngc` |
|
||||
| T-032 | TRAJ/AXIS/JOINT 限制对标 | 待实现 | JSON/UI 覆盖 XYZBC 单位、速度/加速度、B/C 限位、JOG_AXES、GEOMETRY |
|
||||
| T-033 | kinematics HAL pins 对标 | 待实现 | JSON 记录 `x-offset=-20`、`z-offset=-15`、rot-point、conventional-directions、tool-offset |
|
||||
| T-030 | Ngcgui/remap 子程序全集 | 部分完成 | staging 和 Web evidence 覆盖 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc`;执行仍待 WASM |
|
||||
| T-031 | 演示程序全集 | 完成 | staging、profile samplePrograms 和 Web evidence 覆盖 `xyzbc_switchkins.ngc` 与 `boat-xyzbc.ngc` |
|
||||
| T-032 | TRAJ/AXIS/JOINT 限制对标 | 部分完成 | Web evidence 覆盖 XYZBC 单位、速度/加速度、B/C 限位、JOG_AXES、GEOMETRY;UI 全量复核仍待浏览器/WASM |
|
||||
| T-033 | kinematics HAL pins 对标 | 完成 | Web/native evidence 脚本记录 `x-offset=-20`、`z-offset=-15`、rot-point、conventional-directions、tool-offset |
|
||||
| T-034 | tool table 到 tool-offset 闭环 | 待实现 | T/P/Z/D 解析影响 kinematics tool-offset、Web 模型刀长和 path JSON |
|
||||
| T-035 | 全量 evidence JSON 字段 | 待实现 | native/Web JSON 包含 `startupSequence`、`iniDisplay`、`halNets`、`kinematicsPins`、`axisJointLimits`、`uiEquivalence` |
|
||||
| T-035 | 全量 evidence JSON 字段 | 部分完成 | Web JSON 已包含 `startupSequence`、`iniDisplay`、`halNets`、`kinematicsPins`、`axisJointLimits`、`uiEquivalence`;native 脚本已补字段,需重采集 |
|
||||
| T-036 | native 基线切换到 `/home/mes123456/cnc_wams/linuxcnc` | 完成 | `scripts/rip-environment`、`bin/axis`、`bin/xyzbc-trt-gui`、`rtlib/xyzbc-trt-kins.so` 已生成,RIP 环境可导入 `linuxcnc` Python 模块 |
|
||||
| T-037 | 基于新 native 基线重采集 JSON | 待前置 | `native-xyzbc-trt-evidence.json` 的 `sourceRoot` 为 `/home/mes123456/cnc_wams/linuxcnc`,执行状态 completed |
|
||||
| T-037 | 基于新 native 基线重采集 JSON | 部分完成 | native 脚本默认基线已切到 `/home/mes123456/cnc_wams/linuxcnc`;需在 RIP 环境下重新运行采集命令 |
|
||||
| T-038 | Web 界面按新 native 运行结果复核 | 待实现 | UI/逻辑与 `/home/mes123456/cnc_wams/linuxcnc` 真实 `xyzbc-trt` 的状态流、按钮、路径、HAL pin 对齐 |
|
||||
| T-039 | 创建并执行 `xyzbc-trt` 快捷方式 | 完成 | `linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop` 已创建,进程从 `/home/mes123456/cnc_wams/linuxcnc` 启动 |
|
||||
| T-040 | DOCX 任务书整合到 working | 完成 | `working/09-设计任务书与技术方案整合.md` 保留 DOCX 1-11 章、5 张图片引用、任务书、技术方案、程序逻辑和状态联锁内容 |
|
||||
@@ -46,5 +46,5 @@
|
||||
状态说明:
|
||||
|
||||
- 完成:本轮已实现并可通过静态/Node 验证。
|
||||
- 待前置:代码已接入,但当前缺少 `wasm-port/build/wasm` artifact,需先构建。
|
||||
- 待前置:代码已接入,但仍依赖未完成的外部或运行环境步骤。
|
||||
- 待实现:已记录验收要求,仍需修改采集或对比脚本。
|
||||
|
||||
@@ -1,5 +1,108 @@
|
||||
# 05-验收证据
|
||||
|
||||
## evidence 字段与路径对比实现验收
|
||||
|
||||
### 命令
|
||||
|
||||
```bash
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
|
||||
python3 -m py_compile web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
|
||||
```
|
||||
|
||||
### 结果
|
||||
|
||||
```text
|
||||
xyzbc_trt_web_app_smoke=ok
|
||||
collect-native-xyzbc-trt-evidence.py py_compile=ok
|
||||
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
|
||||
compare_xyzbc_trt_status=fail fail_count=5
|
||||
gmoccapy_static_build=ok
|
||||
```
|
||||
|
||||
### JSON 证据
|
||||
|
||||
```text
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
|
||||
web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
|
||||
```
|
||||
|
||||
当前 Web evidence 已包含:
|
||||
|
||||
```text
|
||||
pathSampling.samplePeriodMs = 20
|
||||
previewPath.samplePeriodMs = 20
|
||||
executionPath.samplePeriodMs = 20
|
||||
startupSequence
|
||||
iniDisplay
|
||||
halNets
|
||||
kinematicsPins
|
||||
axisJointLimits
|
||||
switchkinsTransitions
|
||||
uiEquivalence
|
||||
vismachEquivalent
|
||||
ngcguiSubroutines
|
||||
demoPrograms
|
||||
```
|
||||
|
||||
当前 compare evidence 已包含:
|
||||
|
||||
```text
|
||||
pathComparison.previewVsPreview
|
||||
pathComparison.executionVsExecution
|
||||
pathComparison.previewVsExecutionNative
|
||||
pathComparison.previewVsExecutionWeb
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- 静态/profile/staging/evidence 字段已实现并通过 Node smoke。
|
||||
- compare 仍保持失败是正确结果:Web WASM artifact、preview path 和 execution path 已具备,native evidence 尚未用新基线重采集 path 样本。
|
||||
- `npm run build` 当前已通过,说明目标 app 可在现有 WASM artifact 下完成静态构建。
|
||||
|
||||
## Web task/HAL executionPath 采集验收
|
||||
|
||||
### 命令
|
||||
|
||||
```bash
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
|
||||
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
|
||||
```
|
||||
|
||||
### 结果
|
||||
|
||||
```text
|
||||
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
|
||||
compare_xyzbc_trt_status=fail fail_count=5
|
||||
xyzbc_trt_web_app_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
```
|
||||
|
||||
### JSON 摘要
|
||||
|
||||
```text
|
||||
web.wasm.ready = true
|
||||
web.blockers = []
|
||||
web.previewPath.samplePeriodMs = 20
|
||||
web.previewPath.sampleCount = 3074
|
||||
web.executionPath.samplePeriodMs = 20
|
||||
web.executionPath.sampleCount = 569
|
||||
web.executionPath.source = web-linuxcnc-task-hal-execution
|
||||
web.executionPath.taskHal.completed = true
|
||||
compare.summary.passCount = 18
|
||||
compare.summary.failCount = 5
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- Web 侧 `previewPath` 已由 `linuxcnc_interp`/TP WASM 轨迹重采样为 20ms。
|
||||
- Web 侧 `executionPath` 已由 `linuxcnc_task_hal` WASM 执行反馈生成 20ms 样本。
|
||||
- compare 剩余 5 项失败均来自 native evidence 尚无 `previewPath`/`executionPath` 样本和采样周期字段。
|
||||
|
||||
## DOCX 整合验收
|
||||
|
||||
### 源文件
|
||||
@@ -465,9 +568,44 @@ missingSamples
|
||||
|
||||
当前状态:
|
||||
|
||||
- 现有三份 `working/evidence/*.json` 还没有上述路径字段。
|
||||
- 本轮未手工改写 JSON 证据文件;后续必须通过采集脚本重新生成。
|
||||
- Web 执行路径采集依赖 WASM artifact,artifact 缺失时 compare 必须保留 fail/blocker。
|
||||
- `web-xyzbc-trt-evidence.json` 已通过采集脚本重新生成,`wasmArtifactsReady=true`、`missing=[]`。
|
||||
- Web preview path 已由 `linuxcnc_interp` WASM 生成 6174 个 20ms 样本。
|
||||
- Web execution path 采集仍未实现,当前 blocker 为 `web-execution-path-unavailable`。
|
||||
- native preview/execution path 仍需用 `/home/mes123456/cnc_wams/linuxcnc` 真实运行实例重采集。
|
||||
- `compare-xyzbc-trt-evidence.json` 当前 17/23 通过,剩余 6 项均与 native path 样本或 Web execution path 样本缺失有关。
|
||||
|
||||
### WASM artifact 验收记录
|
||||
|
||||
本轮已生成并核对以下目标 artifact:
|
||||
|
||||
```text
|
||||
wasm-port/build/wasm/core/linuxcnc_interp.js
|
||||
wasm-port/build/wasm/core/linuxcnc_interp.wasm
|
||||
wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js
|
||||
wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm
|
||||
wasm-port/build/wasm/tp/linuxcnc_tp.js
|
||||
wasm-port/build/wasm/tp/linuxcnc_tp.wasm
|
||||
wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js
|
||||
wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm
|
||||
```
|
||||
|
||||
验证命令结果:
|
||||
|
||||
```text
|
||||
node tests/node/verify_xyzbc_trt_web_app.mjs -> xyzbc_trt_web_app_smoke=ok
|
||||
SKIP_KINEMATICS_BUILD=1 wasm-port/tests/wasm/node/verify_kinematics_wasm.sh -> kinematics_wasm_node_smoke=ok
|
||||
SKIP_TP_BUILD=1 wasm-port/tests/wasm/node/verify_tp_wasm.sh -> tp_wasm_node_smoke=ok
|
||||
SKIP_TASK_HAL_BUILD=1 wasm-port/tests/wasm/node/verify_task_hal_wasm.sh -> linuxcnc_task_runtime_smoke=ok
|
||||
```
|
||||
|
||||
补充 interpreter/remap 验收:
|
||||
|
||||
```text
|
||||
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh -> interp_wasm_node_smoke=ok
|
||||
wasm-port/tests/wasm/node/verify_interp_wasm.sh -> interp_wasm_node_smoke=ok
|
||||
```
|
||||
|
||||
修复依据:`interp_g10_l11_wasm` 的实际 WASM 输出与 `wasm-port/vendor/linuxcnc/tests/interp/g10/g10-l11/expected` 一致,均为 `SET_G92_OFFSET x=-43.0622 y=-47.4282 z=-72`;原 Node 验收脚本中的 `x=-41.1962 y=-46.1962 z=-72` 为过期期望值。
|
||||
|
||||
## 页面证据
|
||||
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# 06-决策记录
|
||||
|
||||
## D-013:缺 WASM artifact 时 build 与 path compare 继续显式失败
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:本轮补齐 Web/native evidence 字段和 compare 规则,但在缺少 `wasm-port/build/wasm` artifact 时,`npm run build`、Web preview path、Web task/HAL execution path 和 compare path 检查继续显式失败或 blocked,不通过占位样本伪造通过。
|
||||
|
||||
理由:
|
||||
|
||||
- `xyzbc-trt` 的 G-code、remap、kinematics、planner、task/HAL 语义必须来自 LinuxCNC-derived WASM 或真实 LinuxCNC evidence。
|
||||
- 当前仓库缺少 `wasm-port/build/wasm/kinematics`、core、tp、task-hal artifact,浏览器 worker/runtime 不具备真实执行条件。
|
||||
- compare JSON 的失败项已经精确指向 artifact 与 path 样本缺口,保留失败状态比静默降级更利于后续验收。
|
||||
|
||||
## D-012:DOCX 任务书整合为 working Markdown
|
||||
|
||||
日期:2026-07-02
|
||||
@@ -139,3 +151,30 @@
|
||||
- 用户明确要求以已编译成功并能执行 `xyzbc-trt` 的 `/home/mes123456/cnc_wams/linuxcnc` 为对标依据。
|
||||
- `/home/mes123456/cnc_wams/linuxcnc` 是干净 Git 源码仓库,便于把 native 行为、Web WASM 构建和后续代码追踪关联到同一源码树。
|
||||
- 该路径已完成 run-in-place 编译,`scripts/rip-environment`、`bin/axis`、`bin/xyzbc-trt-gui`、`rtlib/xyzbc-trt-kins.so` 已生成;因此后续第一步是用该路径重新生成 native evidence。
|
||||
|
||||
## D-012:WASM artifact 已生成,后续 blocker 改为路径采集与 interpreter 回归
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:`wasm-port/build/wasm` artifact 已通过 `emcc 6.0.2` 生成,Web evidence 不再把缺 artifact 作为 blocker;后续开发重点转向 native/Web path 采集闭环、Web task/HAL execution path collector,以及 `verify_interp_wasm.sh` 的 G10 L11 回归断言差异。
|
||||
|
||||
理由:
|
||||
|
||||
- core、kinematics、TP、task/HAL 所需 `.js/.wasm` 均已存在,`web-xyzbc-trt-evidence.json.wasm.missing=[]`。
|
||||
- kinematics、TP、task/HAL 的 Node WASM smoke 已通过,说明主要 runtime artifact 可加载执行。
|
||||
- Web preview path 已由 `linuxcnc_interp` WASM 生成样本,证明 Web evidence 已越过原先缺 artifact 的前置阻塞。
|
||||
- compare 剩余失败项均指向 native path 样本和 Web execution path 样本缺失;这是采集能力缺口,不再是构建产物缺口。
|
||||
- 历史状态:当时 `verify_interp_wasm.sh` 仍有 `interp_g10_l11_wasm` 断言失败,完整 interpreter/remap WASM 验收不能标记为完成。
|
||||
|
||||
## D-013:G10 L11 验收期望对齐 vendored LinuxCNC expected
|
||||
|
||||
日期:2026-07-02
|
||||
|
||||
决策:将 `verify_interp_wasm.mjs` 中 `interp_g10_l11_wasm` 的 `SET_G92_OFFSET` 期望值调整为 `x=-43.0622 y=-47.4282 z=-72`,与 `wasm-port/vendor/linuxcnc/tests/interp/g10/g10-l11/expected` 保持一致。
|
||||
|
||||
理由:
|
||||
|
||||
- 单独复现 `g10-l11` 后,WASM 实际 canonical 输出为 `SET_G92_OFFSET x=-43.0622 y=-47.4282 z=-72`。
|
||||
- vendored LinuxCNC 当前 expected 文件同样记录 `SET_G92_OFFSET(-43.0622, -47.4282, -72.0000)`。
|
||||
- 因此失败原因是 Node 验收脚本中的期望值过期,不是 WASM interpreter/remap 行为偏离 vendored LinuxCNC。
|
||||
- 修正后,`SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh` 和完整 `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 均通过,输出 `interp_wasm_node_smoke=ok`。
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
{
|
||||
"apiName": "xyzbc-trt-native-web-evidence-comparison",
|
||||
"status": "fail",
|
||||
"comparedAt": "2026-07-02T07:41:51.598Z",
|
||||
"comparedAt": "2026-07-02T12:48:11.244Z",
|
||||
"nativePath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json",
|
||||
"webPath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json",
|
||||
"summary": {
|
||||
"checkCount": 12,
|
||||
"passCount": 11,
|
||||
"failCount": 1,
|
||||
"blockers": [
|
||||
"missing-wasm-artifacts"
|
||||
],
|
||||
"checkCount": 23,
|
||||
"passCount": 18,
|
||||
"failCount": 5,
|
||||
"blockers": [],
|
||||
"nativeStatus": "ok",
|
||||
"webStatus": "blocked"
|
||||
"webStatus": "ready-for-wasm-runtime"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
@@ -134,18 +132,9 @@
|
||||
{
|
||||
"category": "wasm",
|
||||
"requirement": "required WASM artifacts available",
|
||||
"status": "fail",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"missing": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
]
|
||||
"missing": []
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -155,22 +144,525 @@
|
||||
"evidence": {
|
||||
"parameterFile": "xyzbc.var"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "program",
|
||||
"requirement": "web boat-xyzbc demo program staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"demoPrograms": [
|
||||
{
|
||||
"filename": "xyzbc_switchkins.ngc",
|
||||
"default": true,
|
||||
"staged": true,
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
|
||||
},
|
||||
{
|
||||
"filename": "boat-xyzbc.ngc",
|
||||
"default": false,
|
||||
"staged": true,
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "ngcgui",
|
||||
"requirement": "web Ngcgui/remap subroutines staged",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"ngcguiSubroutines": [
|
||||
{
|
||||
"filename": "xyzbc_switchkins_sub.ngc",
|
||||
"staged": true,
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc"
|
||||
},
|
||||
{
|
||||
"filename": "centering.ngc",
|
||||
"staged": true,
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc"
|
||||
},
|
||||
{
|
||||
"filename": "helix_bc.ngc",
|
||||
"staged": true,
|
||||
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "postgui-hal",
|
||||
"requirement": "web PyVCP to HALUI POSTGUI nets represented",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"halNets": [
|
||||
{
|
||||
"signal": "kinstype-select",
|
||||
"source": "motion.analog-out-03",
|
||||
"target": "motion.switchkins-type",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "table-x",
|
||||
"source": "joint.0.pos-fb",
|
||||
"target": "xyzbc-trt-gui.table-x",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "saddle-y",
|
||||
"source": "joint.1.pos-fb",
|
||||
"target": "xyzbc-trt-gui.saddle-y",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "spindle-z",
|
||||
"source": "joint.2.pos-fb",
|
||||
"target": "xyzbc-trt-gui.spindle-z",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "tilt-b",
|
||||
"source": "joint.3.pos-fb",
|
||||
"target": "xyzbc-trt-gui.tilt-b",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "rotate-c",
|
||||
"source": "joint.4.pos-fb",
|
||||
"target": "xyzbc-trt-gui.rotate-c",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "tool-offset",
|
||||
"source": "motion.tooloffset.z",
|
||||
"target": "xyzbc-trt-kins.tool-offset",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "tool-offset",
|
||||
"source": "xyzbc-trt-kins.tool-offset",
|
||||
"target": "xyzbc-trt-gui.tool-offset",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "x-offset",
|
||||
"source": "xyzbc-trt-kins.x-offset",
|
||||
"target": "xyzbc-trt-gui.x-offset",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "z-offset",
|
||||
"source": "xyzbc-trt-kins.z-offset",
|
||||
"target": "xyzbc-trt-gui.z-offset",
|
||||
"boundary": "ini-halcmd"
|
||||
},
|
||||
{
|
||||
"signal": "kinstype.is-0",
|
||||
"source": "kinstype.is-0",
|
||||
"target": "pyvcp.multilabel.0.legend0",
|
||||
"boundary": "postgui-hal"
|
||||
},
|
||||
{
|
||||
"signal": "kinstype.is-1",
|
||||
"source": "kinstype.is-1",
|
||||
"target": "pyvcp.multilabel.0.legend1",
|
||||
"boundary": "postgui-hal"
|
||||
},
|
||||
{
|
||||
"signal": "kinstype.is-2",
|
||||
"source": "kinstype.is-2",
|
||||
"target": "pyvcp.multilabel.0.legend2",
|
||||
"boundary": "postgui-hal"
|
||||
},
|
||||
{
|
||||
"signal": "vismach-clear",
|
||||
"source": "pyvcp.vismach-clear",
|
||||
"target": "vismach.plotclear",
|
||||
"boundary": "postgui-hal"
|
||||
},
|
||||
{
|
||||
"signal": "type0-button",
|
||||
"source": "pyvcp.type0-button",
|
||||
"target": "halui.mdi-command-00",
|
||||
"command": "M429",
|
||||
"boundary": "postgui-hal"
|
||||
},
|
||||
{
|
||||
"signal": "type1-button",
|
||||
"source": "pyvcp.type1-button",
|
||||
"target": "halui.mdi-command-01",
|
||||
"command": "M428",
|
||||
"boundary": "postgui-hal"
|
||||
},
|
||||
{
|
||||
"signal": "type2-button",
|
||||
"source": "pyvcp.type2-button",
|
||||
"target": "halui.mdi-command-02",
|
||||
"command": "M430",
|
||||
"boundary": "postgui-hal"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "kinematics",
|
||||
"requirement": "web kinematics HAL pins represented",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"kinematicsPins": {
|
||||
"xOffset": -20,
|
||||
"zOffset": -15,
|
||||
"xRotPoint": 0,
|
||||
"yRotPoint": 0,
|
||||
"zRotPoint": 0,
|
||||
"conventionalDirections": 0,
|
||||
"toolOffsetSource": "motion.tooloffset.z",
|
||||
"pins": [
|
||||
"motion.switchkins-type",
|
||||
"motion.analog-out-03",
|
||||
"motion.tooloffset.z",
|
||||
"xyzbc-trt-kins.tool-offset",
|
||||
"xyzbc-trt-kins.x-offset",
|
||||
"xyzbc-trt-kins.z-offset",
|
||||
"xyzbc-trt-kins.x-rot-point",
|
||||
"xyzbc-trt-kins.y-rot-point",
|
||||
"xyzbc-trt-kins.z-rot-point",
|
||||
"xyzbc-trt-kins.conventional-directions",
|
||||
"halui.mdi-command-00",
|
||||
"halui.mdi-command-01",
|
||||
"halui.mdi-command-02"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "limits",
|
||||
"requirement": "web TRAJ/AXIS/JOINT limits represented",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"axisJointLimits": {
|
||||
"coordinates": "XYZBC",
|
||||
"linearUnits": "mm",
|
||||
"angularUnits": "deg",
|
||||
"jogAxes": [
|
||||
"X",
|
||||
"Y",
|
||||
"Z",
|
||||
"C"
|
||||
],
|
||||
"geometry": "XYZB",
|
||||
"traj": {
|
||||
"coordinates": "XYZBC",
|
||||
"linearUnits": "mm",
|
||||
"angularUnits": "deg",
|
||||
"defaultLinearVelocity": 20,
|
||||
"maxLinearVelocity": 35,
|
||||
"defaultLinearAcceleration": 300,
|
||||
"maxLinearAcceleration": 400
|
||||
},
|
||||
"axisLimits": {
|
||||
"X": {
|
||||
"min": -200,
|
||||
"max": 200,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300
|
||||
},
|
||||
"Y": {
|
||||
"min": -100,
|
||||
"max": 100,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300
|
||||
},
|
||||
"Z": {
|
||||
"min": -120,
|
||||
"max": 120,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300
|
||||
},
|
||||
"B": {
|
||||
"min": -36000,
|
||||
"max": 36000,
|
||||
"maxVelocity": 30,
|
||||
"maxAcceleration": 300
|
||||
},
|
||||
"C": {
|
||||
"min": -36000,
|
||||
"max": 36000,
|
||||
"maxVelocity": 30,
|
||||
"maxAcceleration": 300
|
||||
}
|
||||
},
|
||||
"jointCount": 5,
|
||||
"jointConfig": [
|
||||
{
|
||||
"id": 0,
|
||||
"axis": "X",
|
||||
"type": "LINEAR",
|
||||
"home": 0,
|
||||
"min": -200,
|
||||
"max": 200,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"axis": "Y",
|
||||
"type": "LINEAR",
|
||||
"home": 0,
|
||||
"min": -100,
|
||||
"max": 100,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"axis": "Z",
|
||||
"type": "LINEAR",
|
||||
"home": 0,
|
||||
"min": -120,
|
||||
"max": 120,
|
||||
"maxVelocity": 20,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"axis": "B",
|
||||
"type": "ANGULAR",
|
||||
"home": 0,
|
||||
"min": -100,
|
||||
"max": 50,
|
||||
"maxVelocity": 30,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"axis": "C",
|
||||
"type": "ANGULAR",
|
||||
"home": 0,
|
||||
"min": -36000,
|
||||
"max": 36000,
|
||||
"maxVelocity": 30,
|
||||
"maxAcceleration": 300,
|
||||
"homeSearchVelocity": 0,
|
||||
"homeSequence": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview",
|
||||
"requirement": "native and web preview path sample period is 20ms",
|
||||
"status": "fail",
|
||||
"evidence": {
|
||||
"nativeSamplePeriodMs": null,
|
||||
"webSamplePeriodMs": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview",
|
||||
"requirement": "native and web preview paths have samples",
|
||||
"status": "fail",
|
||||
"evidence": {
|
||||
"nativeSampleCount": 0,
|
||||
"webSampleCount": 3074,
|
||||
"unavailable": [
|
||||
"native: missing samples",
|
||||
"sample period mismatch null/20"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-execution",
|
||||
"requirement": "native and web execution path sample period is 20ms",
|
||||
"status": "fail",
|
||||
"evidence": {
|
||||
"nativeSamplePeriodMs": null,
|
||||
"webSamplePeriodMs": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-execution",
|
||||
"requirement": "native and web execution paths have samples",
|
||||
"status": "fail",
|
||||
"evidence": {
|
||||
"nativeSampleCount": 0,
|
||||
"webSampleCount": 569,
|
||||
"unavailable": [
|
||||
"native: missing samples",
|
||||
"sample period mismatch null/20"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview-execution-consistency",
|
||||
"requirement": "native preview and execution paths are comparable",
|
||||
"status": "fail",
|
||||
"evidence": {
|
||||
"nativePreviewSampleCount": 0,
|
||||
"nativeExecutionSampleCount": 0,
|
||||
"unavailable": [
|
||||
"nativePreview: missing samples",
|
||||
"nativeExecution: missing samples",
|
||||
"sample period mismatch null/null"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview-execution-consistency",
|
||||
"requirement": "web preview and execution paths are comparable",
|
||||
"status": "pass",
|
||||
"evidence": {
|
||||
"webPreviewSampleCount": 3074,
|
||||
"webExecutionSampleCount": 569,
|
||||
"unavailable": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"pathComparison": {
|
||||
"samplePeriodMs": 20,
|
||||
"previewVsPreview": {
|
||||
"status": "fail",
|
||||
"comparable": false,
|
||||
"periodsMatch": false,
|
||||
"nativeSamplePeriodMs": null,
|
||||
"webSamplePeriodMs": 20,
|
||||
"leftSampleCount": 0,
|
||||
"rightSampleCount": 3074,
|
||||
"nativeSampleCount": 0,
|
||||
"webSampleCount": 3074,
|
||||
"unavailable": [
|
||||
"native: missing samples",
|
||||
"sample period mismatch null/20"
|
||||
],
|
||||
"maxTcpErrorMm": null,
|
||||
"rmsTcpErrorMm": null,
|
||||
"maxJointError": null,
|
||||
"rmsJointError": null,
|
||||
"maxToolAxisAngleDeg": null,
|
||||
"sampleCountDelta": 3074,
|
||||
"missingSamples": []
|
||||
},
|
||||
"executionVsExecution": {
|
||||
"status": "fail",
|
||||
"comparable": false,
|
||||
"periodsMatch": false,
|
||||
"nativeSamplePeriodMs": null,
|
||||
"webSamplePeriodMs": 20,
|
||||
"leftSampleCount": 0,
|
||||
"rightSampleCount": 569,
|
||||
"nativeSampleCount": 0,
|
||||
"webSampleCount": 569,
|
||||
"unavailable": [
|
||||
"native: missing samples",
|
||||
"sample period mismatch null/20"
|
||||
],
|
||||
"maxTcpErrorMm": null,
|
||||
"rmsTcpErrorMm": null,
|
||||
"maxJointError": null,
|
||||
"rmsJointError": null,
|
||||
"maxToolAxisAngleDeg": null,
|
||||
"sampleCountDelta": 569,
|
||||
"missingSamples": []
|
||||
},
|
||||
"previewVsExecutionNative": {
|
||||
"status": "fail",
|
||||
"comparable": false,
|
||||
"periodsMatch": false,
|
||||
"nativePreviewSamplePeriodMs": null,
|
||||
"nativeExecutionSamplePeriodMs": null,
|
||||
"leftSampleCount": 0,
|
||||
"rightSampleCount": 0,
|
||||
"unavailable": [
|
||||
"nativePreview: missing samples",
|
||||
"nativeExecution: missing samples",
|
||||
"sample period mismatch null/null"
|
||||
],
|
||||
"maxTcpErrorMm": null,
|
||||
"rmsTcpErrorMm": null,
|
||||
"maxJointError": null,
|
||||
"rmsJointError": null,
|
||||
"maxToolAxisAngleDeg": null,
|
||||
"sampleCountDelta": 0,
|
||||
"missingSamples": []
|
||||
},
|
||||
"previewVsExecutionWeb": {
|
||||
"status": "pass",
|
||||
"comparable": true,
|
||||
"periodsMatch": true,
|
||||
"webPreviewSamplePeriodMs": 20,
|
||||
"webExecutionSamplePeriodMs": 20,
|
||||
"leftSampleCount": 3074,
|
||||
"rightSampleCount": 569,
|
||||
"unavailable": [],
|
||||
"maxTcpErrorMm": 31.575968660550437,
|
||||
"rmsTcpErrorMm": 14.55884964854259,
|
||||
"maxJointError": 58.498220458848685,
|
||||
"rmsJointError": 20.762740311288844,
|
||||
"maxToolAxisAngleDeg": 19.999999999999993,
|
||||
"sampleCountDelta": 2505,
|
||||
"missingSamples": []
|
||||
}
|
||||
},
|
||||
"requiredImprovements": [
|
||||
{
|
||||
"category": "wasm",
|
||||
"requirement": "required WASM artifacts available",
|
||||
"category": "path-preview",
|
||||
"requirement": "native and web preview path sample period is 20ms",
|
||||
"evidence": {
|
||||
"missing": [
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js",
|
||||
"wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.js",
|
||||
"wasm-port/build/wasm/core/linuxcnc_interp.wasm",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.js",
|
||||
"wasm-port/build/wasm/tp/linuxcnc_tp.wasm",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js",
|
||||
"wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm"
|
||||
"nativeSamplePeriodMs": null,
|
||||
"webSamplePeriodMs": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview",
|
||||
"requirement": "native and web preview paths have samples",
|
||||
"evidence": {
|
||||
"nativeSampleCount": 0,
|
||||
"webSampleCount": 3074,
|
||||
"unavailable": [
|
||||
"native: missing samples",
|
||||
"sample period mismatch null/20"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-execution",
|
||||
"requirement": "native and web execution path sample period is 20ms",
|
||||
"evidence": {
|
||||
"nativeSamplePeriodMs": null,
|
||||
"webSamplePeriodMs": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-execution",
|
||||
"requirement": "native and web execution paths have samples",
|
||||
"evidence": {
|
||||
"nativeSampleCount": 0,
|
||||
"webSampleCount": 569,
|
||||
"unavailable": [
|
||||
"native: missing samples",
|
||||
"sample period mismatch null/20"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "path-preview-execution-consistency",
|
||||
"requirement": "native preview and execution paths are comparable",
|
||||
"evidence": {
|
||||
"nativePreviewSampleCount": 0,
|
||||
"nativeExecutionSampleCount": 0,
|
||||
"unavailable": [
|
||||
"nativePreview: missing samples",
|
||||
"nativeExecution: missing samples",
|
||||
"sample period mismatch null/null"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user