Compare commits

...

2 Commits

Author SHA1 Message Date
1076bfa5e0 Update handoff for machine manager delivery 2026-09-20 12:32:14 +08:00
8aab531b02 Add AC/BC RTCP programs and 3D machine manager 2026-09-20 12:31:12 +08:00
363 changed files with 53213 additions and 58 deletions

View File

@@ -1,5 +1,11 @@
# LinuxCNC Web/WASM
五轴 GLB / URDF 机床导入(AC / BC、底座双分支)的工作入口:
[`子项目文档、任务矩阵与模型交付`](docs/glb-machine/README.md)。
机床预览区的部件级三维机床管理器(GLB 部件、层级、原点、姿态、RTCP 标定和物理零点)入口:
[`三维机床管理器文档、任务矩阵与验收证据`](docs/glb-machine-manager/README.md)。
当前配置驱动改造的重启接续入口:[`nextTask-hardcoding.md`](nextTask-hardcoding.md)。
五轴机床 INI 参数化设计(XYZAC / XYZBC)的当前工作入口:

View File

@@ -0,0 +1,21 @@
{
"schema": "machine-manager-browser.v1",
"report_id": "GLB-MGR-E02",
"mode": "production-preview",
"status": "verified",
"checks": [
"eight GLB parts imported and rendered in the Three.js editor",
"origin visibility, numeric translation/rotation and TransformControls mode update",
"validated assembly exports a self-contained managed GLB",
"validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData",
"same component assembly switches to BC hierarchy and applies BC geometry",
"BC five-axis program drives managed model from authoritative WASM joints",
"production bundle exercised through AC/BC UI apply and WASM program motion"
],
"browser_errors": [],
"final": {
"program": "aborted",
"machine": "ON",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
}

View File

@@ -0,0 +1,21 @@
{
"schema": "machine-manager-browser.v1",
"report_id": "GLB-MGR-E01",
"mode": "development-source",
"status": "verified",
"checks": [
"eight GLB parts imported and rendered in the Three.js editor",
"origin visibility, numeric translation/rotation and TransformControls mode update",
"validated assembly exports a self-contained managed GLB",
"validated hierarchy applied through LOAD_WORKSPACE with geometry and physical zero in userData",
"same component assembly switches to BC hierarchy and applies BC geometry",
"BC five-axis program drives managed model from authoritative WASM joints",
"AC/BC WASM joint projection subtracts physical zero, preserves userData and rejects invalid hierarchy"
],
"browser_errors": [],
"final": {
"program": "aborted",
"machine": "ON",
"path": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -0,0 +1,212 @@
{
"report_id": "glb-machine-acceptance-v1",
"status": "verified",
"tasks": [
"GLB-01",
"GLB-02",
"GLB-03",
"GLB-04",
"GLB-05",
"GLB-06"
],
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"reports": [
{
"report_id": "glb-machine-browser-v1",
"path": "coverage/glb-machine/browser.report.json",
"sha256": "5386309453c8b595b70a3f7c4285a57caa5affc986272915bd083a0b8a920308"
},
{
"report_id": "glb-machine-five-axis-motion-v1",
"path": "coverage/glb-machine/motion.report.json",
"sha256": "91c3fa8ed8037aac8e71b8c76d54c38db9dc011ae25f63553966860b624aa626"
},
{
"report_id": "glb-machine-khronos-validation-v1",
"path": "coverage/glb-machine/gltf-validation.report.json",
"sha256": "4eba70b5ab5597d36bd0ade01920e80ad41453c0f34a29ad0bd8e2b199825adc"
},
{
"report_id": "glb-machine-reproducibility-v1",
"path": "coverage/glb-machine/reproducibility.report.json",
"sha256": "bce59c1ac891da57a417a99a2e5350e659aeb2cecdf8f29e30af1f83bb6cf5a2"
},
{
"report_id": "trt-parametric-browser-v1",
"path": "coverage/glb-machine/regression-parametric/browser.report.json",
"sha256": "3a61994a249419528692a23a9a73d3af8c47477eaad9d5e3134f7e365d2279e8"
},
{
"report_id": "trt-rtcp-jog-browser-v1",
"path": "coverage/glb-machine/regression-jog/rtcp-jog-browser.report.json",
"sha256": "f79f137e061d33e665817170c52eb33189608e2bbed8d182854a8b39d9353e47"
}
],
"models": [
{
"id": "ac",
"filename": "demo-ac-xyz-head.glb",
"urdf": "demo-ac-xyz-head.urdf",
"bytes": 530848,
"sha256": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"coordinates": "XYZAC",
"rotation_point_mm": [
24,
-12,
8
],
"offsets_mm": [
0,
18,
-45
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 71
},
{
"id": "bc",
"filename": "demo-bc-xyz-head.glb",
"urdf": "demo-bc-xyz-head.urdf",
"bytes": 530532,
"sha256": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"coordinates": "XYZBC",
"rotation_point_mm": [
-18,
14,
12
],
"offsets_mm": [
22,
0,
-40
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 71
}
],
"rejected_inputs": 42,
"static_pose_and_tool_length_samples": 36,
"imported_rotary_jogs": 8,
"simultaneous_five_axis_intervals": 82,
"executed_program_projection_samples": 84,
"max_program_projection_error_view_units": 2.482534153247273e-16,
"boundaries": [
"Only the versioned orthogonal XYZ-head / AC-or-BC table TRT profile is supported",
"Runtime INI supplies homing, acceleration, periods and validated travel/speed settings",
"Imported GLB assets are kept in page memory; reload requires importing again",
"Original illustrative assets; no manufacturer calibration, collision or generic URDF solver claim",
"No native/WASM source modification; no whole-repository or release parity claim"
],
"evidence": [
{
"path": "coverage/glb-machine/ac-imported.png",
"sha256": "8e1e67a7ad7275d8697944b74f77bb111be9ef22d5cccab5961a0d472225dc96"
},
{
"path": "coverage/glb-machine/bc-imported.png",
"sha256": "b7257f6aba3b513bb6c1494aaf9a1879f977884094fdc55cdf46150c25c65470"
},
{
"path": "coverage/glb-machine/browser.log",
"sha256": "f8308922ef1d78fc82ab21081a16b8c369808e662c1ac85ceef03558c2706410"
},
{
"path": "coverage/glb-machine/browser.report.json",
"sha256": "5386309453c8b595b70a3f7c4285a57caa5affc986272915bd083a0b8a920308"
},
{
"path": "coverage/glb-machine/build.log",
"sha256": "61535b778ec1ab991507ca2454c1e11ddadedbe3f921b530ddc6f13bd7207073"
},
{
"path": "coverage/glb-machine/generation.log",
"sha256": "a9222f10610e68cfda0e59a759c1fffa5a743e01f079f086bc743b260796afdd"
},
{
"path": "coverage/glb-machine/gltf-validation.log",
"sha256": "5bc225291eb5fceeface7225db1ef98833c3bcc258ce03e16dbe32d1170d9649"
},
{
"path": "coverage/glb-machine/gltf-validation.report.json",
"sha256": "4eba70b5ab5597d36bd0ade01920e80ad41453c0f34a29ad0bd8e2b199825adc"
},
{
"path": "coverage/glb-machine/motion.log",
"sha256": "57ed59ba66d43ff00784733a3ddb7a0c3936c33aae0e03ab3c4fd4c2eacca361"
},
{
"path": "coverage/glb-machine/motion.report.json",
"sha256": "91c3fa8ed8037aac8e71b8c76d54c38db9dc011ae25f63553966860b624aa626"
},
{
"path": "coverage/glb-machine/regression-jog/rtcp-jog-browser.report.json",
"sha256": "f79f137e061d33e665817170c52eb33189608e2bbed8d182854a8b39d9353e47"
},
{
"path": "coverage/glb-machine/regression-jog/rtcp-jog-xyzac.png",
"sha256": "d528ae818b88650b0786273c8a57e7997d4a1a0484bf2dd13597cc2de3807f9f"
},
{
"path": "coverage/glb-machine/regression-jog/rtcp-jog-xyzbc.png",
"sha256": "6be23d67f0a92259b717feb828f3c63bac4fa725e2a852c51ba83918b5aeee1a"
},
{
"path": "coverage/glb-machine/regression-jog.log",
"sha256": "b12b994ebfd6a7dac5b079ec4781af0559f6ec623cd1548b3b9d78b50ef4f962"
},
{
"path": "coverage/glb-machine/regression-parametric/browser.report.json",
"sha256": "3a61994a249419528692a23a9a73d3af8c47477eaad9d5e3134f7e365d2279e8"
},
{
"path": "coverage/glb-machine/regression-parametric/layout-1440.png",
"sha256": "12f92632fa3c367e4a64a963e2246f10b58f574468b2429a5c1dd51e303ac6a3"
},
{
"path": "coverage/glb-machine/regression-parametric/layout-390.png",
"sha256": "e17530ed4a069b06820f11036c20a1643f064fa8d3f48de7ddd1cd6fdecfc939"
},
{
"path": "coverage/glb-machine/regression-parametric/xyzac-trt-model.png",
"sha256": "170a4c61a183cc0bf589a361d3b14a0c0f11d401eec85e8d0ec0e0c8174b0072"
},
{
"path": "coverage/glb-machine/regression-parametric/xyzbc-trt-model.png",
"sha256": "9ef3b87c169568ecd47ff2ad76209017f41f2c84deca45e421168c42cc6efb8d"
},
{
"path": "coverage/glb-machine/regression-parametric.log",
"sha256": "5a2d232459aeb6c054fe255d3354cdf5a71268e81dea50a0602ee761445823fa"
},
{
"path": "coverage/glb-machine/reproducibility.report.json",
"sha256": "bce59c1ac891da57a417a99a2e5350e659aeb2cecdf8f29e30af1f83bb6cf5a2"
},
{
"path": "coverage/glb-machine/viewport-1440.png",
"sha256": "89814a506f727b45d80e7109c6370e86d784d16e2a5c9e69f3a3681eb3590c06"
},
{
"path": "coverage/glb-machine/viewport-390.png",
"sha256": "7ef7acd38fc1e383c8dc32bb606b8b91e91449e5c05fc9d5b5c489a9fe7eeb74"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -0,0 +1,972 @@
{
"report_id": "glb-machine-browser-v1",
"status": "verified",
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"parser": [
{
"id": "ac",
"rejected": [
{
"name": "truncated",
"error": "机床模型无效:GLB 头部或长度错误"
},
{
"name": "missing-schema",
"error": "机床模型无效:缺少 linuxcnc.machine/1 内嵌 URDF"
},
{
"name": "external-buffer",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "external-texture",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "animation",
"error": "机床模型无效:运动节点不能由动画、蒙皮或压缩扩展驱动"
},
{
"name": "node-cycle",
"error": "机床模型无效:GLB 节点环、重复父节点或索引无效"
},
{
"name": "wrong-hierarchy",
"error": "机床模型无效:GLB 层级与 URDF 不同:c_table"
},
{
"name": "node-offset-mismatch",
"error": "机床模型无效:GLB 节点 c_table 零位与 URDF 不同"
},
{
"name": "duplicate-link",
"error": "机床模型无效:GLB link base 缺失或重名"
},
{
"name": "matrix-origin-mismatch",
"error": "机床模型无效:GLB 节点 c_table 矩阵与 URDF 不同"
},
{
"name": "xml-syntax",
"error": "机床模型无效:URDF XML 语法错误"
},
{
"name": "doctype",
"error": "机床模型无效:URDF 长度或 XML 声明不支持"
},
{
"name": "duplicate-coordinate",
"error": "机床模型无效:需要 XYZAC 或 XYZBC 五个唯一运动轴"
},
{
"name": "negative-axis",
"error": "机床模型无效:要求底座 → X → Y → Z 正交刀具链,零位 origin=0"
},
{
"name": "nonzero-rpy",
"error": "机床模型无效:v1 不支持旋转的关节零位 rpy"
},
{
"name": "nan-limit",
"error": "机床模型无效:需要有限数值"
},
{
"name": "mimic",
"error": "机床模型无效:不支持 mimic"
},
{
"name": "unknown-profile",
"error": "机床模型无效:不支持的运动学 profile"
},
{
"name": "broken-tree",
"error": "机床模型无效:存在断开的结构或环"
},
{
"name": "runtime-range-outside-model",
"error": "X:INI 行程超出 URDF,先调整运行配置"
},
{
"name": "runtime-speed-outside-model",
"error": "X:INI 速度超出 URDF"
}
]
},
{
"id": "bc",
"rejected": [
{
"name": "truncated",
"error": "机床模型无效:GLB 头部或长度错误"
},
{
"name": "missing-schema",
"error": "机床模型无效:缺少 linuxcnc.machine/1 内嵌 URDF"
},
{
"name": "external-buffer",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "external-texture",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "animation",
"error": "机床模型无效:运动节点不能由动画、蒙皮或压缩扩展驱动"
},
{
"name": "node-cycle",
"error": "机床模型无效:GLB 节点环、重复父节点或索引无效"
},
{
"name": "wrong-hierarchy",
"error": "机床模型无效:GLB 层级与 URDF 不同:c_table"
},
{
"name": "node-offset-mismatch",
"error": "机床模型无效:GLB 节点 c_table 零位与 URDF 不同"
},
{
"name": "duplicate-link",
"error": "机床模型无效:GLB link base 缺失或重名"
},
{
"name": "matrix-origin-mismatch",
"error": "机床模型无效:GLB 节点 c_table 矩阵与 URDF 不同"
},
{
"name": "xml-syntax",
"error": "机床模型无效:URDF XML 语法错误"
},
{
"name": "doctype",
"error": "机床模型无效:URDF 长度或 XML 声明不支持"
},
{
"name": "duplicate-coordinate",
"error": "机床模型无效:需要 XYZAC 或 XYZBC 五个唯一运动轴"
},
{
"name": "negative-axis",
"error": "机床模型无效:要求底座 → X → Y → Z 正交刀具链,零位 origin=0"
},
{
"name": "nonzero-rpy",
"error": "机床模型无效:v1 不支持旋转的关节零位 rpy"
},
{
"name": "nan-limit",
"error": "机床模型无效:需要有限数值"
},
{
"name": "mimic",
"error": "机床模型无效:不支持 mimic"
},
{
"name": "unknown-profile",
"error": "机床模型无效:不支持的运动学 profile"
},
{
"name": "broken-tree",
"error": "机床模型无效:存在断开的结构或环"
},
{
"name": "runtime-range-outside-model",
"error": "X:INI 行程超出 URDF,先调整运行配置"
},
{
"name": "runtime-speed-outside-model",
"error": "X:INI 速度超出 URDF"
}
]
}
],
"machines": [
{
"id": "ac",
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"coordinates": "XYZAC",
"offsets": {
"x_rot_point": 24,
"x_offset": 0,
"y_rot_point": -12,
"y_offset": 18,
"z_rot_point": 8,
"z_offset": -45
},
"program_preserved": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"geometry": [
{
"tilt": 0,
"c": 0,
"tool_offset": 0,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 0,
"error": 1.2412670766236366e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 0,
"error": 1.1933397187179203e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 0,
"error": 2.1599919653272043e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 0,
"error": 2.486410087150353e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 0,
"error": 1.709648974837069e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": 17,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 17,
"error": 1.3472894910096233e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 17,
"error": 1.1354490689426183e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 17,
"error": 2.036065864674698e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 17,
"error": 2.482534153247273e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 17,
"error": 1.3877787807814457e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": -4,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": -4,
"error": 1.2412670766236366e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": -4,
"error": 9.508199615517185e-17
},
{
"tilt": -35,
"c": 125,
"tool_offset": -4,
"error": 1.9141791241147513e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": -4,
"error": 2.2591401799415137e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": -4,
"error": 1.1857187100668868e-16
}
],
"jogs": [
{
"axis": "a",
"before": {
"joints": [
4.066650000000003,
3.0666500000000028,
0,
0,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.04066650000000002,
6.809330876933479e-18,
0.030666500000000027
],
"tick": 54,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
4.066650000000003,
-0.019142531975200328,
-0.3752206095071884,
4.799999999999997,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.04066650000000002,
-0.0037522060950718836,
-0.00019142531975200244
],
"tick": 85,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 7.567484573835504e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
4.066650000000003,
-0.019142531975200328,
-0.3752206095071884,
4.799999999999997,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.04066650000000002,
-0.0037522060950718836,
-0.00019142531975200244
],
"tick": 85,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
3.0167271826648197,
-1.514225061260488,
-0.5007661972082786,
4.799999999999997,
4.199999999999992
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.030167271826648197,
-0.005007661972082789,
-0.015142250612604878
],
"tick": 114,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 1.0507972009713376e-16,
"render_error": 0
},
{
"axis": "a",
"before": {
"joints": [
3.0167271826648197,
-1.514225061260488,
-0.5007661972082786,
4.799999999999997,
4.199999999999992
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.030167271826648197,
-0.005007661972082789,
-0.015142250612604878
],
"tick": 114,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
3.0167271826648197,
-4.3547580920686855,
-1.2028404574208267,
9.299999999999992,
4.199999999999992
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.030167271826648197,
-0.012028404574208278,
-0.043547580920686856
],
"tick": 144,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 1.602813148773208e-16,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
3.0167271826648197,
-4.3547580920686855,
-1.2028404574208267,
9.299999999999992,
4.199999999999992
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.030167271826648197,
-0.012028404574208278,
-0.043547580920686856
],
"tick": 144,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
1.773075434767975,
-6.477614069157218,
-1.550471455393577,
9.299999999999992,
9.899999999999997
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.017730754347679747,
-0.015504714553935782,
-0.06477614069157217
],
"tick": 178,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 1.193812447098184e-16,
"render_error": 0
}
],
"pixels": {
"colors": 855,
"width": 472,
"height": 353
},
"worker_derived_offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
}
},
{
"id": "bc",
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"coordinates": "XYZBC",
"offsets": {
"x_rot_point": -18,
"x_offset": 22,
"y_rot_point": 14,
"y_offset": 0,
"z_rot_point": 12,
"z_offset": -40
},
"program_preserved": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"geometry": [
{
"tilt": 0,
"c": 0,
"tool_offset": 0,
"error": 7.850462293418876e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 0,
"error": 1.1188630228279524e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 0,
"error": 1.3672438525262642e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 0,
"error": 2.3714374201337736e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 0,
"error": 1.0007415106216802e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 0,
"error": 1.3597399555105182e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": 17,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 17,
"error": 1.1443916996305594e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 17,
"error": 1.3951318755036565e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 17,
"error": 1.5700924586837752e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 17,
"error": 1.3597399555105182e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 17,
"error": 1.3597399555105182e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": -4,
"error": 7.850462293418876e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": -4,
"error": 0
},
{
"tilt": 0,
"c": 65,
"tool_offset": -4,
"error": 1.4756369957997185e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": -4,
"error": 2.7755575615628914e-17
},
{
"tilt": 42,
"c": -80,
"tool_offset": -4,
"error": 1.3597399555105182e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": -4,
"error": 1.1102230246251565e-16
}
],
"jogs": [
{
"axis": "b",
"before": {
"joints": [
4.066650000000003,
3.0666500000000028,
0,
0,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.04066650000000002,
6.809330876933479e-18,
0.030666500000000027
],
"tick": 232,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
6.117140529480697,
3.0666500000000028,
-0.08007596355373181,
4.199999999999992,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.06117140529480696,
-0.0008007596355373112,
0.030666500000000027
],
"tick": 261,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 1.571008573810619e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
6.117140529480697,
3.0666500000000028,
-0.08007596355373181,
4.199999999999992,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.06117140529480696,
-0.0008007596355373112,
0.030666500000000027
],
"tick": 261,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
7.1363588812500645,
5.433137049240459,
-0.15492268068023662,
4.199999999999992,
6.000000000000007
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.07136358881250066,
-0.001549226806802354,
0.05433137049240459
],
"tick": 296,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 5.575456304969596e-17,
"render_error": 0
},
{
"axis": "b",
"before": {
"joints": [
7.1363588812500645,
5.433137049240459,
-0.15492268068023662,
4.199999999999992,
6.000000000000007
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.07136358881250066,
-0.001549226806802354,
0.05433137049240459
],
"tick": 296,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
9.167259379788678,
5.433137049240459,
-0.4594025400159829,
8.399999999999984,
6.000000000000007
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.09167259379788678,
-0.004594025400159817,
0.05433137049240459
],
"tick": 325,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 5.91080137522821e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
9.167259379788678,
5.433137049240459,
-0.4594025400159829,
8.399999999999984,
6.000000000000007
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.09167259379788678,
-0.004594025400159817,
0.05433137049240459
],
"tick": 325,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
9.506048116603463,
6.419769843383257,
-0.5094305081170489,
8.399999999999984,
8.430000000000007
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.09506048116603463,
-0.005094305081170475,
0.06419769843383256
],
"tick": 348,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 5.56803001126317e-17,
"render_error": 0
}
],
"pixels": {
"colors": 829,
"width": 472,
"height": 353
},
"worker_derived_offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
}
}
],
"viewports": [
{
"width": 1440,
"height": 1100,
"bounds": [
{
"x": 964.671875,
"right": 1021,
"width": 56.328125
},
{
"x": 1028.796875,
"right": 1078.953125,
"width": 50.15625
},
{
"x": 1083.5,
"right": 1120.65625,
"width": 37.15625
},
{
"x": 1128.453125,
"right": 1178.609375,
"width": 50.15625
},
{
"x": 1183.15625,
"right": 1220.3125,
"width": 37.15625
}
]
},
{
"width": 390,
"height": 844,
"bounds": [
{
"x": 19.09375,
"right": 75.421875,
"width": 56.328125
},
{
"x": 83.21875,
"right": 133.375,
"width": 50.15625
},
{
"x": 137.921875,
"right": 175.078125,
"width": 37.15625
},
{
"x": 182.875,
"right": 233.03125,
"width": 50.15625
},
{
"x": 237.578125,
"right": 274.734375,
"width": 37.15625
}
]
}
],
"browser_errors": []
}

