Files
SWdata-texttoCAD/PJ_NW_S1_160_Txx_001/json/planetary_joint.sop.v2.schema.json
T

764 lines
16 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://simplecad.local/schemas/planetary-joint-sop-v2.schema.json",
"title": "SimpleCAD planetary-joint executable SOP V2 (NW type support)",
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"design_id",
"units",
"axis_convention",
"assembly_layout",
"definitions",
"instances",
"expected_definition_counts",
"assembly_root_instance_id",
"assembly_relations",
"transmission",
"public_connectors",
"interference_contract",
"verification",
"runtime_policy"
],
"properties": {
"schema": {
"const": "simplecad.std.planetary_joint.sop.v2"
},
"design_id": {
"type": "string",
"minLength": 1
},
"units": {
"const": "millimetre_degree"
},
"axis_convention": {
"type": "object",
"additionalProperties": false,
"required": [
"main_axis",
"radial_plane",
"right_handed"
],
"properties": {
"main_axis": {
"enum": [
"x",
"y",
"z"
]
},
"radial_plane": {
"enum": [
"xy",
"yz",
"zx"
]
},
"right_handed": {
"const": true
}
}
},
"assembly_layout": {
"type": "object",
"additionalProperties": false,
"required": [
"method",
"calibration_role",
"rules"
],
"properties": {
"method": {
"const": "semantic_axial_orbit"
},
"calibration_role": {
"const": "offline_dimensions_only"
},
"rules": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/layout_rule"
}
}
}
},
"definitions": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/definition"
}
},
"instances": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/instance"
}
},
"expected_definition_counts": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"definition_id",
"count"
],
"properties": {
"definition_id": {
"type": "string",
"minLength": 1
},
"count": {
"type": "integer",
"minimum": 1
}
}
}
},
"assembly_root_instance_id": {
"type": "string",
"minLength": 1
},
"assembly_relations": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/relation"
}
},
"transmission": {
"$ref": "#/$defs/transmission"
},
"public_connectors": {
"type": "array",
"minItems": 3,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"source"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"source": {
"$ref": "#/$defs/endpoint"
}
}
}
},
"interference_contract": {
"type": "object",
"additionalProperties": false,
"required": [
"policy",
"volume_tolerance_mm3",
"motion_samples_degrees",
"designed_interference_fits"
],
"properties": {
"policy": {
"const": "no_unlisted_positive_volume"
},
"volume_tolerance_mm3": {
"type": "number",
"minimum": 0
},
"motion_samples_degrees": {
"type": "array",
"minItems": 2,
"uniqueItems": true,
"items": {
"type": "number"
}
},
"designed_interference_fits": {
"type": "array",
"items": {
"$ref": "#/$defs/interference_fit"
}
}
}
},
"verification": {
"type": "object",
"additionalProperties": false,
"required": [
"default_geometry",
"assembly",
"motion",
"parameter_sweeps"
],
"properties": {
"default_geometry": {
"enum": [
"strict_brep",
"numeric_per_solid",
"interface_only"
]
},
"assembly": {
"const": "connector_residuals_and_collision"
},
"motion": {
"const": "willis_residual_and_interference_sweep"
},
"parameter_sweeps": {
"type": "integer",
"minimum": 2
}
}
},
"runtime_policy": {
"type": "object",
"additionalProperties": false,
"required": [
"teacher_geometry_allowed",
"absolute_matrix_replay_allowed",
"source_cad_required",
"checksum_locked_cots_step_allowed"
],
"properties": {
"teacher_geometry_allowed": {
"const": false
},
"absolute_matrix_replay_allowed": {
"const": false
},
"source_cad_required": {
"const": false
},
"checksum_locked_cots_step_allowed": {
"const": true
}
}
}
},
"$defs": {
"layout_rule": {
"type": "object",
"additionalProperties": false,
"required": [
"selector",
"mode"
],
"properties": {
"selector": {
"type": "string",
"pattern": "^(instance|definition):[^:]+$"
},
"mode": {
"enum": [
"root",
"coaxial",
"orbit"
]
},
"axial_mm": {
"type": "number"
},
"radial_mm": {
"type": "number",
"minimum": 0
},
"radial_angle_degrees": {
"type": "number"
},
"orbit_phase_degrees": {
"type": "number"
},
"local_axis": {
"enum": [
"x",
"y",
"z"
]
},
"axis_direction": {
"enum": [
-1,
1
]
},
"clock_degrees": {
"type": "number"
},
"clock_step_degrees": {
"type": "number"
}
},
"allOf": [
{
"if": {
"properties": {
"mode": {
"const": "root"
}
}
},
"then": {
"required": [
"selector",
"mode"
]
},
"else": {
"required": [
"axial_mm",
"local_axis",
"axis_direction",
"clock_degrees"
]
}
},
{
"if": {
"properties": {
"mode": {
"const": "orbit"
}
}
},
"then": {
"required": [
"orbit_phase_degrees",
"clock_step_degrees"
]
}
}
]
},
"connector": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"kind"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"kind": {
"enum": [
"frame",
"revolute_axis",
"mount",
"gear_axis",
"bearing_seat",
"shaft_hub"
]
}
}
},
"definition": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"family",
"generator",
"source_mode",
"maturity",
"connectors"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"family": {
"type": "string",
"minLength": 1
},
"generator": {
"type": "string",
"pattern": "^simplecadapi\\.std\\."
},
"source_mode": {
"enum": [
"formula_std",
"cots_step"
]
},
"maturity": {
"enum": [
"formula_verified",
"formula_provisional",
"cots_step_verified"
]
},
"cots_asset": {
"$ref": "#/$defs/cots_asset"
},
"connectors": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/connector"
}
}
},
"allOf": [
{
"if": {
"properties": {
"source_mode": {
"const": "cots_step"
}
}
},
"then": {
"required": [
"cots_asset"
],
"properties": {
"maturity": {
"const": "cots_step_verified"
}
}
},
"else": {
"not": {
"required": [
"cots_asset"
]
}
}
}
]
},
"cots_asset": {
"type": "object",
"additionalProperties": false,
"required": [
"path",
"sha256",
"solid_count",
"geometry_editability"
],
"properties": {
"path": {
"type": "string",
"pattern": "^[^/].*\\.step$"
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"solid_count": {
"type": "integer",
"minimum": 1
},
"geometry_editability": {
"const": "immutable"
}
}
},
"instance": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"definition_id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"definition_id": {
"type": "string",
"minLength": 1
},
"pattern_index": {
"type": "integer",
"minimum": 0
}
}
},
"endpoint": {
"type": "object",
"additionalProperties": false,
"required": [
"instance_id",
"connector_id"
],
"properties": {
"instance_id": {
"type": "string",
"minLength": 1
},
"connector_id": {
"type": "string",
"minLength": 1
}
}
},
"relation": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"type",
"a",
"b"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"type": {
"enum": [
"fixed",
"revolute",
"bearing_support",
"shaft_hub",
"coaxial"
]
},
"a": {
"$ref": "#/$defs/endpoint"
},
"b": {
"$ref": "#/$defs/endpoint"
},
"motion_role": {
"enum": [
"input",
"output",
"planet_spin",
"free"
]
},
"phase_offset_degrees": {
"type": "number"
}
}
},
"interference_fit": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"a",
"b",
"type",
"target_volume_mm3",
"volume_tolerance_mm3",
"evidence"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"a": {
"type": "string",
"minLength": 1
},
"b": {
"type": "string",
"minLength": 1
},
"type": {
"const": "source_matched_press_fit"
},
"target_volume_mm3": {
"type": "number",
"exclusiveMinimum": 0
},
"volume_tolerance_mm3": {
"type": "number",
"minimum": 0
},
"evidence": {
"type": "string",
"minLength": 1
}
}
},
"mesh": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"type",
"a",
"b",
"backlash_mm"
],
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"type": {
"enum": [
"external",
"internal"
]
},
"a": {
"type": "string",
"minLength": 1
},
"b": {
"type": "string",
"minLength": 1
},
"backlash_mm": {
"type": "number",
"minimum": 0
}
}
},
"transmission": {
"type": "object",
"additionalProperties": false,
"required": [
"type",
"module_mm",
"pressure_angle_deg",
"teeth",
"planet_count",
"center_radius_mm",
"center_tolerance_mm",
"fixed_member",
"input_member",
"output_member",
"fixed_ring_ratio",
"ratio_tolerance",
"meshes"
],
"properties": {
"type": {
"enum": [
"simple_planetary",
"nw_planetary"
]
},
"module_mm": {
"type": "number",
"exclusiveMinimum": 0
},
"pressure_angle_deg": {
"type": "number",
"exclusiveMinimum": 0,
"exclusiveMaximum": 90
},
"teeth": {
"type": "object",
"additionalProperties": false,
"required": [
"sun",
"planet",
"ring"
],
"properties": {
"sun": {
"type": "integer",
"minimum": 6
},
"planet": {
"type": "integer",
"minimum": 6
},
"planet_inner": {
"type": "integer",
"minimum": 6
},
"ring": {
"type": "integer",
"minimum": 12
}
}
},
"planet_count": {
"type": "integer",
"minimum": 2
},
"center_radius_mm": {
"type": "number",
"exclusiveMinimum": 0
},
"center_tolerance_mm": {
"type": "number",
"minimum": 0
},
"fixed_member": {
"enum": [
"ring_gear",
"carrier",
"sun_gear"
]
},
"input_member": {
"enum": [
"sun_gear",
"carrier",
"ring_gear"
]
},
"output_member": {
"enum": [
"carrier",
"sun_gear",
"ring_gear"
]
},
"fixed_ring_ratio": {
"type": "number",
"exclusiveMinimum": 1
},
"ratio_tolerance": {
"type": "number",
"minimum": 0
},
"meshes": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/mesh"
}
}
},
"allOf": [
{
"if": {
"properties": {
"type": {
"const": "nw_planetary"
}
}
},
"then": {
"required": [
"teeth"
],
"properties": {
"teeth": {
"required": [
"sun",
"planet",
"planet_inner",
"ring"
]
}
}
}
}
]
}
}
}