{ "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 } } }