View File

@@ -0,0 +1,106 @@
{
"report_id": "glb-machine-dialog-acceptance-v1",
"status": "verified",
"tasks": [
"GLB-UI01"
],
"reports": [
"machine-dialog-browser-v1",
"trt-parametric-browser-v1",
"glb-machine-browser-v1"
],
"evidence": [
{
"path": "coverage/glb-machine/dialogs/build.log",
"sha256": "5883edc912a8ceb1e0608166a4b6ec16cfb158eafaeee0d284dce3467699f142"
},
{
"path": "coverage/glb-machine/dialogs/dialog.log",
"sha256": "9c2ab6a4f4152d3e0c440420ee3477509f4d843a70d126e7972220df1c01107b"
},
{
"path": "coverage/glb-machine/dialogs/dialog.report.json",
"sha256": "811f5cb6bed5a05bd823f77b27c1901f74246a1e078884936962f0adee1b190b"
},
{
"path": "coverage/glb-machine/dialogs/geometry-settings-dragged.png",
"sha256": "f82d790dd2ac4bb7da6b3979e2c5a346e5ae63d13bb4c258283f3b1faa50a809"
},
{
"path": "coverage/glb-machine/dialogs/import/ac-imported.png",
"sha256": "2a5a8bb90b04f4f851cb34384f20a46447e7143e76f9f55d043d0ad114e0c892"
},
{
"path": "coverage/glb-machine/dialogs/import/bc-imported.png",
"sha256": "cb5af89c38368ca852a4631e9f6c0b0bdfb752974097ac66eaa730bf7eb150ef"
},
{
"path": "coverage/glb-machine/dialogs/import/browser.report.json",
"sha256": "9309b944fca8ac81e816cf8e5494348db0ca2dd12417763479d78ce5d29df71e"
},
{
"path": "coverage/glb-machine/dialogs/import/viewport-1440.png",
"sha256": "41a5ac98442141dd498d2c4a50a089d9742d6c3860f48ac609312f0e255d72d9"
},
{
"path": "coverage/glb-machine/dialogs/import/viewport-390.png",
"sha256": "3522159e686804af938e9f41ffde6bb47ef88444f20a21699bd259db3ce05b0d"
},
{
"path": "coverage/glb-machine/dialogs/import.log",
"sha256": "f8308922ef1d78fc82ab21081a16b8c369808e662c1ac85ceef03558c2706410"
},
{
"path": "coverage/glb-machine/dialogs/machine-glb-settings-dragged.png",
"sha256": "22647b7ef24b08d3a3f740b5676c46b00b2bbd4cfa4ec1c035fea0d0c5aaa638"
},
{
"path": "coverage/glb-machine/dialogs/parameters-1440.png",
"sha256": "d25dbeaf8c77be2227760b9380ea07b4f5f6602cd31e390023a81594e7f97af8"
},
{
"path": "coverage/glb-machine/dialogs/parameters-2048.png",
"sha256": "12c790e77602658ffa6c9958c3b20aa5fd11b4836026854637e5d883cbfce7e8"
},
{
"path": "coverage/glb-machine/dialogs/parameters-390.png",
"sha256": "96059425dec8ca423506edff4f88698a9c1579118f8f873626557b9b13d56a0a"
},
{
"path": "coverage/glb-machine/dialogs/parametric/browser.report.json",
"sha256": "28eb780b7bcbfc94a43226c267868444287069f4a3c4c6ffab256759d439b00b"
},
{
"path": "coverage/glb-machine/dialogs/parametric/layout-1440.png",
"sha256": "484c683de962a67a3816653568b1abe15930ad060b7778435d8a8c178e7c88d2"
},
{
"path": "coverage/glb-machine/dialogs/parametric/layout-390.png",
"sha256": "a8e4f79db95aeae82c08d7bbd41db017d96eb863fac20b0de6df455a7ee07a25"
},
{
"path": "coverage/glb-machine/dialogs/parametric/xyzac-trt-model.png",
"sha256": "6b0f89a3d9f7345a2ac12ff1beb82115e6f957b9b3f0f61766d62f47b8f072fb"
},
{
"path": "coverage/glb-machine/dialogs/parametric/xyzbc-trt-model.png",
"sha256": "38ed4ba88c7e72d6f30705ef48732ca3d0d9152ee6f17ce8cb8bc86ad3dcfce6"
},
{
"path": "coverage/glb-machine/dialogs/parametric.log",
"sha256": "6aa0af350b31f8b04e220da964cc0eb62357ef0dddb51390152d5ca0b93a7cf7"
},
{
"path": "coverage/glb-machine/dialogs/preview-1440.png",
"sha256": "09cdf18a7348a045e153ff7c741ed98cc7eb8a0b492f7c4b4d5953ac3c92b8cb"
},
{
"path": "coverage/glb-machine/dialogs/preview-2048.png",
"sha256": "ca653f12dafb7b198c58ad3d42bb9531d921adf00fa0fc9dd73cb51d18e42a6e"
},
{
"path": "coverage/glb-machine/dialogs/preview-390.png",
"sha256": "cf4c4565feaf947cb84dad0d5e3c229d069c5301fed374011cfaf8f388ac72b3"
}
]
}

View File

