476 lines
9.4 KiB
JSON
476 lines
9.4 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "urn:linuxcnc:joint-model:1",
|
|
"title": "Web LinuxCNC single-DOF joint model",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema",
|
|
"coordinates",
|
|
"units",
|
|
"controller",
|
|
"calibration",
|
|
"axisMap",
|
|
"nodes"
|
|
],
|
|
"properties": {
|
|
"schema": {
|
|
"const": "linuxcnc.joint-model/1"
|
|
},
|
|
"coordinates": {
|
|
"enum": [
|
|
"XYZAC",
|
|
"XYZBC"
|
|
]
|
|
},
|
|
"units": {
|
|
"const": {
|
|
"length": "mm",
|
|
"angle": "deg",
|
|
"gltfLength": "m"
|
|
}
|
|
},
|
|
"controller": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"source",
|
|
"axisOrder"
|
|
],
|
|
"properties": {
|
|
"source": {
|
|
"const": "linuxcnc-wasm.visual.joints"
|
|
},
|
|
"axisOrder": {
|
|
"enum": [
|
|
[
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"A",
|
|
"C"
|
|
],
|
|
[
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"B",
|
|
"C"
|
|
]
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"calibration": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"cOriginMm",
|
|
"tiltOffsetMm",
|
|
"physicalZero"
|
|
],
|
|
"properties": {
|
|
"cOriginMm": {
|
|
"$ref": "#/$defs/vector3"
|
|
},
|
|
"tiltOffsetMm": {
|
|
"$ref": "#/$defs/vector3"
|
|
},
|
|
"physicalZero": {
|
|
"type": "object",
|
|
"required": [
|
|
"x",
|
|
"y",
|
|
"z",
|
|
"a",
|
|
"b",
|
|
"c"
|
|
],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"x": {
|
|
"type": "number"
|
|
},
|
|
"y": {
|
|
"type": "number"
|
|
},
|
|
"z": {
|
|
"type": "number"
|
|
},
|
|
"a": {
|
|
"type": "number"
|
|
},
|
|
"b": {
|
|
"type": "number"
|
|
},
|
|
"c": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"axisMap": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"X": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"Y": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"Z": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"A": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"B": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"C": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
}
|
|
},
|
|
"nodes": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"maxItems": 12000,
|
|
"items": {
|
|
"$ref": "#/$defs/node"
|
|
}
|
|
}
|
|
},
|
|
"$defs": {
|
|
"vector3": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number"
|
|
},
|
|
"minItems": 3,
|
|
"maxItems": 3
|
|
},
|
|
"node": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"id",
|
|
"parentId",
|
|
"name",
|
|
"role",
|
|
"source",
|
|
"zero",
|
|
"joint"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"parentId": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"type": "string"
|
|
},
|
|
"source": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"file",
|
|
"hash",
|
|
"path"
|
|
],
|
|
"properties": {
|
|
"file": {
|
|
"type": "string"
|
|
},
|
|
"hash": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"zero": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"positionMm",
|
|
"quaternion",
|
|
"scale"
|
|
],
|
|
"properties": {
|
|
"positionMm": {
|
|
"$ref": "#/$defs/vector3"
|
|
},
|
|
"quaternion": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number",
|
|
"minimum": -1,
|
|
"maximum": 1
|
|
},
|
|
"minItems": 4,
|
|
"maxItems": 4
|
|
},
|
|
"scale": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "number",
|
|
"exclusiveMinimum": 0
|
|
},
|
|
"minItems": 3,
|
|
"maxItems": 3
|
|
}
|
|
}
|
|
},
|
|
"joint": {
|
|
"anyOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"$ref": "#/$defs/dof"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"dof": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"axis",
|
|
"direction",
|
|
"sign",
|
|
"dof",
|
|
"type",
|
|
"unit",
|
|
"frame"
|
|
],
|
|
"properties": {
|
|
"axis": {
|
|
"enum": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"A",
|
|
"B",
|
|
"C"
|
|
]
|
|
},
|
|
"direction": {
|
|
"enum": [
|
|
"x",
|
|
"y",
|
|
"z"
|
|
]
|
|
},
|
|
"sign": {
|
|
"enum": [
|
|
-1,
|
|
1
|
|
]
|
|
},
|
|
"dof": {
|
|
"const": 1
|
|
},
|
|
"frame": {
|
|
"const": "parent"
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"prismatic",
|
|
"revolute"
|
|
]
|
|
},
|
|
"unit": {
|
|
"enum": [
|
|
"mm",
|
|
"deg"
|
|
]
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"axis": {
|
|
"enum": [
|
|
"X",
|
|
"Y",
|
|
"Z"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "prismatic"
|
|
},
|
|
"unit": {
|
|
"const": "mm"
|
|
}
|
|
}
|
|
},
|
|
"else": {
|
|
"properties": {
|
|
"type": {
|
|
"const": "revolute"
|
|
},
|
|
"unit": {
|
|
"const": "deg"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"coordinates": {
|
|
"const": "XYZAC"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"controller": {
|
|
"properties": {
|
|
"axisOrder": {
|
|
"const": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"A",
|
|
"C"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"axisMap": {
|
|
"propertyNames": {
|
|
"enum": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"A",
|
|
"C"
|
|
]
|
|
}
|
|
},
|
|
"nodes": {
|
|
"items": {
|
|
"properties": {
|
|
"joint": {
|
|
"anyOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"properties": {
|
|
"axis": {
|
|
"enum": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"A",
|
|
"C"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"coordinates": {
|
|
"const": "XYZBC"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"controller": {
|
|
"properties": {
|
|
"axisOrder": {
|
|
"const": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"B",
|
|
"C"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"axisMap": {
|
|
"propertyNames": {
|
|
"enum": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"B",
|
|
"C"
|
|
]
|
|
}
|
|
},
|
|
"nodes": {
|
|
"items": {
|
|
"properties": {
|
|
"joint": {
|
|
"anyOf": [
|
|
{
|
|
"type": "null"
|
|
},
|
|
{
|
|
"properties": {
|
|
"axis": {
|
|
"enum": [
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"B",
|
|
"C"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|