458 lines
12 KiB
JSON
458 lines
12 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://cadset.local/contracts/assembly-designir-1.0.schema.json",
|
|
"title": "Assembly DesignIR 1.0",
|
|
"description": "Coordinate-free semantic structure, mating, kinematics and transmission contract.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"designir_kind",
|
|
"model_id",
|
|
"family",
|
|
"units",
|
|
"parameters",
|
|
"modules",
|
|
"components",
|
|
"relations",
|
|
"kinematics",
|
|
"edit_interface",
|
|
"validation_contract"
|
|
],
|
|
"properties": {
|
|
"schema_version": {
|
|
"const": "assembly-1.0"
|
|
},
|
|
"designir_kind": {
|
|
"const": "coordinate_free_semantic_assembly"
|
|
},
|
|
"model_id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"family": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"units": {
|
|
"enum": ["mm", "inch"]
|
|
},
|
|
"design_intent": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"parameters": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/parameter"
|
|
}
|
|
},
|
|
"expressions": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
},
|
|
"modules": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/module"
|
|
}
|
|
},
|
|
"components": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/component"
|
|
}
|
|
},
|
|
"relations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/relation"
|
|
}
|
|
},
|
|
"kinematics": {
|
|
"$ref": "#/$defs/kinematics"
|
|
},
|
|
"edit_interface": {
|
|
"$ref": "#/$defs/editInterface"
|
|
},
|
|
"validation_contract": {
|
|
"$ref": "#/$defs/validationContract"
|
|
}
|
|
},
|
|
"$defs": {
|
|
"identifier": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_]*$"
|
|
},
|
|
"parameter": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["kind", "value", "editable"],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": ["length", "angle", "ratio", "count", "mass", "torque", "speed", "scalar", "choice", "boolean"]
|
|
},
|
|
"value": {},
|
|
"unit": {
|
|
"type": "string"
|
|
},
|
|
"editable": {
|
|
"type": "boolean"
|
|
},
|
|
"bounds": {
|
|
"type": "array",
|
|
"minItems": 2,
|
|
"maxItems": 2,
|
|
"items": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"choices": {
|
|
"type": "array",
|
|
"items": {}
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"enum": ["specified", "inferred", "estimated", "derived"]
|
|
}
|
|
}
|
|
},
|
|
"module": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "purpose", "members"],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"purpose": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"members": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/identifier"
|
|
}
|
|
},
|
|
"replaceable_as_unit": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"component": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"id",
|
|
"role",
|
|
"archetype",
|
|
"lifecycle",
|
|
"generation",
|
|
"interfaces"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"role": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"archetype": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"lifecycle": {
|
|
"enum": ["required", "optional", "replaceable", "generated_pattern"]
|
|
},
|
|
"quantity": {
|
|
"oneOf": [
|
|
{
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
{
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
]
|
|
},
|
|
"generation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["strategy", "family", "parameter_bindings"],
|
|
"properties": {
|
|
"strategy": {
|
|
"enum": ["semantic_feature_program", "standard_library", "supplier_catalog", "subassembly_template"]
|
|
},
|
|
"family": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"parameter_bindings": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": ["string", "number", "integer", "boolean"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"interfaces": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/interface"
|
|
}
|
|
},
|
|
"material_class": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/identifier"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"interface": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "type", "construction"],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"type": {
|
|
"enum": ["axis", "plane", "cylinder", "hole_pattern", "shaft_seat", "bearing_seat", "fastener_seat", "torque_interface", "contact_envelope"]
|
|
},
|
|
"construction": {
|
|
"enum": ["primary_axis", "secondary_axis", "front_axial_face", "rear_axial_face", "inner_cylindrical_surface", "outer_cylindrical_surface", "pitch_circle_pattern", "shoulder_face", "center_plane", "generated_feature"]
|
|
},
|
|
"qualifiers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"parameter_refs": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/identifier"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"endpoint": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"
|
|
},
|
|
"relation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "type", "a", "b", "intent"],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"type": {
|
|
"enum": ["coaxial", "face_mate", "face_offset", "parallel", "perpendicular", "insert", "bearing_support", "axial_capture", "fasten_pattern", "torque_lock", "radial_clearance", "axial_clearance", "tangent"]
|
|
},
|
|
"a": {
|
|
"$ref": "#/$defs/endpoint"
|
|
},
|
|
"b": {
|
|
"$ref": "#/$defs/endpoint"
|
|
},
|
|
"intent": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"value": {
|
|
"oneOf": [
|
|
{
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
]
|
|
},
|
|
"tolerance": {
|
|
"oneOf": [
|
|
{
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
{
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
]
|
|
},
|
|
"mobility": {
|
|
"enum": ["fixed", "allow_rotation", "allow_translation", "allow_rotation_and_translation"]
|
|
},
|
|
"confidence": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"maximum": 1
|
|
},
|
|
"evidence": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"kinematics": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["anchor_component", "rigid_groups", "joints", "transmissions"],
|
|
"properties": {
|
|
"anchor_component": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"rigid_groups": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "members"],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"members": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/identifier"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"joints": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "type", "parent_group", "child_group", "axis_ref", "station_ref"],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"type": {
|
|
"enum": ["fixed", "revolute", "continuous", "prismatic", "cylindrical"]
|
|
},
|
|
"parent_group": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"child_group": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"axis_ref": {
|
|
"$ref": "#/$defs/endpoint"
|
|
},
|
|
"station_ref": {
|
|
"$ref": "#/$defs/endpoint"
|
|
},
|
|
"dynamics": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": ["number", "string"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"transmissions": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "type", "input_joint", "output_joint", "ratio_expression"],
|
|
"properties": {
|
|
"id": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"type": {
|
|
"enum": ["direct", "gear_pair", "planetary", "harmonic", "cycloidal", "belt", "chain", "screw"]
|
|
},
|
|
"input_joint": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"output_joint": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"ratio_expression": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"fixed_member": {
|
|
"$ref": "#/$defs/identifier"
|
|
},
|
|
"compliance_model": {
|
|
"$ref": "#/$defs/identifier"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"editInterface": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["editable_parameters", "structural_operations", "preserved_interfaces"],
|
|
"properties": {
|
|
"editable_parameters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/identifier"
|
|
}
|
|
},
|
|
"structural_operations": {
|
|
"type": "array",
|
|
"items": {
|
|
"enum": ["add_component", "remove_component", "replace_component", "change_relation", "change_transmission", "add_module"]
|
|
}
|
|
},
|
|
"preserved_interfaces": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/$defs/endpoint"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"validationContract": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["coordinate_free_source", "required_checks"],
|
|
"properties": {
|
|
"coordinate_free_source": {
|
|
"const": true
|
|
},
|
|
"required_checks": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"enum": ["schema_valid", "reference_integrity", "constraint_graph_connected", "assembly_solvable_from_scrambled_state", "no_overconstraint", "interface_compatibility", "clearance", "interference", "joint_mobility", "parameter_perturbation", "preserved_interface", "urdf_load", "mjcf_load"]
|
|
}
|
|
},
|
|
"acceptance_rules": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|