@@ -0,0 +1,125 @@
{
"report_id": "machine-dialog-browser-v1",
"status": "verified",
"layouts": [
{
"width": 2048,
"height": 859,
"machine": {
"x": 1358.171875,
"y": 489.5,
"width": 679.828125,
"height": 351.5
},
"path": {
"x": 674.34375,
"y": 449.5,
"width": 679.828125,
"height": 391.5
},
"pane": {
"x": 1358.171875,
"y": 449.5,
"width": 679.828125,
"height": 391.5
}
},
{
"width": 1440,
"height": 900,
"machine": {
"x": 955.578125,
"y": 489.5,
"width": 474.421875,
"height": 392.5
},
"path": {
"x": 477.15625,
"y": 449.5,
"width": 474.421875,
"height": 432.5
},
"pane": {
"x": 955.578125,
"y": 449.5,
"width": 474.421875,
"height": 432.5
}
},
{
"width": 390,
"height": 844,
"machine": {
"x": 10,
"y": 231.5,
"width": 370,
"height": 380
},
"path": {
"x": 10,
"y": -172.5,
"width": 370,
"height": 360
},
"pane": {
"x": 10,
"y": 191.5,
"width": 370,
"height": 420
}
}
],
"dialogs": [
{
"button": "machine-glb-settings",
"before": {
"x": 430,
"y": 357.296875,
"width": 580,
"height": 185.40625
},
"after": {
"x": 540,
"y": 417.296875,
"width": 580,
"height": 185.40625
},
"focus_contained": true,
"keyboard_ignored": true,
"edge_clamped": true
},
{
"button": "geometry-settings",
"before": {
"x": 430,
"y": 300.25,
"width": 580,
"height": 299.5
},
"after": {
"x": 540,
"y": 360.25,
"width": 580,
"height": 299.5
},
"focus_contained": true,
"keyboard_ignored": true,
"edge_clamped": true
}
],
"touch_drag": {
"before": {
"x": 8,
"y": 329.296875,
"width": 374,
"height": 185.40625
},
"after": {
"x": 8,
"y": 379.296875,
"width": 374,
"height": 185.40625
}
},
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,982 @@
{
"report_id": "glb-machine-browser-v1",
"status": "verified",
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"parser": [
{
"id": "ac",
"rejected": [
{
"name": "truncated",
"error": "机床模型无效:GLB 头部或长度错误"
},
{
"name": "missing-schema",
"error": "机床模型无效:缺少 linuxcnc.machine/1 内嵌 URDF"
},
{
"name": "external-buffer",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "external-texture",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "animation",
"error": "机床模型无效:运动节点不能由动画、蒙皮或压缩扩展驱动"
},
{
"name": "node-cycle",
"error": "机床模型无效:GLB 节点环、重复父节点或索引无效"
},
{
"name": "wrong-hierarchy",
"error": "机床模型无效:GLB 层级与 URDF 不同:c_table"
},
{
"name": "node-offset-mismatch",
"error": "机床模型无效:GLB 节点 c_table 零位与 URDF 不同"
},
{
"name": "duplicate-link",
"error": "机床模型无效:GLB link base 缺失或重名"
},
{
"name": "matrix-origin-mismatch",
"error": "机床模型无效:GLB 节点 c_table 矩阵与 URDF 不同"
},
{
"name": "xml-syntax",
"error": "机床模型无效:URDF XML 语法错误"
},
{
"name": "doctype",
"error": "机床模型无效:URDF 长度或 XML 声明不支持"
},
{
"name": "duplicate-coordinate",
"error": "机床模型无效:需要 XYZAC 或 XYZBC 五个唯一运动轴"
},
{
"name": "negative-axis",
"error": "机床模型无效:要求底座 → X → Y → Z 正交刀具链,零位 origin=0"
},
{
"name": "nonzero-rpy",
"error": "机床模型无效:v1 不支持旋转的关节零位 rpy"
},
{
"name": "nan-limit",
"error": "机床模型无效:需要有限数值"
},
{
"name": "mimic",
"error": "机床模型无效:不支持 mimic"
},
{
"name": "unknown-profile",
"error": "机床模型无效:不支持的运动学 profile"
},
{
"name": "broken-tree",
"error": "机床模型无效:存在断开的结构或环"
},
{
"name": "runtime-range-outside-model",
"error": "X:INI 行程超出 URDF,先调整运行配置"
},
{
"name": "runtime-speed-outside-model",
"error": "X:INI 速度超出 URDF"
}
]
},
{
"id": "bc",
"rejected": [
{
"name": "truncated",
"error": "机床模型无效:GLB 头部或长度错误"
},
{
"name": "missing-schema",
"error": "机床模型无效:缺少 linuxcnc.machine/1 内嵌 URDF"
},
{
"name": "external-buffer",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "external-texture",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "animation",
"error": "机床模型无效:运动节点不能由动画、蒙皮或压缩扩展驱动"
},
{
"name": "node-cycle",
"error": "机床模型无效:GLB 节点环、重复父节点或索引无效"
},
{
"name": "wrong-hierarchy",
"error": "机床模型无效:GLB 层级与 URDF 不同:c_table"
},
{
"name": "node-offset-mismatch",
"error": "机床模型无效:GLB 节点 c_table 零位与 URDF 不同"
},
{
"name": "duplicate-link",
"error": "机床模型无效:GLB link base 缺失或重名"
},
{
"name": "matrix-origin-mismatch",
"error": "机床模型无效:GLB 节点 c_table 矩阵与 URDF 不同"
},
{
"name": "xml-syntax",
"error": "机床模型无效:URDF XML 语法错误"
},
{
"name": "doctype",
"error": "机床模型无效:URDF 长度或 XML 声明不支持"
},
{
"name": "duplicate-coordinate",
"error": "机床模型无效:需要 XYZAC 或 XYZBC 五个唯一运动轴"
},
{
"name": "negative-axis",
"error": "机床模型无效:要求底座 → X → Y → Z 正交刀具链,零位 origin=0"
},
{
"name": "nonzero-rpy",
"error": "机床模型无效:v1 不支持旋转的关节零位 rpy"
},
{
"name": "nan-limit",
"error": "机床模型无效:需要有限数值"
},
{
"name": "mimic",
"error": "机床模型无效:不支持 mimic"
},
{
"name": "unknown-profile",
"error": "机床模型无效:不支持的运动学 profile"
},
{
"name": "broken-tree",
"error": "机床模型无效:存在断开的结构或环"
},
{
"name": "runtime-range-outside-model",
"error": "X:INI 行程超出 URDF,先调整运行配置"
},
{
"name": "runtime-speed-outside-model",
"error": "X:INI 速度超出 URDF"
}
]
}
],
"machines": [
{
"id": "ac",
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"coordinates": "XYZAC",
"offsets": {
"x_rot_point": 24,
"x_offset": 0,
"y_rot_point": -12,
"y_offset": 18,
"z_rot_point": 8,
"z_offset": -45
},
"program_preserved": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"geometry": [
{
"tilt": 0,
"c": 0,
"tool_offset": 0,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 0,
"error": 1.2412670766236366e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 0,
"error": 1.1933397187179203e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 0,
"error": 2.1599919653272043e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 0,
"error": 2.486410087150353e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 0,
"error": 1.709648974837069e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": 17,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 17,
"error": 1.3472894910096233e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 17,
"error": 1.1354490689426183e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 17,
"error": 2.036065864674698e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 17,
"error": 2.482534153247273e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 17,
"error": 1.3877787807814457e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": -4,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": -4,
"error": 1.2412670766236366e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": -4,
"error": 9.508199615517185e-17
},
{
"tilt": -35,
"c": 125,
"tool_offset": -4,
"error": 1.9141791241147513e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": -4,
"error": 2.2591401799415137e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": -4,
"error": 1.1857187100668868e-16
}
],
"jogs": [
{
"axis": "a",
"before": {
"joints": [
4.466649999999994,
4.066650000000003,
0,
0,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.04466649999999994,
9.02977692618379e-18,
0.04066650000000002
],
"tick": 61,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
4.466649999999994,
0.20968795268657026,
-0.40477997583241176,
6.000000000000007,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.04466649999999994,
-0.0040477997583241165,
0.0020968795268657033
],
"tick": 96,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 1.0148132334464322e-16,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
4.466649999999994,
0.20968795268657026,
-0.40477997583241176,
6.000000000000007,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.04466649999999994,
-0.0040477997583241165,
0.0020968795268657033
],
"tick": 96,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
2.7494471200932686,
-2.1290148625374243,
-0.650587546740212,
6.000000000000007,
6.600000000000012
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.027494471200932687,
-0.006505875467402124,
-0.021290148625374247
],
"tick": 133,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 7.666221752544845e-17,
"render_error": 0
},
{
"axis": "a",
"before": {
"joints": [
2.7494471200932686,
-2.1290148625374243,
-0.650587546740212,
6.000000000000007,
6.600000000000012
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.027494471200932687,
-0.006505875467402124,
-0.021290148625374247
],
"tick": 133,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
2.7494471200932686,
-4.955897853959007,
-1.4004358096033798,
10.500000000000002,
6.600000000000012
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.027494471200932687,
-0.014004358096033807,
-0.04955897853959007
],
"tick": 163,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 6.938893903907228e-18,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
2.7494471200932686,
-4.955897853959007,
-1.4004358096033798,
10.500000000000002,
6.600000000000012
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.027494471200932687,
-0.014004358096033807,
-0.04955897853959007
],
"tick": 163,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
1.3727669510375335,
-7.330203467035044,
-1.8404873443064815,
10.500000000000002,
12.900000000000022
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.013727669510375335,
-0.018404873443064833,
-0.07330203467035044
],
"tick": 199,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 8.464668479171608e-17,
"render_error": 0
}
],
"pixels": {
"colors": 1415,
"width": 472,
"height": 586
},
"worker_derived_offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
}
},
{
"id": "bc",
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"coordinates": "XYZBC",
"offsets": {
"x_rot_point": -18,
"x_offset": 22,
"y_rot_point": 14,
"y_offset": 0,
"z_rot_point": 12,
"z_offset": -40
},
"program_preserved": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"geometry": [
{
"tilt": 0,
"c": 0,
"tool_offset": 0,
"error": 7.850462293418876e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 0,
"error": 1.1188630228279524e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 0,
"error": 1.3672438525262642e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 0,
"error": 2.3714374201337736e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 0,
"error": 1.0007415106216802e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 0,
"error": 1.3597399555105182e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": 17,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 17,
"error": 1.1443916996305594e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 17,
"error": 1.3951318755036565e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 17,
"error": 1.5700924586837752e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 17,
"error": 1.3597399555105182e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 17,
"error": 1.3597399555105182e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": -4,
"error": 7.850462293418876e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": -4,
"error": 0
},
{
"tilt": 0,
"c": 65,
"tool_offset": -4,
"error": 1.4756369957997185e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": -4,
"error": 2.7755575615628914e-17
},
{
"tilt": 42,
"c": -80,
"tool_offset": -4,
"error": 1.3597399555105182e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": -4,
"error": 1.1102230246251565e-16
}
],
"jogs": [
{
"axis": "b",
"before": {
"joints": [
4.2666499999999985,
3.0666500000000028,
0,
0,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.04266649999999998,
6.809330876933479e-18,
0.030666500000000027
],
"tick": 254,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
6.316603424925585,
3.0666500000000028,
-0.09472360297925775,
4.199999999999992,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.06316603424925585,
-0.0009472360297925706,
0.030666500000000027
],
"tick": 283,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 1.909704485889413e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
6.316603424925585,
3.0666500000000028,
-0.09472360297925775,
4.199999999999992,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.06316603424925585,
-0.0009472360297925706,
0.030666500000000027
],
"tick": 283,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
7.151143087525739,
4.968220047559935,
-0.15600836492358994,
4.199999999999992,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.07151143087525738,
-0.0015600836492358884,
0.04968220047559935
],
"tick": 314,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 4.4565853017184997e-17,
"render_error": 0
},
{
"axis": "b",
"before": {
"joints": [
7.151143087525739,
4.968220047559935,
-0.15600836492358994,
4.199999999999992,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.07151143087525738,
-0.0015600836492358884,
0.04968220047559935
],
"tick": 314,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
9.32604357016951,
4.968220047559935,
-0.4890779358284192,
8.699999999999987,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.0932604357016951,
-0.004890779358284181,
0.04968220047559935
],
"tick": 344,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 1.187272171697316e-16,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
9.32604357016951,
4.968220047559935,
-0.4890779358284192,
8.699999999999987,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.0932604357016951,
-0.004890779358284181,
0.04968220047559935
],
"tick": 344,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
9.993012880413737,
6.933141542161293,
-0.5911385821243442,
8.699999999999987,
9.599999999999994
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.09993012880413737,
-0.0059113858212434265,
0.06933141542161293
],
"tick": 380,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 1.0318688768540417e-16,
"render_error": 0
}
],
"pixels": {
"colors": 1365,
"width": 472,
"height": 586
},
"worker_derived_offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
}
}
],
"viewports": [
{
"width": 1440,
"height": 1100,
"bounds": [
{
"x": 969,
"right": 999,
"width": 30
},
{
"x": 445,
"right": 513.625,
"width": 68.625
},
{
"x": 521.421875,
"right": 582.109375,
"width": 60.6875
},
{
"x": 586.65625,
"right": 634.34375,
"width": 47.6875
},
{
"x": 642.140625,
"right": 702.828125,
"width": 60.6875
},
{
"x": 707.375,
"right": 755.0625,
"width": 47.6875
}
]
},
{
"width": 390,
"height": 844,
"bounds": [
{
"x": 341,
"right": 371,
"width": 30
},
{
"x": 23,
"right": 91.625,
"width": 68.625
},
{
"x": 99.421875,
"right": 160.109375,
"width": 60.6875
},
{
"x": 164.65625,
"right": 212.34375,
"width": 47.6875
},
{
"x": 220.140625,
"right": 280.828125,
"width": 60.6875
},
{
"x": 285.375,
"right": 333.0625,
"width": 47.6875
}
]
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -0,0 +1,73 @@
{
"report_id": "trt-parametric-browser-v1",
"status": "verified",
"machines": [
{
"id": "xyzac-trt",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"export_bytes": 4867,
"preserved_program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"canvas": {
"hash": 3797953256,
"colors": 2383,
"width": 472,
"height": 491
}
},
{
"id": "xyzbc-trt",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"export_bytes": 4875,
"preserved_program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
"canvas": {
"hash": 1876807854,
"colors": 2446,
"width": 472,
"height": 491
}
}
],
"viewports": [
{
"width": 1440,
"height": 1000,
"canvas": {
"hash": 518020959,
"colors": 2516,
"width": 472,
"height": 491
},
"controls_fit": true,
"interactive": true
},
{
"width": 390,
"height": 844,
"canvas": {
"hash": 287810572,
"colors": 1808,
"width": 368,
"height": 378
},
"controls_fit": true,
"interactive": true
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -0,0 +1,210 @@
{
"report_id": "gantry-machine-acceptance-v1",
"status": "verified",
"tasks": [
"GLB-GAN01"
],
"models": [
{
"id": "ac",
"label": "AC 示例",
"profile": "trt-xyz-head/1",
"filename": "demo-ac-xyz-head.glb",
"urdf": "demo-ac-xyz-head.urdf",
"bytes": 530848,
"sha256": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"coordinates": "XYZAC",
"rotation_point_mm": [
24,
-12,
8
],
"offsets_mm": [
0,
18,
-45
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 71
},
{
"id": "bc",
"label": "BC 示例",
"profile": "trt-xyz-head/1",
"filename": "demo-bc-xyz-head.glb",
"urdf": "demo-bc-xyz-head.urdf",
"bytes": 530532,
"sha256": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"coordinates": "XYZBC",
"rotation_point_mm": [
-18,
14,
12
],
"offsets_mm": [
22,
0,
-40
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 71
},
{
"id": "ac-gantry",
"label": "AC 示例桁架型",
"profile": "trt-xyz-gantry/1",
"filename": "demo-ac-gantry.glb",
"urdf": "demo-ac-gantry.urdf",
"bytes": 526004,
"sha256": "cee9fe5080fac3f87f8daca5d0f89ddb0c3c3eb7657fbdc81a7664ba9c4e4995",
"coordinates": "XYZAC",
"rotation_point_mm": [
24,
-12,
8
],
"offsets_mm": [
0,
18,
-45
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 89
},
{
"id": "bc-gantry",
"label": "BC 示例桁架型",
"profile": "trt-xyz-gantry/1",
"filename": "demo-bc-gantry.glb",
"urdf": "demo-bc-gantry.urdf",
"bytes": 525688,
"sha256": "d7188520ef1e79576d99861294e9dbdf24deb6fe14697ad5106fe605fa1766b5",
"coordinates": "XYZBC",
"rotation_point_mm": [
-18,
14,
12
],
"offsets_mm": [
22,
0,
-40
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 89
}
],
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"evidence": [
{
"path": "coverage/glb-machine/gantry/ac-gantry.png",
"sha256": "0c424b5b09d312a58146f5da9c6b75a307e9e680dcff873bf3757b677c923526"
},
{
"path": "coverage/glb-machine/gantry/ac.png",
"sha256": "2267e76cde1bb9db038cfee59992d0c06cedb8a9879b0b6b04b66c5c56d576c7"
},
{
"path": "coverage/glb-machine/gantry/bc-gantry.png",
"sha256": "90235681b06b7c647c3a2b85c564f5ce2218e2d74ae14429de16d3f07a9b6fee"
},
{
"path": "coverage/glb-machine/gantry/bc.png",
"sha256": "f8c60fb173f8cc22dcb1f44da3c214a00ee2c401100e5536fabccc8d0d1904c3"
},
{
"path": "coverage/glb-machine/gantry/build.log",
"sha256": "efaa9a77221bdf4dd1a94be96cf9095a5e92ae9d0da7c1644888bd4d2b8a35aa"
},
{
"path": "coverage/glb-machine/gantry/catalog.log",
"sha256": "0381047251d0782a32175f9498e8a2c8edaf3697f3b6ae3c50585a4fd79df0ba"
},
{
"path": "coverage/glb-machine/gantry/catalog.report.json",
"sha256": "1af2d3449aaff6e62d452f7a8b1b81fde664175d4102ab0119709aeec9fd8124"
},
{
"path": "coverage/glb-machine/gantry/dialog-1440.png",
"sha256": "579704e84be183da2b6086ec706dbcbbb27bff7075b25730c1932e4aa84d40a5"
},
{
"path": "coverage/glb-machine/gantry/dialog-390.png",
"sha256": "6b95d18157a075e7b2cb17f167c9900df0cf1a09715ba15ec8de30a1b160a36b"
},
{
"path": "coverage/glb-machine/gantry/generation.log",
"sha256": "7d18176ee974965d1fbe0a3c27f57e340d996eb476b8b5d81e5378b7ff5709e9"
},
{
"path": "coverage/glb-machine/gantry/geometry/ac-edited.png",
"sha256": "ccaca95b9a9074011a06177e87ca1aaff5b49385f3851873e3d218126cf5d532"
},
{
"path": "coverage/glb-machine/gantry/geometry/bc-edited.png",
"sha256": "9393dde053559491535f43338de29eac2eb0b6379395f491fc4ef027537dd808"
},
{
"path": "coverage/glb-machine/gantry/geometry/browser.report.json",
"sha256": "fd68f0041ad8ed904be3cb85ca2f9b5a01c0928043c9d3104012c109193ba50d"
},
{
"path": "coverage/glb-machine/gantry/geometry.log",
"sha256": "cae26be9c602ce9e81837e59f73aa7d42cafdd7dbfc10c3c1fff567ee0df607b"
},
{
"path": "coverage/glb-machine/gantry/gltf-validation.report.json",
"sha256": "d0ac233f7aafe1f92073410fa6744a8640fbbbd9a8d9c8875edf37b5b4cf0772"
},
{
"path": "coverage/glb-machine/gantry/motion.log",
"sha256": "57ed59ba66d43ff00784733a3ddb7a0c3936c33aae0e03ab3c4fd4c2eacca361"
},
{
"path": "coverage/glb-machine/gantry/motion.report.json",
"sha256": "91c3fa8ed8037aac8e71b8c76d54c38db9dc011ae25f63553966860b624aa626"
},
{
"path": "coverage/glb-machine/gantry/reproducibility.report.json",
"sha256": "02d19f1ac767467e1f6871c40d2ed1ba1ee54bcee6781b5b984b1fbfcc9084e9"
},
{
"path": "coverage/glb-machine/gantry/validation.log",
"sha256": "e50555ddaccc33857eefa72a06cd3846f92fb00a9e05170d457169e4201e3852"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,507 @@
{
"report_id": "gantry-machine-browser-v1",
"status": "verified",
"examples": [
{
"entry": {
"id": "ac",
"label": "AC 示例",
"profile": "trt-xyz-head/1",
"filename": "demo-ac-xyz-head.glb",
"urdf": "demo-ac-xyz-head.urdf",
"bytes": 530848,
"sha256": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"coordinates": "XYZAC",
"rotation_point_mm": [
24,
-12,
8
],
"offsets_mm": [
0,
18,
-45
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 71
},
"profile": "trt-xyz-head/1",
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"tool": "spindle_head",
"initial": [],
"moved": [],
"rejections": []
},
{
"entry": {
"id": "bc",
"label": "BC 示例",
"profile": "trt-xyz-head/1",
"filename": "demo-bc-xyz-head.glb",
"urdf": "demo-bc-xyz-head.urdf",
"bytes": 530532,
"sha256": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"coordinates": "XYZBC",
"rotation_point_mm": [
-18,
14,
12
],
"offsets_mm": [
22,
0,
-40
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 71
},
"profile": "trt-xyz-head/1",
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"spindle_head",
"tilt_table",
"c_table",
"work_frame"
],
"tool": "spindle_head",
"initial": [],
"moved": [],
"rejections": []
},
{
"entry": {
"id": "ac-gantry",
"label": "AC 示例桁架型",
"profile": "trt-xyz-gantry/1",
"filename": "demo-ac-gantry.glb",
"urdf": "demo-ac-gantry.urdf",
"bytes": 526004,
"sha256": "cee9fe5080fac3f87f8daca5d0f89ddb0c3c3eb7657fbdc81a7664ba9c4e4995",
"coordinates": "XYZAC",
"rotation_point_mm": [
24,
-12,
8
],
"offsets_mm": [
0,
18,
-45
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 89
},
"profile": "trt-xyz-gantry/1",
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"tilt_table",
"c_table",
"work_frame"
],
"tool": "z_slide",
"initial": [
{
"name": "gantry_z_ram_59",
"parent": "z_slide",
"position": [
0,
3.65,
0.1999999999999992
]
},
{
"name": "gantry_y_carriage_55",
"parent": "y_slide",
"position": [
0,
5,
-1.1102230246251565e-15
]
},
{
"name": "moving_bridge_chord_45",
"parent": "x_slide",
"position": [
0,
5.5,
-1.2212453270876722e-15
]
},
{
"name": "moving_bridge_chord_46",
"parent": "x_slide",
"position": [
0,
6.5,
-1.4432899320127035e-15
]
},
{
"name": "gantry_post_11",
"parent": "base",
"position": [
-3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_13",
"parent": "base",
"position": [
-3.8,
0.5000000000000007,
3.2
]
},
{
"name": "gantry_post_15",
"parent": "base",
"position": [
3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_17",
"parent": "base",
"position": [
3.8,
0.5000000000000007,
3.2
]
}
],
"moved": [
{
"name": "gantry_z_ram_59",
"parent": "z_slide",
"position": [
0.2,
3.6999999999999997,
0.2999999999999992
]
},
{
"name": "gantry_y_carriage_55",
"parent": "y_slide",
"position": [
0.2,
5,
0.0999999999999989
]
},
{
"name": "moving_bridge_chord_45",
"parent": "x_slide",
"position": [
0.2,
5.5,
-1.2212453270876722e-15
]
},
{
"name": "moving_bridge_chord_46",
"parent": "x_slide",
"position": [
0.2,
6.5,
-1.4432899320127035e-15
]
},
{
"name": "gantry_post_11",
"parent": "base",
"position": [
-3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_13",
"parent": "base",
"position": [
-3.8,
0.5000000000000007,
3.2
]
},
{
"name": "gantry_post_15",
"parent": "base",
"position": [
3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_17",
"parent": "base",
"position": [
3.8,
0.5000000000000007,
3.2
]
}
],
"rejections": [
"wrong-tool",
"wrong-profile",
"rotary-on-xyz"
]
},
{
"entry": {
"id": "bc-gantry",
"label": "BC 示例桁架型",
"profile": "trt-xyz-gantry/1",
"filename": "demo-bc-gantry.glb",
"urdf": "demo-bc-gantry.urdf",
"bytes": 525688,
"sha256": "d7188520ef1e79576d99861294e9dbdf24deb6fe14697ad5106fe605fa1766b5",
"coordinates": "XYZBC",
"rotation_point_mm": [
-18,
14,
12
],
"offsets_mm": [
22,
0,
-40
],
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"tilt_table",
"c_table",
"work_frame"
],
"meshes": 89
},
"profile": "trt-xyz-gantry/1",
"links": [
"base",
"x_slide",
"y_slide",
"z_slide",
"tilt_table",
"c_table",
"work_frame"
],
"tool": "z_slide",
"initial": [
{
"name": "gantry_z_ram_59",
"parent": "z_slide",
"position": [
0,
3.65,
0.1999999999999992
]
},
{
"name": "gantry_y_carriage_55",
"parent": "y_slide",
"position": [
0,
5,
-1.1102230246251565e-15
]
},
{
"name": "moving_bridge_chord_45",
"parent": "x_slide",
"position": [
0,
5.5,
-1.2212453270876722e-15
]
},
{
"name": "moving_bridge_chord_46",
"parent": "x_slide",
"position": [
0,
6.5,
-1.4432899320127035e-15
]
},
{
"name": "gantry_post_11",
"parent": "base",
"position": [
-3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_13",
"parent": "base",
"position": [
-3.8,
0.5000000000000007,
3.2
]
},
{
"name": "gantry_post_15",
"parent": "base",
"position": [
3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_17",
"parent": "base",
"position": [
3.8,
0.5000000000000007,
3.2
]
}
],
"moved": [
{
"name": "gantry_z_ram_59",
"parent": "z_slide",
"position": [
0.2,
3.6999999999999997,
0.2999999999999992
]
},
{
"name": "gantry_y_carriage_55",
"parent": "y_slide",
"position": [
0.2,
5,
0.0999999999999989
]
},
{
"name": "moving_bridge_chord_45",
"parent": "x_slide",
"position": [
0.2,
5.5,
-1.2212453270876722e-15
]
},
{
"name": "moving_bridge_chord_46",
"parent": "x_slide",
"position": [
0.2,
6.5,
-1.4432899320127035e-15
]
},
{
"name": "gantry_post_11",
"parent": "base",
"position": [
-3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_13",
"parent": "base",
"position": [
-3.8,
0.5000000000000007,
3.2
]
},
{
"name": "gantry_post_15",
"parent": "base",
"position": [
3.8,
0.4999999999999993,
-3.2
]
},
{
"name": "gantry_post_17",
"parent": "base",
"position": [
3.8,
0.5000000000000007,
3.2
]
}
],
"rejections": [
"wrong-tool",
"wrong-profile",
"rotary-on-xyz"
]
}
],
"layouts": [
{
"width": 1440,
"height": 1000,
"controls": 10
},
{
"width": 390,
"height": 844,
"controls": 10
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,191 @@
{
"report_id": "imported-geometry-browser-v1",
"status": "verified",
"machines": [
{
"id": "ac",
"original": {
"hash": "cee9fe5080fac3f87f8daca5d0f89ddb0c3c3eb7657fbdc81a7664ba9c4e4995",
"filename": "demo-ac-gantry.glb",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"applied": {
"hash": "cee9fe5080fac3f87f8daca5d0f89ddb0c3c3eb7657fbdc81a7664ba9c4e4995",
"filename": "demo-ac-gantry.glb",
"offsets": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 0,
"y_offset": 23,
"z_offset": -34,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"edits": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 0,
"y_offset": 23,
"z_offset": -34
},
"projection": {
"checks": [
2.7755575615628914e-17,
3.2959746043559335e-17,
2.1942709178604383e-17,
2.3263411494723067e-16,
1.716587549445839e-16,
1.3877787807814457e-16,
3.925231146709438e-17,
7.473417450352271e-17,
3.7367087251761353e-17,
1.979582157258511e-16,
1.6711069443220838e-16,
6.206335383118183e-17,
2.7755575615628914e-17,
6.369057972232327e-17,
2.0816681711721685e-17,
3.194906681775283e-16,
6.206335383118183e-17,
5.551115123125783e-17
],
"mesh_count": 90,
"source_preserved": true,
"renamed_joint_supported": true,
"incompatible_rejected": true
},
"tcpError": {
"error": 1.939479807224432e-17,
"rendered": 0
},
"model_retained_on_reload_and_ini_import": true
},
{
"id": "bc",
"original": {
"hash": "d7188520ef1e79576d99861294e9dbdf24deb6fe14697ad5106fe605fa1766b5",
"filename": "demo-bc-gantry.glb",
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"applied": {
"hash": "d7188520ef1e79576d99861294e9dbdf24deb6fe14697ad5106fe605fa1766b5",
"filename": "demo-bc-gantry.glb",
"offsets": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 27,
"y_offset": 0,
"z_offset": -34,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"edits": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 27,
"y_offset": 0,
"z_offset": -34
},
"projection": {
"checks": [
5.551115123125783e-17,
0,
1.1123893155135927e-16,
9.205483015737869e-17,
1.2118257228641695e-16,
1.2719202621569003e-16,
6.798699777552591e-17,
1.1443916996305594e-16,
1.2177709378935645e-16,
1.55941895632402e-16,
3.469446951953614e-17,
5.551115123125783e-17,
5.551115123125783e-17,
0,
1.1102230246251565e-16,
1.4703252574089423e-16,
1.1857187100668868e-16,
5.003707553108401e-17
],
"mesh_count": 90,
"source_preserved": true,
"renamed_joint_supported": true,
"incompatible_rejected": true
},
"tcpError": {
"error": 6.636893469679434e-17,
"rendered": 0
},
"model_retained_on_reload_and_ini_import": true
}
],
"browser_errors": []
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
{
"report_id": "gantry-machine-reproducibility-v1",
"status": "verified",
"source_matches_production": true,
"standard_glbs_unchanged": true,
"generated_files_identical": true,
"sha256": {
"demo-ac-xyz-head.urdf": "558ce184a083a9ad5070ac2555bd05f18bdbdd8e537882c0a0443ebdb30abce6",
"demo-ac-xyz-head.glb": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"demo-ac-gantry.glb": "cee9fe5080fac3f87f8daca5d0f89ddb0c3c3eb7657fbdc81a7664ba9c4e4995",
"demo-bc-gantry.glb": "d7188520ef1e79576d99861294e9dbdf24deb6fe14697ad5106fe605fa1766b5",
"LICENSE.txt": "e08dd9a67a260e10205ed953751b46cc9fb4b764fa9b87ee2a239654aaabb4b0",
"demo-bc-xyz-head.glb": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"manifest.json": "7d18176ee974965d1fbe0a3c27f57e340d996eb476b8b5d81e5378b7ff5709e9",
"demo-ac-gantry.urdf": "af71651b0c475fa6d8b09c9e9ed507a78c593d6f2d7d64bccc0642a63f354089",
"demo-bc-gantry.urdf": "b3cca14fa0230283c6eed28b8c28fa1867b80c158a7d896d90a44c96cf420c21",
"demo-bc-xyz-head.urdf": "6f08b6d3f534b6930d50b73b38a4db103246929f59ccdc09d4423bc1e6632f5b"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,82 @@
{
"report_id": "imported-geometry-acceptance-v1",
"status": "verified",
"tasks": [
"GLB-GEO01"
],
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"evidence": [
{
"path": "coverage/glb-machine/geometry-edit/ac-edited.png",
"sha256": "8e7e7c679d3ba7a910a12b86f3451561474d16d6d16301d1ffca05ddb1a69c52"
},
{
"path": "coverage/glb-machine/geometry-edit/bc-edited.png",
"sha256": "ad7a24ddbe3f00bd707826016f2daf96a8fa9993a9b1d7a1cffbe403851bc135"
},
{
"path": "coverage/glb-machine/geometry-edit/before.log",
"sha256": "5d5ac459a427184211b31bd6548a9527c5aa5beb3b26a24fb41c8cd34f29249a"
},
{
"path": "coverage/glb-machine/geometry-edit/browser.log",
"sha256": "3500e18f74431e094d35b115cd6cd0144447a3312374cd04a1ddac7b2bd1a210"
},
{
"path": "coverage/glb-machine/geometry-edit/browser.report.json",
"sha256": "3d246fe3a2e7da6dcab0d7903d0d5cffbc1ce84d4e4ce2db061598c1a139dfad"
},
{
"path": "coverage/glb-machine/geometry-edit/build.log",
"sha256": "3b11fb8e419c158beeb9614650f31020cc87b2a482d01a3db99f0f8948517901"
},
{
"path": "coverage/glb-machine/geometry-edit/import/ac-imported.png",
"sha256": "697c2aed197333bda523d44173798723c245a1f35002644992ee8b727ed22a8f"
},
{
"path": "coverage/glb-machine/geometry-edit/import/bc-imported.png",
"sha256": "6869be7b19fe844aaf50b202912f275f497b979452e0532f65c317175abdf73f"
},
{
"path": "coverage/glb-machine/geometry-edit/import/browser.report.json",
"sha256": "4bdbba0522cfe0c42624841da88b1c57e649a1261bae6711011c406128c74118"
},
{
"path": "coverage/glb-machine/geometry-edit/import/viewport-1440.png",
"sha256": "d8be53a6e5e6cf1d5359b6aba94fe6319ff33decdb0af4a0b3307ede6f60ab33"
},
{
"path": "coverage/glb-machine/geometry-edit/import/viewport-390.png",
"sha256": "7d0f0ccaf187b62573ebb38d5bb033c79dd81e9b06eb32bf935457a6c8e82e91"
},
{
"path": "coverage/glb-machine/geometry-edit/import.log",
"sha256": "f8308922ef1d78fc82ab21081a16b8c369808e662c1ac85ceef03558c2706410"
},
{
"path": "coverage/glb-machine/geometry-edit/parametric/browser.report.json",
"sha256": "28eb780b7bcbfc94a43226c267868444287069f4a3c4c6ffab256759d439b00b"
},
{
"path": "coverage/glb-machine/geometry-edit/parametric/layout-1440.png",
"sha256": "aba2d351796a2c04ba8d49cd164509502ebbe2e8aa4bfbd17288b2931dfd497e"
},
{
"path": "coverage/glb-machine/geometry-edit/parametric/layout-390.png",
"sha256": "23b7804ccfefdb3bcc05b754d5fedb76db52da4d2e840ce25b2f0c7487a86fba"
},
{
"path": "coverage/glb-machine/geometry-edit/parametric/xyzac-trt-model.png",
"sha256": "6b0f89a3d9f7345a2ac12ff1beb82115e6f957b9b3f0f61766d62f47b8f072fb"
},
{
"path": "coverage/glb-machine/geometry-edit/parametric/xyzbc-trt-model.png",
"sha256": "38ed4ba88c7e72d6f30705ef48732ca3d0d9152ee6f17ce8cb8bc86ad3dcfce6"
},
{
"path": "coverage/glb-machine/geometry-edit/parametric.log",
"sha256": "6aa0af350b31f8b04e220da964cc0eb62357ef0dddb51390152d5ca0b93a7cf7"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,191 @@
{
"report_id": "imported-geometry-browser-v1",
"status": "verified",
"machines": [
{
"id": "ac",
"original": {
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"filename": "demo-ac-xyz-head.glb",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"applied": {
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"filename": "demo-ac-xyz-head.glb",
"offsets": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 0,
"y_offset": 23,
"z_offset": -34,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"edits": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 0,
"y_offset": 23,
"z_offset": -34
},
"projection": {
"checks": [
2.7755575615628914e-17,
3.2959746043559335e-17,
2.1942709178604383e-17,
2.3263411494723067e-16,
1.716587549445839e-16,
1.3877787807814457e-16,
3.925231146709438e-17,
7.473417450352271e-17,
3.7367087251761353e-17,
1.979582157258511e-16,
1.6711069443220838e-16,
6.206335383118183e-17,
2.7755575615628914e-17,
6.369057972232327e-17,
2.0816681711721685e-17,
3.194906681775283e-16,
6.206335383118183e-17,
5.551115123125783e-17
],
"mesh_count": 72,
"source_preserved": true,
"renamed_joint_supported": true,
"incompatible_rejected": true
},
"tcpError": {
"error": 1.9778890766513102e-17,
"rendered": 0
},
"model_retained_on_reload_and_ini_import": true
},
{
"id": "bc",
"original": {
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"filename": "demo-bc-xyz-head.glb",
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"applied": {
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"filename": "demo-bc-xyz-head.glb",
"offsets": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 27,
"y_offset": 0,
"z_offset": -34,
"tool_offset": 0
},
"joints": [
0,
0,
0,
0,
0
],
"tip": [
0,
0,
0
]
},
"edits": {
"x_rot_point": 31,
"y_rot_point": -9,
"z_rot_point": 15,
"x_offset": 27,
"y_offset": 0,
"z_offset": -34
},
"projection": {
"checks": [
5.551115123125783e-17,
0,
1.1123893155135927e-16,
9.205483015737869e-17,
1.2118257228641695e-16,
1.2719202621569003e-16,
6.798699777552591e-17,
1.1443916996305594e-16,
1.2177709378935645e-16,
1.55941895632402e-16,
3.469446951953614e-17,
5.551115123125783e-17,
5.551115123125783e-17,
0,
1.1102230246251565e-16,
1.4703252574089423e-16,
1.1857187100668868e-16,
5.003707553108401e-17
],
"mesh_count": 72,
"source_preserved": true,
"renamed_joint_supported": true,
"incompatible_rejected": true
},
"tcpError": {
"error": 6.636893469679434e-17,
"rendered": 0
},
"model_retained_on_reload_and_ini_import": true
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,982 @@
{
"report_id": "glb-machine-browser-v1",
"status": "verified",
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"parser": [
{
"id": "ac",
"rejected": [
{
"name": "truncated",
"error": "机床模型无效:GLB 头部或长度错误"
},
{
"name": "missing-schema",
"error": "机床模型无效:缺少 linuxcnc.machine/1 内嵌 URDF"
},
{
"name": "external-buffer",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "external-texture",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "animation",
"error": "机床模型无效:运动节点不能由动画、蒙皮或压缩扩展驱动"
},
{
"name": "node-cycle",
"error": "机床模型无效:GLB 节点环、重复父节点或索引无效"
},
{
"name": "wrong-hierarchy",
"error": "机床模型无效:GLB 层级与 URDF 不同:c_table"
},
{
"name": "node-offset-mismatch",
"error": "机床模型无效:GLB 节点 c_table 零位与 URDF 不同"
},
{
"name": "duplicate-link",
"error": "机床模型无效:GLB link base 缺失或重名"
},
{
"name": "matrix-origin-mismatch",
"error": "机床模型无效:GLB 节点 c_table 矩阵与 URDF 不同"
},
{
"name": "xml-syntax",
"error": "机床模型无效:URDF XML 语法错误"
},
{
"name": "doctype",
"error": "机床模型无效:URDF 长度或 XML 声明不支持"
},
{
"name": "duplicate-coordinate",
"error": "机床模型无效:需要 XYZAC 或 XYZBC 五个唯一运动轴"
},
{
"name": "negative-axis",
"error": "机床模型无效:要求底座 → X → Y → Z 正交刀具链,零位 origin=0"
},
{
"name": "nonzero-rpy",
"error": "机床模型无效:v1 不支持旋转的关节零位 rpy"
},
{
"name": "nan-limit",
"error": "机床模型无效:需要有限数值"
},
{
"name": "mimic",
"error": "机床模型无效:不支持 mimic"
},
{
"name": "unknown-profile",
"error": "机床模型无效:不支持的运动学 profile"
},
{
"name": "broken-tree",
"error": "机床模型无效:存在断开的结构或环"
},
{
"name": "runtime-range-outside-model",
"error": "X:INI 行程超出 URDF,先调整运行配置"
},
{
"name": "runtime-speed-outside-model",
"error": "X:INI 速度超出 URDF"
}
]
},
{
"id": "bc",
"rejected": [
{
"name": "truncated",
"error": "机床模型无效:GLB 头部或长度错误"
},
{
"name": "missing-schema",
"error": "机床模型无效:缺少 linuxcnc.machine/1 内嵌 URDF"
},
{
"name": "external-buffer",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "external-texture",
"error": "机床模型无效:GLB 必须自包含,禁止外部 buffer/图片"
},
{
"name": "animation",
"error": "机床模型无效:运动节点不能由动画、蒙皮或压缩扩展驱动"
},
{
"name": "node-cycle",
"error": "机床模型无效:GLB 节点环、重复父节点或索引无效"
},
{
"name": "wrong-hierarchy",
"error": "机床模型无效:GLB 层级与 URDF 不同:c_table"
},
{
"name": "node-offset-mismatch",
"error": "机床模型无效:GLB 节点 c_table 零位与 URDF 不同"
},
{
"name": "duplicate-link",
"error": "机床模型无效:GLB link base 缺失或重名"
},
{
"name": "matrix-origin-mismatch",
"error": "机床模型无效:GLB 节点 c_table 矩阵与 URDF 不同"
},
{
"name": "xml-syntax",
"error": "机床模型无效:URDF XML 语法错误"
},
{
"name": "doctype",
"error": "机床模型无效:URDF 长度或 XML 声明不支持"
},
{
"name": "duplicate-coordinate",
"error": "机床模型无效:需要 XYZAC 或 XYZBC 五个唯一运动轴"
},
{
"name": "negative-axis",
"error": "机床模型无效:要求底座 → X → Y → Z 正交刀具链,零位 origin=0"
},
{
"name": "nonzero-rpy",
"error": "机床模型无效:v1 不支持旋转的关节零位 rpy"
},
{
"name": "nan-limit",
"error": "机床模型无效:需要有限数值"
},
{
"name": "mimic",
"error": "机床模型无效:不支持 mimic"
},
{
"name": "unknown-profile",
"error": "机床模型无效:不支持的运动学 profile"
},
{
"name": "broken-tree",
"error": "机床模型无效:存在断开的结构或环"
},
{
"name": "runtime-range-outside-model",
"error": "X:INI 行程超出 URDF,先调整运行配置"
},
{
"name": "runtime-speed-outside-model",
"error": "X:INI 速度超出 URDF"
}
]
}
],
"machines": [
{
"id": "ac",
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"coordinates": "XYZAC",
"offsets": {
"x_rot_point": 24,
"x_offset": 0,
"y_rot_point": -12,
"y_offset": 18,
"z_rot_point": 8,
"z_offset": -45
},
"program_preserved": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"geometry": [
{
"tilt": 0,
"c": 0,
"tool_offset": 0,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 0,
"error": 1.2412670766236366e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 0,
"error": 1.1933397187179203e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 0,
"error": 2.1599919653272043e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 0,
"error": 2.486410087150353e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 0,
"error": 1.709648974837069e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": 17,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 17,
"error": 1.3472894910096233e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 17,
"error": 1.1354490689426183e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 17,
"error": 2.036065864674698e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 17,
"error": 2.482534153247273e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 17,
"error": 1.3877787807814457e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": -4,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": -4,
"error": 1.2412670766236366e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": -4,
"error": 9.508199615517185e-17
},
{
"tilt": -35,
"c": 125,
"tool_offset": -4,
"error": 1.9141791241147513e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": -4,
"error": 2.2591401799415137e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": -4,
"error": 1.1857187100668868e-16
}
],
"jogs": [
{
"axis": "a",
"before": {
"joints": [
4.66664999999999,
3.466650000000003,
0,
0,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.0466664999999999,
7.697509296633605e-18,
0.03466650000000003
],
"tick": 59,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
4.66664999999999,
-0.578220496871058,
-0.5014400651608497,
6.300000000000009,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.0466664999999999,
-0.005014400651608498,
-0.00578220496871058
],
"tick": 95,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 4.192148702340308e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
4.66664999999999,
-0.578220496871058,
-0.5014400651608497,
6.300000000000009,
0
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.0466664999999999,
-0.005014400651608498,
-0.00578220496871058
],
"tick": 95,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
3.5127488929315476,
-2.1333277540415505,
-0.6731255047163103,
6.300000000000009,
4.499999999999995
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.03512748892931548,
-0.006731255047163108,
-0.021333277540415505
],
"tick": 125,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 4.772854504744019e-17,
"render_error": 0
},
{
"axis": "a",
"before": {
"joints": [
3.5127488929315476,
-2.1333277540415505,
-0.6731255047163103,
6.300000000000009,
4.499999999999995
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.03512748892931548,
-0.006731255047163108,
-0.021333277540415505
],
"tick": 125,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
3.5127488929315476,
-4.772000312433438,
-1.3663524148917787,
10.5,
4.499999999999995
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.03512748892931548,
-0.013663524148917796,
-0.04772000312433438
],
"tick": 154,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 5.006713685883697e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
3.5127488929315476,
-4.772000312433438,
-1.3663524148917787,
10.5,
4.499999999999995
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.03512748892931548,
-0.013663524148917796,
-0.04772000312433438
],
"tick": 154,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"after": {
"joints": [
2.4851585016404982,
-6.394633156793212,
-1.6670896365399557,
10.5,
8.99999999999999
],
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
},
"tip": [
0.02485158501640498,
-0.01667089636539957,
-0.06394633156793213
],
"tick": 184,
"hash": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1"
},
"tcp_error": 4.415885040048117e-17,
"render_error": 0
}
],
"pixels": {
"colors": 1405,
"width": 472,
"height": 586
},
"worker_derived_offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 18,
"z_offset": -45,
"tool_offset": 0
}
},
{
"id": "bc",
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"coordinates": "XYZBC",
"offsets": {
"x_rot_point": -18,
"x_offset": 22,
"y_rot_point": 14,
"y_offset": 0,
"z_rot_point": 12,
"z_offset": -40
},
"program_preserved": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"geometry": [
{
"tilt": 0,
"c": 0,
"tool_offset": 0,
"error": 7.850462293418876e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 0,
"error": 1.1188630228279524e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 0,
"error": 1.3672438525262642e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 0,
"error": 2.3714374201337736e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 0,
"error": 1.0007415106216802e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 0,
"error": 1.3597399555105182e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": 17,
"error": 6.206335383118183e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": 17,
"error": 1.1443916996305594e-16
},
{
"tilt": 0,
"c": 65,
"tool_offset": 17,
"error": 1.3951318755036565e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": 17,
"error": 1.5700924586837752e-16
},
{
"tilt": 42,
"c": -80,
"tool_offset": 17,
"error": 1.3597399555105182e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": 17,
"error": 1.3597399555105182e-16
},
{
"tilt": 0,
"c": 0,
"tool_offset": -4,
"error": 7.850462293418876e-17
},
{
"tilt": 25,
"c": 0,
"tool_offset": -4,
"error": 0
},
{
"tilt": 0,
"c": 65,
"tool_offset": -4,
"error": 1.4756369957997185e-16
},
{
"tilt": -35,
"c": 125,
"tool_offset": -4,
"error": 2.7755575615628914e-17
},
{
"tilt": 42,
"c": -80,
"tool_offset": -4,
"error": 1.3597399555105182e-16
},
{
"tilt": -80,
"c": 270,
"tool_offset": -4,
"error": 1.1102230246251565e-16
}
],
"jogs": [
{
"axis": "b",
"before": {
"joints": [
4.66664999999999,
3.266650000000002,
0,
0,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.0466664999999999,
7.25342008678354e-18,
0.03266650000000002
],
"tick": 242,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
5.988547549895522,
3.266650000000002,
-0.06274707734662499,
2.7074999999999982,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.05988547549895522,
-0.0006274707734662427,
0.03266650000000002
],
"tick": 266,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 5.2237508757293676e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
5.988547549895522,
3.266650000000002,
-0.06274707734662499,
2.7074999999999982,
0
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.05988547549895522,
-0.0006274707734662427,
0.03266650000000002
],
"tick": 266,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
6.806282140622642,
5.2009897567427625,
-0.10141774164188178,
2.7074999999999982,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.06806282140622642,
-0.0010141774164188061,
0.052009897567427625
],
"tick": 302,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 7.251197301982682e-17,
"render_error": 0
},
{
"axis": "b",
"before": {
"joints": [
6.806282140622642,
5.2009897567427625,
-0.10141774164188178,
2.7074999999999982,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.06806282140622642,
-0.0010141774164188061,
0.052009897567427625
],
"tick": 302,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
9.850766582307877,
5.2009897567427625,
-0.577843960065767,
9.007500000000007,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.09850766582307877,
-0.005778439600657659,
0.052009897567427625
],
"tick": 338,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 4.5534426050565124e-17,
"render_error": 0
},
{
"axis": "c",
"before": {
"joints": [
9.850766582307877,
5.2009897567427625,
-0.577843960065767,
9.007500000000007,
4.799999999999997
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.09850766582307877,
-0.005778439600657659,
0.052009897567427625
],
"tick": 338,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"after": {
"joints": [
10.273803322125342,
6.4421740463938555,
-0.6449031630217803,
9.007500000000007,
7.7999999999999945
],
"offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
},
"tip": [
0.10273803322125341,
-0.006449031630217789,
0.06442174046393855
],
"tick": 363,
"hash": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b"
},
"tcp_error": 7.523581911015265e-17,
"render_error": 0
}
],
"pixels": {
"colors": 1360,
"width": 472,
"height": 586
},
"worker_derived_offsets": {
"x_rot_point": -18,
"y_rot_point": 14,
"z_rot_point": 12,
"x_offset": 22,
"y_offset": 0,
"z_offset": -40,
"tool_offset": 0
}
}
],
"viewports": [
{
"width": 1440,
"height": 1100,
"bounds": [
{
"x": 969,
"right": 999,
"width": 30
},
{
"x": 445,
"right": 513.625,
"width": 68.625
},
{
"x": 521.421875,
"right": 582.109375,
"width": 60.6875
},
{
"x": 586.65625,
"right": 634.34375,
"width": 47.6875
},
{
"x": 642.140625,
"right": 702.828125,
"width": 60.6875
},
{
"x": 707.375,
"right": 755.0625,
"width": 47.6875
}
]
},
{
"width": 390,
"height": 844,
"bounds": [
{
"x": 341,
"right": 371,
"width": 30
},
{
"x": 23,
"right": 91.625,
"width": 68.625
},
{
"x": 99.421875,
"right": 160.109375,
"width": 60.6875
},
{
"x": 164.65625,
"right": 212.34375,
"width": 47.6875
},
{
"x": 220.140625,
"right": 280.828125,
"width": 60.6875
},
{
"x": 285.375,
"right": 333.0625,
"width": 47.6875
}
]
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

View File

@@ -0,0 +1,73 @@
{
"report_id": "trt-parametric-browser-v1",
"status": "verified",
"machines": [
{
"id": "xyzac-trt",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"export_bytes": 4867,
"preserved_program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"canvas": {
"hash": 3797953256,
"colors": 2383,
"width": 472,
"height": 491
}
},
{
"id": "xyzbc-trt",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"export_bytes": 4875,
"preserved_program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
"canvas": {
"hash": 1876807854,
"colors": 2446,
"width": 472,
"height": 491
}
}
],
"viewports": [
{
"width": 1440,
"height": 1000,
"canvas": {
"hash": 518020959,
"colors": 2516,
"width": 472,
"height": 491
},
"controls_fit": true,
"interactive": true
},
{
"width": 390,
"height": 844,
"canvas": {
"hash": 287810572,
"colors": 1808,
"width": 368,
"height": 378
},
"controls_fit": true,
"interactive": true
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@@ -0,0 +1,941 @@
{
"report_id": "glb-machine-khronos-validation-v1",
"validator": "2.0.0-dev.3.10",
"status": "verified",
"reports": [
{
"id": "ac",
"sha256": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"uri": "demo-ac-xyz-head.glb",
"mimeType": "model/gltf-binary",
"validatorVersion": "2.0.0-dev.3.10",
"validatedAt": "2026-09-18T02:12:47.525Z",
"issues": {
"numErrors": 0,
"numWarnings": 0,
"numInfos": 71,
"numHints": 0,
"messages": [
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/0/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/1/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/2/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/3/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/4/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/5/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/6/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/7/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/8/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/9/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/10/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/11/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/12/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/13/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/14/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/15/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/16/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/17/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/18/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/19/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/20/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/21/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/22/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/23/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/24/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/25/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/26/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/27/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/28/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/29/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/30/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/31/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/32/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/33/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/34/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/35/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/36/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/37/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/38/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/39/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/40/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/41/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/42/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/43/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/44/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/45/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/46/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/47/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/48/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/49/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/50/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/51/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/52/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/53/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/54/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/55/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/56/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/57/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/58/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/59/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/60/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/61/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/62/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/63/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/64/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/65/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/66/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/67/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/68/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/69/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/70/primitives/0/attributes/TEXCOORD_0"
}
],
"truncated": false
},
"info": {
"version": "2.0",
"generator": "THREE.GLTFExporter r185",
"resources": [
{
"pointer": "/buffers/0",
"mimeType": "application/gltf-buffer",
"storage": "glb",
"byteLength": 455536
}
],
"animationCount": 0,
"materialCount": 7,
"hasMorphTargets": false,
"hasSkins": false,
"hasTextures": false,
"hasDefaultScene": true,
"drawCallCount": 71,
"totalVertexCount": 12692,
"totalTriangleCount": 8232,
"maxUVs": 1,
"maxInfluences": 0,
"maxAttributes": 3
}
},
{
"id": "bc",
"sha256": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"uri": "demo-bc-xyz-head.glb",
"mimeType": "model/gltf-binary",
"validatorVersion": "2.0.0-dev.3.10",
"validatedAt": "2026-09-18T02:12:47.543Z",
"issues": {
"numErrors": 0,
"numWarnings": 0,
"numInfos": 71,
"numHints": 0,
"messages": [
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/0/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/1/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/2/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/3/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/4/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/5/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/6/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/7/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/8/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/9/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/10/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/11/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/12/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/13/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/14/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/15/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/16/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/17/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/18/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/19/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/20/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/21/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/22/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/23/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/24/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/25/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/26/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/27/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/28/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/29/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/30/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/31/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/32/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/33/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/34/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/35/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/36/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/37/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/38/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/39/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/40/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/41/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/42/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/43/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/44/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/45/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/46/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/47/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/48/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/49/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/50/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/51/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/52/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/53/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/54/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/55/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/56/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/57/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/58/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/59/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/60/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/61/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/62/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/63/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/64/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/65/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/66/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/67/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/68/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/69/primitives/0/attributes/TEXCOORD_0"
},
{
"code": "UNUSED_OBJECT",
"message": "This object may be unused.",
"severity": 2,
"pointer": "/meshes/70/primitives/0/attributes/TEXCOORD_0"
}
],
"truncated": false
},
"info": {
"version": "2.0",
"generator": "THREE.GLTFExporter r185",
"resources": [
{
"pointer": "/buffers/0",
"mimeType": "application/gltf-buffer",
"storage": "glb",
"byteLength": 455536
}
],
"animationCount": 0,
"materialCount": 7,
"hasMorphTargets": false,
"hasSkins": false,
"hasTextures": false,
"hasDefaultScene": true,
"drawCallCount": 71,
"totalVertexCount": 12692,
"totalTriangleCount": 8232,
"maxUVs": 1,
"maxInfluences": 0,
"maxAttributes": 3
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

View File

@@ -0,0 +1,105 @@
{
"report_id": "jog-limit-acceptance-v1",
"status": "verified",
"tasks": [
"TRT-JOG02",
"GLB-UI02"
],
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"known_baseline_failures": [
{
"test": "test_xyzac_manual_control.mjs",
"failure": "synchronous homing mask 0 != 1; identical with HEAD modules"
},
{
"test": "test_xyzac_button_constraints.mjs",
"failure": "unhomed versus machine-off gate priority; identical with HEAD modules"
}
],
"boundaries": [
"RTCP limit stops at last valid servo sample; no predictive hardware deceleration claim",
"Previously broken transport sessions require page reload"
],
"evidence": [
{
"path": "coverage/glb-machine/jog-limits/ac-recovered.png",
"sha256": "c02719451fdb3a7ba9d83235e81310c4897cb469f42911cd7ec14af5f6688dc7"
},
{
"path": "coverage/glb-machine/jog-limits/bc-recovered.png",
"sha256": "6bbaa58ccdcab209c8ce354d3fec9b9bc83f437be5386c0aff0fc02136a366f8"
},
{
"path": "coverage/glb-machine/jog-limits/before.log",
"sha256": "bdb05ff556524c0780412115b3d3798107eb2ac79b54477a59fd93004704524a"
},
{
"path": "coverage/glb-machine/jog-limits/browser.log",
"sha256": "25151979cfb56821cf2e6f82b128745f348cca6ac5ae7214b611d5204eb856d8"
},
{
"path": "coverage/glb-machine/jog-limits/browser.report.json",
"sha256": "305fd429b308099c209da8c460932521d009909ede89c019247ee2c794c322da"
},
{
"path": "coverage/glb-machine/jog-limits/build.log",
"sha256": "e53b7da801576efd224cc73eee896ca46b050fc6ed73b32645f9bb86adc517fe"
},
{
"path": "coverage/glb-machine/jog-limits/buttons-baseline.log",
"sha256": "445f0d3ab7af7c51457c735be03e474e7b8cf1315caf0df5601fc8c67d211386"
},
{
"path": "coverage/glb-machine/jog-limits/buttons.log",
"sha256": "b126107f6f7b0b468934cac4f4778df4cfd6f99ea50670668e54b15945085bca"
},
{
"path": "coverage/glb-machine/jog-limits/checkpoint.log",
"sha256": "c92e75901b4f8a2a6ec54f8fddf5c41fafdbf8729e76c2f9d22d2a68fbd8ea3c"
},
{
"path": "coverage/glb-machine/jog-limits/exact-checkpoint.report.json",
"sha256": "bda234634bcfbaef24dfa7291cf8650c67d33805a3ceefe96e251fdb2a64059e"
},
{
"path": "coverage/glb-machine/jog-limits/manual-baseline.log",
"sha256": "1bbaa532fe461967f677a8c045a3af0c84e9052aeaa6ab5d143e90ae89928af5"
},
{
"path": "coverage/glb-machine/jog-limits/manual.log",
"sha256": "1a3e27bdf66ef7c6f020da595181282b99bd74ea1c058583ba929c3466e80ada"
},
{
"path": "coverage/glb-machine/jog-limits/motion.log",
"sha256": "57ed59ba66d43ff00784733a3ddb7a0c3936c33aae0e03ab3c4fd4c2eacca361"
},
{
"path": "coverage/glb-machine/jog-limits/motion.report.json",
"sha256": "91c3fa8ed8037aac8e71b8c76d54c38db9dc011ae25f63553966860b624aa626"
},
{
"path": "coverage/glb-machine/jog-limits/recovery.log",
"sha256": "12b7792cd312e327154d4b66a13d869906a4c53a9143dd0d04493f687452da3b"
},
{
"path": "coverage/glb-machine/jog-limits/shadow.png",
"sha256": "f8c60fb173f8cc22dcb1f44da3c214a00ee2c401100e5536fabccc8d0d1904c3"
},
{
"path": "coverage/glb-machine/jog-limits/shadow.report.json",
"sha256": "b33cc89335b8cc32e2493b0199d5690eafaa14d84a7bdf4a5e19d71b05f22237"
},
{
"path": "coverage/glb-machine/jog-limits/step.log",
"sha256": "897d2f0bbd0c40e64ae9fc311206cf89bb4fa220b2662bf33bf4b87aac406321"
},
{
"path": "coverage/glb-machine/jog-limits/worker.log",
"sha256": "2f71069076125e38f1b313f5c4b397df1bf324879e8492fdb8599655a7772893"
},
{
"path": "coverage/glb-machine/jog-limits/worker.report.json",
"sha256": "e599aa05ca175ccd59dc36c783b9aa0a62e149e91b37aa065580b2ec58d88d6c"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

View File

@@ -0,0 +1,143 @@
{
"report_id": "jog-limit-browser-v1",
"status": "verified",
"machines": [
{
"id": "ac",
"atLimit": {
"joints": [
0,
0,
30,
50,
20
],
"tip": [
0,
0.3,
-6.661338147750939e-17
],
"tick": 207
},
"retreat": {
"joints": [
0,
0,
30,
48.7325,
20
],
"tip": [
0,
0.3,
-6.661338147750939e-17
],
"tick": 220
},
"stopped": {
"joints": [
147.16819064437152,
99.93568159167009,
30,
0,
38.13000000000069
],
"tip": [
1.4716819064437154,
0.3000000000000002,
0.9993568159167008
],
"tick": 1329
},
"resumed": {
"joints": [
152.31822671868903,
93.99260677882737,
30,
0,
35.422500000000696
],
"tip": [
1.5231822671868902,
0.3000000000000002,
0.9399260677882736
],
"tick": 1353
},
"fault": {
"code": "motion_limit",
"reason": "motion_joint_limit"
},
"pixels": 1135
},
{
"id": "bc",
"atLimit": {
"joints": [
0,
0,
30,
50,
20
],
"tip": [
0,
0.3,
-6.661338147750939e-17
],
"tick": 1640
},
"retreat": {
"joints": [
0,
0,
30,
48.92,
20
],
"tip": [
0,
0.3,
-6.661338147750939e-17
],
"tick": 1652
},
"stopped": {
"joints": [
171.92682873768467,
99.95231076385438,
30,
-7.105427357601002e-15,
28.200000000000312
],
"tip": [
1.7192682873768468,
0.3000000000000002,
0.9995231076385437
],
"tick": 2727
},
"resumed": {
"joints": [
174.0693024962762,
95.05173063293552,
30,
-7.105427357601002e-15,
26.73000000000031
],
"tip": [
1.740693024962762,
0.3000000000000002,
0.9505173063293549
],
"tick": 2746
},
"fault": {
"code": "motion_limit",
"reason": "motion_joint_limit"
},
"pixels": 1109
}
],
"page_errors": []
}

View File

@@ -0,0 +1,131 @@
{
"report_id": "trt-checkpoint-exact-v1",
"status": "verified",
"safeguards": {
"corrupt_native_rejected": true,
"foreign_build_rejected": true,
"frozen_subroutines": true,
"heap_relocation_checked": true,
"receipts_nonrecursive": true,
"backward_transport_restore_rejected": true
},
"rows": [
{
"machine": "xyzac-trt",
"phase": "subroutine",
"checkpoint_tick": 6,
"continuation_tick": 18,
"state_hash": "fnv1a64:113cda82a07e692a",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzac-trt",
"phase": "paused-resumed",
"checkpoint_tick": 18,
"continuation_tick": 30,
"state_hash": "fnv1a64:e380c733d2e27194",
"samples": 12,
"new_transport_recovery": true,
"first_divergent_tick": null
},
{
"machine": "xyzac-trt",
"phase": "line",
"checkpoint_tick": 35,
"continuation_tick": 47,
"state_hash": "fnv1a64:8e128e04aca13b45",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzac-trt",
"phase": "arc",
"checkpoint_tick": 72,
"continuation_tick": 84,
"state_hash": "fnv1a64:16fef8e7095d1cc7",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzac-trt",
"phase": "completed",
"checkpoint_tick": 684,
"continuation_tick": 696,
"state_hash": "fnv1a64:571fff3045139a9b",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzac-trt",
"phase": "trace-and-transport",
"state_hash": "fnv1a64:50c207f5409d5062",
"first_divergent_tick": null
},
{
"machine": "xyzac-trt",
"phase": "post-recovery-jog",
"samples": 6,
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "subroutine",
"checkpoint_tick": 6,
"continuation_tick": 18,
"state_hash": "fnv1a64:94587fdc5ce1e3b1",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "paused-resumed",
"checkpoint_tick": 18,
"continuation_tick": 30,
"state_hash": "fnv1a64:5f0adc4aa9f2a037",
"samples": 12,
"new_transport_recovery": true,
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "line",
"checkpoint_tick": 35,
"continuation_tick": 47,
"state_hash": "fnv1a64:74b83ca0c127a6c1",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "arc",
"checkpoint_tick": 72,
"continuation_tick": 84,
"state_hash": "fnv1a64:89a768be32ed9eda",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "completed",
"checkpoint_tick": 704,
"continuation_tick": 716,
"state_hash": "fnv1a64:d0cf609cae7c894b",
"samples": 12,
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "trace-and-transport",
"state_hash": "fnv1a64:4e6307e65d801db6",
"first_divergent_tick": null
},
{
"machine": "xyzbc-trt",
"phase": "post-recovery-jog",
"samples": 6,
"first_divergent_tick": null
}
],
"state_hash": "fnv1a64:d7f8b093cb3e4510"
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,5 @@
{
"report_id": "shadow-warning-v1",
"status": "verified",
"warnings": []
}

View File

@@ -0,0 +1,60 @@
{
"report_id": "jog-limit-recovery-v1",
"status": "verified",
"machines": [
{
"coordinates": "XYZAC",
"limit": [
0,
0,
30,
50,
20
],
"recovered": [
0,
0,
30,
49,
20
],
"rtcp_limit": [
161.584370202784,
99.95244522356447,
30,
0,
31.740000000000453
],
"stopped_tick": 1307,
"completed_cycles": 1,
"seq": 291
},
{
"coordinates": "XYZBC",
"limit": [
0,
0,
30,
50,
20
],
"recovered": [
0,
0,
30,
49,
20
],
"rtcp_limit": [
161.584370202784,
99.95244522356447,
30,
0,
31.740000000000453
],
"stopped_tick": 1307,
"completed_cycles": 1,
"seq": 291
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,657 @@
{
"report_id": "trt-rtcp-jog-browser-v1",
"status": "verified",
"machines": [
{
"coordinates": "XYZAC",
"rows": [
{
"axis": "a",
"before": {
"joints": [
4.666649999999989,
4.466649999999994,
0,
0,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 64,
"rendered_tick": 64,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
4.666649999999989,
6.351865924731886,
-2.4504376825076157,
9.599999999999989,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 106,
"rendered_tick": 100,
"tool_tip": [
0,
2,
0
],
"tcp_error": 0
},
"stopped": {
"joints": [
4.666649999999989,
6.749678153480922,
-2.8729923943953075,
11.39999999999995,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 117,
"rendered_tick": 117,
"tool_tip": [
0,
2,
0
],
"tcp_error": 3.469446951953614e-17
}
},
{
"axis": "c",
"before": {
"joints": [
4.666649999999989,
6.749678153480922,
-2.8729923943953075,
11.39999999999995,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 117,
"rendered_tick": 117,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
4.3018149555329135,
7.095098216652044,
-2.803343492369457,
11.39999999999995,
4.499999999999995
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 142,
"rendered_tick": 142,
"tool_tip": [
0,
2,
0
],
"tcp_error": 1.962615573354719e-17
},
"stopped": {
"joints": [
4.148323132140086,
7.22522468303406,
-2.7771053942555053,
11.39999999999995,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 148,
"rendered_tick": 148,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.237726045655905e-16
}
},
{
"axis": "a",
"before": {
"joints": [
4.148323132140086,
7.22522468303406,
-2.7771053942555053,
11.39999999999995,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 148,
"rendered_tick": 148,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
4.148323132140086,
9.152980104837122,
-4.449618197337122,
19.49999999999997,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 185,
"rendered_tick": 173,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.7755575615628914e-17
},
"stopped": {
"joints": [
4.148323132140086,
9.612205930334579,
-4.783201311661127,
21.299999999999933,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 196,
"rendered_tick": 196,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.2473876566261383e-16
}
},
{
"axis": "c",
"before": {
"joints": [
4.148323132140086,
9.612205930334579,
-4.783201311661127,
21.299999999999933,
6.30000000000001
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 196,
"rendered_tick": 196,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
3.551689196192138,
10.025858124581516,
-4.621925060367616,
21.299999999999933,
12.900000000000022
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 228,
"rendered_tick": 222,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.8609792490763984e-17
},
"stopped": {
"joints": [
3.3804521353118124,
10.127318160847281,
-4.582367445219857,
21.299999999999933,
14.700000000000024
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 239,
"rendered_tick": 239,
"tool_tip": [
0,
2,
0
],
"tcp_error": 3.469446951953614e-17
}
}
]
},
{
"coordinates": "XYZBC",
"rows": [
{
"axis": "b",
"before": {
"joints": [
4.66664999999999,
3.266650000000003,
0,
0,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 297,
"rendered_tick": 297,
"tool_tip": [
0,
1.5,
0
]
},
"moving": {
"joints": [
5.767497386045921,
3.266650000000003,
-1.981563047638323,
4.499999999999995,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 322,
"rendered_tick": 322,
"tool_tip": [
0,
1.4801843695236168,
0
],
"tcp_error": 2.2215299868541707e-16
},
"stopped": {
"joints": [
6.16370166824418,
3.266650000000003,
-2.797363512846239,
6.30000000000001,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 333,
"rendered_tick": 328,
"tool_tip": [
0,
1.4720263648715377,
0
],
"tcp_error": 2.0816681711721685e-17
}
},
{
"axis": "c",
"before": {
"joints": [
6.16370166824418,
3.266650000000003,
-2.797363512846239,
6.30000000000001,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 333,
"rendered_tick": 333,
"tool_tip": [
0,
1.4720263648715377,
0
]
},
"moving": {
"joints": [
5.536391282129575,
4.0203403161023985,
-2.7281078014596485,
6.30000000000001,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 376,
"rendered_tick": 369,
"tool_tip": [
0,
1.4725602353149239,
0
],
"tcp_error": 6.938893903907228e-18
},
"stopped": {
"joints": [
5.408892699222715,
4.145115526193058,
-2.714031826861671,
6.30000000000001,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 387,
"rendered_tick": 387,
"tool_tip": [
0,
1.4728596817313833,
0
],
"tcp_error": 9.813077866773595e-18
}
},
{
"axis": "b",
"before": {
"joints": [
5.408892699222715,
4.145115526193058,
-2.714031826861671,
6.30000000000001,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 387,
"rendered_tick": 387,
"tool_tip": [
0,
1.4728596817313833,
0
]
},
"moving": {
"joints": [
6.294511515825764,
4.145115526193058,
-4.745464111131721,
10.800000000000004,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 412,
"rendered_tick": 412,
"tool_tip": [
0,
1.4525453588886827,
0
],
"tcp_error": 2.260205560892005e-16
},
"stopped": {
"joints": [
6.603639517943392,
4.145115526193058,
-5.576454671870996,
12.60000000000002,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 423,
"rendered_tick": 418,
"tool_tip": [
0,
1.44423545328129,
0
],
"tcp_error": 2.225860458774576e-16
}
},
{
"axis": "c",
"before": {
"joints": [
6.603639517943392,
4.145115526193058,
-5.576454671870996,
12.60000000000002,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 423,
"rendered_tick": 423,
"tool_tip": [
0,
1.44423545328129,
0
]
},
"moving": {
"joints": [
5.553928059363571,
4.94271622192026,
-5.341816361477811,
12.60000000000002,
25.19999999999985
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 478,
"rendered_tick": 477,
"tool_tip": [
0,
1.4465254658419693,
0
],
"tcp_error": 1.3877787807814457e-17
},
"stopped": {
"joints": [
5.401049028353562,
5.029221227849476,
-5.30764384936742,
12.60000000000002,
26.999999999999808
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 489,
"rendered_tick": 489,
"tool_tip": [
0,
1.4469235615063258,
0
],
"tcp_error": 6.938893903907228e-18
}
}
]
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

View File

@@ -0,0 +1,73 @@
{
"report_id": "trt-parametric-browser-v1",
"status": "verified",
"machines": [
{
"id": "xyzac-trt",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"export_bytes": 4867,
"preserved_program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc",
"canvas": {
"hash": 785034247,
"colors": 1181,
"width": 472,
"height": 281
}
},
{
"id": "xyzbc-trt",
"offsets": {
"x_rot_point": 24,
"y_rot_point": -12,
"z_rot_point": 8,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"export_bytes": 4875,
"preserved_program": "linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc",
"canvas": {
"hash": 3432713434,
"colors": 1259,
"width": 472,
"height": 281
}
}
],
"viewports": [
{
"width": 1440,
"height": 1000,
"canvas": {
"hash": 430737702,
"colors": 1278,
"width": 472,
"height": 281
},
"controls_fit": true,
"interactive": true
},
{
"width": 390,
"height": 844,
"canvas": {
"hash": 1968984145,
"colors": 1421,
"width": 368,
"height": 299
},
"controls_fit": true,
"interactive": true
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,14 @@
{
"report_id": "glb-machine-reproducibility-v1",
"status": "verified",
"generated_files_identical": true,
"production_glb_identical": true,
"sha256": {
"LICENSE.txt": "e08dd9a67a260e10205ed953751b46cc9fb4b764fa9b87ee2a239654aaabb4b0",
"demo-ac-xyz-head.glb": "93698435206864ae42cdd2121be570538e977e32c6a3a99095a93dd1518f8da1",
"demo-ac-xyz-head.urdf": "558ce184a083a9ad5070ac2555bd05f18bdbdd8e537882c0a0443ebdb30abce6",
"demo-bc-xyz-head.glb": "394c7cf3c8b246e1fc88e74301d9447f4e0892381ffa4fe1f86653a678efe95b",
"demo-bc-xyz-head.urdf": "6f08b6d3f534b6930d50b73b38a4db103246929f59ccdc09d4423bc1e6632f5b",
"manifest.json": "a9222f10610e68cfda0e59a759c1fffa5a743e01f079f086bc743b260796afdd"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,80 @@
{
"report_id": "trt-stationary-switch-acceptance-v1",
"status": "verified",
"tasks": [
"TRT-SW01"
],
"worker_switches": 64,
"browser_switches": 22,
"wasm_sha256": "aa0f5d551e42859eef3b37aee9079f09ae04e668819da4e62aee2b74522e8bc6",
"evidence": [
{
"path": "coverage/glb-machine/switching/ac-identity.png",
"sha256": "25fa37dbd4f797632c90e389e5623125d9ca7d4ca798bd8685fe62c0b0a43a8c"
},
{
"path": "coverage/glb-machine/switching/ac-tcp.png",
"sha256": "25fa37dbd4f797632c90e389e5623125d9ca7d4ca798bd8685fe62c0b0a43a8c"
},
{
"path": "coverage/glb-machine/switching/bc-identity.png",
"sha256": "19b4bc52305dd95da2eaade3e020e3aed95dcbfe25717f4d3b8d25f71e7738d6"
},
{
"path": "coverage/glb-machine/switching/bc-tcp.png",
"sha256": "19b4bc52305dd95da2eaade3e020e3aed95dcbfe25717f4d3b8d25f71e7738d6"
},
{
"path": "coverage/glb-machine/switching/before.log",
"sha256": "60f5c62ca3ca2ace4a835ca050991e2816ffb246f2c8019ae600818690201571"
},
{
"path": "coverage/glb-machine/switching/browser.log",
"sha256": "22ca4ed02fdba98a5db00d0c03ae811275c75d12398794317704c3d249a3e0b4"
},
{
"path": "coverage/glb-machine/switching/browser.report.json",
"sha256": "c8d11754aae53c5f925566a408a083aa385fe2f772e7a05d793846385466f2d5"
},
{
"path": "coverage/glb-machine/switching/build.log",
"sha256": "c613842ac193eeaab2e62ad8f4c577850c4f253a5a02811a191c2fe462165364"
},
{
"path": "coverage/glb-machine/switching/rtcp-jog/rtcp-jog-browser.report.json",
"sha256": "50f9b2eb75fcbf9c5e32798fb6f4acaa31bd6a6e0925372f7deb965515c1dbf3"
},
{
"path": "coverage/glb-machine/switching/rtcp-jog/rtcp-jog-xyzac.png",
"sha256": "341085263c16dfc8a34519d0ea196f3ee3a753d6f817aa5f598d0ba61372c9cc"
},
{
"path": "coverage/glb-machine/switching/rtcp-jog/rtcp-jog-xyzbc.png",
"sha256": "f58186f1a905837ba3b74043e9f8f677c2bfdde849faa651e269f9943f5932fe"
},
{
"path": "coverage/glb-machine/switching/rtcp-jog.log",
"sha256": "ba3a14b05c5192abf55f59e8f054df5cc53e3845180d90b009596c3af0533bd1"
},
{
"path": "coverage/glb-machine/switching/runtime-followups.log",
"sha256": "d0f18fbe4749d2a89fac242e99596c125ad8aa056067d18b59589519d83c6b46"
},
{
"path": "coverage/glb-machine/switching/step-flow.log",
"sha256": "897d2f0bbd0c40e64ae9fc311206cf89bb4fa220b2662bf33bf4b87aac406321"
},
{
"path": "coverage/glb-machine/switching/trt-case.log",
"sha256": "801631666fa3854d136b8931b345ec2d929978b7b71ba9cbf4ea1f6a472934c1"
},
{
"path": "coverage/glb-machine/switching/worker.log",
"sha256": "900bae7be8a9bf9d1a77b2e6255adceb0c054fe29224f13c96d02e1f2b36ee1c"
},
{
"path": "coverage/glb-machine/switching/worker.report.json",
"sha256": "c1afd5ea8d12774b4cf2a241ccf5fb81ade2969ff219d71b57584715ec9944ef"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,445 @@
{
"report_id": "trt-stationary-switch-browser-v1",
"status": "verified",
"machines": [
{
"id": "ac",
"initial": {
"joints": [
0,
0,
44.5858,
4.8675,
179.88
],
"tip": [
0,
0.44585800000000003,
-9.900036346266462e-17
],
"tick": 625
},
"rows": [
{
"type": 1,
"after": {
"joints": [
-3.552713678800501e-15,
-3.552713678800501e-15,
44.585800000000035,
4.8675,
179.88
],
"tip": [
-3.552713678800501e-17,
0.44585800000000037,
-1.345275002506697e-16
],
"tick": 625
}
},
{
"type": 0,
"after": {
"joints": [
-3.552713678800501e-15,
-3.552713678800501e-15,
44.585800000000035,
4.8675,
179.88
],
"tip": [
-3.552713678800501e-17,
0.44585800000000037,
-1.345275002506697e-16
],
"tick": 625
}
},
{
"type": 1,
"after": {
"joints": [
-1.0658141036401503e-14,
-7.105427357601002e-15,
44.58580000000006,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.44585800000000064,
-1.7005463703867476e-16
],
"tick": 625
}
},
{
"type": 0,
"after": {
"joints": [
-1.0658141036401503e-14,
-7.105427357601002e-15,
44.58580000000006,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.44585800000000064,
-1.7005463703867476e-16
],
"tick": 625
}
},
{
"type": 2,
"after": {
"joints": [
-1.0658141036401503e-14,
-7.105427357601002e-15,
44.58580000000006,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.44585800000000064,
-1.7005463703867476e-16
],
"tick": 625
}
},
{
"type": 1,
"after": {
"joints": [
-1.0658141036401503e-14,
-1.2434497875801753e-14,
44.58580000000009,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.4458580000000009,
-2.2334534222068237e-16
],
"tick": 625
}
},
{
"type": 0,
"after": {
"joints": [
-1.0658141036401503e-14,
-1.2434497875801753e-14,
44.58580000000009,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.4458580000000009,
-2.2334534222068237e-16
],
"tick": 625
}
},
{
"mdi": true,
"type": 1,
"after": {
"joints": [
-1.0658141036401503e-14,
-1.7763568394002505e-14,
44.58580000000012,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.4458580000000012,
-2.7663604740268993e-16
],
"tick": 625
}
},
{
"mdi": true,
"type": 0,
"after": {
"joints": [
-1.0658141036401503e-14,
-1.7763568394002505e-14,
44.58580000000012,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.4458580000000012,
-2.7663604740268993e-16
],
"tick": 625
}
},
{
"mdi": true,
"type": 1,
"after": {
"joints": [
-1.0658141036401503e-14,
-2.1316282072803006e-14,
44.58580000000015,
4.8675,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.4458580000000015,
-3.1216318419069497e-16
],
"tick": 625
}
}
],
"afterJog": {
"joints": [
-1.0658141036401503e-14,
-1.8032297033992322,
44.43311591629053,
6.135000000000001,
179.88
],
"tip": [
-1.0658141036401502e-16,
0.44433115916290533,
-0.01803229703399242
],
"tick": 638
},
"tcp_jog_error": 1.8215615495386383e-16
},
{
"id": "bc",
"initial": {
"joints": [
0,
0,
44.5858,
4.8675,
179.88
],
"tip": [
0,
0.44585800000000003,
-9.900036346266462e-17
],
"tick": 1263
},
"rows": [
{
"type": 1,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"type": 0,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"type": 1,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"type": 0,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"type": 2,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"type": 1,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"type": 0,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"mdi": true,
"type": 1,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"mdi": true,
"type": 0,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
},
{
"mdi": true,
"type": 1,
"after": {
"joints": [
0,
-1.7763568394002505e-15,
44.585800000000006,
4.8675,
179.88
],
"tip": [
0,
0.4458580000000001,
-1.1676393185666712e-16
],
"tick": 1263
}
}
],
"afterJog": {
"joints": [
1.606594333188152,
-1.7763568394002505e-15,
44.65652049853526,
6.135000000000001,
179.88
],
"tip": [
0.01606594333188152,
0.44656520498535257,
-1.1692096290824073e-16
],
"tick": 1276
},
"tcp_jog_error": 9.692650329883268e-17
}
],
"browser_errors": []
}

View File

@@ -0,0 +1,657 @@
{
"report_id": "trt-rtcp-jog-browser-v1",
"status": "verified",
"machines": [
{
"coordinates": "XYZAC",
"rows": [
{
"axis": "a",
"before": {
"joints": [
4.266649999999998,
3.8666500000000035,
0,
0,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 59,
"rendered_tick": 59,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
4.266649999999998,
5.373074052273088,
-2.0970252352474255,
7.800000000000022,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 95,
"rendered_tick": 95,
"tool_tip": [
0,
2,
0
],
"tcp_error": 2.2247786310271853e-16
},
"stopped": {
"joints": [
4.266649999999998,
5.760268302489592,
-2.550498930537275,
9.599999999999989,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 106,
"rendered_tick": 106,
"tool_tip": [
0,
2,
0
],
"tcp_error": 6.938893903907228e-18
}
},
{
"axis": "c",
"before": {
"joints": [
4.266649999999998,
5.760268302489592,
-2.550498930537275,
9.599999999999989,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 106,
"rendered_tick": 106,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
3.6792686907248924,
6.314990873253862,
-2.456674630617826,
9.599999999999989,
8.100000000000021
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 143,
"rendered_tick": 142,
"tool_tip": [
0,
2,
0
],
"tcp_error": 3.1031676915590914e-17
},
"stopped": {
"joints": [
3.5383270508428857,
6.426786115491513,
-2.4377658807488203,
9.599999999999989,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 154,
"rendered_tick": 154,
"tool_tip": [
0,
2,
0
],
"tcp_error": 4.449557262054371e-16
}
},
{
"axis": "a",
"before": {
"joints": [
3.5383270508428857,
6.426786115491513,
-2.4377658807488203,
9.599999999999989,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 154,
"rendered_tick": 154,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
3.5383270508428857,
8.7673143138403,
-4.586189616718839,
19.49999999999997,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 197,
"rendered_tick": 192,
"tool_tip": [
0,
2,
0
],
"tcp_error": 3.469446951953614e-17
},
"stopped": {
"joints": [
3.5383270508428857,
8.843841049987784,
-4.644803608823022,
19.799999999999965,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 203,
"rendered_tick": 203,
"tool_tip": [
0,
2,
0
],
"tcp_error": 4.449557262054371e-16
}
},
{
"axis": "c",
"before": {
"joints": [
3.5383270508428857,
8.843841049987784,
-4.644803608823022,
19.799999999999965,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 203,
"rendered_tick": 203,
"tool_tip": [
0,
2,
0
]
},
"moving": {
"joints": [
2.5165393432010794,
9.442610140256845,
-4.429233471737167,
19.799999999999965,
21.89999999999992
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 253,
"rendered_tick": 253,
"tool_tip": [
0,
2,
0
],
"tcp_error": 4.220764384040162e-17
},
"stopped": {
"joints": [
2.352620433265477,
9.514578932735887,
-4.403323112113162,
19.799999999999965,
23.699999999999882
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": 0,
"y_offset": 20,
"z_offset": 10,
"tool_offset": 0
},
"tick": 264,
"rendered_tick": 264,
"tool_tip": [
0,
2,
0
],
"tcp_error": 4.4565853017185e-16
}
}
]
},
{
"coordinates": "XYZBC",
"rows": [
{
"axis": "b",
"before": {
"joints": [
4.66664999999999,
3.466650000000003,
0,
0,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 323,
"rendered_tick": 323,
"tool_tip": [
0,
1.5,
0
]
},
"moving": {
"joints": [
7.440193096216049,
3.466650000000003,
-6.028967447117559,
13.199999999999912,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 377,
"rendered_tick": 377,
"tool_tip": [
0,
1.4397103255288244,
0
],
"tcp_error": 2.0816681711721685e-17
},
"stopped": {
"joints": [
7.708439959571031,
3.466650000000003,
-6.8953114045420065,
14.999999999999874,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 388,
"rendered_tick": 388,
"tool_tip": [
0,
1.43104688595458,
0
],
"tcp_error": 2.7755575615628914e-17
}
},
{
"axis": "c",
"before": {
"joints": [
7.708439959571031,
3.466650000000003,
-6.8953114045420065,
14.999999999999874,
0
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 388,
"rendered_tick": 388,
"tool_tip": [
0,
1.43104688595458,
0
]
},
"moving": {
"joints": [
7.065609001826186,
4.217362181333353,
-6.72306536854455,
14.999999999999874,
9.899999999999983
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 431,
"rendered_tick": 431,
"tool_tip": [
0,
1.4327693463145545,
0
],
"tcp_error": 1.3877787807814457e-17
},
"stopped": {
"joints": [
6.935745229993923,
4.340960088317411,
-6.688268475756038,
14.999999999999874,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 442,
"rendered_tick": 442,
"tool_tip": [
0,
1.4331173152424395,
0
],
"tcp_error": 2.2484586062492886e-16
}
},
{
"axis": "b",
"before": {
"joints": [
6.935745229993923,
4.340960088317411,
-6.688268475756038,
14.999999999999874,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 442,
"rendered_tick": 442,
"tool_tip": [
0,
1.4331173152424395,
0
]
},
"moving": {
"joints": [
7.5048422561251655,
4.340960088317411,
-8.827244983646052,
19.49999999999987,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 467,
"rendered_tick": 461,
"tool_tip": [
0,
1.4203008382911364,
0
],
"tcp_error": 1.5515838457795457e-17
},
"stopped": {
"joints": [
7.685161197488696,
4.340960088317411,
-9.694238839212831,
21.299999999999883,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 478,
"rendered_tick": 478,
"tool_tip": [
0,
1.4030576116078717,
0
],
"tcp_error": 2.1942709178604383e-17
}
},
{
"axis": "c",
"before": {
"joints": [
7.685161197488696,
4.340960088317411,
-9.694238839212831,
21.299999999999883,
11.699999999999944
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 478,
"rendered_tick": 478,
"tool_tip": [
0,
1.4030576116078717,
0
]
},
"moving": {
"joints": [
6.765551237557826,
5.050031321132119,
-9.335697898169764,
21.299999999999883,
23.699999999999882
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 528,
"rendered_tick": 522,
"tool_tip": [
0,
1.4060719741862095,
0
],
"tcp_error": 2.237726045655905e-16
},
"stopped": {
"joints": [
6.641467483723151,
5.123681632413464,
-9.287319664128686,
21.299999999999883,
25.19999999999985
],
"offsets": {
"x_rot_point": 0,
"y_rot_point": 0,
"z_rot_point": 0,
"x_offset": -20,
"y_offset": 0,
"z_offset": -15,
"tool_offset": 0
},
"tick": 538,
"rendered_tick": 538,
"tool_tip": [
0,
1.4071268033587132,
0
],
"tcp_error": 4.163336342344337e-17
}
}
]
}
],
"browser_errors": []
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

View File

@@ -0,0 +1,45 @@
# 项目功能内容
## 目标
在 Web LinuxCNC 控制面板的机床预览区增加“三维机床管理”按钮。对话框内完成机床部件装配和坐标标定,最终生成可由现有 XYZAC/XYZBC TRT 运行链使用的机床模型。
## 功能范围
1. 对话框包含独立的 Three.js 三维预览,实时显示正在配置的机床。
2. 支持逐个导入自包含 `.glb` 机床部件,不允许依赖外部纹理或网格文件。
3. 每个部件可绑定 `底座、X、Y、Z、刀具、A/B、C、工件` 角色,并编辑父级关系。可运行结构必须满足:
- 刀具链:底座 → X → Y → Z → 刀具。
- 转台链:底座 → A/B → C → 工件。
4. 每个部件可定义局部坐标原点。模型网格相对该原点偏移,运动关节围绕该原点运动。
5. 每个部件可独立显示或隐藏原点坐标轴辅助线。
6. 每个部件可用数值和 Three.js 操纵器平移、旋转;变换只修改装配配置,不修改原 GLB 字节。
7. 可定义 C 轴原点位置和 A/B 到 C 的运动学偏置。应用时写入底座场景节点及整机场景的 `userData.linuxcncMachineGeometry`,同时生成 URDF:
- `C 原点 P = (x-rot-point, y-rot-point, z-rot-point)`。
- `A/B 偏置 D = (x-offset, y-offset, z-offset)`。
- 倾转关节原点 `T=P+D`,C 关节原点 `U=-D`,工件固定原点 `-P`。
8. 可定义 X/Y/Z/A或B/C 的物理零点。模型运动量为 LinuxCNC 实际关节值减去配置的物理零点。
9. 应用后,控制面板程序执行、Jog、RTCP 切换和刀长变化继续以 Worker/WASM 快照为唯一运动输入;模型不得在 React 中重新计算刀尖逆解。
## 数据和单位
- UI 中平移、局部原点、C 原点和偏置使用毫米;旋转和物理旋转轴零点使用度。
- GLB 遵循 glTF 米制、Y-up;生成的 URDF 使用米和弧度、Z-up。
- 部件源文件、哈希和原始场景保持不变;运行装配使用深复制后的几何与材质。显式“导出组合 GLB”会生成新文件,并将标定数据同时写入整机场景和底座节点 `userData`。
- 底座 `userData` 至少保存 schema、机型、C 原点、A/B 偏置、物理零点和部件装配摘要。
## 安全边界
- 当前只生成项目已有求解器支持的 XYZAC 或 XYZBC 双分支 TRT 结构。
- 层级编辑器允许建立关系,但“应用到控制器”前必须严格验证两条受支持机械链、角色唯一性和无环结构。
- 未完成八个角色时允许预览和保存草稿,不允许应用到控制器。
- 模型外观变换不能代替 INI/运动学参数;C 原点和 A/B 偏置必须通过现有配置重载进入 WASM。
- 不做碰撞、质量、刚体动力学或任意 URDF 求解。
## 验收结果
- AC 与 BC 均能由八个独立部件建立结构并应用。
- 对话框预览、原点辅助、平移/旋转和层级变化实时可见。
- 底座 `userData` 含完整几何及物理零点字段。
- 运行控制面板后,X/Y/Z/A或B/C Jog 和五轴程序驱动对应部件;工件路径继续附着 C 轴,刀具长度来自 WASM。
- 非法层级、重复角色、缺失部件、错误机型和外部资源 GLB 明确拒绝,已生效模型不改变。

View File

@@ -0,0 +1,13 @@
# 项目程序开发详细步骤
1. `MGR-01`:建立本专项 01–06 与 README,冻结数据字段、坐标单位、机械链和验收边界。
2. `MGR-02`:实现部件 GLB 加载、哈希、外部资源拒绝、装配草稿类型和生命周期清理。
3. `MGR-03`:实现角色/父级编辑、唯一性和无环校验,生成 XYZAC/XYZBC 严格 URDF 与运行场景。
4. `MGR-04`:实现对话框 Three.js 预览、部件选择、显示/隐藏和原点坐标轴辅助。
5. `MGR-05`:实现部件局部原点、数值平移/旋转和 Three.js TransformControls 操纵器。
6. `MGR-06`:实现 C 原点、A/B 偏置、物理零点,写入底座及整机 `userData`,并映射到 URDF/INI。
7. `MGR-07`:接入控制面板“应用机床”,复用现有 `LOAD_WORKSPACE`、`PROGRAM_LOAD`、回零失效和 GLB 资源清理事务。
8. `MGR-08`:验证 WASM 关节值到部件链的映射、刀具/工件/路径坐标一致性及 AC/BC 五轴程序。
9. `MGR-09`:浏览器交互、错误边界、类型检查、生产构建、截图和报告收口。
每轮只推进任务矩阵中依赖已满足的任务。代码完成后必须同步更新 03、04、05;若改变数据契约或坐标定义,先更新 06。

View File

@@ -0,0 +1,22 @@
# 推进台账
## R02 / 2026-09-20 / 部件装配、标定、应用与验收完成
- 新增 `machine-manager.ts`:通用自包含 GLB 部件加载、SHA-256、深复制、八角色和两条机械链校验、AC/BC URDF 生成、组合场景、底座/整机 userData、组合哈希。
- 新增 `MachineManagerPanel.tsx`:机床预览区“三维机床管理”按钮、可拖动大对话框、独立 Three.js 预览、批量部件导入、角色/父级、显隐、原点辅助、数值平移/旋转、TransformControls、C 原点、A/B 偏置和物理零点编辑。
- 新增“导出组合 GLB”;导出的新文件包含 `linuxcnc.machine/1` URDF,以及整机场景和底座节点上的 `linuxcnc.machine-manager/1` 标定 userData。
- 接入 App 原有 `LOAD_WORKSPACE` + `PROGRAM_LOAD` 事务。配置和程序应用成功后替换机床;失败候选被释放。关机且空闲门控、程序重解析和回零要求保持。
- `buildImportedMachine` 按 `WASM joint - physicalZero` 驱动 X/Y/Z/A或B/C,刀长、路径和 RTCP 仍来自 Worker/WASM;有效 INI 参数同步回运行克隆的底座 userData。
- 浏览器 E01/E02 覆盖 8 个独立 GLB、原点/变换、导出、AC 应用、同一部件切 BC、BC 五轴程序、物理零点、非法层级和生产包。无浏览器错误。
- 旧五轴整机回归重新通过:AC/BC 各 41 个五轴同时变化 tick、42 个样本,坐标误差低于 `2.5e-16` 视图单位。
- `gltf-validator` 当前未安装,因此没有重跑旧 Khronos 校验器;旧四个示例 GLB 未修改,历史 `coverage/glb-machine/gltf-validation.report.json` 仍为 verified。本专项生成并下载的组合 GLB 已由浏览器 GLTFExporter 完成往返导出。
- MGR-01 至 MGR-09 全部完成。下一步按用户体验反馈扩展草稿持久化、部件库或任意新运动学 profile;不自动扩大到碰撞/动力学。
## R01 / 2026-09-20 / 专项建立与实现启动
- 用户要求在机床预览区新增“三维机床管理”对话框,覆盖部件级 GLB 导入、层级、原点、姿态、RTCP 几何参数、物理零点和控制坐标对应。
- 核对现有 `docs/glb-machine`、`MachineImportPanel`、严格 URDF 解析、`buildImportedMachine` 和 WASM 关节投影。现有能力只支持已经包含完整层级与 URDF 的整机 GLB,本轮扩展为部件装配编辑器。
- 建立本目录 01–06 和 README;新增 MGR-01 至 MGR-09 任务链。
- 决定复用 `linuxcnc.machine/1` 结构:管理器生成合法场景和 URDF,现有 INI/Worker/WASM 继续作为运动和 RTCP 权威。
- 当前任务:已完成。
- 下一步:按新需求继续;本专项不重复执行。

View File

@@ -0,0 +1,13 @@
# 任务矩阵
|任务|状态|依赖|交付与验收标准|
|---|---|---|---|
|MGR-01 文档与契约|verified|-|01–06 与 README 存在;字段、单位、机械链、权威边界明确|
|MGR-02 部件 GLB 加载|verified|MGR-01|多文件导入、SHA-256、外部资源拒绝、资源释放测试通过|
|MGR-03 层级与 URDF|verified|MGR-02|八角色、父级编辑、无环/唯一性、AC/BC URDF 生成与严格解析通过|
|MGR-04 管理器预览|verified|MGR-03|对话框 Three.js 预览、选择、显隐和相机控制可用|
|MGR-05 原点与部件变换|verified|MGR-04|原点辅助显示;数值和操纵器平移/旋转同步|
|MGR-06 RTCP 几何与物理零点|verified|MGR-03|C 原点、A/B 偏置、物理零点写入底座 userData,并正确生成 URDF|
|MGR-07 控制面板接入|verified|MGR-03,MGR-06|“三维机床管理”入口;应用复用 LOAD_WORKSPACE/PROGRAM_LOAD,失败不改旧模型|
|MGR-08 坐标一致性|verified|MGR-07|AC/BC 的 X/Y/Z/A或B/C、刀长、工件和路径由 WASM 状态正确驱动|
|MGR-09 浏览器验收收口|verified|MGR-04,MGR-05,MGR-08|交互/错误/构建/浏览器截图报告通过,03–05 完整更新|

View File

@@ -0,0 +1,39 @@
# 验收证据
## E01 / R01 / 文档与基线
- 状态:verified。
- 文档目录:`docs/glb-machine-manager/`。
- 基线能力:现有整机 GLB 导入、严格 URDF、几何参数重载和 WASM 关节投影保留。
- 实现和运行证据见 E02–E04。
## E02 / R02 / 开发源浏览器闭环
- 命令:`PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.mjs node scripts/test_machine_manager_browser.mjs`
- report_id:`GLB-MGR-E01`
- 报告:`coverage/glb-machine-manager/browser.report.json`
- SHA-256:`d3d15da19d3e8a8c958935a0e9c3840b70fb646d5bc8ffb72805dc744df078a3`
- 状态:verified;浏览器错误 0。
- 覆盖:8 部件导入和预览、原点显隐、数值/TransformControls 变换、组合 GLB 导出、AC/BC 应用、底座 userData、物理零点、非法层级拒绝、BC 五轴程序。
- 截图:
- `coverage/glb-machine-manager/manager-ac-config.png`,SHA-256 `5ca01d26cb83da726319be107aa90069ce96c3197f4297a26e1f836d171a1501`
- `coverage/glb-machine-manager/managed-bc-running.png`,SHA-256 `6e14ff6bc4e493f57e55bb601ded84319ce86f064f7a811595c1e4498b1827a0`
## E03 / R02 / 生产构建浏览器闭环
- 构建:`npm --prefix web/react run build`,通过;只有既有大 chunk 提示。
- 命令:`MACHINE_MANAGER_SOURCE_MODULES=0 ... node scripts/test_machine_manager_browser.mjs`
- report_id:`GLB-MGR-E02`
- 报告:`coverage/glb-machine-manager/browser-production.report.json`
- SHA-256:`5ba840aa92c37a06e2f19bce7c57234871b085e27951fb44623af74253215388`
- 状态:verified;生产资产执行 AC/BC UI 应用和 BC WASM 程序运动,浏览器错误 0。
## E04 / R02 / 回归与静态契约
- `node scripts/test_axis_control_inventory.mjs`:verified,99 个文档化控件。
- `node web/react/src/test_dual_canvas_contract.mjs`:verified。
- `node web/react/src/test_xyzac_threejs.mjs`:verified。
- `npm --prefix web/react run typecheck`:通过。
- `node scripts/test_glb_machine_motion.mjs`:verified;报告 `coverage/glb-machine-manager/regression-motion/motion.report.json`,SHA-256 `91c3fa8ed8037aac8e71b8c76d54c38db9dc011ae25f63553966860b624aa626`。AC/BC 各 41 个同时五轴变化 tick、42 个样本,最大误差分别约 `2.26e-16`、`2.48e-16`。
- `git diff --check`:通过。
- `scripts/validate_glb_machines.mjs` 未重跑:本地缺少 `gltf-validator` 包;旧示例 GLB 未修改,历史 Khronos 校验报告仍为 verified。该依赖边界不影响新管理器的浏览器导入、导出和运行证据。

View File

@@ -0,0 +1,29 @@
# 决策记录
## D01 / 继续使用 LinuxCNC WASM 作为运动权威
部件编辑器只生成模型结构和标定参数。程序执行、Jog、刀长、运动学类型和关节位置仍来自 Worker/WASM 快照。Three.js 不实现第二套 RTCP 或逆运动学。
## D02 / 运行结构保持 `linuxcnc.machine/1`
现有严格 URDF 校验、配置写入和运行投影已经验收。部件管理器输出同一结构,可复用所有运行能力并避免引入并行格式。编辑草稿使用独立 schema,只有验证成功后才转换成运行结构。
## D03 / 编辑层级自由,应用层级受求解器限制
UI 允许用户选择父级以建立层级和发现错误;应用时只接受底座→X→Y→Z→刀具及底座→A/B→C→工件。当前 WASM 只支持这两类 TRT,不能把任意树伪装成可执行机床。
## D04 / 原 GLB 不原地改写
导入部件的源字节和场景保持不变。局部原点和平移/旋转存在装配配置中,应用时创建深复制运行场景。标定数据写入运行装配中底座节点及整机场景的 userData;“导出组合 GLB”将该装配序列化为新的自包含 GLB,原部件文件不被覆盖。
## D05 / C 原点与 A/B 偏置的唯一映射
沿用 `trtfuncs.c` 和既有参数契约:C 原点 P 对应 rot-point,A/B 偏置 D 对应 offset;URDF 使用 T=P+D、U=-D、work=-P。该公式是控制模型坐标对应的唯一来源。
## D06 / 物理零点是模型校准,不改控制器关节值
物理零点保存为每轴的模型零姿态标定值。渲染位移/转角使用 `WASM joint - physicalZero`,但不修改 Worker、INI 的回零位置或程序坐标。改变真实回零参数仍应通过机床配置完成。
## D07 / 组合 GLB 只通过显式导出生成
普通编辑和“应用到 Web LinuxCNC”不触碰用户原文件。只有用户点击“导出组合 GLB”时才用 GLTFExporter 生成新文件。导出包含部件层级、URDF、底座标定 userData 和整机场景标定 userData。

View File

@@ -0,0 +1,25 @@
# Web LinuxCNC 三维机床管理器
本目录是“三维机床管理器”专项的唯一接续入口。工作顺序固定为:
1. 阅读 [04-任务矩阵](04-任务矩阵.md),选择首个未完成且依赖满足的任务。
2. 阅读 [03-推进台账](03-推进台账.md) 最新一轮和 [06-决策记录](06-决策记录.md)。
3. 按 [02-项目程序开发详细步骤](02-项目程序开发详细步骤.md) 实施。
4. 验收后把命令、报告、截图写入 [05-验收证据](05-验收证据.md),同步任务状态和推进台账。
专项目标是在 Web LinuxCNC 机床预览区提供“三维机床管理”对话框,支持 GLB 部件导入、AC/BC 两条机械链装配、部件原点和姿态编辑、原点辅助显示、RTCP 几何参数及物理零点定义,并保证模型运动与 LinuxCNC WASM 的实际关节坐标一致。
现有整机 GLB + 内嵌 URDF 导入能力继续保留。新管理器生成与现有 `linuxcnc.machine/1` 相同的严格结构,再通过已有配置、Worker、WASM 和 Three.js 投影链运行。
当前状态:MGR-01 至 MGR-09 全部 verified,功能提交为 `8aab531`。最新台账 R02,浏览器证据 `GLB-MGR-E01/E02`,截图和报告位于 `coverage/glb-machine-manager/`。
文档:
- [01-项目功能内容](01-项目功能内容.md)
- [02-项目程序开发详细步骤](02-项目程序开发详细步骤.md)
- [03-推进台账](03-推进台账.md)
- [04-任务矩阵](04-任务矩阵.md)
- [05-验收证据](05-验收证据.md)
- [06-决策记录](06-决策记录.md)
相关旧专项:[GLB / URDF 五轴机床子项目](../glb-machine/README.md)。旧专项已完成整机导入、AC/BC 识别、几何参数同步和实际关节驱动,本专项不重复这些底层能力。

View File

@@ -0,0 +1,103 @@
# 子项目功能内容
## 需求与边界
用户指定两条机械链:底座 → X → Y → Z → 主轴箱;底座 → A → C。BC 将 A 替换为 B。线性轴移动刀具侧,转台固定在底座的另一分支。提供原创 AC 和 BC 标准型、AC 和 BC 桁架型四个完整 GLB,均包含几何、材质、节点和 URDF,不依赖外部模型文件。
预览区提供 GLB 导入、AC/BC 示例加载及下载,显示识别的机型、层级、摇篮中心和 RTCP 参数。关机且空闲时应用;验证完成才重载配置;保留程序并重新解析、失效原回零/不兼容恢复记录。普通 GLB 缺少结构描述时不能猜测机床参数。
## URDF 数据契约 v1
GLB 默认场景 `extras.linuxcncMachine = { schema: "linuxcnc.machine/1", urdf: "<robot ...>...</robot>" }`,Three.js 加载后位于 `scene.userData.linuxcncMachine`。XML 使用标准 URDF link/joint/origin/axis/limit,增加命名空间 `xmlns:cnc="urn:linuxcnc:web:machine:1"` 的 `cnc:machine` 和 `cnc:axis`,标准 URDF 与应用绑定分开。
- SI:origin.xyz 米,rpy/关节角弧度;机床坐标右手 Z 向上。GLB 最外层 `urdf_frame` 绕 X -π/2,将 Z-up 转到 glTF Y-up;不得将毫米直接作为 glTF 米。
- 每个 link 对应唯一 GLB 节点同名,节点局部静止位姿必须与父 joint.origin 相同,视觉网格放在 link 的子节点,不能把轴心烘焙进顶点后伪造节点层级。
- `cnc:machine` 显式绑定 base/tool/work 三个 link;每个运动 joint 的 `cnc:axis coordinate="X|Y|Z|A|B|C"` 绑定 LinuxCNC 坐标。不相信机型字符串:根据拓扑、joint.type 和 axis 推断 AC/BC。
- v1 接受正交 XYZ 刀具链、正向 X(A) 或 Y(B) 倾转轴以及其子 Z(C) 轴;局部 rpy=0。任意斜轴、头头/头台结构、mimic 或额外运动轴明确拒绝,后续扩展需新增求解器。
- 限位、速度和 effort 必须有限且合法;URDF limit 用作导入运动范围校验,运行加速度、回零、伺服周期仍由对应 INI 提供,结构模型不能推断这些参数。
- 摇篮 joint.origin 为 T,C joint.origin 为 U;零位 C 原点 P=T+U。映射 `rot_point=P*1000`,`offset=-U*1000`。AC 要求 U.x=0;BC 要求 U.y=0。work 固定 joint.origin=-P,保证零角下程序坐标原点与机床原点相同。
- 主轴箱零基准位于线性链原点;刀长来自 LinuxCNC 工具状态,不从外观网格猜测。遵循 trtfuncs.c 的 master-tool 约定处理工具长度与程序路径参考。
## 验收
两文件可独立导入;AC/BC 自动识别;结构与 GLB 节点一致;非零中心/偏置进入 WASM;多姿态与非零刀长时刀尖和工件程序点吻合;错误文件不更改已生效配置;浏览器导入、切换、门控、渲染及相关回归通过。
## 字段示例与制模约定
```json
{
"extras": {
"linuxcncMachine": {
"schema": "linuxcnc.machine/1",
"urdf": "<?xml version=\"1.0\"?><robot ...>...</robot>"
}
}
}
```
```xml
<robot name="demo_ac_xyz_head" xmlns:cnc="urn:linuxcnc:web:machine:1">
<cnc:machine profile="trt-xyz-head/1"
base="base" tool="spindle_head" work="work_frame"/>
<!-- 标准 link 定义省略;完整可用 XML 见交付的 .urdf -->
<joint name="tilt_joint" type="revolute">
<parent link="base"/><child link="tilt_table"/>
<origin xyz="0.024 0.006 -0.037" rpy="0 0 0"/>
<axis xyz="1 0 0"/><cnc:axis coordinate="A"/>
<limit lower="-1.7453292519943295" upper="0.8726646259971648"
velocity="0.5235987755982988" effort="1000"/>
</joint>
<joint name="c_joint" type="revolute">
<parent link="tilt_table"/><child link="c_table"/>
<origin xyz="0 -0.018 0.045" rpy="0 0 0"/>
<axis xyz="0 0 1"/><cnc:axis coordinate="C"/>
<limit lower="-628.3185307179587" upper="628.3185307179587"
velocity="0.5235987755982988" effort="1000"/>
</joint>
</robot>
```
|数据|AC 示例(mm)|BC 示例(mm)|提取方法|
|---|---|---|---|
|倾转轴中心 T|24, 6, -37|4, 14, -28|A/B joint.origin|
|C 相对倾转轴 U|0, -18, 45|-22, 0, 40|C joint.origin|
|原生 rot-point P|24, -12, 8|-18, 14, 12|T + U|
|原生 offset D|0, 18, -45|22, 0, -40|-U|
```mermaid
flowchart TD
root[urdf_frame: Z-up → glTF Y-up] --> base[base 底座]
base --> x[x_slide / X]
x --> y[y_slide / Y]
y --> z[z_slide / Z]
z --> tool[spindle_head 主轴箱/刀具基准]
base --> tilt[tilt_table / A 或 B]
tilt --> c[c_table / C]
c --> work[work_frame 程序参考]
```
八个 link 名可以自定义,但必须唯一并通过 URDF 引用;link 节点直接父子关系保持上述两条链,网格作为 link 的子节点。不依赖网格的名称或数量。关节静止变换可以写 glTF TRS 或等价 matrix,禁止额外缩放/旋转而不反映到结构数据。外观尺寸、颜色不进入 RTCP 参数。
完整示例:[AC URDF](../../web/react/public/machines/demo-ac-xyz-head.urdf)、[BC URDF](../../web/react/public/machines/demo-bc-xyz-head.urdf)。GLB 是唯一必需输入;旁边的 XML 和 manifest 只用于阅读与核验。
## 当前实现边界
导入资产保存在当前页面内存;刷新后须重新导入。不会向原 INI 或宿主磁盘自动写入,仍可通过现有“保存 INI”导出。修改/重新读取同机型 INI 时保留导入 GLB,同步更新有效 URDF 的轴心、偏置和工件参考系;手工切换机型才回到内置模型。跨 AC/BC 保留原程序,若原程序无法在新机型解析,明确提示“机床已应用,但程序解析失败”。
GLB 不提供完整工业机床控制配置、不做碰撞检测、质量/动力学仿真或任意 URDF 求解。示例 effort 为 URDF 结构字段,本仿真不据此宣称力矩控制。URDF 角度行程以匹配已有 LinuxCNC 示例配置为目的,不代表实际摇篮无碰撞范围。
2026-09-18 界面更新:导入/示例/结构信息和几何参数均在按钮打开的可拖动对话框中,预览顶部只保留“导入机床模型”“机床参数”两个入口,详见 D09 / GLB-UI01 / E07。
## 参数化桁架型(2026-09-18 新增)
|示例|URDF profile|刀具侧|工作台侧|结构节点|
|---|---|---|---|---|
|AC / BC 示例|trt-xyz-head/1|底座→X→Y→Z→主轴箱|底座→A或B→C|8 link / 7 joint|
|AC / BC 示例桁架型|trt-xyz-gantry/1|底座→X→Y→Z|底座→A或B→C|7 link / 6 joint|
两类均为五个运动轴。桁架型的 `cnc:machine tool="z_slide"` 直接绑定 Z;另有固定 work_frame 挂 C,作为程序参考坐标,并非第六运动轴。四柱/纵向轨道固定在底座,移动横梁属于 X,横梁滑座属于 Y,滑枕及主轴网格属于 Z。
参数修改继续使用旋转中心与轴间偏置入口;实际导入模型保留,当前有效 URDF 和 WASM 同步。桁架与标准型共用相同的 AC/BC 原生参数含义,SI 单位、根坐标转换、刀长和几何编辑规则不变。示例外观尺寸在生成器中定义,不由编辑旋转中心自动重建 CAD 网格。
交付:[AC 桁架 GLB](../../web/react/public/machines/demo-ac-gantry.glb)、[AC 桁架 URDF](../../web/react/public/machines/demo-ac-gantry.urdf)、[BC 桁架 GLB](../../web/react/public/machines/demo-bc-gantry.glb)、[BC 桁架 URDF](../../web/react/public/machines/demo-bc-gantry.urdf)。

View File

@@ -0,0 +1,16 @@
# 子项目程序开发详细步骤
1. GLB-01:记录规范、网络资源与方案;明确节点关系、单位和原生参数映射。
2. GLB-02:实现 GLB 容器预检与 URDF 严格解析、拓扑/绑定/位姿校验;生成独立结构描述。
3. GLB-03:可复现生成 AC/BC 模型、内嵌 URDF、单独导出可阅读 XML 和资源清单;节点名与 XML 一致。
4. GLB-04:预览区导入及示例;先完成验证再重载匹配 INI,写入解析参数,Worker 仍二次解析 INI;显示成功或失败与参数来源。同机型配置改动后保留 GLB,更新有效 URDF 和运行参数;显式更换机型才卸载。
5. GLB-05:URDF link 按真实 WASM 关节做刚体位姿投影,路径附着 C 轴,刀长取运行状态;不在 JS 重写逆解。
6. GLB-06:解析拒绝用例、非零参数/刀长与 WASM 几何交叉验证、浏览器导入/门控/截图、类型检查及构建;整理 SHA 和证据、任务状态、接续入口。
原有本地改动不加入本专项。只运行相关测试,不重跑全仓验收、不修改上游或历史 release gate。
7. GLB-UI01(后续需求):共享可拖动对话框、预览布局和快捷键隔离,适配导入/参数原流程;验证鼠标/触摸、视口边界、焦点和画布尺寸,证据独立保存在 dialogs 子目录。
8. GLB-GEO01:几何参数写入有效 URDF,源 GLB/共享网格保留;校验应用、INI 重读/导入、重复编辑、失败和机型切换边界,以及改参数后的 WASM/模型和真实 RTCP Jog。
9. GLB-GAN01:独立桁架 profile、参数化生成两模型、四例注册入口;验证正确分支运动、导入/下载/几何编辑、真实 WASM/五轴程序及原 profile 兼容,证据 gantry 子目录。

View File

@@ -0,0 +1,103 @@
# 推进台账
## R09 / 2026-09-18 / 初学者工件坐标与 G 代码完整讲义
- 用户要求在RTCP课件基础上系统扩充工件坐标:坐标含义、原点和方向确定、G代码逐值解析与运动,整个讲义面向初学者。
- 新增 `docs/teaching/rtcp-beginners/`,72页A4完整教材,约2.6万正文字符;保留原31页投影概要。新书以坐标尺子入门,区分M/W/J/K/T,再讲工件原点测量、初始方向、G54配准和动态RTCP,最后进入完整程序与实验/答案。
- 核心细化:物理固连工件架与G54偏置表不同;本课G54是零位配准输入,动态方向与原点由运动学继续变换。解释G10 L2/L20、G90/G91、单位、F与其他字的上下文,明确普通坐标旋转和完整刀补不等于自动RTCP。
- 新增六个生成/验证脚本:`generate_rtcp_beginner_data.mjs`、`generate_rtcp_beginner_figures.py`、`generate_rtcp_beginner_html.py`、`subset_rtcp_beginner_fonts.py`、`render_rtcp_beginner_pdf.mjs`、`verify_rtcp_beginner_pdf.py`。
- 数值实测:o=(40,20,10)、BC、P=D=L=0。11个主段、11个额外单位/G54-G55/L20段核对;N10–N90加M2通过实际解释器/TP/WASM执行完成,53个采样,终点与逐行结果一致。M429/M428另按保持物理关节接口核对。
- 图像:9张新增原创坐标图,复用11张旧原创图;72页逐页边界/图片/标题检查和Poppler独立渲染检查。字体同形部首导致复制字符不符的问题,通过按实际字符制作Noto SC子集解决;保留字体许可,严格检查所有72页标题可正确提取。
- 记录能力边界:本项目解释器是功能切片,完整G43/H刀表、G52/G92、任意方向和所有进给模式不在本次全面验收范围;以官方语义讲解时明确区分,未把“解析接受”当成完整实现。
- 验证见E13,文件含目录/书签、HTML源稿、测试数据、教学NGC与复现步骤。未修改运行功能,原本地改动、旧PDF和历史证据保留;未提交/推送。
- 下一步:教材已完整交付,按后续教学内容修订需求推进。
## R08 / 2026-09-18 / 五轴与 RTCP 教学 PDF
- 用户要求完善“非RTCP各轴独立”和“RTCP坐标随转台变换、刀尖跟随”的理解,提供图文教学课件。
- 新增 `docs/teaching/rtcp-five-axis/`:31页16:9中文PDF、可编辑HTML、9张原创原理图、2张无界面控件的桁架模型图、数值报告、目录与逐页验证。
- 明确范围:XYZ加AC或BC;独立驱动不等于不能协调插补;程序坐标须经过单位/增量/零点/刀补;RTCP不仅改变方向,还处理中心/偏置/刀长;模式切换应固定物理关节。加入非RTCP后置计算、TCP/倾斜平面差异、限位与版本化M码说明。
- 生成脚本:`generate_rtcp_teaching_data.mjs`、`generate_rtcp_teaching_figures.py`、`capture_rtcp_teaching_models.mjs`、`generate_rtcp_teaching_html.py`、`render_rtcp_teaching_pdf.mjs`、`verify_rtcp_teaching_pdf.py`。
- 验证 E12:真实WASM十二个姿态正逆解、方向增量/切换算例;31页DOM边界和图片加载检查;Poppler独立渲染所有PDF页并目视检查;PyPDF核验31页、16:9、中文文本、字体自包含、39个书签。
- 中间排版修正:两页接近/越过页脚,调整公式和图形间距后严格边界检查通过;字体检查增加对Chrome嵌入Type3字形程序的正确识别,pdffonts也确认emb=yes。没有改应用功能或覆盖前轮证据。
- 下一步:课件可直接教学,按后续内容修订需求更新。原有本地改动保留,本轮未提交/推送。
## R07 / 2026-09-18 / Jog 限位与序列恢复、阴影警告
- 用户截图:XYZBC B=50.2275°,Connection: ERROR / event_sequence_gap。配置 AXIS_B 范围大,但 JOINT_3 上限=50°;连续 Jog 只以坐标限位作为目标,越过关节限位后原生 FK 返回 -702。首次 Worker 复现得到 `SIM_STEP: wasm_xyzac_forward_-702`。
- 第二层根因:SIM_STEP 执行前把请求的未来 tick 写入事件日志,实际在较早 tick 失败;下一命令发生 tick 回退,未写事件而协议已消费序号,再下一命令出现 sequence_gap。
- `wasm-linuxcnc-tp.mjs`:对于能直接映射关节的坐标,Jog 临时采用 AXIS/JOINT 限位交集,原生 TP 计算目标和减速,随后恢复正常坐标限位。RTCP 耦合的 XYZ 关节由真实 WASM IK/FK 在每个伺服样本检查;越界则取消剩余轨迹并回到上一个有效样本,发布限位停止而不是继续越界。
- `sim-session.mjs`:SIM_STEP 完成/失败后写入实际 tick;成功时仍在 checkpoint 前完成事件记录。调度异常时停止运动,并同步协议/任务时钟。`sim-scheduler.mjs` 中异常保留已尝试 tick,同步 native scheduler,未执行的未来周期不再占用时钟。
- UI 将限位拒绝标为 blocked,与 Worker 连接故障区分;Jog 采样出错显示具体原因。到限位后 JOG_STOP、反向 Jog、SNAPSHOT_REQUEST、checkpoint/恢复均可继续。
- 用户补充控制台截图仅为 PCFSoftShadowMap 弃用提示,与事件故障无关;XyzacMachineView 改为 PCFShadowMap,Chrome 再测 warnings=[]。
- 验证 E11:两机型直接旋转轴50°限位/反向退出、RTCP引发Y接近100mm限位/反向退出、失败后序号及原生事件游标一致、部分tick、无效cycles、checkpoint恢复通过。真实浏览器两机型反复Jog、松开停止、限位后再次运动/画面非空通过;120个精确恢复续跑样本、五轴程序、单步、基础session/scheduler/replay及生产构建通过。
- 旧 `test_xyzac_manual_control.mjs` 在回零尚未完成时期待 homed_mask=1,旧 `test_xyzac_button_constraints.mjs` 期待关机优先而得到 not_all_homed;使用只读 HEAD 模块加载器复核也在相同断言失败,保留日志,未修改门控或放宽断言。
- 证据归入 coverage/glb-machine/jog-limits/,不改此前证据、上游、本地trace/图片/临时文件。无 C/WASM 变更,无需重建原生核心。本轮及前轮变更仍未提交/推送。
- 下一步:专项收口;已进入旧序号错误的浏览器会话需刷新,重新导入模型并回零,不能伪造缺失事件来修补旧会话。
## R06 / 2026-09-18 / AC、BC 参数化桁架示例
- 用户要求保留 AC/BC 示例,新增 AC/BC 桁架型,结构为底座→X→Y→Z、底座→A/B→C。
- 原 AC/BC 导入示例已经采用双链,但存在 Z→主轴箱固定 link。本轮桁架型独立 profile `trt-xyz-gantry/1`,七 link、六 joint、五运动轴,tool 直接绑定 Z。原 profile `trt-xyz-head/1` 与原模型保持。
- `generate_glb_machines.mjs` 新增四柱桁架、固定纵向 X 轨、属于 X 的整根桁架横梁、属于 Y 的横梁滑座、属于 Z 的滑枕/主轴外形。转台仍独立挂到底座;生成两个新单文件 GLB 及 XML。
- `machine-urdf.ts` 只对新 profile 放行对应 link/joint 数量和 Z 工具绑定;保留树/单位/轴向/运动学校验。MachineImportPanel 从 manifest 读取四个例子的按钮名和路径,结构文字根据 profile 显示。
- 新增 `test_gantry_machine_browser.mjs`;原参数编辑测试和五轴程序测试增加可选 GLB_MACHINE_VARIANT/GLB_EVIDENCE_DIR,复用完整原断言。标准校验脚本支持独立证据目录。
- 验证 E10:四个入口和下载、标准 profile 兼容;新模型各分支父子关系、X/Y/Z 分别带动对应外形、底座/转台独立;三类错误新 profile 拒绝;参数应用/INI 保存导入重读保持模型、各18个WASM姿态/刀长、实际 RTCP Jog;每机型41个五轴同时变化采样间隔、42个轨迹投影。四个 GLB 均0错误/警告;重复生成和生产资产一致,原AC/BC字节SHA未变。桌面/手机与类型检查/构建通过。
- 原有本地改动及此前证据保留;本轮独立 `coverage/glb-machine/gantry/`。无 native C/WASM 变更、无外部模型资产。
- 下一步:任务已验收,无待办;按新目标继续。所有功能改动仍未提交/推送。
## R05 / 2026-09-18 / 几何编辑保留导入机床
- 用户发现导入 GLB 后“应用参数”会切回内置机床。根因是 App.applyGeometry 在非导入调用时执行 setImportedMachine(null),属于 R02 为防止参数脱节制定的旧策略。用户新需求覆盖此策略,新增 GLB-GEO01。
- 修复前 `scripts/test_imported_geometry_browser.mjs` 明确复现:应用后 GLB hash 从源文件 SHA 变成空串;before.log 保留。
- `imported-machine.ts` 新增 updateImportedMachineGeometry:验证机型、运行限位/速度及 INI 参数,按节点绑定更新当前有效 URDF 的 A/B、C、work origin,并重新解析校验;支持用户自定义 joint 名称。源 scene、网格、材质、文件名与 SHA 不变。
- buildImportedMachine 的运行克隆使用有效 URDF 设置所有 link 的零位,包括固定 work frame;运动继续采用真实 WASM 关节。App 在 Worker 成功加载配置后提交候选结构;参数预检失败保持旧模型,程序重解析失败则明确报告已应用配置。
- App 资源清理依赖 source scene 是否更换,避免几何对象变更时误释放共享网格。导入详情显示当前参数,并说明源 GLB 未改写。显式机型选择仍卸载旧 GLB。
- 同机型“应用参数”“重新读取 INI”“导入 INI 后应用”均保留模型;重复相同参数不累加位移。对应更新原 GLB 浏览器脚本的 INI 重载预期,保留所有其他断言。
- 验证 E09:AC/BC 的真实 UI 原路径复现、保存/导入/重读、非法输入保留状态、开机门控、机型切换,以及各 18 个不同角度/刀长的 WASM 交叉验证和改参数后实际 RTCP Jog 均通过。原 GLB 全专项、内置参数编辑回归及类型检查/构建通过。
- 测试修正:details 展开状态在 AC→BC 切换时会保留,最初无条件点击反而折叠导致文本断言失败;改为仅在折叠时点击,未放宽内容断言。
- 证据独立在 coverage/glb-machine/geometry-edit/;旧报告保持,不修改源 GLB 或上游/原有本地改动。
- 下一步:本专项已验收,按新需求推进。当前所有本地功能变更仍未提交/推送。
## R04 / 2026-09-18 / 空闲 M429/M428 切换刀尖跳动
- 用户截图中 XYZ 坐标保持不变,而 J0/J1/J2 随按钮切换改变,模型真实反映了错误关节值,并非 GLB 层级或显示坐标 bug。新增 TRT-SW01。
- 复现:新增 `web/worker/test_trt_switch_stationary.mjs`,修复前在 AC、A=4.8675° / C=179.88° 下 M428 将 J0 从 0 改为 47.97481463927447 mm,强断言失败;保留 before.log。
- 根因:`SimSession.switchXyzacKinematics()` 使用保持旧 pose 并逆解的 select()。改为已有 WASM selectPhysical(),输入当前规划器关节,计算新模式下坐标。随后同步 TP 和解释器。
- `wasm-linuxcnc-tp.mjs` 的 setPosition 增加可选模式参数,坐标和模式一起更新后才 read,避免中间态把旧坐标交给新模式逆解,尤其接近行程边界时错误越限。默认调用行为保持。
- `test_xyzac_trt_case.mjs` 保留原坐标同步断言并补充关节不变断言;新增实际浏览器按钮/MDI/后续 Jog 专项。
- 验证 E08:两机型 64 次 Worker 切换、22 次浏览器切换;截图姿态、非零中心/偏置、接近边界、重复模式、M430、空闲 tick、增量/坐标偏置、运行中/非法模式拒绝;实际渲染刀尖不动。原 RTCP Jog、TRT case、单步流程、运行后续和生产构建通过。
- 浏览器测试先等待 MDI 到位,再切回 Manual 刷新控件状态后选择切换按钮;第一次直接等待按钮门控刷新超时,未作为通过证据。
- 证据独立保存 `coverage/glb-machine/switching/`,未覆盖前轮验收;未修改 native C/WASM 或上游 LinuxCNC。
- 下一步:任务已验收,刷新页面载入新 Worker 后重新导入 GLB 即可体验;本轮及前轮改动均未提交/推送,原有本地保留项不变。
## R03 / 2026-09-18 / 预览放大与可拖动设置对话框
- 用户截图显示导入说明和参数表占据预览高度,机床仅剩很小显示区域;新增 GLB-UI01。
- `App.tsx` 把两个入口合为机床预览顶部紧凑工具条;`MachineImportPanel.tsx` 与 `TrtGeometryPanel.tsx` 的表单移入共享 `DraggableDialog.tsx`。模型画布占据其余高度,不改变左右预览比例。
- 原生 dialog 提供模态隔离;标题栏支持鼠标和触摸拖动、视口边界限制、窗口缩小后回到屏幕内;Esc 关闭、Tab/Shift-Tab 循环、焦点返回。关闭保留参数草稿;应用过程中保留结果显示。开机可打开查看,实际导入/参数编辑仍受原门控限制。
- App 快捷键在对话框打开时跳过机床操作,F1 急停保留,防止 Esc 误触 PROGRAM_ABORT 或 F2 误开机。
- 原有 GLB/参数浏览器脚本只适配打开/关闭对话框步骤;新增 `scripts/test_machine_dialog_browser.mjs`。证据独立写入 `coverage/glb-machine/dialogs/`,保留 E02–E06 原报告。
- 验证 E07:2048×859、1440×900、390×844 下机床画布高度分别 351.5、392.5、380 px;占机床面板高度超过 85%;打开对话框画布尺寸不变。拖动、极端边界、触摸、缩屏、焦点、快捷键、草稿、运行门控通过;原参数保存/导入、两机型 GLB 导入和 RTCP Jog 回归通过;类型检查/生产构建通过。
- 中间问题:浏览器原生 Tab 可转到浏览器工具栏,专项断言捕获;补充弹窗内 Tab/Shift-Tab 循环后通过,没有放宽断言。
- 下一步:当前专项所有任务已验收,按新需求推进。所有改动仍未提交/推送,原有本地改动继续保留。
## R02 / 2026-09-18 / 实现与验收收口
- 完成解析器 `web/react/src/machine-urdf.ts`:XML 命名空间、两分支拓扑、正交轴、单位/限位、GLB 自包含/节点绑定/位姿、版本和异常输入校验;推导 AC/BC、rot-point 和 offset。
- 完成模型 `scripts/generate_glb_machines.mjs` 及 `web/react/public/machines/` 的 AC/BC GLB、XML、manifest、许可;底座-XYZ-主轴箱、底座-A/B-C,与原移动工作台模型区分。
- 完成 `imported-machine.ts`、`MachineImportPanel.tsx` 和 App/Viewer/styles 接入:文件导入、示例与下载,应用前验证,参数通过 INI/Worker 进入 WASM;真实关节驱动、刀长与程序路径参考、旧资产卸载和资源释放。
- 新增 `test_glb_machine_browser.mjs`、`test_glb_machine_motion.mjs`、`validate_glb_machines.mjs`;原两个浏览器测试只增加可选证据输出目录,不删除断言。
- 验证 E02–E06:42 项拒绝用例、36 个姿态/刀长样本、8 次导入模型 RTCP Jog、两机型各 41 个五轴同时变化的执行间隔、84 个程序执行投影采样;两 GLB 标准校验 0 错误/警告;旧参数编辑与 Jog 回归、桌面/手机、类型检查及构建通过。
- 中间问题:生成器默认导出 matrix,首次被 TRS 校验拒绝;改为导出 TRS,同时解析器接受与 URDF 等价的 matrix。运动程序抽样过疏导致样本数断言失败,改为全量采样,未放宽断言。测试损坏文件时模型保持不变,后续重新加载成功示例后截图。重复生成 public 资产触发 Vite 自动刷新,曾打断一次进行中的浏览器测试;停止资产写入后独立重跑。
- 证据统一在 `coverage/glb-machine/`;旧 `coverage/trt-parametric/` 未改。原有 trace、子模块、临时文件和图片完整保留。
- 边界:本轮 v1 仅支持已声明的 AC/BC TRT 正交双链;运行 INI 仍负责回零/周期等;GLB 当前页面内存保存,刷新重新导入;不宣称任意机床 URDF、碰撞检测或制造商尺寸标定。
- 下一步:本专项矩阵无待办,按新目标扩展或按用户要求保存;未提交/推送本轮新功能。
## R01 / 2026-09-18 / 需求与契约
- 按用户最新指令确定两分支结构,建立本目录七份文档。
- 已读取原专项索引/矩阵、现有预览、参数写入和 WASM 运动学链路;保留原有工作区改动。
- 已查阅 glTF、URDF、Three.js 和 LinuxCNC 官方资料,检索网络模型资源;尚未找到可确认满足本契约的可再分发完整 GLB。
- 验证:此阶段仅源码和规范核对,未运行新功能测试。
- 下一步:GLB-02 严格结构解析,随后生成两种模型并接入 UI。

Some files were not shown because too many files have changed in this diff Show More