299 lines
7.3 KiB
JSON
299 lines
7.3 KiB
JSON
{
|
|
"configuration_candidate": {
|
|
"coordinates": "XYZAB",
|
|
"hal_geometry": {
|
|
"base": [
|
|
-418.0,
|
|
500.0,
|
|
-140.0,
|
|
418.0,
|
|
500.0,
|
|
-140.0,
|
|
0.0,
|
|
500.0,
|
|
-310.0,
|
|
418.0,
|
|
500.0,
|
|
510.0,
|
|
-418.0,
|
|
500.0,
|
|
510.0
|
|
],
|
|
"effector_radius": [
|
|
80.3,
|
|
80.3,
|
|
80.3,
|
|
80.3,
|
|
80.3
|
|
],
|
|
"effector_z": [
|
|
87.0,
|
|
114.5,
|
|
140.5,
|
|
232.5,
|
|
258.5
|
|
]
|
|
},
|
|
"hal_pins": [
|
|
"last-iterations",
|
|
"max-iterations",
|
|
"limit-iterations",
|
|
"max-error",
|
|
"convergence-criterion",
|
|
"tool-offset"
|
|
],
|
|
"joints": 5,
|
|
"kinematics": "pentakins",
|
|
"path": "linuxcnc/configs/sim/axis/pentapod/pentapod.ini",
|
|
"provenance": "shipped LinuxCNC simulation",
|
|
"scan": true
|
|
},
|
|
"configuration_candidates": [
|
|
{
|
|
"coordinates": "XYZAB",
|
|
"id": "shipped-pentapod",
|
|
"joints": 5,
|
|
"kind": "real",
|
|
"path": "linuxcnc/configs/sim/axis/pentapod/pentapod.ini"
|
|
},
|
|
{
|
|
"coordinates": "XYZAB",
|
|
"id": "offset-seed-regression",
|
|
"initial_pose": [
|
|
0.0,
|
|
500.0,
|
|
300.0,
|
|
0.0,
|
|
0.0
|
|
],
|
|
"joints": 5,
|
|
"kind": "derived",
|
|
"path": "wasm-core/tests/sim_kinematics_test.c",
|
|
"purpose": "non-zero roll/pitch Newton convergence and native/WASM comparison",
|
|
"target_pose": [
|
|
0.0,
|
|
500.0,
|
|
300.0,
|
|
0.01,
|
|
-0.01
|
|
]
|
|
}
|
|
],
|
|
"geometry": {
|
|
"orientation": "roll/pitch only; yaw is constrained to zero in the forward result",
|
|
"struts": 5,
|
|
"tool_offset": "applied to both base and effector HAL z coordinates",
|
|
"units": "configuration units; XYZ linear and AB degrees"
|
|
},
|
|
"implementation_status": "verified",
|
|
"mapping": {
|
|
"coordinates": "XYZAB",
|
|
"extra_joint_policy": "rejected",
|
|
"joint_semantics": [
|
|
"strut-0",
|
|
"strut-1",
|
|
"strut-2",
|
|
"strut-3",
|
|
"strut-4"
|
|
],
|
|
"kinematics_joint_count": 5
|
|
},
|
|
"native_wasm": {
|
|
"native_command": "build-native/sim_kinematics_test",
|
|
"status": "passed",
|
|
"wasm_command": "node build-wasm/sim_kinematics_wasm_test.js"
|
|
},
|
|
"oracle": {
|
|
"blocked_samples": [
|
|
"nominal five-strut pose",
|
|
"negative-z seed",
|
|
"nonpositive strut",
|
|
"iteration limit",
|
|
"maximum error",
|
|
"singular Jacobian",
|
|
"joint limit"
|
|
],
|
|
"reason": "linuxcnc/unit_tests/kinematics is absent from the locked source",
|
|
"status": "blocked"
|
|
},
|
|
"report_sha256": "d8863549ead6486889c8473134f9e2ce1c2835024c9ea67494c4c7e0a13a6b75",
|
|
"samples": {
|
|
"byte_identical_json": true,
|
|
"native": {
|
|
"boundaries": {
|
|
"alternate_branch": 1,
|
|
"alternate_iterations": 1,
|
|
"alternate_pose": [
|
|
0.0,
|
|
0.0,
|
|
0.0
|
|
],
|
|
"alternate_status": -702,
|
|
"branch": 0,
|
|
"iteration_limit": -702,
|
|
"iteration_limit_iterations": 1,
|
|
"iterations": 12,
|
|
"limit_error": -702,
|
|
"max_error": -702,
|
|
"max_error_iterations": 1,
|
|
"nonpositive": -702,
|
|
"nonpositive_iterations": 0,
|
|
"residual": 1e-09,
|
|
"singular": -704,
|
|
"singular_iterations": 0
|
|
},
|
|
"pentapod": {
|
|
"inverse": [
|
|
625.895566556,
|
|
649.261562588,
|
|
754.767615986,
|
|
338.490149644,
|
|
341.118326622
|
|
],
|
|
"iterations": 12,
|
|
"pose": [
|
|
0.0,
|
|
500.0,
|
|
300.0,
|
|
0.01,
|
|
-0.01
|
|
],
|
|
"residual": 1e-09,
|
|
"state_hash": 13978136356142463125
|
|
}
|
|
},
|
|
"state_hash_identical": true,
|
|
"wasm": {
|
|
"boundaries": {
|
|
"alternate_branch": 1,
|
|
"alternate_iterations": 1,
|
|
"alternate_pose": [
|
|
0.0,
|
|
0.0,
|
|
0.0
|
|
],
|
|
"alternate_status": -702,
|
|
"branch": 0,
|
|
"iteration_limit": -702,
|
|
"iteration_limit_iterations": 1,
|
|
"iterations": 12,
|
|
"limit_error": -702,
|
|
"max_error": -702,
|
|
"max_error_iterations": 1,
|
|
"nonpositive": -702,
|
|
"nonpositive_iterations": 0,
|
|
"residual": 1e-09,
|
|
"singular": -704,
|
|
"singular_iterations": 0
|
|
},
|
|
"pentapod": {
|
|
"inverse": [
|
|
625.895566556,
|
|
649.261562588,
|
|
754.767615986,
|
|
338.490149644,
|
|
341.118326622
|
|
],
|
|
"iterations": 12,
|
|
"pose": [
|
|
0.0,
|
|
500.0,
|
|
300.0,
|
|
0.01,
|
|
-0.01
|
|
],
|
|
"residual": 1e-09,
|
|
"state_hash": 13978136356142463125
|
|
}
|
|
}
|
|
},
|
|
"schema": "pentapod-kinematics-report.v1",
|
|
"solver": {
|
|
"alternate_seed_flag": "SIM_KIN_GENHEX_ALTERNATE_SEED bit 1; negative-z seed is explicitly bounded",
|
|
"default_convergence_tolerance": 1e-09,
|
|
"default_iteration_limit": 120,
|
|
"default_max_error": 1000.0,
|
|
"forward": "Newton-Raphson 5x5 numerical Jacobian",
|
|
"inverse": "closed-form radial/z strut lengths",
|
|
"seed": [
|
|
0.0,
|
|
500.0,
|
|
300.0,
|
|
0.0,
|
|
0.0
|
|
],
|
|
"seed_units": "XYZ in configuration units; A/B in radians internally"
|
|
},
|
|
"source_records": {
|
|
"config": {
|
|
"path": "linuxcnc/configs/sim/axis/pentapod/pentapod.ini",
|
|
"sha256": "0fb210122ab482087d3a95e5e7487baecb84c3260dca1769970f4c19b2ad0618"
|
|
},
|
|
"hal": {
|
|
"path": "linuxcnc/configs/sim/axis/pentapod/kinematics.hal",
|
|
"sha256": "cf56ea1c1fe2b49d1af6a771bd73ea43ecc7a37991717b68a1e017c101bc6ae2"
|
|
},
|
|
"header": {
|
|
"path": "linuxcnc/src/emc/kinematics/pentakins.h",
|
|
"sha256": "af8551454177bbcc85e4e17377e059573ab8c15dc022de2a4be9b70dead74e2d"
|
|
},
|
|
"implementation": {
|
|
"path": "wasm-core/src/sim_kinematics.c",
|
|
"sha256": "316fe74604180b6e9ae7f66369f084278f1b54b7c4545ec9efa870186adc9600"
|
|
},
|
|
"kinematics_header": {
|
|
"path": "wasm-core/include/sim_kinematics.h",
|
|
"sha256": "34b08db612056432e08705951032418bf6f6cd2c285bde5743515588fbe484ec"
|
|
},
|
|
"source": {
|
|
"path": "linuxcnc/src/emc/kinematics/pentakins.c",
|
|
"sha256": "1b385c2ab3a1bcb106d1d22a2dfe14519dba9c4a5df4cb31071a180845cda4c6"
|
|
},
|
|
"test": {
|
|
"path": "wasm-core/tests/sim_kinematics_test.c",
|
|
"sha256": "715882c28ec242be652357d330a4b56d60f8e93f2e821193133911576e400aac"
|
|
}
|
|
},
|
|
"status": "partial",
|
|
"workspace_and_boundaries": {
|
|
"alternate_seed": [
|
|
0.0,
|
|
0.0,
|
|
0.0
|
|
],
|
|
"alternate_seed_error": -702,
|
|
"alternate_seed_iterations": 1,
|
|
"iteration_limit_error": -702,
|
|
"iteration_limit_iterations": 1,
|
|
"iterations": 12,
|
|
"joint_limit_error": -702,
|
|
"max_error_boundary": -702,
|
|
"max_error_iterations": 1,
|
|
"nominal": {
|
|
"inverse": [
|
|
625.895566556,
|
|
649.261562588,
|
|
754.767615986,
|
|
338.490149644,
|
|
341.118326622
|
|
],
|
|
"iterations": 12,
|
|
"pose": [
|
|
0.0,
|
|
500.0,
|
|
300.0,
|
|
0.01,
|
|
-0.01
|
|
],
|
|
"residual": 1e-09,
|
|
"state_hash": 13978136356142463125
|
|
},
|
|
"nonpositive_joint_error": -702,
|
|
"nonpositive_joint_iterations": 0,
|
|
"posture_constraint": "C/yaw is not a configured joint and forward output is exactly zero",
|
|
"residual": 1e-09,
|
|
"singular_jacobian_error": -704,
|
|
"singular_jacobian_iterations": 0
|
|
}
|
|
}
|