UNPKG

vda-5050-lib

Version:

Universal VDA 5050 library for Node.js and browsers

1,649 lines 52.2 kB
/** * AGV connection state reported as a last will message. Has to be sent with retain flag. * Once the AGV comes online, it has to send this message on its connect topic, with the * connectionState enum set to "ONLINE". * The last will message is to be configured with the connection state set to * "CONNECTIONBROKEN". * Thus, if the AGV disconnects from the broker, master control gets notified via the topic * "connection". * If the AGV is disconnecting in an orderly fashion (e.g. shutting down, sleeping), the AGV * is to publish a message on this topic with the connectionState set to "OFFLINE". */ export interface Connection { /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Manufacturer of the AGV */ manufacturer: string; /** * Serial number of the AGV */ serialNumber: string; /** * Timestamp (ISO8601, UTC); YYYY-MM-DDTHH:mm:ss.ssZ; e.g. 2017-04-15T11:40:03.12Z */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch], e.g. 1.3.2 */ version: string; /** * Connection state. * ONLINE: connection between AGV and broker is active. * OFFLINE: connection between AGV and broker has gone offline in a coordinated way. * CONNECTIONBROKEN: The connection between AGV and broker has unexpectedly ended. */ connectionState: ConnectionState; } /** * Connection state. * ONLINE: connection between AGV and broker is active. * OFFLINE: connection between AGV and broker has gone offline in a coordinated way. * CONNECTIONBROKEN: The connection between AGV and broker has unexpectedly ended. */ export declare enum ConnectionState { Connectionbroken = "CONNECTIONBROKEN", Offline = "OFFLINE", Online = "ONLINE" } /** * The factsheet provides basic information about a specific AGV type series. This * information allows comparison of different AGV types and can be applied for the planning, * dimensioning and simulation of an AGV system. The factsheet also includes information * about AGV communication interfaces which are required for the integration of an AGV type * series into a VD[M]A-5050-compliant master control. */ export interface Factsheet { /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Manufacturer of the AGV */ manufacturer: string; /** * Serial number of the AGV */ serialNumber: string; /** * Timestamp (ISO8601, UTC); YYYY-MM-DDTHH:mm:ss.ssZ; e.g. 2017-04-15T11:40:03.12Z */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch], e.g. 1.3.2 */ version: string; /** * Detailed definition of AGV geometry */ agvGeometry?: AgvGeometry; /** * Abstract specification of load capabilities */ loadSpecification?: LoadSpecification; /** * Detailed specification of localization */ localizationParameters?: number; /** * These parameters specify the basic physical properties of the AGV */ physicalParameters?: PhysicalParameters; /** * Supported features of VDA5050 protocol */ protocolFeatures?: ProtocolFeatures; /** * This JSON-object describes the protocol limitations of the AGV. If a parameter is not * defined or set to zero then there is no explicit limit for this parameter. */ protocolLimits?: ProtocolLimits; /** * These parameters generally specify the class and the capabilities of the AGV */ typeSpecification?: TypeSpecification; vehicleConfig?: VehicleConfig; } /** * Detailed definition of AGV geometry */ export interface AgvGeometry { envelopes2d?: Envelopes2D[]; /** * list of AGV-envelope curves in 3D (german: „Hüllkurven“) */ envelopes3d?: Envelopes3D[]; /** * list of wheels, containing wheel-arrangement and geometry */ wheelDefinitions?: WheelDefinition[]; } export interface Envelopes2D { /** * free text: description of envelope curve set */ description?: string; /** * envelope curve as a x/y-polygon polygon is assumed as closed and must be * non-self-intersecting */ polygonPoints: PolygonPoint[]; /** * name of the envelope curve set */ set: string; } export interface PolygonPoint { /** * x-position of polygon-point */ x: number; /** * y-position of polygon-point */ y: number; } export interface Envelopes3D { /** * 3D-envelope curve data, format specified in ‚format‘ */ data?: { [key: string]: any; }; /** * free text: description of envelope curve set */ description?: number; /** * format of data e.g. DXF */ format: string; /** * name of the envelope curve set */ set: string; /** * protocol and url-definition for downloading the 3D-envelope curve data e.g. * ftp://xxx.yyy.com/ac4dgvhoif5tghji */ url?: string; } export interface WheelDefinition { /** * nominal displacement of the wheel’s center to the rotation point (necessary for caster * wheels). If the parameter is not defined, it is assumed to be 0 */ centerDisplacement?: number; /** * free text: can be used by the manufacturer to define constraints */ constraints?: string; /** * nominal diameter of wheel */ diameter: number; /** * True: wheel is actively driven (de: angetrieben) */ isActiveDriven: boolean; /** * True: wheel is actively steered (de: aktiv gelenkt) */ isActiveSteered: boolean; position: Position; /** * wheel type. DRIVE, CASTER, FIXED, MECANUM */ type: Type; /** * nominal width of wheel */ width: number; } export interface Position { /** * orientation of wheel in AGV-coordinate system Necessary for fixed wheels */ theta?: number; /** * [m] x-position in AGV-coordinate system */ x: number; /** * y-position in AGV-coordinate system */ y: number; } /** * wheel type. DRIVE, CASTER, FIXED, MECANUM */ export declare enum Type { Caster = "CASTER", Drive = "DRIVE", Fixed = "FIXED", Mecanum = "MECANUM" } /** * Abstract specification of load capabilities */ export interface LoadSpecification { /** * list of load positions / load handling devices. This lists contains the valid values for * the oarameter “state.loads[].loadPosition” and for the action parameter “lhd” of the * actions pick and drop. If this list doesn’t exist or is empty, the AGV has no load * handling device. */ loadPositions?: string[]; /** * list of load-sets that can be handled by the AGV */ loadSets?: LoadSet[]; } export interface LoadSet { /** * maximum allowed acceleration for this load-type and –weight */ agvAccelerationLimit?: number; /** * maximum allowed deceleration for this load-type and –weight */ agvDecelerationLimit?: number; /** * maximum allowed speed for this load-type and –weight */ agvSpeedLimit?: number; /** * bounding box reference as defined in parameter loads[] in state-message */ boundingBoxReference?: LoadSetBoundingBoxReference; /** * free text description of the load handling set */ description?: number; /** * approx. time for dropping the load */ dropTime?: number; loadDimensions?: LoadSetLoadDimensions; /** * 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 AGV. */ loadPositions?: string[]; /** * type of load e.g. EPAL, XLT1200, …. */ loadType: string; /** * maximum allowed depth for this load-type and –weight. references to boundingBoxReference */ maxLoadhandlingDepth?: number; /** * maximum allowed height for handling of this load-type and –weight. references to * boundingBoxReference */ maxLoadhandlingHeight?: number; /** * maximum allowed tilt for this load-type and –weight */ maxLoadhandlingTilt?: number; /** * maximum weight of loadtype */ maxWeigth?: number; /** * minimum allowed depth for this load-type and –weight. references to boundingBoxReference */ minLoadhandlingDepth?: number; /** * minimum allowed height for handling of this load-type and –weight. References to * boundingBoxReference */ minLoadhandlingHeight?: number; /** * minimum allowed tilt for this load-type and –weight */ minLoadhandlingTilt?: number; /** * approx. time for picking up the load */ pickTime?: number; /** * Unique name of the load set, e.g. DEFAULT, SET1, ... */ setName: string; } /** * bounding box reference as defined in parameter loads[] in state-message */ export interface LoadSetBoundingBoxReference { /** * Orientation of the loads bounding box. Important for tugger trains, etc. */ theta?: number; /** * x-coordinate of the point of reference. */ x: number; /** * y-coordinate of the point of reference. */ y: number; /** * z-coordinate of the point of reference. */ z: number; } export interface LoadSetLoadDimensions { /** * Absolute height of the load´s bounding box. Optional: Set value only if known. */ height?: number; /** * Absolute length of the load´s bounding box. */ length: number; /** * Absolute width of the load´s bounding bo */ width: number; } /** * These parameters specify the basic physical properties of the AGV */ export interface PhysicalParameters { /** * maximum acceleration with maximum load */ accelerationMax: number; /** * maximum deceleration with maximum load */ decelerationMax: number; /** * maximum height of AGV */ heightMax: number; /** * minimum height of AGV */ heightMin?: number; /** * length of AGV */ length: number; /** * maximum speed of the AGV */ speedMax: number; /** * minimal controlled continuous speed of the AGV */ speedMin: number; /** * width of AGV */ width: number; } /** * Supported features of VDA5050 protocol */ export interface ProtocolFeatures { /** * list of all actions with parameters supported by this AGV. This includes standard actions * specified in VDA5050 and manufacturer-specific actions */ agvActions: AgvAction[]; /** * list of supported and/or required optional parameters. Optional parameters, that are not * listed here, are assumed to be not supported by the AGV. */ optionalParameters: OptionalParameter[]; } export interface AgvAction { /** * free text: description of the action */ actionDescription?: string; /** * list of parameters. if not defined, the action has no parameters */ actionParameters?: AgvActionActionParameter[]; /** * list of allowed scopes for using this action-type. INSTANT: usable as instantAction, * NODE: usable on nodes, EDGE: usable on edges. */ actionScopes: AgvActionActionScope[]; /** * unique actionType corresponding to action.actionType */ actionType: string; /** * free text: description of the resultDescription */ resultDescription?: string; } export interface AgvActionActionParameter { /** * free text: description of the parameter */ description?: string; /** * True: optional parameter */ isOptional?: boolean; /** * key-String for Parameter */ key: string; /** * data type of Value, possible data types are: BOOL, NUMBER, INTEGER, FLOAT, STRING, * OBJECT, ARRAY */ valueDataType: ValueDataType; } /** * data type of Value, possible data types are: BOOL, NUMBER, INTEGER, FLOAT, STRING, * OBJECT, ARRAY */ export declare enum ValueDataType { Array = "ARRAY", Bool = "BOOL", Float = "FLOAT", Integer = "INTEGER", Number = "NUMBER", Object = "OBJECT", String = "STRING" } export declare enum AgvActionActionScope { Edge = "EDGE", Instant = "INSTANT", Node = "NODE" } export interface OptionalParameter { /** * free text. Description of optional parameter. E.g. Reason, why the optional parameter * ‚direction‘ is necessary for this AGV-type and which values it can contain. The parameter * ‘nodeMarker’ must contain unsigned interger-numbers only. Nurbs-Support is limited to * straight lines and circle segments. */ description?: string; /** * full name of optional parameter, e.g. “order.nodes.nodePosition.allowedDeviationTheta” */ parameter: string; /** * 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 AGV-operation. */ support: Support; } /** * 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 AGV-operation. */ export declare enum Support { Required = "REQUIRED", Supported = "SUPPORTED" } /** * This JSON-object describes the protocol limitations of the AGV. If a parameter is not * defined or set to zero then there is no explicit limit for this parameter. */ export interface ProtocolLimits { /** * maximum lengths of arrays */ maxArrayLens: { [key: string]: any; }; /** * maximum lengths of strings */ maxStringLens: MaxStringLens; /** * timing information */ timing: Timing; } /** * maximum lengths of strings */ export interface MaxStringLens { /** * maximum length of ENUM- and Key-Strings. Affected parameters: action.actionType, * action.blockingType, edge.direction, actionParameter.key, state.operatingMode, * load.loadPosition, load.loadType, actionState.actionStatus, error.errorType, * error.errorLevel, errorReference.referenceKey, info.infoType, info.infoLevel, * safetyState.eStop, connection.connectionState */ enumLen?: number; /** * maximum length of ID-Strings. Affected parameters: order.orderId, order.zoneSetId, * node.nodeId, nodePosition.mapId, action.actionId, edge.edgeId, edge.startNodeId, * edge.endNodeId */ idLen?: number; /** * If true ID-strings need to contain numerical values only */ idNumericalOnly?: boolean; /** * maximum length of loadId Strings */ loadIdLen?: number; /** * maximum MQTT Message length */ msgLen?: number; /** * 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 */ topicElemLen?: number; /** * maximum length of serial-number part in MQTT-topics. Affected Parameters: * order.serialNumber, instantActions.serialNumber, state.SerialNumber, * visualization.serialNumber, connection.serialNumber */ topicSerialLen?: number; } /** * timing information */ export interface Timing { /** * default interval for sending state-messages if not defined, the default value from the * main document is used */ defaultStateInterval?: number; /** * minimum interval sending order messages to the AGV */ minOrderInterval: number; /** * minimum interval for sending state-messages */ minStateInterval: number; /** * default interval for sending messages on visualization topic */ visualizationInterval?: number; } /** * These parameters generally specify the class and the capabilities of the AGV */ export interface TypeSpecification { /** * Simplified description of AGV class. */ agvClass: AgvClass; /** * simplified description of AGV kinematics-type. */ agvKinematic: AgvKinematic; /** * simplified description of localization type */ localizationTypes: LocalizationType[]; /** * maximum loadable mass */ maxLoadMass: number; /** * List of path planning types supported by the AGV, sorted by priority */ navigationTypes: NavigationType[]; /** * Free text human readable description of the AGV type series */ seriesDescription?: string; /** * Free text generalized series name as specified by manufacturer */ seriesName: string; } /** * Simplified description of AGV class. */ export declare enum AgvClass { Carrier = "CARRIER", Conveyor = "CONVEYOR", Forklift = "FORKLIFT", Tugger = "TUGGER" } /** * simplified description of AGV kinematics-type. */ export declare enum AgvKinematic { Diff = "DIFF", Omni = "OMNI", Threewheel = "THREEWHEEL" } export declare enum LocalizationType { Dmc = "DMC", Grid = "GRID", Natural = "NATURAL", RFID = "RFID", Reflector = "REFLECTOR", Spot = "SPOT" } export declare enum NavigationType { Autonomous = "AUTONOMOUS", PhysicalLindeGuided = "PHYSICAL_LINDE_GUIDED", VirtualLineGuided = "VIRTUAL_LINE_GUIDED" } export interface VehicleConfig { network?: Network; /** * Array containing various hardware and software versions running on the vehicle. */ versions?: Version[]; } export interface Network { /** * Default gateway used by the vehicle. */ defaultGateway?: string; /** * List of DNS servers used by the vehicle. */ dnsServers?: string[]; /** * A priori assigned IP address of the vehicle used to communicate with the MQTT broker. * Note that this IP address should not be modified/changed during operations. */ localIpAddress?: string; /** * Network subnet mask. */ netmask?: string; /** * List of NTP servers used by the vehicle. */ ntpServers?: string[]; } export interface Version { /** * The key of the version. */ key: string; /** * The value of the action parameter. */ value: string; } /** * Includes the protocol header of a VDA 5050 object defining common properties: headerId, * manufacturer, serialNumber, timestamp, version. */ export interface Header { /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Manufacturer of the AGV */ manufacturer: string; /** * Serial number of the AGV */ serialNumber: string; /** * Timestamp (ISO8601, UTC); YYYY-MM-DDTHH:mm:ss.ssZ; e.g. 2017-04-15T11:40:03.12Z */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch], e.g. 1.3.2 */ version: string; } /** * Instant actions that the AGV is to execute as soon as they arrive. */ export interface InstantActions { /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Manufacturer of the AGV */ manufacturer: string; /** * Serial number of the AGV */ serialNumber: string; /** * Timestamp (ISO8601, UTC); YYYY-MM-DDTHH:mm:ss.ssZ; e.g. 2017-04-15T11:40:03.12Z */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch], e.g. 1.3.2 */ version: string; /** * Array of actions that need to be performed immediately and are not part of the regular * order. */ actions?: Action[]; /** * Array of actions that need to be performed immediately and are not part of the regular * order. */ instantActions?: Action[]; } /** * Instant Action Object * * Edge Action Object * * Node Action Object */ export interface Action { /** * Additional information on the action. */ actionDescription?: string; /** * ID to distinguish between multiple actions, either instant or with the same type on the * same node/edge. */ actionId: string; /** * Array of actionParameter objects for the indicated action e.g. deviceId, loadId, external * triggers. */ actionParameters?: ActionParameter[]; /** * Name of action as described in the first column of "Actions and Parameters" * Identifies the function of the action. */ actionType: string; /** * Regulates if the action is allowed to be executed during movement and/or parallel to * other actions. * NONE: action can happen in parallel with others, including movement. * SOFT: action can happen simultaneously with others, but not while moving. * HARD: no other actions can be performed while this action is running. */ blockingType: BlockingType; } /** * ActionParameter Object */ export interface ActionParameter { /** * The key of the action parameter. For example. duration, direction, signal. */ key: string; /** * The value of the action parameter. For example: 103.2, "left", true, [ 1, 2, 3]. */ value: any[] | boolean | number | string; } /** * Regulates if the action is allowed to be executed during movement and/or parallel to * other actions. * NONE: action can happen in parallel with others, including movement. * SOFT: action can happen simultaneously with others, but not while moving. * HARD: no other actions can be performed while this action is running. */ export declare enum BlockingType { Hard = "HARD", None = "NONE", Soft = "SOFT" } /** * An order to be communicated from master control to the AGV. */ export interface Order { /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Manufacturer of the AGV */ manufacturer: string; /** * Serial number of the AGV */ serialNumber: string; /** * Timestamp (ISO8601, UTC); YYYY-MM-DDTHH:mm:ss.ssZ; e.g. 2017-04-15T11:40:03.12Z */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch], e.g. 1.3.2 */ version: string; /** * Base and Horizon Edges of the Order Graph. */ edges: Edge[]; /** * This list holds the base and the horizon nodes of the order graph. */ nodes: Node[]; /** * Unique order Identification. */ orderId: string; /** * orderUpdate identification. Is unique per orderId. If an order update is rejected, this * field is to be passed in the rejection message. */ orderUpdateId: number; /** * Unique identifier of the zone set that the AGV has to use for navigation or that was used * by MC for planning. * Optional: Some MC systems do not use zones. Some AGVs do not understand zones. Do not add * to message if no zones are used. */ zoneSetId?: string; } export interface Edge { /** * Array of action objects with detailed information. */ actions: Action[]; /** * Definition of boundaries in which a vehicle can deviate from its trajectory, e. g. to * avoid obstacles. */ corridor?: Corridor; /** * Sets direction at junctions for line-guided vehicles, to be defined initially * (vehicle-individual). Can be descriptive (left, right, middle, straight) or a frequency * ("433MHz"). */ direction?: string; /** * Verbose description of the edge. */ edgeDescription?: string; /** * Unique edge identification */ edgeId: string; /** * The nodeId of the end node. */ endNodeId: string; /** * Distance of the path from startNode to endNode in meters. * Optional: This value is used by line-guided AGVs to decrease their speed before reaching * a stop position. */ length?: number; /** * Permitted maximum height of the vehicle, including the load, on edge. In meters. */ maxHeight?: number; /** * Maximum rotation speed in rad/s */ maxRotationSpeed?: number; /** * permitted maximum speed of the agv on the edge in m/s. Speed is defined by the fastest * point of the vehicle. */ maxSpeed?: number; /** * Permitted minimal height of the edge measured at the bottom of the load. In meters. */ minHeight?: number; /** * Orientation of the AGV on the edge relative to the map coordinate origin (for holonomic * vehicles with more than one driving direction). * Example: orientation Pi/2 rad will lead to a rotation of 90 degrees. * If AGV starts in different orientation, rotate the vehicle on the edge to the desired * orientation if rotationAllowed is set to "true". * If rotationAllowed is "false", rotate before entering the edge. * If that is not possible, reject the order. * If a trajectory with orientation is defined, follow the trajectories orientation. If a * trajectory without orientation and the orientation field here is defined, apply the * orientation to the tangent of the trajectory. */ orientation?: number; /** * Enum * "GLOBAL"- relative to the global project specific map coordinate system; * "TANGENTIAL"- tangential to the edge. * If not defined, the default value is "TANGENTIAL". */ orientationType?: OrientationType; /** * If true, the edge is part of the base plan. If false, the edge is part of the horizon * plan. */ released: boolean; /** * If true, rotation is allowed on the edge. */ rotationAllowed?: boolean; /** * Id to track the sequence of nodes and edges in an order and to simplify order updates. * The variable sequenceId runs across all nodes and edges of the same order and is reset * when a new orderId is issued. */ sequenceId: number; /** * The nodeId of the start node. */ startNodeId: string; /** * Trajectory JSON-object for this edge as a NURBS. Defines the curve on which the AGV * should move between startNode and endNode. * Optional: Can be omitted if AGV cannot process trajectories or if AGV plans its own * trajectory. */ trajectory?: Trajectory; } /** * Definition of boundaries in which a vehicle can deviate from its trajectory, e. g. to * avoid obstacles. */ export interface Corridor { /** * Defines whether the boundaries are valid for the kinematic center or the contour of the * vehicle. */ corridorRefPoint?: CorridorRefPoint; /** * Defines the width of the corridor in meters to the left related to the trajectory of the * vehicle. */ leftWidth: number; /** * Defines the width of the corridor in meters to the right related to the trajectory of the * vehicle. */ rightWidth: number; } /** * Defines whether the boundaries are valid for the kinematic center or the contour of the * vehicle. */ export declare enum CorridorRefPoint { Contour = "CONTOUR", Kinematiccenter = "KINEMATICCENTER" } /** * Enum * "GLOBAL"- relative to the global project specific map coordinate system; * "TANGENTIAL"- tangential to the edge. * If not defined, the default value is "TANGENTIAL". */ export declare enum OrientationType { Global = "GLOBAL", Tangential = "TANGENTIAL" } /** * Trajectory JSON-object for this edge as a NURBS. Defines the curve on which the AGV * should move between startNode and endNode. * Optional: Can be omitted if AGV cannot process trajectories or if AGV plans its own * trajectory. * * The trajectory is to be communicated as a NURBS and is defined in chapter 6.4. * Trajectory 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. */ export interface Trajectory { /** * List of JSON controlPoint objects defining the control points of the NURBS. This includes * the start and end point. */ controlPoints: ControlPoint[]; /** * Defines the number of control points that influence any given point on the curve. * Increasing the degree increases continuity. * If not defined, the default value is 1. */ degree: number; /** * Sequence of parameter values that determine where and how the control points affect the * NURBS curve. knotVector has size of number of control points + degree + 1 */ knotVector: number[]; } export interface ControlPoint { /** * Range: [-pi .. pi]. Orientation of the AGV on this position of the curve. The orientation * is in world coordinates. * When not defined the orientation of the AGV will be tangential to the curve. */ orientation?: number; /** * Range: (0 .. Infinity). The weight with which this control point pulls on the curve. * When not defined, the default will be 1.0. */ weight?: number; /** * X coordinate described in the world coordinate system. */ x: number; /** * Y coordinate described in the world coordinate system. */ y: number; } export interface Node { /** * Array of actions that are to be executed on the node. Their sequence in the list governs * their sequence of execution. */ actions: Action[]; /** * Verbose Node Description. */ nodeDescription?: string; /** * Unique node identification. For example: pumpenhaus_1, MONTAGE */ nodeId: string; /** * Defines the position on a map in world coordinates. Each floor has its own map. Precision * is up to the specific implementation. */ nodePosition?: NodePosition; /** * If true, the node is part of the base plan. If false, the node is part of the horizon * plan. */ released: boolean; /** * Id to track the sequence of nodes and edges in an order and to simplify order updates. * The main purpose is to distinguish between a node which is passed more than once within * one orderId. The variable sequenceId can run across all nodes and edges of the same order * and is reset when a new orderId is issued. */ sequenceId: number; } /** * Defines the position on a map in world coordinates. Each floor has its own map. Precision * is up to the specific implementation. * * 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. */ export interface NodePosition { /** * Indicates how big the deviation of theta angle can be. The lowest acceptable angle is * theta - allowedDeviationTheta and the highest acceptable angle is theta + * allowedDeviationTheta. * If = 0: no deviation is allowed (no deviation means within the normal tolerance of the * AGV manufacturer). */ allowedDeviationTheta?: number; /** * Indicates how exact an AGV has to drive over a node in order for it to count as * traversed. * If = 0: no deviation is allowed (no deviation means within the normal tolerance of the * AGV manufacturer). * If > 0: allowed deviation-radius in meters. If the AGV passes a node within the * deviation-radius, the node is considered to have been traversed. */ allowedDeviationXy?: number; /** * Verbose description of the Map */ mapDescription?: string; /** * Unique identification of the map in which the position is referenced. * Each map has the same origin of coordinates. When an AGV uses an elevator, e. g. leading * from a departure floor to a target floor, it will disappear off the map of the departure * floor and spawn in the related lift node on the map of the target floor. */ mapId: string; /** * Range: [-pi .. pi]. * Orientation of the AGV on the node. * Optional: vehicle can plan the path by itself. * If defined, the AGV has to assume the theta angle on this node. * If previous edge disallows rotation, the AGV is to rotate on the node. * If following edge has a differing orientation defined but disallows rotation, the AGV is * to rotate on the node to the edges desired rotation before entering the edge. */ theta?: number; /** * X coordinate described in the world coordinate system. */ x: number; /** * Y coordinate described in the world coordinate system. */ y: number; } /** * All encompassing state of the AGV. */ export interface State { /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Manufacturer of the AGV */ manufacturer: string; /** * Serial number of the AGV */ serialNumber: string; /** * Timestamp (ISO8601, UTC); YYYY-MM-DDTHH:mm:ss.ssZ; e.g. 2017-04-15T11:40:03.12Z */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch], e.g. 1.3.2 */ version: string; /** * 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. * When 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. */ actionStates: ActionState[]; /** * Current position of the AGV on the map. * Optional: Can only be omitted for AGVs without the capability to localize themselves, * e.g. line guided AGVs. */ agvPosition?: AgvPosition; /** * Contains all battery-related information. */ batteryState: BatteryState; /** * Used by line guided vehicles to indicate the distance it has been driving past the * lastNodeId. * Distance is in meters */ distanceSinceLastNode?: number; /** * True: indicates that the AGV is driving and/or rotating. Other movements of the AGV (e.g. * lift movements) are not included here. * False: indicates that the AGV is neither driving nor rotating */ driving: boolean; /** * Information about the edges the AGV still has to drive over. Empty list if the AGV is * idle. */ edgeStates: EdgeState[]; /** * 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. */ errors: Error[]; /** * 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. */ information?: Information[]; /** * 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. */ lastNodeId: string; /** * sequenceId of the last reached node or, if the AGV is currently on a node, sequenceId of * current node. * 0 if no lastNodeSequenceId is available. */ lastNodeSequenceId: number; /** * 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. */ loads?: Load[]; /** * Array of map-objects that are currently stored on the vehicle. */ maps?: any[]; /** * 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 * False: no base update required */ newBaseRequest?: boolean; /** * Information about the nodes the AGV still has to drive over. Empty list if idle. */ nodeStates: NodeState[]; /** * Current operating mode of the AGV. For additional information, see the table * OperatingModes in chapter 6.10.6. */ operatingMode: OperatingMode; /** * 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. */ orderId: string; /** * Order Update Identification to identify that an order update has been accepted by the * AGV. 0 if no previous orderUpdateId is available. */ orderUpdateId: number; /** * 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. * False: The AGV is currently not in a paused state. */ paused?: boolean; /** * Object that holds information about the safety status */ safetyState: SafetyStatus; /** * The AGVs velocity in vehicle coordinates. */ velocity?: Velocity; /** * 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. * Optional: If the AGV does not use zones, this field can be omitted. */ zoneSetId?: string; } export interface ActionState { /** * Additional information on the action. */ actionDescription?: string; /** * Unique actionId, e.g. blink_123jdaimoim234 */ actionId: string; /** * Action status. * WAITING: 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. * INITIALIZING: Action was triggered, preparatory measures are initiated. * RUNNING: The action is running. * PAUSED: The action is paused because of a pause instantAction or external trigger (pause * button on AGV). * FINISHED: The action is finished. A result is reported via the resultDescription. * FAILED: Action could not be finished for whatever reason. */ actionStatus: ActionStatus; /** * actionType of the action. * Optional: Only for informational or visualization purposes. Order knows the type. */ actionType?: string; /** * Description of the result, e.g. the result of a rfid-read. */ resultDescription?: string; } /** * Action status. * WAITING: 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. * INITIALIZING: Action was triggered, preparatory measures are initiated. * RUNNING: The action is running. * PAUSED: The action is paused because of a pause instantAction or external trigger (pause * button on AGV). * FINISHED: The action is finished. A result is reported via the resultDescription. * FAILED: Action could not be finished for whatever reason. */ export declare enum ActionStatus { Failed = "FAILED", Finished = "FINISHED", Initializing = "INITIALIZING", Paused = "PAUSED", Running = "RUNNING", Waiting = "WAITING" } /** * Current position of the AGV on the map. * Optional: Can only be omitted for AGVs without the capability to localize themselves, * e.g. line guided AGVs. */ export interface AgvPosition { /** * Value for the deviation range of the position in meters. * Optional for vehicles that cannot estimate their deviation e.g. grid-based localization. * Only for logging and visualization purposes. */ deviationRange?: number; /** * Describes the quality of the localization and therefore, can be used e.g. by SLAM-AGVs to * describe how accurate the current position information is. * 0.0: position unknown * 1.0: position known * Optional for vehicles that cannot estimate their localization score. * Only for logging and visualization purposes */ localizationScore?: number; /** * Additional information on the map. */ mapDescription?: string; /** * Unique identification of the map in which the position is referenced. * Each map has the same origin of coordinates. When an AGV uses an elevator, e.g. leading * from a departure floor to a target floor, it will disappear off the map of the departure * floor and spawn in the related lift node on the map of the target floor. */ mapId: string; /** * True if the AGVs position is initialized, false, if position is not initialized. */ positionInitialized: boolean; /** * Range: [-pi ... pi] * Orientation of the AGV. */ theta: number; /** * X-position on the map in reference to the map coordinate system. Precision is up to the * specific implementation. */ x: number; /** * Y-position on the map in reference to the map coordinate system. Precision is up to the * specific implementation. */ y: number; } /** * Contains all battery-related information. */ export interface BatteryState { /** * State of Charge in percent as a float value: * If AGV only provides values for good or bad battery levels, these will be indicated as * 20% (bad) and 80% (good). */ batteryCharge: number; /** * State of health in percent as an integer within range [0..100] */ batteryHealth?: number; /** * Battery voltage */ batteryVoltage?: number; /** * If true: Charging in progress. If false: AGV is currently not charging. */ charging: boolean; /** * Estimated reach with current State of Charge (in meter as uint32) */ reach?: number; } export interface EdgeState { /** * Verbose Edge description */ edgeDescription?: string; /** * Unique edge identification */ edgeId: string; /** * True: Edge is part of base. False: Edge is part of horizon. */ released: boolean; /** * sequenceId of the edge. */ sequenceId: number; /** * The trajectory is to be communicated as a NURBS and is defined in chapter 6.4. * Trajectory 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. */ trajectory?: Trajectory; } /** * An error object. */ export interface Error { /** * Verbose description of error. */ errorDescription?: string; /** * Hint on how to approach or solve the reported error. */ errorHint?: string; /** * Error level. * WARNING: AGV is ready to start (e.g. maintenance cycle expiration warning). * FATAL: AGV is not in running condition, user intervention required (e.g. laser scanner is * contaminated). */ errorLevel: ErrorLevel; /** * Array of references to identify the source of the error (e. g. headerId, orderId, * actionId, ...). * For additional information see "Best Practice" chapter 7. */ errorReferences?: ErrorReference[]; /** * Type / name of error. */ errorType: string; } /** * Error level. * WARNING: AGV is ready to start (e.g. maintenance cycle expiration warning). * FATAL: AGV is not in running condition, user intervention required (e.g. laser scanner is * contaminated). */ export declare enum ErrorLevel { Fatal = "FATAL", Warning = "WARNING" } /** * Object that holds the error reference (e.g. orderId, orderUpdateId, actionId...) as * key-value pairs. */ export interface ErrorReference { /** * References the type of reference (e. g. headerId, orderId, actionId, ...). */ referenceKey: string; /** * References the value, which belongs to the reference key. */ referenceValue: string; } /** * An information object. */ export interface Information { /** * Info description. */ infoDescription?: string; /** * Info level. * DEBUG: used for debugging. * INFO: used for visualization. */ infoLevel: InfoLevel; /** * Array of references. */ infoReferences?: InfoReference[]; /** * Type / name of information. */ infoType: string; } /** * Info level. * DEBUG: used for debugging. * INFO: used for visualization. */ export declare enum InfoLevel { Debug = "DEBUG", Info = "INFO" } /** * Object that holds the info reference (e.g. orderId, orderUpdateId, actionId...) as * key-value pairs. */ export interface InfoReference { /** * References the type of reference (e. g. headerId, orderId, actionId, ...). */ referenceKey: string; /** * References the value, which belongs to the reference key. */ referenceValue: string; } /** * Load object that describes the load if the AGV has information about it. */ export interface Load { /** * 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. */ boundingBoxReference?: BoundingBoxReference; /** * Dimensions of the load's bounding box in meters. */ loadDimensions?: LoadDimensions; /** * Unique identification number of the load (e. g. barcode or RFID) * Empty field if the AGV can identify the load but didn't identify the load yet. * Optional if the AGV has cannot identify the load. */ loadId?: string; /** * Indicates which load handling/carrying unit of the AGV is used, e. g. in case the AGV has * multiple spots/positions to carry loads. * For example: front, back, positionC1, etc. * Optional for vehicles with only one loadPosition. */ loadPosition?: string; /** * Type of load. */ loadType?: string; /** * Weight of load in kg */ weight?: number; } /** * 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. */ export interface BoundingBoxReference { /** * Orientation of the loads bounding box. Important for tugger trains etc. */ theta?: number; /** * x-coordinate of the point of reference. */ x: number; /** * y-coordinate of the point of reference. */ y: number; /** * z-coordinate of the point of reference. */ z: number; } /** * Dimensions of the load's bounding box in meters. */ export interface LoadDimensions { /** * Absolute height of the loads bounding box in meter. * Optional: * Set value only if known. */ height?: number; /** * Absolute length of the loads bounding box in meter. */ length: number; /** * Absolute width of the loads bounding box in meter. */ width: number; } export interface NodeState { /** * Verbose node description */ nodeDescription?: string; /** * Unique node identification */ nodeId: string; /** * 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. */ nodePosition?: NodePosition; /** * True: indicates that the node is part of the base. False: indicates that the node is part * of the horizon. */ released: boolean; /** * sequenceId of the node. */ sequenceId: number; } /** * Current operating mode of the AGV. For additional information, see the table * OperatingModes in chapter 6.10.6. */ export declare enum OperatingMode { Automatic = "AUTOMATIC", Manual = "MANUAL", Semiautomatic = "SEMIAUTOMATIC", Service = "SERVICE", Teachin = "TEACHIN" } /** * Object that holds information about the safety status */ export interface SafetyStatus { /** * Acknowledge type of eStop. * AUTOACK: auto-acknowledgeable e-stop is activated e.g. by bumper or protective field. * MANUAL: e-stop has to be acknowledged manually a