Implement WebAssembly runtime and kinematics coverage

This commit is contained in:
2026-08-21 06:04:48 +08:00
parent 5dd614c335
commit 554b72dae8
112 changed files with 47148 additions and 807 deletions

View File

@@ -0,0 +1,361 @@
{
"configuration_candidate_count": 4,
"configuration_candidates": {
"linear_axis": {
"hal_files": [
"sim_ldelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "lineardeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_ldelta.hal"
],
"path": "linuxcnc/configs/sim/axis/ldelta.ini",
"sha256": "1567138c3d54b4d9712b5031f6a0b060edadd8d1442d1eff8d93c2beefbb5e0c"
},
"linear_demo": {
"hal_files": [
"sim_ldelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "lineardeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_ldelta.hal"
],
"path": "linuxcnc/configs/sim/axis/ldelta_demo.ini",
"sha256": "ab0645308abe903bf66f36a328b43303aa0e8ad2d19e69a45e2703d665956439"
},
"linear_tklinuxcnc": {
"hal_files": [
"sim_ldelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "lineardeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/tklinuxcnc/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/tklinuxcnc/sim_ldelta.hal"
],
"path": "linuxcnc/configs/sim/tklinuxcnc/ldelta.ini",
"sha256": "0e23dee0f4df839c028f5bfba95c5941f2f8623ce502d6fdfc90dfdef63d8967"
},
"rotary_axis": {
"hal_files": [
"sim_rdelta.hal",
"axis_manualtoolchange.hal"
],
"kinematics": "rotarydeltakins",
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_rdelta.hal"
],
"path": "linuxcnc/configs/sim/axis/rdelta.ini",
"sha256": "53510733b8fd0230547f48f76ebd35dc5c98f58fe1dba1246777e227ef82c508"
}
},
"families": {
"linear_delta": {
"configuration_candidates": [
"linear_axis",
"linear_demo",
"linear_tklinuxcnc"
],
"forward": "three carriage spheres -> quadratic platform root",
"inverse": "three carriage heights from sphere intersections",
"module": "lineardeltakins"
},
"rotary_delta": {
"configuration_candidates": [
"rotary_axis"
],
"forward": "three rotary knee constraints -> quadratic platform root",
"inverse": "three rotated leg intersections",
"module": "rotarydeltakins"
}
},
"geometry": {
"linear": {
"radius": 130.25,
"rod_length": 269.0,
"tower_layout": "120-degree equilateral",
"units": "mm"
},
"rotary": {
"foot_radius": 6.0,
"joint_units": "degrees",
"platform_radius": 10.0,
"shin_length": 14.0,
"thigh_length": 10.0
}
},
"implementation_status": "verified",
"mapping": {
"coordinates": "XYZ",
"extra_joint_policy": "prefix only; extra joints rejected by count",
"kinematics_joint_count": 3,
"optional_axes": "A/B/C/U/V/W pass through"
},
"native_wasm": {
"native_command": "build-native/sim_kinematics_test",
"status": "passed",
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
},
"oracle": {
"blocked_samples": [
"linear nominal/root",
"linear alternate root",
"linear no-solution",
"linear joint-limit",
"rotary nominal/root",
"rotary alternate root",
"rotary z=0 singular"
],
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
"status": "blocked"
},
"report_sha256": "a585edd0895eefb4add8753927a33b60cae806e814623830df39f396787cd2e3",
"resource_gaps": {
"missing_hal_files": [
"linuxcnc/configs/sim/axis/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/axis/sim_ldelta.hal",
"linuxcnc/configs/sim/axis/sim_rdelta.hal",
"linuxcnc/configs/sim/tklinuxcnc/axis_manualtoolchange.hal",
"linuxcnc/configs/sim/tklinuxcnc/sim_ldelta.hal"
],
"policy": "retained as missing inputs; no configuration smoke is promoted to numeric golden"
},
"samples": {
"byte_identical_json": true,
"native": {
"delta_edges": {
"lineardelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
535.363415806
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702
},
"rotarydelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
0.320396615
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"singular": -704
},
"tripod": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702,
"singular": -704
}
},
"lineardelta": {
"inverse": [
300.0,
300.0,
300.0
],
"pose": [
0.0,
0.0,
64.636584194
],
"state_hash": 10022623683197000937
},
"rotarydelta": {
"inverse": [
10.0,
10.0,
10.0
],
"pose": [
0.0,
0.0,
-3.793360169
],
"state_hash": 14346691006498560820
}
},
"state_hash_identical": true,
"wasm": {
"delta_edges": {
"lineardelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
535.363415806
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702
},
"rotarydelta": {
"alternate_branch": 1,
"alternate_pose": [
-0.0,
-0.0,
0.320396615
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"singular": -704
},
"tripod": {
"alternate_branch": 1,
"alternate_pose": [
2.0,
3.0,
-4.0
],
"alternate_status": 0,
"branch": 0,
"geometry_error": -703,
"iterations": 0,
"limit_error": -702,
"no_solution": -702,
"singular": -704
}
},
"lineardelta": {
"inverse": [
300.0,
300.0,
300.0
],
"pose": [
0.0,
0.0,
64.636584194
],
"state_hash": 10022623683197000937
},
"rotarydelta": {
"inverse": [
10.0,
10.0,
10.0
],
"pose": [
0.0,
0.0,
-3.793360169
],
"state_hash": 14346691006498560820
}
}
},
"schema": "delta-kinematics-report.v1",
"solver": {
"alternate_root_flag": "SIM_KIN_DELTA_ALTERNATE_ROOT bit 0",
"convergence_tolerance": 0.0,
"default_root": 0,
"fixed_iteration_limit": 0,
"forward": "analytic quadratic intersection",
"inverse": "three independent leg intersections"
},
"source_records": {
"header": {
"path": "wasm-core/include/sim_kinematics.h",
"sha256": "43e588f7c45c703970598e8e42ff5aae4b97a437eaff1d4cd6ad156bd204edc7"
},
"implementation": {
"path": "wasm-core/src/sim_kinematics.c",
"sha256": "f15842a1dbf0cb33f071ee1e70715a85a1f3dec44c4facc220edd924f6ca352c"
},
"linear_c": {
"path": "linuxcnc/src/emc/kinematics/lineardeltakins.c",
"sha256": "792caf5f3fb8bf06d97a4bb7262697ac22182d78d91fed19e7a9e537585aa748"
},
"linear_cc": {
"path": "linuxcnc/src/emc/kinematics/lineardeltakins.cc",
"sha256": "77634457a4dd3f5617f91a66651965c5b8326fc0d4dfc916d9cd63b89b0ec0f1"
},
"linear_common": {
"path": "linuxcnc/src/emc/kinematics/lineardeltakins-common.h",
"sha256": "7785bcd7d095b431169cdd0f753c177ece643ee825f7ff4b8cdb6f8cd4706df8"
},
"rotary_c": {
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins.c",
"sha256": "64c8aeb6998a481f3c26743093dd157d2d22dc6769b258e3e6012b5c1f784773"
},
"rotary_cc": {
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins.cc",
"sha256": "7e2fd63a2a7f5718d706faa21f903b36007226b065ad6d234631d2514f653618"
},
"rotary_common": {
"path": "linuxcnc/src/emc/kinematics/rotarydeltakins-common.h",
"sha256": "ba3e037fe2ad7eba29aa2b657492ac83f1979a38c9249fef52e598ba0d5c9136"
},
"test": {
"path": "wasm-core/tests/sim_kinematics_test.c",
"sha256": "00d9efc3c701ba2848535357f6027e6d9d4d19796a17be96e290ddc0babe2c5c"
}
},
"status": "partial",
"workspace_and_boundaries": {
"linear": {
"alternate_branch": 1,
"alternate_root_pose": [
-0.0,
-0.0,
535.363415806
],
"geometry_error": -703,
"iterations": 0,
"joint_limit_error": -702,
"no_solution_error": -702,
"nominal": [
0.0,
0.0,
64.636584194
],
"root_branch": 0
},
"rotary": {
"alternate_branch": 1,
"alternate_root_pose": [
-0.0,
-0.0,
0.320396615
],
"geometry_error": -703,
"iterations": 0,
"nominal": [
0.0,
0.0,
-3.793360169
],
"root_branch": 0,
"singular_error": -704
}
}
}