关节契约扩为槽位制:以 LinuxCNC 联合号标识关节,轴字母降为槽位属性, 重复轴(bridge-mill 的两个 Y)、并联杆长(hexapod/pentapod)和被动槽位 (max5 第 6 关节)都能表达。v1 规则保持不变并合成 jointOrder,已保存 GLB 与既有测试不受影响。 13 个结构 GLB 由 scripts/generate_physical_case_glbs.mjs 统一重建, 可动关节均为按槽位命名的 Group 并写 userData.linuxcncJoint,共 71 个 关节,槽位数与运行目录的 joint_count 逐条一致。 新增 machine-visual-bindings.json 与纯函数模块,以 machine id 为键: 坐标字母不能作键,因为三个案例共用 XYZAB、三个共用 XYZABC。主界面切换 案例时自动装载对应模型,失败时保留内置模型并显式提示。 消除前端五关节截断:visual 适配器的 joints 改为数组并新增 jointsAuthoritative;allHomed 按 joint_count 判断;面板按 worker 断言的 machine id 查找机型。 管理器解锁:坐标与案例下拉以"存在完整视觉绑定"为启用条件,13 案例全部 可选;machine-urdf.ts 新增 generic-wasm/1 profile,AC/BC 严格校验路径 不变;新增 machine-kinematics-specs.json 保存逐关节限位,INI 未声明的 限位保持 null 而不编造。 修复三个真实缺陷:构建漏发 woodpecker/gmoccapy/qtdragon 配置目录( DEFECT-02 根因);案例切换沿用"装载需要已上电"的门控,导致关机状态下 第二次切换被静默拒绝;重复轴机型上 React 列表键冲突。 验收:13 案例逐个切换装载成功、槽位键与绑定定义逐一一致、浏览器错误 0; typecheck 与生产构建通过;视觉绑定、GLB 命名、关节契约、投影、store、 双画布、运动学规格漂移、11 案例 Worker 闭环、管理器浏览器回归全部通过。 证据在 coverage/glb-machine-manager/physical-drive/。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
527 lines
13 KiB
JSON
527 lines
13 KiB
JSON
{
|
||
"schema": "linuxcnc.five-axis-physical-structures/1",
|
||
"units": {
|
||
"length": "mm",
|
||
"angle": "deg",
|
||
"gltf_length": "m",
|
||
"gltf_angle": "rad"
|
||
},
|
||
"sourcePolicy": "real-reference values are not calibration values; design-reference models require explicit design_reference status",
|
||
"cases": [
|
||
{
|
||
"id": "xyzac-trt",
|
||
"family": "table-rotary-tilting",
|
||
"reference": "HERMLE C 42 U 类摆动转台",
|
||
"status": "design-plus-real-reference",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y",
|
||
"z",
|
||
"tool",
|
||
"a-tilt-frame",
|
||
"c-table",
|
||
"workholding",
|
||
"guard"
|
||
],
|
||
"jointTree": "base→x→y→z→tool; base→a→c→work",
|
||
"parameters": [
|
||
"rotaryPoint",
|
||
"tiltToRotaryOffset",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://www.hermle.de/en/machining-centres-automation/models/machining-centre-c-42-gen2/",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "xyzbc-trt",
|
||
"family": "table-rotary-tilting",
|
||
"reference": "Haas UMC-500/750 B/C 摆台",
|
||
"status": "real-reference",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y",
|
||
"z",
|
||
"tool",
|
||
"b-trunnion",
|
||
"c-table",
|
||
"workholding",
|
||
"guard"
|
||
],
|
||
"jointTree": "base→x→y→z→tool; base→b→c→work",
|
||
"parameters": [
|
||
"MRZP",
|
||
"bCIntersection",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://www.haascnc.com/service/online-manuals/umc-series/umc---geometry.html",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "xyzab-tdr",
|
||
"family": "table-dual-rotary",
|
||
"reference": "LinuxCNC xyzab_tdr 双转台;双转台五轴通用设计",
|
||
"status": "linuxcnc-reference-plus-design",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y",
|
||
"z",
|
||
"tool",
|
||
"a-outer-table",
|
||
"b-inner-table",
|
||
"workholding"
|
||
],
|
||
"jointTree": "base→x→y→z→tool; base→a→b→work",
|
||
"parameters": [
|
||
"xRotPoint",
|
||
"yRotPoint",
|
||
"zRotPoint",
|
||
"xOffset",
|
||
"zOffset",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://linuxcnc.org/docs/html/man/man9/xyzab_tdr_kins.9.html",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "bridge-mill-5axiskins",
|
||
"family": "bridge-mill",
|
||
"reference": "FIDIA BRIDGE / AWEA Mega 5P 固定龙门双摆头",
|
||
"status": "real-reference-plus-design",
|
||
"parts": [
|
||
"foundation",
|
||
"left-column",
|
||
"right-column",
|
||
"bridge",
|
||
"x-table",
|
||
"y-carriage",
|
||
"z-ram",
|
||
"b-head",
|
||
"c-head",
|
||
"y-left-drive",
|
||
"y-right-drive"
|
||
],
|
||
"jointTree": "base→x→y→z→b→c→tool; y-left/y-right duplicate gantry joints; w is a tool-direction coordinate",
|
||
"parameters": [
|
||
"jointCoordinateMap",
|
||
"duplicateAxisMap",
|
||
"toolDirectionAxis",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://www.fidia.it/en/products/bridge/",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "max5-maxkins",
|
||
"family": "table-and-head-rotary",
|
||
"reference": "LinuxCNC MAX5 桌面五轴:B 倾转头+C 水平转台",
|
||
"status": "linuxcnc-reference-plus-design",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y",
|
||
"z",
|
||
"b-head",
|
||
"tool",
|
||
"c-horizontal-table",
|
||
"workholding"
|
||
],
|
||
"jointTree": "base→x→y→z→b→tool; base→c→work",
|
||
"parameters": [
|
||
"pivotLength",
|
||
"rotaryCenters",
|
||
"uvwTransform",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://linuxcnc.org/docs/master/html/man/man9/kins.9.html",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "hexapod-genhexkins",
|
||
"family": "parallel-platform",
|
||
"reference": "Giddings & Lewis Variax 六支链平台",
|
||
"status": "real-reference-plus-design",
|
||
"parts": [
|
||
"base-platform",
|
||
"strut-1",
|
||
"strut-2",
|
||
"strut-3",
|
||
"strut-4",
|
||
"strut-5",
|
||
"strut-6",
|
||
"moving-platform",
|
||
"spindle",
|
||
"tool"
|
||
],
|
||
"jointTree": "base→six independent struts→moving-platform→tool",
|
||
"parameters": [
|
||
"baseJointPoints",
|
||
"platformJointPoints",
|
||
"spindleOffset",
|
||
"screwLead",
|
||
"iterationLimits",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://collection.sciencemuseumgroup.org.uk/objects/co8003352/pair-of-hexapod-legs-used-with-the-variax-machine-tool-made-by-giddings-lewis-of-wisconsin-in-1993",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "pentapod-pentakins",
|
||
"family": "parallel-platform",
|
||
"reference": "METROM Pentapod P-Series",
|
||
"status": "real-reference-plus-design",
|
||
"parts": [
|
||
"base-frame",
|
||
"strut-1",
|
||
"strut-2",
|
||
"strut-3",
|
||
"strut-4",
|
||
"strut-5",
|
||
"moving-platform",
|
||
"spindle",
|
||
"tool"
|
||
],
|
||
"jointTree": "base→five independent struts→platform→tool",
|
||
"parameters": [
|
||
"baseJointPoints",
|
||
"effectorGeometry",
|
||
"toolOffset",
|
||
"convergenceCriterion",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://metrom.com/5-axis-machining-center/",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "puma-pumakins",
|
||
"family": "serial-robot",
|
||
"reference": "Unimation PUMA 560 类六轴机器人",
|
||
"status": "real-reference",
|
||
"parts": [
|
||
"base",
|
||
"j1-turntable",
|
||
"j2-shoulder",
|
||
"j3-elbow",
|
||
"j4-wrist-roll",
|
||
"j5-wrist-pitch",
|
||
"j6-wrist-yaw",
|
||
"flange",
|
||
"tool"
|
||
],
|
||
"jointTree": "base→j1→j2→j3→j4→j5→j6→tool",
|
||
"parameters": [
|
||
"A2",
|
||
"A3",
|
||
"D3",
|
||
"D4",
|
||
"D6",
|
||
"jointLimits",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://www.linuxcnc.org/docs/html/motion/switchkins.html",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "puma-genserkins",
|
||
"family": "serial-robot",
|
||
"reference": "PUMA 560 Modified-DH 六轴机器人",
|
||
"status": "real-reference-plus-design",
|
||
"parts": [
|
||
"base",
|
||
"j1",
|
||
"j2",
|
||
"j3",
|
||
"j4",
|
||
"j5",
|
||
"j6",
|
||
"flange",
|
||
"tool"
|
||
],
|
||
"jointTree": "base→j1→j2→j3→j4→j5→j6→tool",
|
||
"parameters": [
|
||
"DHParameters",
|
||
"jointLimits",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://www.linuxcnc.org/docs/master/html/fr/man/man9/kins.9.html",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "trivkins-xyzab",
|
||
"family": "identity-baseline",
|
||
"reference": "通用立式五轴双转台验证机",
|
||
"status": "design-reference",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y",
|
||
"z",
|
||
"tool",
|
||
"a-frame",
|
||
"b-table",
|
||
"workholding"
|
||
],
|
||
"jointTree": "base→x→y→z→tool; base→a→b→work",
|
||
"parameters": [
|
||
"coordinateOrder",
|
||
"duplicateAxisMap",
|
||
"physicalZero"
|
||
],
|
||
"source": null,
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "trivkins-xyzcw",
|
||
"family": "identity-baseline",
|
||
"reference": "通用桥式 C/W 刀向补偿验证机",
|
||
"status": "design-reference",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y",
|
||
"z",
|
||
"tool",
|
||
"c-table",
|
||
"w-tool-sleeve",
|
||
"workholding"
|
||
],
|
||
"jointTree": "base→x→y→z→tool; base→c→work; tool→w→tip",
|
||
"parameters": [
|
||
"coordinateOrder",
|
||
"toolDirectionAxis",
|
||
"physicalZero"
|
||
],
|
||
"source": null,
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "trivkins-xyzya",
|
||
"family": "identity-gantry-rotary",
|
||
"reference": "双 Y 龙门+A 转台验证机",
|
||
"status": "design-reference",
|
||
"parts": [
|
||
"base",
|
||
"x",
|
||
"y-left",
|
||
"y-right",
|
||
"z",
|
||
"tool",
|
||
"a-table",
|
||
"workholding"
|
||
],
|
||
"jointTree": "five joints: x,y-left,z,y-right,a; y-left/y-right drive one gantry axis",
|
||
"parameters": [
|
||
"coordinateOrder",
|
||
"duplicateAxisMap",
|
||
"gantrySynchronization",
|
||
"physicalZero"
|
||
],
|
||
"source": null,
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"id": "scorbot-kins",
|
||
"family": "serial-robot",
|
||
"reference": "SCORBOT-ER 4U/ER 4PC 五关节机器人",
|
||
"status": "real-reference-plus-design",
|
||
"parts": [
|
||
"base",
|
||
"j1-base-turn",
|
||
"j2-shoulder",
|
||
"j3-elbow",
|
||
"j4-pitch",
|
||
"j5-wrist-roll",
|
||
"flange",
|
||
"tool"
|
||
],
|
||
"jointTree": "base→j1→j2→j3→j4→j5→tool",
|
||
"parameters": [
|
||
"robotLinkParameters",
|
||
"jointLimits",
|
||
"toolOffset",
|
||
"physicalZero"
|
||
],
|
||
"source": "https://www.theoldrobots.com/book45/USBC-document.pdf",
|
||
"assetPlan": {
|
||
"zeroPoseRequired": true,
|
||
"separateJointNodes": true,
|
||
"includeOriginHelpers": true,
|
||
"metadata": [
|
||
"source",
|
||
"license",
|
||
"kinematics",
|
||
"coordinates",
|
||
"zero_pose",
|
||
"joint_limits",
|
||
"calibration_status"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|