vda-5050-cli
Version:
Command line interface for developing VDA 5050 clients
456 lines • 26.5 kB
JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://vda-5050-schema.org/v2.0/state.schema.json",
"title": "state",
"description": "All encompassing state of the AGV.",
"documentVersion": "2.0, November 2023",
"subtopic": "/state",
"type": "object",
"allOf": [
{
"$ref": "http://vda-5050-schema.org/v2.0/common.schema.json#/definitions/header"
},
{
"properties": {
"orderId": {
"type": "string",
"description": "Unique order identification of the current order or the previous finished order. The orderId is kept until a new order is received. Empty string (\"\") if no previous orderId is available. "
},
"orderUpdateId": {
"type": "integer",
"minimum": 0,
"maximum": 4294967296,
"description": "Order Update Identification to identify that an order update has been accepted by the AGV. 0 if no previous orderUpdateId is available."
},
"zoneSetId": {
"type": "string",
"description": "Unique ID of the zone set that the AGV currently uses for path planning. Must be the same as the one used in the order, otherwise the AGV is to reject the order.\nOptional: If the AGV does not use zones, this field can be omitted."
},
"lastNodeId": {
"type": "string",
"description": "nodeID of last reached node or, if AGV is currently on a node, current node (e. g. node7). Empty string (\"\") if no lastNodeId is available."
},
"lastNodeSequenceId": {
"type": "integer",
"minimum": 0,
"maximum": 4294967296,
"description": "sequenceId of the last reached node or, if the AGV is currently on a node, sequenceId of current node.\n0 if no lastNodeSequenceId is available."
},
"driving": {
"type": "boolean",
"description": "True: indicates that the AGV is driving and/or rotating. Other movements of the AGV (e.g. lift movements) are not included here.\nFalse: indicates that the AGV is neither driving nor rotating"
},
"paused": {
"type": "boolean",
"description": "True: AGV is currently in a paused state, either because of the push of a physical button on the AGV or because of an instantAction. The AGV can resume the order.\nFalse: The AGV is currently not in a paused state."
},
"newBaseRequest": {
"type": "boolean",
"description": "True: AGV is almost at the end of the base and will reduce speed if no new base is transmitted. Trigger for MC to send new base\nFalse: no base update required"
},
"distanceSinceLastNode": {
"type": "number",
"description": "Used by line guided vehicles to indicate the distance it has been driving past the lastNodeId.\nDistance is in meters"
},
"operatingMode": {
"type": "string",
"description": "Current operating mode of the AGV. For additional information, see the table OperatingModes in chapter 6.10.6.",
"enum": [
"AUTOMATIC",
"SEMIAUTOMATIC",
"MANUAL",
"SERVICE",
"TEACHIN"
]
},
"nodeStates": {
"type": "array",
"description": "Information about the nodes the AGV still has to drive over. Empty list if idle.",
"items": {
"type": "object",
"title": "nodeState",
"properties": {
"nodeId": {
"type": "string",
"description": "Unique node identification"
},
"sequenceId": {
"type": "integer",
"description": "sequenceId of the node."
},
"nodeDescription": {
"type": "string",
"description": "Verbose node description"
},
"nodePosition": {
"$ref": "http://vda-5050-schema.org/v2.0/common.schema.json#/definitions/nodePosition",
"description": "Node position. The object is defined in chapter 6.6. Optional: master control has this information. Can be sent additionally, e.g. for debugging purposes."
},
"released": {
"type": "boolean",
"description": "True: indicates that the node is part of the base. False: indicates that the node is part of the horizon."
}
},
"required": [
"nodeId",
"released",
"sequenceId"
]
}
},
"edgeStates": {
"type": "array",
"description": "Information about the edges the AGV still has to drive over. Empty list if the AGV is idle.",
"items": {
"type": "object",
"title": "edgeState",
"properties": {
"edgeId": {
"type": "string",
"description": "Unique edge identification"
},
"sequenceId": {
"type": "integer",
"description": "sequenceId of the edge."
},
"edgeDescription": {
"type": "string",
"description": "Verbose Edge description"
},
"released": {
"type": "boolean",
"description": "True: Edge is part of base. False: Edge is part of horizon."
},
"trajectory": {
"$ref": "http://vda-5050-schema.org/v2.0/common.schema.json#/definitions/trajectory",
"description": "The trajectory is to be communicated as a NURBS and is defined in chapter 6.4.\nTrajectory segments are from the point where the AGV starts to enter the edge until the point where it reports that the next node was traversed."
}
},
"required": [
"edgeId",
"sequenceId",
"released"
]
}
},
"agvPosition": {
"$ref": "http://vda-5050-schema.org/v2.0/common.schema.json#/definitions/agvPosition",
"description": "Current position of the AGV on the map.\nOptional: Can only be omitted for AGVs without the capability to localize themselves, e.g. line guided AGVs."
},
"velocity": {
"$ref": "http://vda-5050-schema.org/v2.0/common.schema.json#/definitions/velocity",
"description": "The AGVs velocity in vehicle coordinates."
},
"loads": {
"type": "array",
"description": "Array for information about the loads that an AGV currently carries, if the AGV has any information about them. This array is optional: if an AGV cannot reason about its load state, it shall not send this field. If an empty field is sent, MC is to assume that the AGV can reason about its load state and that the AGV currently does not carry a load.",
"items": {
"type": "object",
"description": "Load object that describes the load if the AGV has information about it.",
"title": "load",
"properties": {
"loadId": {
"type": "string",
"description": "Unique identification number of the load (e. g. barcode or RFID)\nEmpty field if the AGV can identify the load but didn't identify the load yet.\nOptional if the AGV has cannot identify the load."
},
"loadType": {
"type": "string",
"description": "Type of load."
},
"loadPosition": {
"type": "string",
"description": "Indicates which load handling/carrying unit of the AGV is used, e. g. in case the AGV has multiple spots/positions to carry loads.\nFor example: front, back, positionC1, etc.\nOptional for vehicles with only one loadPosition."
},
"boundingBoxReference": {
"type": "object",
"description": "This point describes the loads position on the AGV in the vehicle coordinates. The boundingBoxReference point is in the middle of the footprint of the load, so length/2 and width/2.",
"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."
}
},
"required": [
"x",
"y",
"z"
]
},
"loadDimensions": {
"type": "object",
"title": "loadDimensions",
"description": "Dimensions of the load's bounding box in meters. ",
"properties": {
"length": {
"type": "number",
"description": "Absolute length of the loads bounding box in meter."
},
"width": {
"type": "number",
"description": "Absolute width of the loads bounding box in meter."
},
"height": {
"type": "number",
"description": "Absolute height of the loads bounding box in meter.\nOptional:\nSet value only if known."
}
},
"required": [
"length",
"width"
]
},
"weight": {
"type": "number",
"description": "Weight of load in kg"
}
},
"required": []
}
},
"actionStates": {
"type": "array",
"description": "Contains a list of the current actions and the actions which are yet to be finished. This may include actions from previous nodes that are still in progress.\nWhen an action is completed, an updated state message is published with actionStatus set to finished and if applicable with the corresponding resultDescription. The actionStates are kept until a new order is received.",
"items": {
"type": "object",
"title": "actionState",
"properties": {
"actionId": {
"type": "string",
"description": "Unique actionId, e.g. blink_123jdaimoim234",
"examples": [
"blink_123jdaimoim234"
]
},
"actionType": {
"type": "string",
"description": "actionType of the action.\nOptional: Only for informational or visualization purposes. Order knows the type."
},
"actionDescription": {
"type": "string",
"description": "Additional information on the action."
},
"actionStatus": {
"type": "string",
"description": "Action status.\nWAITING: Action was received by AGV but the node where it triggers was not yet reached or the edge where it is active was not yet entered.\nINITIALIZING: Action was triggered, preparatory measures are initiated.\nRUNNING: The action is running.\nPAUSED: The action is paused because of a pause instantAction or external trigger (pause button on AGV).\nFINISHED: The action is finished. A result is reported via the resultDescription.\nFAILED: Action could not be finished for whatever reason.",
"enum": [
"WAITING",
"INITIALIZING",
"PAUSED",
"RUNNING",
"FINISHED",
"FAILED"
]
},
"resultDescription": {
"type": "string",
"description": "Description of the result, e.g. the result of a rfid-read."
}
},
"required": [
"actionId",
"actionStatus"
]
}
},
"batteryState": {
"type": "object",
"title": "batteryState",
"description": "Contains all battery-related information.",
"properties": {
"batteryCharge": {
"type": "number",
"description": "State of Charge in percent as a float value:\nIf AGV only provides values for good or bad battery levels, these will be indicated as 20% (bad) and 80% (good)."
},
"batteryVoltage": {
"type": "number",
"description": "Battery voltage"
},
"batteryHealth": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "State of health in percent as an integer within range [0..100]"
},
"charging": {
"type": "boolean",
"description": "If true: Charging in progress. If false: AGV is currently not charging."
},
"reach": {
"type": "number",
"minimum": 0,
"maximum": 4294967295,
"description": "Estimated reach with current State of Charge (in meter as uint32)"
}
},
"required": [
"batteryCharge",
"charging"
]
},
"errors": {
"type": "array",
"title": "Errors",
"description": "Array of error objects. All active errors of the AGV should be in the list. An empty array indicates that the AGV has no active errors.",
"items": {
"type": "object",
"description": "An error object.",
"title": "Error",
"properties": {
"errorType": {
"type": "string",
"description": "Type / name of error."
},
"errorReferences": {
"type": "array",
"description": "Array of references to identify the source of the error (e. g. headerId, orderId, actionId, ...).\nFor additional information see \"Best Practice\" chapter 7.",
"title": "errorReferences",
"items": {
"type": "object",
"title": "errorReference",
"description": "Object that holds the error reference (e.g. orderId, orderUpdateId, actionId...) as key-value pairs.",
"properties": {
"referenceKey": {
"type": "string",
"description": "References the type of reference (e. g. headerId, orderId, actionId, ...)."
},
"referenceValue": {
"type": "string",
"description": "References the value, which belongs to the reference key."
}
},
"required": [
"referenceKey",
"referenceValue"
]
}
},
"errorDescription": {
"type": "string",
"description": "Verbose description of error."
},
"errorLevel": {
"type": "string",
"description": "Error level.\nWARNING: AGV is ready to start (e.g. maintenance cycle expiration warning).\nFATAL: AGV is not in running condition, user intervention required (e.g. laser scanner is contaminated).",
"enum": [
"WARNING",
"FATAL"
]
}
},
"required": [
"errorType",
"errorLevel"
]
}
},
"information": {
"type": "array",
"title": "Information",
"description": "Array of information objects. An empty array indicates that the AGV has no information. This should only be used for visualization or debugging – it must not be used for logic in master control. Objects are only for visualization/debugging. There's no specification when these objects are deleted.",
"items": {
"type": "object",
"description": "An information object.",
"title": "Information",
"properties": {
"infoType": {
"type": "string",
"description": "Type / name of information."
},
"infoReferences": {
"type": "array",
"title": "infoReferences",
"description": "Array of references.",
"items": {
"type": "object",
"title": "infoReference",
"description": "Object that holds the info reference (e.g. orderId, orderUpdateId, actionId...) as key-value pairs.",
"properties": {
"referenceKey": {
"type": "string",
"description": "References the type of reference (e. g. headerId, orderId, actionId, ...)."
},
"referenceValue": {
"type": "string",
"description": "References the value, which belongs to the reference key."
}
},
"required": [
"referenceKey",
"referenceValue"
]
}
},
"infoDescription": {
"type": "string",
"description": "Info description."
},
"infoLevel": {
"type": "string",
"description": "Info level.\nDEBUG: used for debugging.\nINFO: used for visualization.",
"enum": [
"INFO",
"DEBUG"
]
}
},
"required": [
"infoType",
"infoLevel"
]
}
},
"safetyState": {
"type": "object",
"title": "safetyStatus",
"description": "Object that holds information about the safety status",
"properties": {
"eStop": {
"type": "string",
"description": "Acknowledge type of eStop.\nAUTOACK: auto-acknowledgeable e-stop is activated e.g. by bumper or protective field.\nMANUAL: e-stop has to be acknowledged manually at the vehicle.\nREMOTE: facility e-stop has to be acknowledged remotely.\nNONE: no e-stop activated.",
"enum": [
"AUTOACK",
"MANUAL",
"REMOTE",
"NONE"
]
},
"fieldViolation": {
"type": "boolean",
"description": "Protective field violation. true: field is violated. false: field is not violated."
}
},
"required": [
"eStop",
"fieldViolation"
]
}
},
"required": [
"orderId",
"orderUpdateId",
"lastNodeId",
"lastNodeSequenceId",
"nodeStates",
"edgeStates",
"driving",
"actionStates",
"batteryState",
"operatingMode",
"errors",
"safetyState"
]
}
]
}