feat: add knowledge-driven joint design studio
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"id": "mechanism.planetary.ferguson_wolfrom",
|
||||
"version": "1.0.0",
|
||||
"legacy_family": "ferguson_wolfrom",
|
||||
"description": "Ferguson-Wolfrom mechanical-paradox planetary reducer represented by two coupled sun/ring/planet sets.",
|
||||
"members": [
|
||||
{"id": "sun1", "component_ref": "component.gear.cylindrical.external", "role": "sun_fixed_side", "repeat": "single"},
|
||||
{"id": "sun2", "component_ref": "component.gear.cylindrical.external", "role": "sun_output_side", "repeat": "single"},
|
||||
{"id": "planet1", "component_ref": "component.gear.cylindrical.external", "role": "input_planet", "repeat": "planet_count"},
|
||||
{"id": "planet2", "component_ref": "component.gear.cylindrical.external", "role": "output_planet", "repeat": "planet_count"},
|
||||
{"id": "ring1", "component_ref": "component.gear.cylindrical.internal", "role": "ring_fixed_side", "repeat": "single"},
|
||||
{"id": "ring2", "component_ref": "component.gear.cylindrical.internal", "role": "ring_output_side", "repeat": "single"},
|
||||
{"id": "static_carrier", "component_ref": "component.carrier.planetary", "role": "static_carrier", "repeat": "single"},
|
||||
{"id": "output_carrier", "component_ref": "component.carrier.planetary", "role": "output_carrier", "repeat": "single"},
|
||||
{"id": "housing", "component_ref": "component.reference.housing", "role": "housing", "repeat": "single"},
|
||||
{"id": "main_axis", "component_ref": "component.reference.main_axis", "role": "main_axis", "repeat": "single"}
|
||||
],
|
||||
"relations": [
|
||||
{"id": "sun1_planet1", "source": "sun1", "target": "planet1", "relation_ref": "relation.mesh.external_cylindrical", "carrier_ref": "static_carrier"},
|
||||
{"id": "ring1_planet1", "source": "ring1", "target": "planet1", "relation_ref": "relation.mesh.internal_cylindrical", "carrier_ref": "static_carrier"},
|
||||
{"id": "sun2_planet2", "source": "sun2", "target": "planet2", "relation_ref": "relation.mesh.external_cylindrical", "carrier_ref": "output_carrier"},
|
||||
{"id": "ring2_planet2", "source": "ring2", "target": "planet2", "relation_ref": "relation.mesh.internal_cylindrical", "carrier_ref": "output_carrier"},
|
||||
{"id": "planet1_carrier", "source": "planet1", "target": "static_carrier", "relation_ref": "relation.joint.revolute"},
|
||||
{"id": "planet2_carrier", "source": "planet2", "target": "output_carrier", "relation_ref": "relation.joint.revolute"},
|
||||
{"id": "sun_pair", "source": "sun1", "target": "sun2", "relation_ref": "relation.joint.rigid"},
|
||||
{"id": "ring_pair", "source": "ring1", "target": "ring2", "relation_ref": "relation.joint.rigid"},
|
||||
{"id": "sun1_axis", "source": "sun1", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "sun2_axis", "source": "sun2", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "ring1_axis", "source": "ring1", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "ring2_axis", "source": "ring2", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "static_carrier_axis", "source": "static_carrier", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "output_carrier_axis", "source": "output_carrier", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "static_carrier_ground", "source": "static_carrier", "target": "housing", "relation_ref": "relation.joint.fixed"}
|
||||
],
|
||||
"external_ports": [
|
||||
{"id": "input_rotation", "member": "planet1", "type": "port.joint.revolute"},
|
||||
{"id": "output_rotation", "member": "output_carrier", "type": "port.rotation.coaxial"},
|
||||
{"id": "housing_mount", "member": "housing", "type": "port.mount.stationary"}
|
||||
],
|
||||
"boundary_profiles": [
|
||||
{"id": "planet1_in_static_carrier_fixed_output_carrier_out", "input": "planet1", "fixed": ["static_carrier"], "output": "output_carrier", "production_evidence": true}
|
||||
],
|
||||
"constraint_rules": [
|
||||
"paired_suns_rigid",
|
||||
"paired_rings_rigid",
|
||||
"required_tooth_counts_explicit",
|
||||
"minimum_teeth_exclusive_17",
|
||||
"graph_kinematics_residual_within_tolerance"
|
||||
],
|
||||
"capability_refs": [
|
||||
"capability.parameter_solver.ferguson_wolfrom",
|
||||
"capability.kinematics.graph",
|
||||
"capability.layout.ferguson_wolfrom",
|
||||
"capability.cad.ferguson_wolfrom",
|
||||
"capability.validation.reducer"
|
||||
],
|
||||
"source_topology": {
|
||||
"path": "src/configurations/ferguson_wolfrom/topology.template.json",
|
||||
"sha256": "82a19e71d776628c79d9d16871d7e7a07f093ecaff84d1114d77f620d3ae074c"
|
||||
},
|
||||
"limitations": [
|
||||
"Current implementation supports kinematic_demo detail level only.",
|
||||
"The eccentric planet-pin input is not compatible with the current coaxial joint-module adapter."
|
||||
],
|
||||
"maturity": "geometry_validated"
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"id": "mechanism.planetary.simple_2k_h",
|
||||
"version": "1.0.0",
|
||||
"legacy_family": "simple_2k_h",
|
||||
"description": "Single simple 2K-H planetary cell with interchangeable input, fixed, and output boundary members.",
|
||||
"members": [
|
||||
{"id": "sun", "component_ref": "component.gear.cylindrical.external", "role": "sun", "repeat": "single"},
|
||||
{"id": "planet", "component_ref": "component.gear.cylindrical.external", "role": "planet", "repeat": "planet_count"},
|
||||
{"id": "ring", "component_ref": "component.gear.cylindrical.internal", "role": "ring", "repeat": "single"},
|
||||
{"id": "carrier", "component_ref": "component.carrier.planetary", "role": "carrier", "repeat": "single"},
|
||||
{"id": "housing", "component_ref": "component.reference.housing", "role": "housing", "repeat": "single"},
|
||||
{"id": "main_axis", "component_ref": "component.reference.main_axis", "role": "main_axis", "repeat": "single"}
|
||||
],
|
||||
"relations": [
|
||||
{"id": "sun_planet", "source": "sun", "target": "planet", "relation_ref": "relation.mesh.external_cylindrical", "carrier_ref": "carrier"},
|
||||
{"id": "ring_planet", "source": "ring", "target": "planet", "relation_ref": "relation.mesh.internal_cylindrical", "carrier_ref": "carrier"},
|
||||
{"id": "planet_carrier", "source": "planet", "target": "carrier", "relation_ref": "relation.joint.revolute"},
|
||||
{"id": "sun_axis", "source": "sun", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "ring_axis", "source": "ring", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "carrier_axis", "source": "carrier", "target": "main_axis", "relation_ref": "relation.alignment.coaxial"},
|
||||
{"id": "fixed_member_housing", "source": "ring", "target": "housing", "relation_ref": "relation.joint.fixed", "boundary_substitutable": true}
|
||||
],
|
||||
"external_ports": [
|
||||
{"id": "sun_rotation", "member": "sun", "type": "port.rotation.coaxial"},
|
||||
{"id": "ring_rotation", "member": "ring", "type": "port.rotation.coaxial"},
|
||||
{"id": "carrier_rotation", "member": "carrier", "type": "port.rotation.coaxial"},
|
||||
{"id": "housing_mount", "member": "housing", "type": "port.mount.stationary"}
|
||||
],
|
||||
"boundary_profiles": [
|
||||
{"id": "sun_in_ring_fixed_carrier_out", "input": "sun", "fixed": ["ring"], "output": "carrier", "production_evidence": true},
|
||||
{"id": "ring_in_sun_fixed_carrier_out", "input": "ring", "fixed": ["sun"], "output": "carrier", "production_evidence": true},
|
||||
{"id": "carrier_in_ring_fixed_sun_out", "input": "carrier", "fixed": ["ring"], "output": "sun", "production_evidence": true},
|
||||
{"id": "sun_in_carrier_fixed_ring_out", "input": "sun", "fixed": ["carrier"], "output": "ring", "production_evidence": true}
|
||||
],
|
||||
"constraint_rules": [
|
||||
"z_ring = z_sun + 2*z_planet",
|
||||
"(z_sun + z_ring) % planet_count = 0",
|
||||
"common_module",
|
||||
"common_pressure_angle",
|
||||
"planet_neighbor_clearance",
|
||||
"maximum_outer_diameter"
|
||||
],
|
||||
"capability_refs": [
|
||||
"capability.parameter_solver.simple_2kh",
|
||||
"capability.kinematics.graph",
|
||||
"capability.layout.simple_2kh",
|
||||
"capability.cad.simple_2kh",
|
||||
"capability.validation.reducer"
|
||||
],
|
||||
"source_topology": {
|
||||
"path": "src/configurations/simple_2k_h/topology.template.json",
|
||||
"sha256": "a444fb2ea3ef16929f99a2f2a8cbd05442cedd91e7e3e67ec95cf344e3e282c3"
|
||||
},
|
||||
"limitations": [
|
||||
"Current CAD supports spur and helical tooth forms.",
|
||||
"Industrial-core generation currently restricts boundary variants."
|
||||
],
|
||||
"maturity": "production"
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"id": "mechanism.planetary.simple_2k_h_cascade",
|
||||
"version": "1.0.0",
|
||||
"legacy_family": "simple_2k_h_cascade",
|
||||
"description": "Exactly two simple 2K-H stages connected by a rigid stage-output to next-stage-input coupling.",
|
||||
"members": [
|
||||
{"id": "stage_1", "mechanism_ref": "mechanism.planetary.simple_2k_h", "role": "first_stage", "repeat": "single"},
|
||||
{"id": "stage_2", "mechanism_ref": "mechanism.planetary.simple_2k_h", "role": "second_stage", "repeat": "single"},
|
||||
{"id": "housing", "component_ref": "component.reference.housing", "role": "housing", "repeat": "single"},
|
||||
{"id": "main_axis", "component_ref": "component.reference.main_axis", "role": "main_axis", "repeat": "single"}
|
||||
],
|
||||
"relations": [
|
||||
{"id": "stage_output_to_next_input", "source": "stage_1", "target": "stage_2", "relation_ref": "relation.joint.rigid", "composition_ref": "composition.coaxial_serial.two_simple_2kh"}
|
||||
],
|
||||
"external_ports": [
|
||||
{"id": "input_rotation", "member": "stage_1", "type": "port.rotation.coaxial"},
|
||||
{"id": "output_rotation", "member": "stage_2", "type": "port.rotation.coaxial"},
|
||||
{"id": "housing_mount", "member": "housing", "type": "port.mount.stationary"}
|
||||
],
|
||||
"boundary_profiles": [
|
||||
{"id": "per_stage_boundaries", "input": "stage_1.configured_input", "fixed": ["stage_1.configured_fixed", "stage_2.configured_fixed"], "output": "stage_2.configured_output", "production_evidence": true}
|
||||
],
|
||||
"constraint_rules": [
|
||||
"exactly_two_stages",
|
||||
"each_stage_is_simple_2k_h",
|
||||
"stage_output_rigid_to_next_stage_input",
|
||||
"common_main_axis",
|
||||
"axial_stack_clearance"
|
||||
],
|
||||
"capability_refs": [
|
||||
"capability.parameter_solver.simple_2kh_cascade",
|
||||
"capability.kinematics.graph",
|
||||
"capability.layout.simple_2kh_cascade",
|
||||
"capability.cad.simple_2kh_cascade",
|
||||
"capability.validation.reducer"
|
||||
],
|
||||
"source_topology": {
|
||||
"path": "src/configurations/simple_2k_h_cascade/topology.template.json",
|
||||
"sha256": "308f60804aa1da2be791ce3e90e3d93c9a5f1f5cacdd0379818e908cbefb9613"
|
||||
},
|
||||
"limitations": [
|
||||
"This is a fixed two-stage implementation, not a generic N-stage composer.",
|
||||
"Only the existing rigid output-to-input composition is production supported."
|
||||
],
|
||||
"maturity": "production"
|
||||
}
|
||||
Reference in New Issue
Block a user