vda-5050-cli
Version:
Command line interface for developing VDA 5050 clients
925 lines • 47.1 kB
JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "factsheet",
"description": "The factsheet provides basic information about a specific mobile robot type series. This information allows comparison of different mobile robot types and can be applied for the planning, dimensioning and simulation of a mobile robot system. The factsheet also includes information about mobile robot communication interfaces which are required for the integration of a mobile robot type series into a VD[M]A-5050-compliant fleet control.",
"required": [
"headerId",
"timestamp",
"version",
"manufacturer",
"serialNumber",
"typeSpecification",
"physicalParameters",
"protocolLimits",
"protocolFeatures",
"mobileRobotGeometry",
"loadSpecification"
],
"subtopic": "/factsheet",
"type": "object",
"properties": {
"headerId": {
"type": "integer",
"description": "Header ID of the message. The headerId is defined per topic and incremented by 1 with each sent (but not necessarily received) message.",
"minimum": 0
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.fffZ).",
"examples": [
"1991-03-11T11:40:03.123Z"
]
},
"version": {
"title": "Version",
"type": "string",
"description": "Version of the protocol [Major].[Minor].[Patch]",
"examples": [
"1.3.2"
]
},
"manufacturer": {
"type": "string",
"description": "Manufacturer of the mobile robot"
},
"serialNumber": {
"type": "string",
"description": "Serial number of the mobile robot"
},
"typeSpecification": {
"type": "object",
"required": [
"seriesName",
"mobileRobotKinematic",
"mobileRobotClass",
"maximumLoadMass",
"localizationTypes",
"navigationTypes"
],
"description": "These parameters generally specify the class and the capabilities of the mobile robot",
"properties": {
"seriesName": {
"type": "string",
"description": "Free text generalized series name as specified by manufacturer"
},
"seriesDescription": {
"type": "string",
"description": "Free text human readable description of the mobile robot type series"
},
"mobileRobotKinematics": {
"type": "string",
"description": "Simplified description of mobile robots kinematics-type. Extensible enum: DIFFERENTIAL, OMNIDIRECTIONAL, THREE_WHEEL"
},
"mobileRobotClass": {
"type": "string",
"description": "Simplified description of mobile robot class. Extensible enum: FORKLIFT, CONVEYOR, TUGGER, CARRIER"
},
"maximumLoadMass": {
"type": "number",
"description": "Maximum loadable mass",
"unit": "kg",
"minimum": 0
},
"localizationTypes": {
"type": "array",
"description": "Simplified description of localization type.",
"items": {
"type": "string",
"description": "Simplified description of localization type. Extensible enum: NATURAL, REFLECTOR, RFID, DMC, SPOT, GRID"
}
},
"navigationTypes": {
"type": "array",
"description": "List of path planning types supported by the mobile robot, sorted by priority",
"items": {
"type": "string",
"description": "Planning type. Extensible enum: PHYSICAL_LINE_GUIDED, VIRTUAL_LINE_GUIDED, FREELY_NAVIGATING"
}
},
"supportedZones": {
"type": "array",
"description": "Array of zone types supported by the mobile robot.",
"items": {
"type": "string",
"enum": [
"BLOCKED",
"LINE_GUIDED",
"RELEASE",
"COORDINATED_REPLANNING",
"SPEED_LIMIT",
"ACTION",
"PRIORITY",
"PENALTY",
"DIRECTED",
"BIDIRECTED"
]
}
}
}
},
"physicalParameters": {
"type": "object",
"required": [
"minimumSpeed",
"maximumSpeed",
"maximumAcceleration",
"maximumDeceleration",
"minimumHeight",
"maximumHeight",
"width",
"length"
],
"description": "These parameters specify the basic physical properties of the mobile robot",
"properties": {
"minimumSpeed": {
"type": "number",
"description": "Minimal controlled continuous speed of the mobile robot",
"unit": "m/s",
"minimum": 0.0
},
"maximumSpeed": {
"type": "number",
"description": "Maximum speed of the mobile robot",
"unit": "m/s",
"minimum": 0.0
},
"minimumAngularSpeed": {
"type": "number",
"description": "Minimal controlled continuous rotation speed of the mobile robot",
"unit": "rad/s",
"minimum": 0.0
},
"maximumAngularSpeed": {
"type": "number",
"description": "Maximum rotation speed of the mobile robot",
"unit": "rad/s",
"minimum": 0.0
},
"maximumAcceleration": {
"type": "number",
"description": "Maximum acceleration with maximum load",
"unit": "m/s^2",
"minimum": 0.0
},
"maximumDeceleration": {
"type": "number",
"description": "Maximum deceleration with maximum load",
"unit": "m/s^2"
},
"minimumHeight": {
"type": "number",
"description": "Minimum height of mobile robot",
"unit": "m"
},
"maximumHeight": {
"type": "number",
"description": "Maximum height of mobile robot",
"unit": "m"
},
"width": {
"type": "number",
"description": "Width of the mobile robot",
"unit": "m"
},
"length": {
"type": "number",
"description": "Length of the mobile robot",
"unit": "m"
}
}
},
"protocolLimits": {
"type": "object",
"required": [
"maximumStringLengths",
"maximumArrayLengths",
"timing"
],
"description": "This JSON-object describes the protocol limitations of the mobile robot. If a parameter is not defined or set to zero then there is no explicit limit for this parameter.",
"properties": {
"maximumStringLengths": {
"type": "object",
"description": "Maximum lengths of strings",
"properties": {
"maximumMessageLength": {
"type": "integer",
"description": "Maximum MQTT Message length",
"minimum": 0
},
"maximumTopicSerialLength": {
"type": "integer",
"description": "Maximum length of serial-number part in MQTT-topics. Affected Parameters: order.serialNumber, instantActions.serialNumber, state.SerialNumber, visualization.serialNumber, connection.serialNumber",
"minimum": 0
},
"maximumTopicElementLength": {
"type": "integer",
"description": "Maximum length of all other parts in MQTT-topics. Affected parameters: order.timestamp, order.version, order.manufacturer, instantActions.timestamp, instantActions.version, instantActions.manufacturer, state.timestamp, state.version, state.manufacturer, visualization.timestamp, visualization.version, visualization.manufacturer, connection.timestamp, connection.version, connection.manufacturer",
"minimum": 0
},
"maximumIdLength": {
"type": "integer",
"description": "Maximum length of ID-Strings. Affected parameters: order.orderId, node.nodeId, nodePosition.mapId, action.actionId, edge.edgeId",
"minimum": 0
},
"idNumericalOnly": {
"type": "boolean",
"description": "If true ID-strings need to contain numerical values only"
},
"maximumLoadIdLength": {
"type": "integer",
"description": "Maximum length of loadId Strings",
"minimum": 0
}
}
},
"maximumArrayLengths": {
"type": "object",
"description": "Maximum lengths of arrays",
"properties": {
"order.nodes": {
"type": "integer",
"description": "Maximum number of nodes per order processable by the mobile robot",
"minimum": 0
},
"order.edges": {
"type": "integer",
"description": "Maximum number of edges per order processable by the mobile robot",
"minimum": 0
},
"node.actions": {
"type": "integer",
"description": "Maximum number of actions per node processable by the mobile robot",
"minimum": 0
},
"edge.actions": {
"type": "integer",
"description": "Maximum number of actions per edge processable by the mobile robot",
"minimum": 0
},
"actions.actionsParameters": {
"type": "integer",
"description": "Maximum number of parameters per action processable by the mobile robot",
"minimum": 0
},
"instantActions": {
"type": "integer",
"description": "Maximum number of instant actions per message processable by the mobile robot",
"minimum": 0
},
"trajectory.knotVector": {
"type": "integer",
"description": "Maximum number of knots per trajectory processable by the mobile robot",
"minimum": 0
},
"trajectory.controlPoints": {
"type": "integer",
"description": "Maximum number of control points per trajectory processable by the mobile robot",
"minimum": 0
},
"zoneSet.zones": {
"type": "integer",
"description": "Maximum number of zones per zoneSet processable by the mobile robot",
"minimum": 0
},
"state.nodeStates": {
"type": "integer",
"description": "Maximum number of nodeStates sent by the mobile robot, maximum number of nodes in base of mobile robot",
"minimum": 0
},
"state.edgeStates": {
"type": "integer",
"description": "Maximum number of edgeStates sent by the mobile robot, maximum number of edges in base of mobile robot",
"minimum": 0
},
"state.loads": {
"type": "integer",
"description": "Maximum number of load-objects sent by the mobile robot",
"minimum": 0
},
"state.actionStates": {
"type": "integer",
"description": "Maximum number of actionStates sent by the mobile robot",
"minimum": 0
},
"state.instantActionStates": {
"type": "integer",
"description": "Maximum number of instantActionStates sent by the mobile robot",
"minimum": 0
},
"state.zoneActionStates": {
"type": "integer",
"description": "Maximum number of zoneActionStates sent by the mobile robot",
"minimum": 0
},
"state.errors": {
"type": "integer",
"description": "Maximum number of errors sent by the mobile robot in one state-message",
"minimum": 0
},
"state.information": {
"type": "integer",
"description": "Maximum number of information objects sent by the mobile robot in one state-message",
"minimum": 0
},
"error.errorReferences": {
"type": "integer",
"description": "Maximum number of error references sent by the mobile robot for each error",
"minimum": 0
},
"information.infoReferences": {
"type": "integer",
"description": "Maximum number of info references sent by the mobile robot for each information",
"minimum": 0
}
}
},
"timing": {
"type": "object",
"required": [
"minimumOrderInterval",
"minimumStateInterval"
],
"description": "Timing information",
"properties": {
"minimumOrderInterval": {
"type": "number",
"description": "Minimum interval sending order messages to the mobile robot",
"unit": "s",
"minimum": 0.0
},
"minimumStateInterval": {
"type": "number",
"description": "Minimum interval for sending state-messages",
"unit": "s",
"minimum": 0.0
},
"defaultStateInterval": {
"type": "number",
"description": "Default interval for sending state-messages if not defined, the default value from the main document is used",
"unit": "s",
"minimum": 0.0
},
"visualizationInterval": {
"type": "number",
"description": "Default interval for sending messages on visualization topic",
"unit": "s",
"minimum": 0.0
}
}
}
}
},
"protocolFeatures": {
"type": "object",
"required": [
"optionalParameters",
"mobileRobotActions"
],
"description": "Supported features of VDA5050 protocol",
"properties": {
"optionalParameters": {
"type": "array",
"description": "List of supported and/or required optional parameters. Optional parameters, that are not listed here, are assumed to be not supported by the mobile robot.",
"items": {
"type": "object",
"required": [
"parameter",
"support"
],
"properties": {
"parameter": {
"type": "string",
"description": "Full name of optional parameter, e.g., \u201corder.nodes.nodePosition.allowedDeviationTheta\u201d"
},
"support": {
"type": "string",
"description": "Type of support for the optional parameter, the following values are possible: SUPPORTED: optional parameter is supported like specified. REQUIRED: optional parameter is required for proper mobile robot operation.",
"enum": [
"SUPPORTED",
"REQUIRED"
]
},
"description": {
"type": "string",
"description": "Free text. Description of optional parameter. E.g., reason, why the optional parameter \u201adirection\u2018 is necessary for this mobile robot type and which values it can contain. The parameter \u2018nodeMarker\u2019 must contain unsigned interger-numbers only. Nurbs-Support is limited to straight lines and circle segments."
}
}
}
},
"mobileRobotActions": {
"type": "array",
"description": "List of all actions with parameters supported by this mobile robot. This includes standard actions specified in VDA 5050 and manufacturer-specific actions",
"items": {
"required": [
"actionType",
"actionScopes",
"pauseAllowed",
"cancelAllowed"
],
"type": "object",
"properties": {
"actionType": {
"type": "string",
"description": "Unique actionType corresponding to action.actionType"
},
"actionDescription": {
"type": "string",
"description": "Free text: description of the action"
},
"actionScopes": {
"type": "array",
"description": "List of allowed scopes for using this action-type. INSTANT: usable as instantAction, NODE: usable on nodes, EDGE: usable on edges, ZONE: usable as zone action.",
"items": {
"type": "string",
"enum": [
"INSTANT",
"NODE",
"EDGE",
"ZONE"
]
}
},
"actionParameters": {
"type": "array",
"description": "Kist of parameters. if not defined, the action has no parameters",
"items": {
"type": "object",
"required": [
"key",
"valueDataType"
],
"properties": {
"key": {
"type": "string",
"description": "Key-String for Parameter"
},
"valueDataType": {
"type": "string",
"description": "Data type of Value, possible data types are: BOOL, NUMBER, INTEGER, STRING, OBJECT, ARRAY",
"enum": [
"BOOL",
"NUMBER",
"INTEGER",
"STRING",
"OBJECT",
"ARRAY"
]
},
"description": {
"type": "string",
"description": "Free text: description of the parameter"
},
"isOptional": {
"type": "boolean",
"description": "True: optional parameter"
}
}
}
},
"actionResult": {
"type": "string",
"description": "Free text: description of the result"
},
"blockingTypes": {
"type": "array",
"description": "Array of possible blocking types for defined action.",
"items": {
"type": "string",
"enum": [
"NONE",
"SOFT",
"SINGLE",
"HARD"
]
}
},
"pauseAllowed": {
"type": "string",
"description": "True: action can be paused via startPause. False: action cannot be paused."
},
"cancelAllowed": {
"type": "string",
"description": "True: action can be cancelled via cancelOrder. False: action cannot be cancelled."
}
}
}
}
}
},
"mobileRobotGeometry": {
"type": "object",
"description": "Detailed definition of mobile robot geometry",
"properties": {
"wheelDefinitions": {
"type": "array",
"description": "List of wheels, containing wheel-arrangement and geometry",
"items": {
"type": "object",
"required": [
"type",
"isActiveDriven",
"isActiveSteered",
"position",
"diameter",
"width"
],
"properties": {
"type": {
"type": "string",
"description": "Wheel type. Extensible enum: DRIVE, CASTER, FIXED, MECANUM"
},
"isActiveDriven": {
"type": "boolean",
"description": "True: wheel is actively driven"
},
"isActiveSteered": {
"type": "boolean",
"description": "True: wheel is actively steered"
},
"position": {
"type": "object",
"required": [
"x",
"y"
],
"properties": {
"x": {
"type": "number",
"description": "X-position in mobile robot coordinate system",
"unit": "m"
},
"y": {
"type": "number",
"description": "Y-position in mobile robot coordinate system",
"unit": "m"
},
"theta": {
"type": "number",
"description": "Orientation of wheel in mobile robot coordinate system Necessary for fixed wheels",
"unit": "rad"
}
}
},
"diameter": {
"type": "number",
"description": "Nominal diameter of wheel",
"unit": "m"
},
"width": {
"type": "number",
"description": "Nominal width of wheel",
"unit": "m"
},
"centerDisplacement": {
"type": "number",
"unit": "m",
"description": "Nominal displacement of the wheel\u2019s center to the rotation point (necessary for caster wheels). If the parameter is not defined, it is assumed to be 0"
},
"constraints": {
"type": "string",
"description": "Free text: can be used by the manufacturer to define constraints"
}
}
}
},
"envelopes2d": {
"type": "array",
"items": {
"type": "object",
"required": [
"envelope2dId",
"vertices"
],
"properties": {
"envelope2dId": {
"type": "string",
"description": "Identifier of the envelope curve set."
},
"vertices": {
"type": "array",
"description": "The envelope curve in defined as a polygon. It shall be assumed as closed. Only simple polygons shall be used.",
"items": {
"type": "object",
"required": [
"x",
"y"
],
"properties": {
"x": {
"type": "number",
"description": "X-position of polygon-point",
"unit": "m"
},
"y": {
"type": "number",
"description": " Y-position of polygon-point",
"unit": "m"
}
}
}
},
"description": {
"type": "string",
"description": "Free text: description of envelope curve set"
}
}
}
},
"envelopes3d": {
"type": "array",
"description": "List of mobile robot envelope curves in 3D (german: \u201eH\u00fcllkurven\u201c)",
"items": {
"type": "object",
"required": [
"envelope3dId",
"format"
],
"properties": {
"envelope3dId": {
"type": "string",
"description": "Identifier of the envelope curve set."
},
"format": {
"type": "string",
"description": "Format of data, e.g., DXF"
},
"data": {
"type": "object",
"description": "3D-envelope curve data, format specified in \u201aformat\u2018"
},
"url": {
"type": "string",
"description": "Protocol and url-definition for downloading the 3D-envelope curve data, e.g., ftp://xxx.yyy.com/ac4dgvhoif5tghji"
},
"description": {
"type": "string",
"description": "Free text: description of envelope curve set"
}
}
}
}
}
},
"loadSpecification": {
"type": "object",
"description": "Abstract specification of load capabilities",
"properties": {
"loadPositions": {
"type": "array",
"description": "List of load positions / load handling devices. This lists contains the valid values for the parameter \u201cstate.loads[].loadPosition\u201d and for the action parameter \u201clhd\u201d of the actions pick and drop. If this list doesn\u2019t exist or is empty, the mobile robot has no load handling device.",
"items": {
"type": "string"
}
},
"loadSets": {
"type": "array",
"description": "List of load-sets that can be handled by the mobile robot",
"items": {
"type": "object",
"required": [
"setName",
"loadType"
],
"properties": {
"setName": {
"type": "string",
"description": "Unique name of the load set, e.g., DEFAULT, SET1, ..."
},
"loadType": {
"type": "string",
"description": "Type of load e.g., EPAL, XLT1200, \u2026."
},
"loadPositions": {
"type": "array",
"description": "List of load positions btw. load handling devices, this load-set is valid for. If this parameter does not exist or is empty, this load-set is valid for all load handling devices on this mobile robot.",
"items": {
"type": "string"
}
},
"boundingBoxReference": {
"type": "object",
"required": [
"x",
"y",
"z"
],
"description": "Bounding box reference as defined in parameter loads[] in state-message",
"properties": {
"x": {
"type": "number",
"description": "X-coordinate of the point of reference."
},
"y": {
"type": "number",
"description": "Y-coordinate of the point of reference."
},
"z": {
"type": "number",
"description": "Z-coordinate of the point of reference."
},
"theta": {
"type": "number",
"description": "Orientation of the loads bounding box. Important for tugger trains, etc."
}
}
},
"loadDimensions": {
"type": "object",
"required": [
"length",
"width"
],
"properties": {
"length": {
"type": "number",
"description": "Absolute length (along the mobile robot\u2019s coordinate system\u2019s x-axis) of the load's bounding box in meters."
},
"width": {
"type": "number",
"description": "Absolute width (along the mobile robot\u2019s coordinate system\u2019s y-axis) of the load's bounding box in meters."
},
"height": {
"type": "number",
"description": "Absolute height of the load\u00b4s bounding box. Optional: Set value only if known."
}
}
},
"maximumWeight": {
"type": "number",
"description": "Maximum weight of loadtype",
"unit": "kg",
"minimum": 0.0
},
"minimumLoadhandlingHeight": {
"type": "number",
"unit": "m",
"description": "Minimum allowed height for handling of this load-type and \u2013weight. References to boundingBoxReference",
"minimum": 0.0
},
"maximumLoadhandlingHeight": {
"type": "number",
"unit": "m",
"description": "Maximum allowed height for handling of this load-type and \u2013weight. references to boundingBoxReference",
"minimum": 0.0
},
"minimumLoadhandlingDepth": {
"type": "number",
"unit": "m",
"description": "Minimum allowed depth for this load-type and \u2013weight. references to boundingBoxReference"
},
"maximumLoadhandlingDepth": {
"type": "number",
"unit": "m",
"description": "Maximum allowed depth for this load-type and \u2013weight. references to boundingBoxReference"
},
"minimumLoadhandlingTilt": {
"type": "number",
"unit": "rad",
"description": "Minimum allowed tilt for this load-type and \u2013weight"
},
"maximumLoadhandlingTilt": {
"type": "number",
"unit": "rad",
"description": "Maximum allowed tilt for this load-type and \u2013weight"
},
"maximumSpeed": {
"type": "number",
"unit": "m/s^2",
"description": "Maximum allowed speed for this load-type and \u2013weight",
"minimum": 0.0
},
"maximumAcceleration": {
"type": "number",
"unit": "m/s^2",
"description": "Maximum allowed acceleration for this load-type and \u2013weight",
"minimum": 0.0
},
"maximumDeceleration": {
"type": "number",
"unit": "m/s^2",
"description": "Maximum allowed deceleration for this load-type and \u2013weight"
},
"pickTime": {
"type": "number",
"unit": "s",
"description": "Approximate time for picking up the load",
"minimum": 0.0
},
"dropTime": {
"type": "number",
"unit": "s",
"description": "Approximate time for dropping the load",
"minimum": 0.0
},
"description": {
"type": "string",
"description": "Free text description of the load handling set"
}
}
}
}
}
},
"mobileRobotConfiguration": {
"type": "object",
"properties": {
"versions": {
"type": "array",
"description": "Array containing various hardware and software versions running on the mobile robot.",
"items": {
"title": "version",
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"description": "The key of the version.",
"examples": [
"softwareVersion",
"cameraVersion",
"plcSoftChecksum"
]
},
"value": {
"type": "string",
"description": "The value of the version.",
"examples": [
"v1.03.2",
"0620NL51805A0",
"0x4297F30C"
]
}
}
}
},
"network": {
"type": "object",
"description": "Information about the mobile robot's network connection. The listed information shall not be updated while the mobile robot is operating.",
"properties": {
"dnsServers": {
"type": "array",
"description": "List of DNS servers used by the mobile robot.",
"items": {
"type": "string"
}
},
"ntpServers": {
"type": "array",
"description": "List of NTP servers used by the mobile robot.",
"items": {
"type": "string"
}
},
"localIpAddress": {
"type": "string",
"description": "A priori assigned IP address of the mobile robot used to communicate with the MQTT broker. Note that this IP address should not be modified/changed during operations."
},
"netmask": {
"type": "string",
"description": "Network subnet mask."
},
"defaultGateway": {
"type": "string",
"description": "Default gateway used by the mobile robot."
}
}
},
"batteryCharging ": {
"type": "object",
"description": "Information about battery charging parameters.",
"properties": {
"criticalLowChargingLevel": {
"type": "number",
"description": "Specifies the critical charging level in percent at or below which the fleet control should only send orders that command the mobile robot to a charging station.",
"minimum": 0.0,
"maximum": 100.0
},
"minimumDesiredChargingLevel": {
"type": "number",
"description": "Specifies the minimum desired charging level in percent.",
"minimum": 0.0,
"maximum": 100.0
},
"maximumDesiredChargingLevel": {
"type": "number",
"description": "Specifies the maximum desired charging level in percent.",
"minimum": 0.0,
"maximum": 100.0
},
"minimumChargingTime": {
"type": "number",
"description": "Specifies the desired minimum charging time in seconds.",
"unit": "s",
"minimum": 0.0
}
}
}
}
}
},
"$id": "http://vda-5050-schema.org/v3.0/factsheet.schema.json"
}