Update XYZBC web simulation evidence
This commit is contained in:
@@ -987,3 +987,261 @@ Web 仿真系统已正式运行,可在浏览器直接访问:
|
||||
### 结论
|
||||
|
||||
已修复 G 代码实际运行刀具路径与刀具预览路径不重合的问题。根因是实际刀具标记使用了关节/轴坐标 `axisPose`,而预览路径使用 TCP 坐标;修复后运行反馈显式携带 `tcp`,渲染层优先使用 TCP 绘制实际刀具位置。节点烟测、构建、浏览器烟测均已通过。
|
||||
|
||||
## 2026-07-03 07:50 EDT 提交到云仓库日志
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求:提交到云仓库 `http://154.8.160.151:3000`,账号 `wangdequan`。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 检查 Git 状态:
|
||||
- 执行 `git status --short`
|
||||
- 确认工作区存在大量本轮之前已有的未提交改动和未跟踪截图目录。
|
||||
2. 检查远程仓库:
|
||||
- 执行 `git remote -v`
|
||||
- 远程 `origin` 已配置为:
|
||||
`http://wangdequan:wangdequan123@154.8.160.151:3000/wangdequan/cnc_wams.git`
|
||||
3. 检查当前分支:
|
||||
- 执行 `git branch --show-current`
|
||||
- 当前分支为 `master`。
|
||||
4. 暂存本轮修复直接相关文件,避免提交大量无关截图和工作文档:
|
||||
- `gptlog-process/gpdlog.md`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/visualization/five-axis-scene.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/src/state/store.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/src/visualization/five-axis-scene.js`
|
||||
5. 检查暂存内容:
|
||||
- 执行 `git diff --cached --stat`
|
||||
- 执行 `git diff --cached --name-only`
|
||||
- 确认暂存区只有 6 个文件,无截图目录。
|
||||
6. 创建本地提交:
|
||||
- 命令:`git commit -m "Fix XYZBC tool execution TCP path"`
|
||||
- 提交号:`6631833`
|
||||
- 提交信息:`Fix XYZBC tool execution TCP path`
|
||||
7. 推送到云仓库:
|
||||
- 命令:`git push origin master`
|
||||
- 推送结果:成功。
|
||||
- 远程更新:`ffdaa21..6631833 master -> master`
|
||||
8. 推送后检查工作区:
|
||||
- 执行 `git status --short`
|
||||
- 仍有未提交改动和未跟踪截图目录,均为本次提交未纳入的既有/无关内容。
|
||||
|
||||
### 结论
|
||||
|
||||
已将修复提交并推送到云仓库 `origin/master`。远程仓库 `http://154.8.160.151:3000/wangdequan/cnc_wams.git` 已更新到提交 `6631833 Fix XYZBC tool execution TCP path`。本次日志是在推送后追加,因此当前本地 `gptlog-process/gpdlog.md` 会再次显示为未提交修改。
|
||||
|
||||
## 2026-07-03 08:30 EDT 短流程截图合成视频日志
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求:将目录 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T122543Z` 里面的图片合成视频。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 检查截图帧数量:
|
||||
- 工作目录:
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T122543Z`
|
||||
- 命令:`find . -maxdepth 1 -type f -name 'frame-*.png' | sort | wc -l`
|
||||
- 结果:`120`
|
||||
2. 检查首尾帧图片尺寸:
|
||||
- 命令:`file frame-0000-t000000ms.png frame-0119-t005950ms.png`
|
||||
- 结果:
|
||||
- `frame-0000-t000000ms.png`: `1600 x 1000`
|
||||
- `frame-0119-t005950ms.png`: `1600 x 1000`
|
||||
3. 检查 ffmpeg 可用性:
|
||||
- 命令:`ffmpeg -version | sed -n '1,3p'`
|
||||
- 版本:`ffmpeg 7.1.5-0+deb13u1`
|
||||
4. 合成 MP4 视频:
|
||||
- 因原截图是 50ms 一帧,所以使用 `20fps`。
|
||||
- 命令:
|
||||
`ffmpeg -y -framerate 20 -pattern_type glob -i 'frame-*.png' -c:v libx264 -pix_fmt yuv420p -movflags +faststart web-simulation-gcode-full-50ms-120frames.mp4`
|
||||
- 输出文件:
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T122543Z/web-simulation-gcode-full-50ms-120frames.mp4`
|
||||
5. 校验视频:
|
||||
- 命令:
|
||||
`ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,nb_frames,duration -of json web-simulation-gcode-full-50ms-120frames.mp4`
|
||||
- 结果:
|
||||
- 宽度:`1600`
|
||||
- 高度:`1000`
|
||||
- 帧率:`20/1`
|
||||
- 时长:`6.000000` 秒
|
||||
- 帧数:`120`
|
||||
|
||||
### 结论
|
||||
|
||||
已将目录内 `120` 张 PNG 截图按 `20fps` 合成为 MP4 视频。输出视频为:
|
||||
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T122543Z/web-simulation-gcode-full-50ms-120frames.mp4`
|
||||
|
||||
视频参数:`1600x1000`、`20fps`、`120` 帧、`6` 秒。
|
||||
|
||||
## 2026-07-03 07:56 EDT 仿真程序实际执行日志
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求:仿真程序执行过程,帮我实际执行一下。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 检查已有执行工具:
|
||||
- 读取 `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/capture-full-gcode-process-frames.mjs`
|
||||
- 确认该脚本会启动本地静态服务,用 Playwright 打开仿真页面,加载真实 LinuxCNC G 代码:
|
||||
`configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc`
|
||||
- 脚本按 50ms 样本推进 `programAxisPreviewPath.samples`,每个样本执行一次 UI 状态更新并截图。
|
||||
2. 启动实际仿真执行:
|
||||
- 工作目录:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan`
|
||||
- 命令:`node tools/capture-full-gcode-process-frames.mjs`
|
||||
3. 等待执行完成:
|
||||
- 脚本完整执行约 1300 个 50ms 样本。
|
||||
- 期间没有中断或残留手动操作。
|
||||
4. 脚本输出:
|
||||
- 截图目录:
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T115307Z`
|
||||
- 捕获帧数:`1300`
|
||||
- 采样周期:`50ms`
|
||||
- manifest:
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T115307Z/manifest.json`
|
||||
5. 校验 manifest:
|
||||
- `status`: `complete`
|
||||
- `capturedFrameCount`: `1300`
|
||||
- `expectedSampleCount`: `1300`
|
||||
- `samplePeriodMs`: `50`
|
||||
- `sourceRel`: `configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc`
|
||||
- 首帧:
|
||||
- 文件:`frame-0000-t000000ms.png`
|
||||
- 源文件:`xyzbc_switchkins_sub.ngc`
|
||||
- 行号:`16`
|
||||
- 语句:`g53 g0 x0y0 z#<zmax> b0 c0 ; quadrant I`
|
||||
- 操作:`rapid-machine-reset`
|
||||
- TCP:`x=0, y=0, z=10`
|
||||
- 末帧:
|
||||
- 文件:`frame-1299-t064950ms.png`
|
||||
- 源文件:`xyzbc_switchkins_sub.ngc`
|
||||
- 行号:`44`
|
||||
- 语句:`g53 g0 x0y0 z#<zmax>`
|
||||
- 操作:`rapid-final-machine-reset`
|
||||
- TCP:`x=0, y=0, z=10`
|
||||
6. 校验 G 代码执行统计:
|
||||
- `gcodeExecutionProcess.status`: `ok`
|
||||
- `executionStepCount`: `128`
|
||||
- `motionStepCount`: `29`
|
||||
- `switchkinsStepCount`: `21`
|
||||
- `parameterAssignmentStepCount`: `41`
|
||||
- `workOffsetStepCount`: `9`
|
||||
- `callStepCount`: `5`
|
||||
- `lineExecutionTraceCount`: `64`
|
||||
- `axisValuesByLineCount`: `29`
|
||||
- 最终关节:`x=0, y=0, z=10, b=0, c=0`
|
||||
- 最终运动学:`identity`
|
||||
7. 校验输出文件数量和大小:
|
||||
- 执行 `find ... -maxdepth 1 -type f | wc -l`
|
||||
- 文件数:`1301`,包括 `1300` 张 PNG 截图和 `manifest.json`
|
||||
- 目录大小约:`283M`
|
||||
8. 检查 Git 状态:
|
||||
- 新增未跟踪目录:
|
||||
`web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T115307Z/`
|
||||
- 日志文件 `gptlog-process/gpdlog.md` 已更新。
|
||||
|
||||
### 结论
|
||||
|
||||
已实际执行仿真程序完整过程。执行对象为 `xyzbc_switchkins.ngc`,按 50ms 采样完整捕获 `1300` 帧,生成完整执行截图和 manifest。执行状态为 `complete`,G 代码语义执行过程状态为 `ok`,覆盖 `128` 个展开执行步骤、`29` 个运动步骤,输出目录为:
|
||||
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T115307Z`
|
||||
|
||||
## 2026-07-03 08:27 EDT 对照截图修复刀具真实路径日志
|
||||
|
||||
### 提问
|
||||
|
||||
用户指出:对照截图后,刀具真实路径不正确。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 复查上一轮完整执行截图和 manifest:
|
||||
- 目录:
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T115307Z`
|
||||
- 读取 `manifest.json` 中第 `0、50、100、150、200、250、300、350、400、500、650、800、950、1100、1299` 帧的 `joint/tcp/axisPose/toolAxis`。
|
||||
2. 发现数据层现象:
|
||||
- 多数切削帧中 `tcp` 数据是变化的,例如第 `100` 帧 TCP 为:
|
||||
`x=27.240233813595477, y=26.897754295745006, z=8.964757709251101`
|
||||
- 第 `300` 帧、第 `950` 帧等回退段中,`joint`、`tcp`、`axisPose` 存在差异,说明数据层已有 TCP 与关节坐标区分。
|
||||
3. 直接查看截图:
|
||||
- 打开旧截图:
|
||||
- `frame-0300-t015000ms.png`
|
||||
- `frame-0950-t047500ms.png`
|
||||
- 视觉上确认白色刀具实体固定在参考原点附近,没有跟随右侧 DRO/TCP 和底部 TCP 数据移动。
|
||||
4. 定位根因:
|
||||
- 文件:`web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/visualization/five-axis-scene.js`
|
||||
- 函数:`updateMachineReferenceModel()`
|
||||
- 在 `axisReferenceMode` 下,代码将 `axisReference.tool` 固定设置到:
|
||||
`new THREE.Vector3(0, 0, 0.006)`
|
||||
- 因为当前页面处于 LinuxCNC AXIS 参考预览模式,所以真实显示的刀具实体没有使用当前 TCP,而是被固定在原点附近。
|
||||
5. 实施修复:
|
||||
- 将参考预览模式下的刀具位置改为:
|
||||
`toolPosition || toPreviewVector(state.tcpPose || state.axisPose, state)`
|
||||
- 同时更新 `preview.currentToolhead.copy(referenceToolPosition)`,保证 canvas dataset 的 `threeToolhead` 与实际刀具实体一致。
|
||||
6. 同步构建输出:
|
||||
- 运行 `npm run build`
|
||||
- 输出:`gmoccapy_static_build=ok`
|
||||
- dist 同步更新。
|
||||
7. 执行验证:
|
||||
- `npm run smoke:node`
|
||||
- 输出:`xyzbc_trt_web_app_smoke=ok`
|
||||
- `npm run smoke:browser`
|
||||
- 输出:`xyzbc_trt_browser_smoke=ok`
|
||||
8. 捕获短流程截图用于人工对照:
|
||||
- 命令:`MAX_FRAMES=120 node tools/capture-full-gcode-process-frames.mjs`
|
||||
- 输出目录:
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T122543Z`
|
||||
- 捕获帧数:`120`
|
||||
- 采样周期:`50ms`
|
||||
9. 对照修复后截图:
|
||||
- 打开:
|
||||
- `frame-0050-t002500ms.png`
|
||||
- `frame-0100-t005000ms.png`
|
||||
- 第 `50` 帧白色刀具已移动到 `X10 Y20 Z10` 附近。
|
||||
- 第 `100` 帧白色刀具已移动到 `X27.240 Y26.898 Z8.965` 附近。
|
||||
- 视觉上不再固定在中心原点。
|
||||
10. 增加回归测试:
|
||||
- 文件:`web-rtcp-5axis-xyzbc-trt-sim-plan/tests/browser/xyzbc_trt_browser_smoke.html`
|
||||
- 新增检查:
|
||||
- 读取 canvas dataset `threeToolhead`
|
||||
- 与 `runState.programUiExecution.tcp / 1000` 进行米制坐标对比
|
||||
- 容差为 `1e-6`
|
||||
- 防止之后出现“数据 TCP 正确,但可见刀具实体未跟随 TCP”的回归。
|
||||
|
||||
### 结论
|
||||
|
||||
用户指出的问题成立。上一轮仅修复了运行反馈 TCP 和执行标记数据,但参考预览模式下可见白色刀具实体仍被固定到原点附近。现已修复为在 `axisReferenceMode` 下也使用当前 TCP 放置刀具实体,并增加浏览器回归断言验证 `threeToolhead` 与 live TCP 一致。构建、节点烟测、浏览器烟测均通过。新的短流程对照截图目录为:
|
||||
|
||||
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T122543Z`
|
||||
|
||||
## 2026-07-03 08:41
|
||||
|
||||
### 提问
|
||||
|
||||
用户询问如何在本机发布项目:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan`。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 查看项目结构,确认目标目录下应用入口位于 `web-rtcp-5axis-xyzbc-trt-sim-plan/app`,存在 `package.json`、`index.html` 和 `dist/`。
|
||||
2. 读取 `app/package.json`,确认脚本:`build` 使用 `node scripts/build-static.mjs` 生成静态目录,`dev` 使用 `python3 -m http.server 4174`。
|
||||
3. 读取项目 README,确认 Web 实现入口为 `web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html`,并了解其依赖 LinuxCNC/WASM 相关静态资源。
|
||||
4. 读取 `scripts/build-static.mjs`,确认构建产物为 `app/dist`,其中会复制 `src`、LinuxCNC 配置、参考资源、WASM runtime 等静态资源。
|
||||
5. 查看 `app/index.html` 与 `app/dist/index.html`,确认页面通过相对路径引用 `./src/styles/axis.css` 和 `./src/main.js`,适合从静态目录根路径发布。
|
||||
6. 查看 `app/dist` 内容,确认已存在构建产物,包括 `index.html`、`src/`、`linuxcnc/`、`wasm-port/`、`working_run/` 等。
|
||||
7. 检查 `git status --short`,发现工作区已有大量未提交变更,包括源码、dist、working 文档和截图等,因此本次未重新执行 `npm run build`,避免覆盖用户已有未提交构建产物。
|
||||
8. 检查端口 `4174` 占用,未发现监听进程。
|
||||
9. 检查本机环境版本:Node `v20.19.2`、npm `9.2.0`、Python `3.13.5`。
|
||||
10. 从 `app/dist` 启动本机静态服务:`python3 -m http.server 4174 --directory dist`,服务监听 `0.0.0.0:4174`。
|
||||
11. 使用 `curl -I` 验证关键地址:
|
||||
- `http://127.0.0.1:4174/` 返回 `HTTP/1.0 200 OK`。
|
||||
- `http://127.0.0.1:4174/src/main.js` 返回 `HTTP/1.0 200 OK`。
|
||||
- `http://127.0.0.1:4174/src/styles/axis.css` 返回 `HTTP/1.0 200 OK`。
|
||||
- `http://127.0.0.1:4174/wasm-port/tools/source-manifest.txt` 返回 `HTTP/1.0 200 OK`。
|
||||
|
||||
### 结论
|
||||
|
||||
该项目本机发布方式是把 `web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist` 作为静态站点目录对外提供 HTTP 服务。当前已在本机启动服务,访问地址为 `http://127.0.0.1:4174/`;如果需要让局域网其它机器访问,可使用本机局域网 IP 加 `4174` 端口。若源码发生变化,通常先在 `app` 目录运行 `npm run build` 重新生成 `dist`,再发布 `dist` 目录。
|
||||
|
||||
Reference in New Issue
Block a user