UNPKG

vda-5050-lib

Version:

Universal VDA 5050 library for Node.js and browsers

1,535 lines 70.9 kB
/** * The last will message of the mobile robot. Has to be sent with retain flag. Once the * mobile robot 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 mobile robot disconnects from the broker, fleet control gets notified via * the topic "connection". If the mobile robot is disconnecting in an orderly fashion (e.g. * shutting down, sleeping), the mobile robot is to publish a message on this topic with the * connectionState set to "DISCONNECTED". */ export interface Connection { /** * ONLINE: connection between mobile robot and broker is active. OFFLINE: connection between * mobile robot and broker has gone offline in a coordinated way. HIBERNATING: connection * between mobile robot and broker is active, but mobile robot does not state messages. This * mode is intended for power-saving or communication reduction. The mobile robot can resume * to ONLINE when instructed. CONNECTION_BROKEN: The connection between mobile robot and * broker has unexpectedly ended. */ connectionState: ConnectionState; /** * Header ID 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 mobile robot. */ manufacturer: string; /** * Serial number of the mobile robot. */ serialNumber: string; /** * Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.fffZ). */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch] */ version: string; [property: string]: any; } /** * ONLINE: connection between mobile robot and broker is active. OFFLINE: connection between * mobile robot and broker has gone offline in a coordinated way. HIBERNATING: connection * between mobile robot and broker is active, but mobile robot does not state messages. This * mode is intended for power-saving or communication reduction. The mobile robot can resume * to ONLINE when instructed. CONNECTION_BROKEN: The connection between mobile robot and * broker has unexpectedly ended. */ export declare enum ConnectionState { ConnectionBroken = "CONNECTION_BROKEN", Hibernating = "HIBERNATING", Offline = "OFFLINE", Online = "ONLINE" } /** * 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. */ export interface Factsheet { /** * Header ID of the message. The headerId is defined per topic and incremented by 1 with * each sent (but not necessarily received) message. */ headerId: number; /** * Abstract specification of load capabilities */ loadSpecification: LoadSpecification; /** * Manufacturer of the mobile robot */ manufacturer: string; mobileRobotConfiguration?: MobileRobotConfiguration; /** * Detailed definition of mobile robot geometry */ mobileRobotGeometry: MobileRobotGeometry; /** * These parameters specify the basic physical properties of the mobile robot */ physicalParameters: PhysicalParameters; /** * Supported features of VDA5050 protocol */ protocolFeatures: ProtocolFeatures; /** * 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. */ protocolLimits: ProtocolLimits; /** * Serial number of the mobile robot */ serialNumber: string; /** * Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.fffZ). */ timestamp: string; /** * These parameters generally specify the class and the capabilities of the mobile robot */ typeSpecification: TypeSpecification; /** * Version of the protocol [Major].[Minor].[Patch] */ version: string; [property: string]: any; } /** * Abstract specification of load capabilities */ export interface LoadSpecification { /** * List of load positions / load handling devices. This lists contains the valid values for * the parameter “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 mobile robot has no * load handling device. */ loadPositions?: string[]; /** * List of load-sets that can be handled by the mobile robot */ loadSets?: LoadSet[]; [property: string]: any; } export interface LoadSet { /** * Bounding box reference as defined in parameter loads[] in state-message */ boundingBoxReference?: LoadSetBoundingBoxReference; /** * Free text description of the load handling set */ description?: string; /** * Approximate 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 mobile robot. */ loadPositions?: string[]; /** * Type of load e.g., EPAL, XLT1200, …. */ loadType: string; /** * Maximum allowed acceleration for this load-type and –weight */ maximumAcceleration?: number; /** * Maximum allowed deceleration for this load-type and –weight */ maximumDeceleration?: number; /** * Maximum allowed depth for this load-type and –weight. references to boundingBoxReference */ maximumLoadhandlingDepth?: number; /** * Maximum allowed height for handling of this load-type and –weight. references to * boundingBoxReference */ maximumLoadhandlingHeight?: number; /** * Maximum allowed tilt for this load-type and –weight */ maximumLoadhandlingTilt?: number; /** * Maximum allowed speed for this load-type and –weight */ maximumSpeed?: number; /** * Maximum weight of loadtype */ maximumWeight?: number; /** * Minimum allowed depth for this load-type and –weight. references to boundingBoxReference */ minimumLoadhandlingDepth?: number; /** * Minimum allowed height for handling of this load-type and –weight. References to * boundingBoxReference */ minimumLoadhandlingHeight?: number; /** * Minimum allowed tilt for this load-type and –weight */ minimumLoadhandlingTilt?: number; /** * Approximate time for picking up the load */ pickTime?: number; /** * Unique name of the load set, e.g., DEFAULT, SET1, ... */ setName: string; [property: string]: any; } /** * 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; [property: string]: any; } export interface LoadSetLoadDimensions { /** * Absolute height of the load´s bounding box. Optional: Set value only if known. */ height?: number; /** * Absolute length (along the mobile robot’s coordinate system’s x-axis) of the load's * bounding box in meters. */ length: number; /** * Absolute width (along the mobile robot’s coordinate system’s y-axis) of the load's * bounding box in meters. */ width: number; [property: string]: any; } export interface MobileRobotConfiguration { /** * Information about battery charging parameters. */ "batteryCharging "?: BatteryCharging; /** * Information about the mobile robot's network connection. The listed information shall not * be updated while the mobile robot is operating. */ network?: Network; /** * Array containing various hardware and software versions running on the mobile robot. */ versions?: Version[]; [property: string]: any; } /** * Information about battery charging parameters. */ export interface BatteryCharging { /** * 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. */ criticalLowChargingLevel?: number; /** * Specifies the maximum desired charging level in percent. */ maximumDesiredChargingLevel?: number; /** * Specifies the desired minimum charging time in seconds. */ minimumChargingTime?: number; /** * Specifies the minimum desired charging level in percent. */ minimumDesiredChargingLevel?: number; [property: string]: any; } /** * Information about the mobile robot's network connection. The listed information shall not * be updated while the mobile robot is operating. */ export interface Network { /** * Default gateway used by the mobile robot. */ defaultGateway?: string; /** * List of DNS servers used by the mobile robot. */ dnsServers?: string[]; /** * 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. */ localIpAddress?: string; /** * Network subnet mask. */ netmask?: string; /** * List of NTP servers used by the mobile robot. */ ntpServers?: string[]; [property: string]: any; } export interface Version { /** * The key of the version. */ key: string; /** * The value of the version. */ value: string; [property: string]: any; } /** * Detailed definition of mobile robot geometry */ export interface MobileRobotGeometry { envelopes2d?: Envelopes2D[]; /** * List of mobile robot envelope curves in 3D (german: „Hüllkurven“) */ envelopes3d?: Envelopes3D[]; /** * List of wheels, containing wheel-arrangement and geometry */ wheelDefinitions?: WheelDefinition[]; [property: string]: any; } export interface Envelopes2D { /** * Free text: description of envelope curve set */ description?: string; /** * Identifier of the envelope curve set. */ envelope2dId: string; /** * The envelope curve in defined as a polygon. It shall be assumed as closed. Only simple * polygons shall be used. */ vertices: Envelopes2DVertex[]; [property: string]: any; } export interface Envelopes2DVertex { /** * X-position of polygon-point */ x: number; /** * Y-position of polygon-point */ y: number; [property: string]: any; } export interface Envelopes3D { /** * 3D-envelope curve data, format specified in ‚format‘ */ data?: { [key: string]: any; }; /** * Free text: description of envelope curve set */ description?: string; /** * Identifier of the envelope curve set. */ envelope3dId: string; /** * Format of data, e.g., DXF */ format: string; /** * Protocol and url-definition for downloading the 3D-envelope curve data, e.g., * ftp://xxx.yyy.com/ac4dgvhoif5tghji */ url?: string; [property: string]: any; } 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 */ isActiveDriven: boolean; /** * True: wheel is actively steered */ isActiveSteered: boolean; position: Position; /** * Wheel type. Extensible enum: DRIVE, CASTER, FIXED, MECANUM */ type: string; /** * Nominal width of wheel */ width: number; [property: string]: any; } export interface Position { /** * Orientation of wheel in mobile robot coordinate system Necessary for fixed wheels */ theta?: number; /** * X-position in mobile robot coordinate system */ x: number; /** * Y-position in mobile robot coordinate system */ y: number; [property: string]: any; } /** * These parameters specify the basic physical properties of the mobile robot */ export interface PhysicalParameters { /** * Length of the mobile robot */ length: number; /** * Maximum acceleration with maximum load */ maximumAcceleration: number; /** * Maximum rotation speed of the mobile robot */ maximumAngularSpeed?: number; /** * Maximum deceleration with maximum load */ maximumDeceleration: number; /** * Maximum height of mobile robot */ maximumHeight: number; /** * Maximum speed of the mobile robot */ maximumSpeed: number; /** * Minimal controlled continuous rotation speed of the mobile robot */ minimumAngularSpeed?: number; /** * Minimum height of mobile robot */ minimumHeight: number; /** * Minimal controlled continuous speed of the mobile robot */ minimumSpeed: number; /** * Width of the mobile robot */ width: number; [property: string]: any; } /** * Supported features of VDA5050 protocol */ export interface ProtocolFeatures { /** * List of all actions with parameters supported by this mobile robot. This includes * standard actions specified in VDA 5050 and manufacturer-specific actions */ mobileRobotActions: MobileRobotAction[]; /** * 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. */ optionalParameters: OptionalParameter[]; [property: string]: any; } export interface MobileRobotAction { /** * Free text: description of the action */ actionDescription?: string; /** * Kist of parameters. if not defined, the action has no parameters */ actionParameters?: MobileRobotActionActionParameter[]; /** * Free text: description of the result */ actionResult?: string; /** * 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. */ actionScopes: ActionScope[]; /** * Unique actionType corresponding to action.actionType */ actionType: string; /** * Array of possible blocking types for defined action. */ blockingTypes?: BlockingTypeElement[]; /** * True: action can be cancelled via cancelOrder. False: action cannot be cancelled. */ cancelAllowed: string; /** * True: action can be paused via startPause. False: action cannot be paused. */ pauseAllowed: string; [property: string]: any; } export interface MobileRobotActionActionParameter { /** * 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, STRING, OBJECT, ARRAY */ valueDataType: ValueDataType; [property: string]: any; } /** * Data type of Value, possible data types are: BOOL, NUMBER, INTEGER, STRING, OBJECT, ARRAY */ export declare enum ValueDataType { Array = "ARRAY", Bool = "BOOL", Integer = "INTEGER", Number = "NUMBER", Object = "OBJECT", String = "STRING" } export declare enum ActionScope { Edge = "EDGE", Instant = "INSTANT", Node = "NODE", Zone = "ZONE" } /** * Regulates if the action is allowed to be executed during movement and/or parallel to * other actions. NONE: allows driving and other actions; SINGLE: allows driving but no * other actions; SOFT: allows other actions but not driving; HARD: is the only allowed * action at that time. */ export declare enum BlockingTypeElement { Hard = "HARD", None = "NONE", Single = "SINGLE", Soft = "SOFT" } export interface OptionalParameter { /** * Free text. Description of optional parameter. E.g., reason, why the optional parameter * ‚direction‘ is necessary for this mobile robot 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 mobile robot operation. */ support: Support; [property: string]: any; } /** * 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. */ export declare enum Support { Required = "REQUIRED", Supported = "SUPPORTED" } /** * 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. */ export interface ProtocolLimits { /** * Maximum lengths of arrays */ maximumArrayLengths: MaximumArrayLengths; /** * Maximum lengths of strings */ maximumStringLengths: MaximumStringLengths; /** * Timing information */ timing: Timing; [property: string]: any; } /** * Maximum lengths of arrays */ export interface MaximumArrayLengths { /** * Maximum number of parameters per action processable by the mobile robot */ "actions.actionsParameters"?: number; /** * Maximum number of actions per edge processable by the mobile robot */ "edge.actions"?: number; /** * Maximum number of error references sent by the mobile robot for each error */ "error.errorReferences"?: number; /** * Maximum number of info references sent by the mobile robot for each information */ "information.infoReferences"?: number; /** * Maximum number of instant actions per message processable by the mobile robot */ instantActions?: number; /** * Maximum number of actions per node processable by the mobile robot */ "node.actions"?: number; /** * Maximum number of edges per order processable by the mobile robot */ "order.edges"?: number; /** * Maximum number of nodes per order processable by the mobile robot */ "order.nodes"?: number; /** * Maximum number of actionStates sent by the mobile robot */ "state.actionStates"?: number; /** * Maximum number of edgeStates sent by the mobile robot, maximum number of edges in base of * mobile robot */ "state.edgeStates"?: number; /** * Maximum number of errors sent by the mobile robot in one state-message */ "state.errors"?: number; /** * Maximum number of information objects sent by the mobile robot in one state-message */ "state.information"?: number; /** * Maximum number of instantActionStates sent by the mobile robot */ "state.instantActionStates"?: number; /** * Maximum number of load-objects sent by the mobile robot */ "state.loads"?: number; /** * Maximum number of nodeStates sent by the mobile robot, maximum number of nodes in base of * mobile robot */ "state.nodeStates"?: number; /** * Maximum number of zoneActionStates sent by the mobile robot */ "state.zoneActionStates"?: number; /** * Maximum number of control points per trajectory processable by the mobile robot */ "trajectory.controlPoints"?: number; /** * Maximum number of knots per trajectory processable by the mobile robot */ "trajectory.knotVector"?: number; /** * Maximum number of zones per zoneSet processable by the mobile robot */ "zoneSet.zones"?: number; [property: string]: any; } /** * Maximum lengths of strings */ export interface MaximumStringLengths { /** * If true ID-strings need to contain numerical values only */ idNumericalOnly?: boolean; /** * Maximum length of ID-Strings. Affected parameters: order.orderId, node.nodeId, * nodePosition.mapId, action.actionId, edge.edgeId */ maximumIdLength?: number; /** * Maximum length of loadId Strings */ maximumLoadIdLength?: number; /** * Maximum MQTT Message length */ maximumMessageLength?: 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 */ maximumTopicElementLength?: number; /** * Maximum length of serial-number part in MQTT-topics. Affected Parameters: * order.serialNumber, instantActions.serialNumber, state.SerialNumber, * visualization.serialNumber, connection.serialNumber */ maximumTopicSerialLength?: number; [property: string]: any; } /** * 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 mobile robot */ minimumOrderInterval: number; /** * Minimum interval for sending state-messages */ minimumStateInterval: number; /** * Default interval for sending messages on visualization topic */ visualizationInterval?: number; [property: string]: any; } /** * These parameters generally specify the class and the capabilities of the mobile robot */ export interface TypeSpecification { /** * Simplified description of localization type. */ localizationTypes: string[]; /** * Maximum loadable mass */ maximumLoadMass: number; /** * Simplified description of mobile robot class. Extensible enum: FORKLIFT, CONVEYOR, * TUGGER, CARRIER */ mobileRobotClass: string; /** * Simplified description of mobile robots kinematics-type. Extensible enum: DIFFERENTIAL, * OMNIDIRECTIONAL, THREE_WHEEL */ mobileRobotKinematics?: string; /** * List of path planning types supported by the mobile robot, sorted by priority */ navigationTypes: string[]; /** * Free text human readable description of the mobile robot type series */ seriesDescription?: string; /** * Free text generalized series name as specified by manufacturer */ seriesName: string; /** * Array of zone types supported by the mobile robot. */ supportedZones?: ZoneType[]; mobileRobotKinematic: any; [property: string]: any; } /** * Zone category. */ export declare enum ZoneType { Action = "ACTION", Bidirected = "BIDIRECTED", Blocked = "BLOCKED", CoordinatedReplanning = "COORDINATED_REPLANNING", Directed = "DIRECTED", LineGuided = "LINE_GUIDED", Penalty = "PENALTY", Priority = "PRIORITY", Release = "RELEASE", SpeedLimit = "SPEED_LIMIT" } /** * JSON Schema for publishing instantActions that the mobile robot is to execute as soon as * they arrive. */ export interface InstantActions { actions: InstantActionsAction[]; /** * 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 mobile robot */ manufacturer: string; /** * Serial number of the mobile robot. */ serialNumber: string; /** * Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.fffZ). */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch] */ version: string; [property: string]: any; } /** * Describes an action that the mobile robot can perform. */ export interface InstantActionsAction { /** * Additional information on the action. */ actionDescriptor?: string; /** * Unique ID to identify the action and map them to the actionState in the state. * Suggestion: Use UUID. */ actionId: string; /** * Action parameters for the indicated action, e.g., deviceId, loadId, external Triggers. */ actionParameters?: PurpleActionParameter[]; /** * Name of action. Identifies the function of the action. */ actionType: string; /** * The blocking type of an instant action is always NONE: action can happen in parallel with * others, including movement. */ blockingType: PurpleBlockingType; [property: string]: any; } export interface PurpleActionParameter { /** * The key of the action parameter. */ key: string; /** * The value of the action parameter */ value: any[] | boolean | number | number | { [key: string]: any; } | string; [property: string]: any; } /** * The blocking type of an instant action is always NONE: action can happen in parallel with * others, including movement. */ export declare enum PurpleBlockingType { None = "NONE" } /** * The message schema to communicate orders from fleet control to the mobile robot. */ export interface Order { /** * Directional connection between two nodes. Array of edge objects to be traversed for * fulfilling the order. One node is enough for a valid order. Leave edge list empty for * that case. */ edges: Edge[]; /** * 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 mobile robot */ manufacturer: string; /** * Array of nodes objects to be traversed for fulfilling the order. One node is enough for a * valid order. Leave edge list empty for that case. */ nodes: Node[]; /** * Additional human-readable information only for visualization purposes; this shall not be * used for any logical processes. */ orderDescription?: string; /** * Order Identification. This is to be used to identify multiple order messages that belong * to the same order. */ orderId: string; /** * Order update identification. It is unique per orderId, starting at 0 for a new order. If * an order update is rejected, this field shall be passed in the rejection message. */ orderUpdateId: number; /** * Serial number of the mobile robot. */ serialNumber: string; /** * Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.fffZ). */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch] */ version: string; [property: string]: any; } export interface Edge { /** * Array of action objects with detailed information. */ actions: EdgeAction[]; corridor?: Corridor; /** * Sets direction at junctions for line-guided or wire-guided mobile robots, to be defined * initially (mobile robot-individual). */ direction?: string; /** * Additional information on the edge. */ edgeDescriptor?: string; /** * Identifier of the edge. May not be unique among the edges of the same order. */ edgeId: string; /** * Distance of the path from the start node to the end node in meters. Optional: This value * is used by line-guided mobile robots to decrease their speed before reaching a stop * position. */ length?: number; /** * Permitted maximum height of the mobile robot, including the load, on edge in meters. */ maximumMobileRobotHeight?: number; /** * Permitted maximum speed on the edge in m/s. Speed is defined by the fastest measurement * of the mobile robot. */ maximumSpeed?: number; /** * Maximum rotation speed in rad/s. Optional: No limit, if not set. */ maxRotationSpeed?: number; /** * Permitted minimal height of the load handling device on the edge in meters */ minimumLoadHandlingDeviceHeight?: number; /** * Orientation of the mobile robot on the edge. The value orientationType defines if it has * to be interpreted relative to the global project specific map coordinate system or * tangential to the edge. In case of interpreted tangential to the edge 0.0 = forwards and * PI = backwards. Example: orientation Pi/2 rad will lead to a rotation of 90 degrees. If * mobile robot starts in different orientation, rotate the mobile robot 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 no * trajectory is defined, apply the rotation to the direct path between the two connecting * nodes of the edge. If a trajectory is defined for the edge, apply the orientation to the * trajectory. */ orientation?: number; /** * Enum {GLOBAL, TANGENTIAL}: GLOBAL: relative to the global project specific map coordinate * system; TANGENTIAL: tangential to the edge. If not defined, the default value is * TANGENTIAL. */ orientationType?: string; /** * True: Desired edge orientation shall be reached before entering the edge. False: Mobile * robot can rotate into the desired orientation on the edge. Default: False. */ reachOrientationBeforeEntering?: boolean; /** * True indicates that the edge is part of the base. False indicates that the edge is part * of the horizon. */ released: boolean; /** * Number to track the sequence of nodes and edges in an order and to simplify order * updates. The sequenceId is shared between nodes and edges and defines the sequence of * traversal. */ sequenceId: number; /** * Trajectory JSON-object for this edge as a NURBS. Defines the curve, on which the mobile * robot should move between the start node and the end node. Optional: Can be omitted, if * mobile robot cannot process trajectories or if mobile robot plans its own trajectory. */ trajectory?: Trajectory; [property: string]: any; } /** * Describes an action that the mobile robot can perform. */ export interface EdgeAction { /** * Additional information on the action. */ actionDescriptor?: string; /** * Unique ID to identify the action and map them to the actionState in the state. * Suggestion: Use UUIDs. */ actionId: string; /** * Action parameters for the indicated action, e.g., deviceId, loadId, external Triggers. */ actionParameters?: FluffyActionParameter[]; /** * Name of the action. 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: allows driving and other actions; SINGLE: allows driving but no * other actions; SOFT: allows other actions but not driving; HARD: is the only allowed * action at that time. */ blockingType: BlockingTypeElement; /** * True: action can enter RETRIABLE state if it fails. False: action enters FAILED state * directly after it fails. Default: false. */ retriable?: boolean; [property: string]: any; } export interface FluffyActionParameter { /** * The key of the action parameter. */ key: string; /** * The value of the action parameter */ value: any[] | boolean | number | number | { [key: string]: any; } | string; [property: string]: any; } /** * Definition of boundaries in which a mobile robot 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 * mobile robot. */ corridorReferencePoint?: CorridorReferencePoint; /** * Defines the width of the corridor in meters to the left related to the trajectory of the * mobile robot. */ leftWidth: number; /** * Defines how the robot shall behave in case its release of a corridor expires or gets * revoked by the fleet control. Default: STOP */ releaseLossBehavior?: ReleaseLossBehavior; /** * Optional flag that indicates if the robot must request approval from the fleet control. * If not defined, no release is required. */ releaseRequired?: boolean; /** * Defines the width of the corridor in meters to the right related to the trajectory of the * mobile robot. */ rightWidth: number; [property: string]: any; } /** * Defines whether the boundaries are valid for the kinematic center or the contour of the * mobile robot. */ export declare enum CorridorReferencePoint { Contour = "CONTOUR", KinematicCenter = "KINEMATIC_CENTER" } /** * Defines how the robot shall behave in case its release of a corridor expires or gets * revoked by the fleet control. Default: STOP */ export declare enum ReleaseLossBehavior { Return = "RETURN", Stop = "STOP" } /** * Trajectory JSON-object for this edge as a NURBS. Defines the curve, on which the mobile * robot should move between the start node and the end node. Optional: Can be omitted, if * mobile robot cannot process trajectories or if mobile robot plans its own trajectory. * * Reports the trajectory that has been defined a priori within a layout or was sent for * this edge as part of the order. */ export interface Trajectory { /** * List of JSON controlPoint objects defining the control points of the NURBS, which * includes the beginning and end point. */ controlPoints: ControlPoint[]; /** * Degree of the NURBS curve defining the trajectory. If not defined, the default value is 1. */ degree?: number; /** * Sequence of parameter values that determines where and how the control points affect the * NURBS curve. */ knotVector?: number[]; [property: string]: any; } export interface ControlPoint { /** * 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; [property: string]: any; } export interface Node { /** * Array of actions to be executed on a node. Empty array, if no actions required. */ actions: EdgeAction[]; /** * Additional information on the node. */ nodeDescriptor?: string; /** * Identifier of the node. May not be unique among the nodes of the same order. */ nodeId: string; /** * Defines the position on a map in a global project-specific world coordinate system. Each * floor has its own map. All maps must use the same project specific global origin. * Optional for mobile robot-types that do not require the node position (e.g., line-guided * mobile robots). */ nodePosition?: NodeNodePosition; /** * True indicates that the node is part of the base. False indicates that the node is part * of the horizon. */ released: boolean; /** * Number 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 sequenceId is shared between nodes and edges and defines the * sequence of traversal. */ sequenceId: number; [property: string]: any; } /** * Defines the position on a map in a global project-specific world coordinate system. Each * floor has its own map. All maps must use the same project specific global origin. * Optional for mobile robot-types that do not require the node position (e.g., line-guided * mobile robots). */ export interface NodeNodePosition { /** * 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. */ allowedDeviationTheta?: number; /** * Indicates how precisely a mobile robot shall match the position of a node for it to be * considered traversed. If a = b= 0.0: no deviation is allowed, which means the mobile * robot shall reach or pass the node position with the mobile robot control point as * precisely as is technically possible for the mobile robot. This applies also if * allowedDeviationXY is smaller than what is technically viable for the mobile robot. If * the mobile robot supports this attribute, but it is not defined for this node by fleet * control the mobile robot shall assume the value of a and b as 0.0. The coordinates of the * node defines the center of the ellipse. */ allowedDeviationXY?: AllowedDeviationXY; /** * Unique identification of the map in which the position is referenced. */ mapId: string; /** * Absolute orientation of the mobile robot on the node. Optional: mobile robot can plan the * path by itself. If defined, the mobile robot has to assume the theta angle on this node. * If previous edge disallows rotation, the mobile robot must rotate on the node. If * following edge has a differing orientation defined but disallows rotation, the mobile * robot is to rotate on the node to the edges desired rotation before entering the edge. */ 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; [property: string]: any; } /** * Indicates how precisely a mobile robot shall match the position of a node for it to be * considered traversed. If a = b= 0.0: no deviation is allowed, which means the mobile * robot shall reach or pass the node position with the mobile robot control point as * precisely as is technically possible for the mobile robot. This applies also if * allowedDeviationXY is smaller than what is technically viable for the mobile robot. If * the mobile robot supports this attribute, but it is not defined for this node by fleet * control the mobile robot shall assume the value of a and b as 0.0. The coordinates of the * node defines the center of the ellipse. */ export interface AllowedDeviationXY { /** * Length of the ellipse semi-major axis in meters */ a: number; /** * Length of the ellipse semi-minor axis in meters */ b: number; /** * Rotation angle in radians */ theta: number; [property: string]: any; } /** * Responses from fleet control to mobile robot's requests. */ export interface Responses { /** * Header ID 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 mobile robot. */ manufacturer: string; /** * Array of zone response objects. */ responses: Response[]; /** * Serial number of the mobile robot. */ serialNumber: string; /** * Timestamp (ISO 8601, UTC); YYYY-MM-DDTHH:mm:ss.fffZ (e.g., '2017-04-15T11:40:03.123Z'). */ timestamp: string; /** * Version of the protocol [Major].[Minor].[Patch] */ version: string; [property: string]: any; } export interface Response { /** * Enum {'GRANTED','QUEUED','REVOKED','REJECTED'}. 'GRANTED': fleet control grants request. * 'REVOKED': fleet control revokes previously granted request. 'REJECTED': fleet control * rejects a request. 'QUEUED': Acknowledge the mobile robot's request to the fleet control, * but no permission is given yet. Request was added to some sort of a queue. */ grantType: GrantType; /** * Timestamp (ISO 8601, UTC); YYYY-MM-DDTHH:mm:ss.fffZ (e.g., '2017-04-15T11:40:03.123Z'). */ leaseExpiry?: string; /** * Unique per mobile robot identifier within all active requests. */ requestId: string; [property: string]: any; } /** * Enum {'GRANTED','QUEUED','REVOKED','REJECTED'}. 'GRANTED': fleet control grants request. * 'REVOKED': fleet control revokes previously granted request. 'REJECTED': fleet control * rejects a request. 'QUEUED': Acknowledge the mobile robot's request to the fleet control, * but no permission is given yet. Request was added to some sort of a queue. */ export declare enum GrantType { Granted = "GRANTED", Queued = "QUEUED", Rejected = "REJECTED", Revoked = "REVOKED" } /** * State of the mobile robot. */ export interface State { /** * Array 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 resultDescriptor. The actionStates * are kept until a new order is received. */ actionStates: ActionState[]; /** * 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 mobile robot is driving and/or rotating. Other movements of the * mobile robot (e.g., lift movements) are not included here. * False: indicates that the mobile robot is neither driving nor rotating */ driving: boolean; /** * Array of edgeRequest objects that are currently active on the mobile robot. Empty array * if no edge requests are active. */ edgeRequests?: EdgeRequest[]; /** * Array of edgeState-Objects, that need to be traversed for fulfilling the order, empty * list if idle. */ edgeStates: EdgeState[]; /** * Array of error-objects. All active errors of the mobile robot should be in the list. An * empty array indicates that the mobile robot has no active errors. */ errors: Error[]; /** * headerId of the message. The headerId is defined per topic and incremented by 1 with each * sent (but not necessarily received) message. */ headerId: number; /** * Array of info-objects. An empty array indicates, that the mobile robot has no * information. This should only be used for visualization or debugging – it must not be * used for logic in fleet control. */ information?: Info[]; /** * Array of all instant action states that the mobile robot received. Empty array if the * mobile robot has not received any instant actions. Instant actions are kept in the state * until restart or action clearInstantActions is executed. */ instantActionStates: ActionState[]; intermediatePath?: IntermediatePath; /** * Node ID of last reached node or, if mobile robot 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 mobile robot is currently on a node, * sequenceId of current node. 0 if no lastNodeSequenceId is available. */ lastNodeSequenceId: number; /** * Loads, that are currently handled by the mobile robot. Optional: If mobile robot cannot * determine load state, leave the array out of the state. If the mobile robot can determine * the load state, but the array is empty, the mobile robot is considered unloaded. */ loads?: Load[]; /** * Manufacturer of the mobile robot */ manufacturer: string; /** * Array of map-objects that are currently stored on the mobile robot. */ maps?: Map[]; mobileRobotPosition?: MobileRobotPosition; /** * True: mobile robot is almost at the end of the base and will reduce speed if no new base * is transmitted. Trigger for fleet control to send new base * False: no base update required. */ newBaseRequest?: boolean; /** * Array of nodeState-Objects, that need to be traversed for fulfilling the order. Empty * list if idle. */ nodeStates: NodeState[]; /** * Current operating mode of the mobile robot. */ 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 * mobile robot. 0 if no previous orderUpdateId is available. */ orderUpdateId: number; /** * True: mobile robot is currently in a paused state, either because of the push of a * physical button on the mobile robot or because of an instantAction. The mobile robot can * resume the order. * False: The mobile robot is currently not in a paused state. */ paused?: boolean; plannedPath?: PlannedPath; powerSupply: PowerSupply; safetyState: SafetyState; /** * Serial number of the mobile robot. */ serialNumber: string; /** * Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.fffZ). */ timestamp: string; /** * The mobile robot's velocity in mobile robot coordinates */ velocity?: StateVelocity; /** * Version of the protocol [Major].[Minor].[Patch] */ version: string; /** * Array of all zone actions that are in an end state or are currently running; sharing * upcoming actions is optional. Zone action states are kept in the state message until * restart or action clearZoneActions is executed. */ zoneActionStates?: ActionState[]; /** * Array of zoneRequest objects that are currently active on the mobile robot. Empty array * if no zone requests are active. */ zoneRequests?: ZoneRequest[]; /** * Array of zoneSet objects that are currently stored on the mobile robot. */ zoneSets?: ZoneSetElement[]; [property: string]: any; } export interface ActionState { /** * A user-defined, human-readable name or descriptor. */ actionDescriptor?: string; /** * Unique actionId */ actionId: string; /** * Description of the result, e.g., the result of a RFID-read. Errors will be transmitted in * errors. */ actionResult?: string; /** * WAITING: waiting for the trigger (passing the mode, entering the edge); INITIALIZING: * Action was triggered, preparatory measures are initiated; RUNNING: The action is running; * RETRIABLE: Actions that failed, but can be retried; PAUSED: paused by instantAction or * external trigger; FINISHED: The action is finished; FAILED: action could not be performed. */ actionStatus: ActionStatus; /** * actionType of the action. Optional: Only for informational or visualization purposes. * Order knows the type. */ actionType?: string; [property: string]: any; } /** * WAITING: waiting for the trigger (passing the mode, entering the edge); INITIALIZING: * Action was t