From 9b5c31c679652fc38deb9c0bbdfea5dffadce49f Mon Sep 17 00:00:00 2001 From: Afonso Date: Mon, 14 Aug 2023 07:39:28 +0200 Subject: [PATCH] Update Schema --- docs/schema.graphql | 4889 ++++++++++++++++++++++--------------------- 1 file changed, 2472 insertions(+), 2417 deletions(-) diff --git a/docs/schema.graphql b/docs/schema.graphql index bc3bca9..7bf0f89 100644 --- a/docs/schema.graphql +++ b/docs/schema.graphql @@ -1,3 +1,65 @@ +# The common properties of a data payload. The details are provided in specific type implementations. +interface AbstractDataPayloadType { + # The unique identifier of this payload. + id: ID! + + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! + + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String + + # The type of this payload. + dataType: DataPayloadTypeEnum! + + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType + + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String + + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion + @deprecated( + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + ) + + # + pointOfInterest: PointOfInterestType + + # Represents the POI name specified in the mission editor. + poiName: String + + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! +} + +# Represents the type of an payload recorded by a robot. +enum DataPayloadTypeEnum { + # The recorded data is an image. Typically it is stored as a PNG. + PHOTO + + # The recorded payload is an video file. Typically it is stored in the MP4 format using H.264 encoding. + VIDEO + + # The recorded payload is an audio file. Typically it is stored in the WEBM format. + AUDIO + + # The recorded payload has the form of a 1D time series. This means we have have a discrete series of timestamps. For every timestamp we have a corresponding scalar value (e.g. temperature measurements). + TIME_SERIES_1D + + # A superset of the PHOTO type but with the option to render (multiple) svg based overlays on top of it. + PHOTO_OVERLAY + + # The recorded data is provided as JSON. The schema is defined by the data producer. Typically the producer is a skill. + JSON_DATA + + # Represents a composite type to group multiple payloads together. + GROUP +} + +union RegionOfInterestUnion = AreaOfInterestType | PointOfInterestType + # Represents different classes of objects on the site that are no inspection targets but has robot interaction. interface AbstractSiteObjectType { # The unique identifier of the site object. @@ -61,68 +123,6 @@ enum MissionTaskDefinitionTypeEnum { WAYPOINT } -# The common properties of a data payload. The details are provided in specific type implementations. -interface AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! - - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! - - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String - - # The type of this payload. - dataType: DataPayloadTypeEnum! - - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType - - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String - - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) - - # - pointOfInterest: PointOfInterestType - - # Represents the POI name specified in the mission editor. - poiName: String - - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! -} - -# Represents the type of an payload recorded by a robot. -enum DataPayloadTypeEnum { - # The recorded data is an image. Typically it is stored as a PNG. - PHOTO - - # The recorded payload is an video file. Typically it is stored in the MP4 format using H.264 encoding. - VIDEO - - # The recorded payload is an audio file. Typically it is stored in the WEBM format. - AUDIO - - # The recorded payload has the form of a 1D time series. This means we have have a discrete series of timestamps. For every timestamp we have a corresponding scalar value (e.g. temperature measurements). - TIME_SERIES_1D - - # A superset of the PHOTO type but with the option to render (multiple) svg based overlays on top of it. - PHOTO_OVERLAY - - # The recorded data is provided as JSON. The schema is defined by the data producer. Typically the producer is a skill. - JSON_DATA - - # Represents a composite type to group multiple payloads together. - GROUP -} - -union RegionOfInterestUnion = AreaOfInterestType | PointOfInterestType - # Represents an area of interest that is or was located on a customer site. It is currently considered for undirected, omni-directional measurements only. type AreaOfInterestType { # The unique identifier of the area of interest. @@ -162,2217 +162,2224 @@ type Pose3DStampedType { orientation: QuaternionType! } -# Represents a point of interest that is or was located on a customer site. -type PointOfInterestType { - # The unique identifier of the point of interest. +type PageDataType { + count: Float! + limit: Float! + offset: Float! +} + +# The recorded data is an image. Typically it is stored as a PNG. +type PhotoDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. id: ID! - # The external generated unique key of the poi. + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). key: String! - # The human-readable name of the point of interest - name: String! + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # A customer provided tag. It allows the user to correlate poi data in the energy robotics system with their own digital twin. - customerTag: String + # The type of this payload. + dataType: DataPayloadTypeEnum! - # The type of this point of interest. - type: PointOfInterestTypeEnum! + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType - # The site this point of interest is located on - site: SiteType! + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The pose of the point of interest - pose( - # The id of the site. - returnInLocalFrame: Boolean! = false - ): Pose3DStampedType! + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion + @deprecated( + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + ) - # The actions of the poi - actions: [PointOfInterestsActionsType!]! + # + pointOfInterest: PointOfInterestType - # The generated inspection parameters - inspectionParameters: Json! -} + # Represents the POI name specified in the mission editor. + poiName: String -# Represents the type of an point of interest. This list will be extended in the future. -enum PointOfInterestTypeEnum { - # The poi is a manometer. - MANOMETER + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! - # The poi is a fire extinguisher. - FIRE_EXTINGUISHER + # The timestamp the data has been generated. + timestamp: Timestamp! - # The fallback type. Non of the previous types fits the poi. - GENERIC + # The uri to access the photo. + uri: Uri! } -union PointOfInterestsActionsType = - PointOfInterestsActionsPhotoType - | PointOfInterestsActionsVideoType +# The recorded payload is an audio file. Typically it is stored in the WEBM format. +type AudioDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. + id: ID! -# Represents a photo action of the POI. -type PointOfInterestsActionsPhotoType { - robotPose: Pose3DStampedType! -} + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! -# Represents a video action of the POI. -type PointOfInterestsActionsVideoType { - robotPose: Pose3DStampedType! - duration: Float! -} + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String -# Represents the color configuration of a point cloud. -type PointCloudColorConfigType { - # The type of the point cloud. - type: PointCloudShadingTypeEnum! + # The type of this payload. + dataType: DataPayloadTypeEnum! - # The color of the point cloud. - value: Color + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType - # The opacity of the color. - opacity: Float! -} + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String -# Represents the shading of a point cloud. -enum PointCloudShadingTypeEnum { - # Every point has the same color. - UNIFORM + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion + @deprecated( + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + ) - # Each individual point contains rgb color information. - MULTI_COLOR + # + pointOfInterest: PointOfInterestType - # Each individual point contains an intensity vaule. - INTENSITY -} + # Represents the POI name specified in the mission editor. + poiName: String -# Represents the configuration of the sites' point cloud. -type PointCloudConfigType { - # An uri to the point cloud resource (either the file or the data stream). - uri: Uri! + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! - # The type of the point cloud. - type: PointCloudTypeEnum! + # The start timestamp of the audio file. + fromTimestamp: Timestamp! - # The color of the point cloud. - color: PointCloudColorConfigType! + # The end timestamp of the audio file. + toTimestamp: Timestamp! - # The size of the points. - size: Float! + # The uri to access the audio file. (Currently only the filename is provided.) + uri: Uri! } -# Represents the format or type of point cloud. -enum PointCloudTypeEnum { - # The PLY file format. - PLY +# The recorded payload is an video file. Typically it is stored in the MP4 format using H.264 encoding. +type VideoDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. + id: ID! - # The PCD file format. - PCD -} + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! -# Represents the configuration of the sensors of a particular site. -type SiteSensorConfigLimitType { - # The lower limit of the sensor. - lower: Float + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # The upper limit of the sensor. - upper: Float + # The type of this payload. + dataType: DataPayloadTypeEnum! - # The tag associated with these limits. - tag: String! -} + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType -# Represents the configuration of the sensors of a particular site. -type SiteSensorConfigType { - # The abbreviation of the measured physical phenomenon. - abbreviation: String! + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The sensor limit thresholds. - limits: [SiteSensorConfigLimitType!]! + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion + @deprecated( + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + ) + + # + pointOfInterest: PointOfInterestType + + # Represents the POI name specified in the mission editor. + poiName: String + + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! + + # The start timestamp of the video file. + fromTimestamp: Timestamp! + + # The end timestamp of the video file. + toTimestamp: Timestamp! + + # The uri to access the audio file. + uri: Uri! } -# Represents the configuration of the site. -type SiteConfigType { - # The region of the site, eg. "eu". - region: String! +# The recorded payload has the form of a 1D time series. This means we have have a discrete series of timestamps. For every timestamp we have a corresponding scalar value (e.g. temperature measurements). +type TimeSeries1DDataType { + # The name of the data series. + timestamp: Timestamp! - # All point cloud related configurations of this site - pointCloudConfig: PointCloudConfigType + # The position of the robot during the recording of this entry + position: Point3DType! - # All sensor related configurations of this site - sensorConfig: [SiteSensorConfigType!]! + # The distance which has been traveled to this measurement point. + distanceTraveled: Float! + + # The measured value. + value: Float } -# Represents a robot docking station placed on the site. -type DockingStationSiteObjectType implements AbstractSiteObjectType { - # The unique identifier of the site object. +# Represents a 1D timestamped data series. +type TimeSeries1DDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. id: ID! - # The unique identifier of the site object. + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). key: String! - # A human readable name of the site object. - name: String! + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # The site this site object is located on. - site: SiteType! + # The type of this payload. + dataType: DataPayloadTypeEnum! - # The type of the site object. - type: SiteObjectTypeEnum! + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType - # The pose of the site object. - pose( - # The id of the site. - returnInLocalFrame: Boolean! = false - ): Pose3DStampedType! + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The waypoint in front of the docking station that allows it to perform the docking behavior. - waypoint( - # The id of the site. - returnInLocalFrame: Boolean! = false - ): Pose3DStampedType! + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion + @deprecated( + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + ) - # The robot type that is compatible with this docking station - compatibleRobotType: RobotTypeEnum! -} + # + pointOfInterest: PointOfInterestType -# Represents the type of robot. -enum RobotTypeEnum { - # The legged Boston Dynamics Spot robot. This robot is capable of full autonomy. - SPOT + # Represents the POI name specified in the mission editor. + poiName: String - # The IECEX and ATEX certified ExR-1 robot by Ex Robotics. This robot is restricted to line-following autonomy. - EXR1 - @deprecated( - reason: "[10.11.2022] This robot type will not be supported in the future." - ) + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! - # The IECEX and ATEX certified ExR-2 robot by Ex Robotics. This robot is capable of full autonomy. - EXR2 + # The name of the data series. + name: String! - # The Rover robot by Rover Robotics equipped with a custom payload. This robot is capable of full autonomy. - ROVER + # The unit of the data entries. + unit: String! - # A flying robot (drone) by DJI. This robot is capable of full autonomy. - DJI_DRONE + # The time series data. + data: [TimeSeries1DDataType!]! } -# Represents a customer site on which one or more robots operates on. -type SiteType { - # The unique identifier of the site. +# Represents superset of the PHOTO type but with the option to render (multiple) svg based overlays on top of it. +type PhotoOverlayDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. id: ID! - # A unique number of the site. - number: Int! - - # The human-readable name of the site. - name: String! + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! - # Optional, a location description of the site. - location: String + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # The robots operating on this site. - robots: [RobotType!]! + # The type of this payload. + dataType: DataPayloadTypeEnum! - # The current map key used for navigation and visualization - mapKey: String! + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType - # The points of interest (POIs) available on this site. - pointsOfInterest: [PointOfInterestType!]! + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The areas of interest (AOIs) available on this site. - areasOfInterest: [AreaOfInterestType!]! + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion @deprecated( - reason: "[03-05-2023] area of interest was never used until now. It will be replaced with new approach soon." + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." ) - # A list of non-injectable objects of this site. - siteObjects: [AbstractSiteObjectType!]! + # + pointOfInterest: PointOfInterestType - # The configuration of this site. - config: SiteConfigType! -} + # Represents the POI name specified in the mission editor. + poiName: String -# Represents a 3D pose in the free 3D space. -type Pose3DType { - # Represents the position of the pose. - position: Point3DType! + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! - # Represents the orientation of the pose. - orientation: QuaternionType! + # The timestamp the image has been created. + timestamp: Timestamp! + + # The uri to access the photo. + uri: Uri! + + # The overlay (e.g. an SVG) that can be rendered on top of the photo. + overlayUri: Uri! } -# Represents limits for a region of interest selection. -type RegionOfInterestLimitType { - width: Float! - height: Float! +# Represents a single data accessor which allows a skill provider to highlight important fields in the json data. +type JSONDataAccessorType { + # A human readable name of the data field. + name: String! + + # A key accessor in dot notation. (e.g. jsonData.subfield.subsubfield). + accessor: String! } -# Describes the properties of a single camera. -type CameraDescriptionType { - # The unique identifier of the camera. +# Represents the recorded data in a JSON structure. The schema is defined by the data producer. Typically the producer is a skill. +type JSONDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. id: ID! - # The human-readable name of the camera. - name: String! + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! - # The topic name of the WebRTC resource. It should be used to offer a peer for a this camera specific camera. - webRtcTopic: String! + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # The topic name of the WebRTC resource. It should be used to offer a peer for a this camera specific camera. - webRTCTopic: String! + # The type of this payload. + dataType: DataPayloadTypeEnum! + + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType + + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String + + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion @deprecated( - reason: "[10.11.2022] renamed for consistency reasons. Use 'webRtcTopic' instead" + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." ) - # Whether or not the camera supports region of interest selection. - regionOfInterestSupported: Boolean! + # + pointOfInterest: PointOfInterestType - # The limits of the region of interest selection. - maximumRegionOfInterest: RegionOfInterestLimitType -} + # Represents the POI name specified in the mission editor. + poiName: String -# Represents the camera configuration of a robot. -type CameraConfigType { - # The websocket endpoint to access the WebRTC-based camera streams. - webRtcWebsocketUri: Uri! + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! - # The websocket endpoint to access the WebRTC-based camera streams. - webRTCWebsocketURI: Uri! - @deprecated( - reason: "[10.11.2022] renamed for consistency reasons. Use 'webRTCWebsocketUri' instead" - ) + # The JSON data structure. + jsonData: Json! - # Contains the URIs of the available WebRTC turn servers - webRtcTurnServerUris: [Uri!]! + # Data accessors to highlight important fields in the jsonData field. + dataAccessors: [JSONDataAccessorType!] +} - # Contains the URIs of the available WebRTC turn servers - webRTCTurnServerURIs: [Uri!]! - @deprecated( - reason: "[10.11.2022] renamed for consistency reasons. Use 'webRtcTurnServerUris' instead" - ) +# Represents a composite type to group multiple payloads together. +type GroupDataPayloadType implements AbstractDataPayloadType { + # The unique identifier of this payload. + id: ID! - # The primary camera used for inspection. - inspectionCamera: CameraDescriptionType + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! - # The primary camera used for teleoperated driving. - drivingCamera: CameraDescriptionType + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # Number of cameras available. - count: Int! + # The type of this payload. + dataType: DataPayloadTypeEnum! - # The list of available cameras. - cameras: [CameraDescriptionType!]! -} + # The producer of this payload. Can be null for Energy Robotics. + producer: DataPayloadProducerType -# Represents a bin for a sensor data discretization -type SensorDataDiscretizationType { - # The name of the bin - name: String! + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The min value of the bin - minValue: Float! + # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. + regionOfInterest: RegionOfInterestUnion + @deprecated( + reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + ) - # The may value of the bin - maxValue: Float! + # + pointOfInterest: PointOfInterestType + + # Represents the POI name specified in the mission editor. + poiName: String + + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean! + + # The data payloads of this group. + group: [AbstractDataPayloadType!]! } -# Represents the data description of one dimensional sensor data -type SensorDataDescriptionType { - # The human readable name of the data measured by the sensor. +# Represents the description of the producer e.g. skill which has generated the payload data. +type DataPayloadProducerType { + # An dot seperated identifier that groups skills of the same provider. E.g.: com.energy-robotics + group: String! + + # A human readable name of the skill that produced the payload. name: String! +} - # An abbreviation of the name - abbreviation: String! +# Represents the paginated type of the AbstractDataPayload +type AbstractDataPayloadsType { + page: AbstractDataPayloadTypeConnection! + pageData: PageDataType +} - # The physical unit of the measurements - unit: String! +type AbstractDataPayloadTypeConnection { + edges: [AbstractDataPayloadTypeEdge!] + pageInfo: AbstractDataPayloadTypePageInfo +} - # The default unit range - unitRange: Float! +type AbstractDataPayloadTypeEdge { + cursor: String + node: AbstractDataPayloadType +} - # An optional discretization of the sensor data - discretization: [SensorDataDiscretizationType!] +type AbstractDataPayloadTypePageInfo { + startCursor: String + endCursor: String + hasPreviousPage: Boolean! + hasNextPage: Boolean! } -# Represents a single sensor on a robot -type SensorDescriptionType { - # The unique id of the sensor +# Represents a point of interest that is or was located on a customer site. +type PointOfInterestType { + # The unique identifier of the point of interest. id: ID! - # The data port of the sensor - dataPort: Int! - - # The power port of the sensor - powerPort: Int! + # The external generated unique key of the poi. + key: String! - # An offset of the analog signal. It is assumed to be zero if not set. - analogInZeroOffset: Float + # The human-readable name of the point of interest + name: String! - # Whether or not this sensor is as an ex meter - useAsExMeter: Boolean! + # A customer provided tag. It allows the user to correlate poi data in the energy robotics system with their own digital twin. + customerTag: String - # The sensor threshold used to turn of the robot in an ex zones. Only valid if 'useAsExMeter === true' - exThreshold: Float + # The type of this point of interest. + type: PointOfInterestTypeEnum! - # The description of the sensor data - dataDescription: SensorDataDescriptionType! -} + # The site this point of interest is located on + site: SiteType! -# Represents the full sensor configuration of a robot -type SensorConfigType { - # The list of available sensors - sensors: [SensorDescriptionType!]! -} + # The pose of the point of interest + pose( + # The id of the site. + returnInLocalFrame: Boolean! = false + ): Pose3DStampedType! -# Represents the configuration and capabilities of a robot. An important use case for this information is to check whether or not a robot is capable of executing a mission. -type RobotConfigType { - # The type of the robot. - type: RobotTypeEnum! - @deprecated( - reason: "[10.11.2022] The field has been moved to the robot type" - ) + # The reference payload associated with the point of interest. It is used for visual serving + referenceDataPayload: AbstractDataPayloadType - # The region of the robot, eg. "eu". - region: String! + # The actions of the poi + actions: [PointOfInterestsActionsType!]! - # The local pose of the robots' map coordinate system inside the site coordinate system. - originPose: Pose3DType! - @deprecated( - reason: "[10.11.2022] Conceptual changes make this property useless. It will always return the origin" - ) + # The generated inspection parameters + inspectionParameters: Json! +} - # The type of locomotion. - locomotionType: LocomotionTypeEnum! - @deprecated( - reason: "[10.11.2022] The field has been moved to the robot type" - ) +# Represents the type of an point of interest. This list will be extended in the future. +enum PointOfInterestTypeEnum { + # The poi is a manometer. + MANOMETER - # Weather or not the robot has moving joints. - hasMovingJoints: Boolean! + # The poi is a fire extinguisher. + FIRE_EXTINGUISHER - # The URDF of the robot. - urdf: Urdf + # The fallback type. Non of the previous types fits the poi. + GENERIC +} - # The accent color for this robot in the user interface. - color: Color! +union PointOfInterestsActionsType = + PointOfInterestsActionsPhotoType + | PointOfInterestsActionsVideoType - # All camera related configurations of this robot. - cameraConfig: CameraConfigType! +# Represents a photo action of the POI. +type PointOfInterestsActionsPhotoType { + robotPose: Pose3DStampedType! +} - # All camera related configurations of this robot. - sensorConfig: SensorConfigType! +# Represents a video action of the POI. +type PointOfInterestsActionsVideoType { + robotPose: Pose3DStampedType! + duration: Float! } -# Represents the methods that the robot uses to transport itself from place to place. -enum LocomotionTypeEnum { - # The robot is equipped with two continuous tracks. - TRACKED +# Represents the color configuration of a point cloud. +type PointCloudColorConfigType { + # The type of the point cloud. + type: PointCloudShadingTypeEnum! - # The robot is equipped with two four legs. - FOUR_LEGGED + # The color of the point cloud. + value: Color - # The robot flies. - FLYING + # The opacity of the color. + opacity: Float! } -# Represents the basic information of a robot. -type RobotType { - # The unique identifier of the robot. - id: ID! +# Represents the shading of a point cloud. +enum PointCloudShadingTypeEnum { + # Every point has the same color. + UNIFORM - # The robot number is unique number for each robot. - number: Int! + # Each individual point contains rgb color information. + MULTI_COLOR - # The type of the robot. - type: RobotTypeEnum! + # Each individual point contains an intensity vaule. + INTENSITY +} - # The type of locomotion of the robot. - locomotionType: LocomotionTypeEnum! +# Represents the configuration of the sites' point cloud. +type PointCloudConfigType { + # An uri to the point cloud resource (either the file or the data stream). + uri: Uri! - # The human-readable name of the robot. - name: String! + # The type of the point cloud. + type: PointCloudTypeEnum! - # The specific configuration of this robot. It consists of the specific capabilities and sensors available on the robot. - config: RobotConfigType! + # The color of the point cloud. + color: PointCloudColorConfigType! - # The deployment site of this robot. - site: SiteType + # The size of the points. + size: Float! } -# Represents the subscription type of a robot -type RobotSubscriptionType { - # The timestamp of the message - timestamp: Timestamp! - - # The robot - robot: RobotType! +# Represents the format or type of point cloud. +enum PointCloudTypeEnum { + # The PLY file format. + PLY + + # The PCD file format. + PCD } -# Represents the subscription type for a point of interest. -type PointOfInterestSubscriptionType { - # The timestamp of this subscription message. - timestamp: Timestamp! +# Represents the configuration of the sensors of a particular site. +type SiteSensorConfigLimitType { + # The lower limit of the sensor. + lower: Float - # The operation which has been applied to the point of interest. - operation: DataOperationTypeEnum! + # The upper limit of the sensor. + upper: Float - # The point of interest if only one is affected. - pointOfInterest: PointOfInterestType + # The tag associated with these limits. + tag: String! } -# Represents a operation which has been applied to some data. -enum DataOperationTypeEnum { - # The data has been created. - CREATE +# Represents the configuration of the sensors of a particular site. +type SiteSensorConfigType { + # The abbreviation of the measured physical phenomenon. + abbreviation: String! - # The data has been updated. - UPDATE + # The sensor limit thresholds. + limits: [SiteSensorConfigLimitType!]! +} - # The data has been deleted. - DELETE +# Represents the configuration of the site. +type SiteConfigType { + # The region of the site, eg. "eu". + region: String! - # Multiple entities of the data type have been deleted. - DELETE_MANY -} + # All point cloud related configurations of this site + pointCloudConfig: PointCloudConfigType -type PageDataType { - count: Float! - limit: Float! - offset: Float! + # All sensor related configurations of this site + sensorConfig: [SiteSensorConfigType!]! } -# A SiteSnapshot represents a specific site configuration at a certain timestamp. This includes points of interests, site objects, maps and more. -type SiteSnapshotType { - # The unique identifier of the site snapshot. +# Represents a robot docking station placed on the site. +type DockingStationSiteObjectType implements AbstractSiteObjectType { + # The unique identifier of the site object. id: ID! - # The timestamp this snapshot has been created. - timestamp: Timestamp! - - # Whether or not this snapshot is the current head. - isCurrentHead: Boolean! + # The unique identifier of the site object. + key: String! - # The human-readable name of the site. + # A human readable name of the site object. name: String! - # The site number is unique number for each site. - number: Int! + # The site this site object is located on. + site: SiteType! - # The key of the map of this snapshot - mapKey: String! + # The type of the site object. + type: SiteObjectTypeEnum! - # The points of interest (POIs) available on this site at the time of the snapshot - pointsOfInterest: [PointOfInterestType!]! + # The pose of the site object. + pose( + # The id of the site. + returnInLocalFrame: Boolean! = false + ): Pose3DStampedType! - # A list of non-injectable objects of this site at the time of the snapshot - siteObjects: [AbstractSiteObjectType!]! -} + # The waypoint in front of the docking station that allows it to perform the docking behavior. + waypoint( + # The id of the site. + returnInLocalFrame: Boolean! = false + ): Pose3DStampedType! -type SiteSnapshotsType { - page: SiteSnapshotTypeConnection! - pageData: PageDataType + # The robot type that is compatible with this docking station + compatibleRobotType: RobotTypeEnum! } -type SiteSnapshotTypeConnection { - edges: [SiteSnapshotTypeEdge!] - pageInfo: SiteSnapshotTypePageInfo -} +# Represents the type of robot. +enum RobotTypeEnum { + # The legged Boston Dynamics Spot robot. This robot is capable of full autonomy. + SPOT -type SiteSnapshotTypeEdge { - cursor: String - node: SiteSnapshotType -} + # The IECEX and ATEX certified ExR-1 robot by Ex Robotics. This robot is restricted to line-following autonomy. + EXR1 + @deprecated( + reason: "[10.11.2022] This robot type will not be supported in the future." + ) -type SiteSnapshotTypePageInfo { - startCursor: String - endCursor: String - hasPreviousPage: Boolean! - hasNextPage: Boolean! -} + # The IECEX and ATEX certified ExR-2 robot by Ex Robotics. This robot is capable of full autonomy. + EXR2 -# Represents an keyframe of a map -type PointCloudKeyframeType { - # An external provided uuid to re-identify the keyframe. - key: ID! + # The Rover robot by Rover Robotics equipped with a custom payload. This robot is capable of full autonomy. + ROVER - # The uri to the pcd file of this keyframe. - uri: Uri! + # A flying robot (drone) by DJI. This robot is capable of full autonomy. + DJI_DRONE - # The pose of this keyframe. - pose: Pose3DStampedType! + # The legged ANYMAL robot by Anybotics + ANYMAL } -# Represents the current changes to a site that have not been committed yet -type SiteStageType { - # The id of the site stage - id: ID! +# Represents a geographical coordinate with longitude and latitude values. +type CoordinateType { + longitude: Float! + latitude: Float! +} - # The state of the stage - state: SiteStageStateEnum! +# Represents the origin of a site e.g. GPS coordinates of the site in the world. +type SiteOriginType { + # The coordinates of the site + coordinates: CoordinateType! +} - # The snapshot this stage is based on - siteSnapshotHead: SiteSnapshotType! +# Represents a customer site on which one or more robots operates on. +type SiteType { + # The unique identifier of the site. + id: ID! - # The new map key - mapKey: String! + # A unique number of the site. + number: Int! - # The list of keyframes that has been added by this stage - keyframeAddList: [PointCloudKeyframeType!]! + # The human-readable name of the site. + name: String! - # The list of points of interest that will be added with this stage - poiAddList: [PointOfInterestType!]! + # Optional, a location description of the site. + location: String - # The list of site objects that will be added with this stage - siteObjectAddList: [AbstractSiteObjectType!]! -} + # Optional, a specific site origin + origin: SiteOriginType -# Represents the state of a site stage. -enum SiteStageStateEnum { - # The stage is open and has not been committed yet. - OPEN + # The robots operating on this site. + robots: [RobotType!]! - # The stage has been discarded without being committed. - DISCARDED + # The current map key used for navigation and visualization + mapKey: String! - # The stage has been committed. - COMMITTED -} + # The points of interest (POIs) available on this site. + pointsOfInterest: [PointOfInterestType!]! -# Represents the subscription type of a site stage -type SiteStageStatusType { - # The timestamp of the status - timestamp: Timestamp! + # The areas of interest (AOIs) available on this site. + areasOfInterest: [AreaOfInterestType!]! + @deprecated( + reason: "[03-05-2023] area of interest was never used until now. It will be replaced with new approach soon." + ) - # The stage - stage: SiteStageType! -} + # A list of non-injectable objects of this site. + siteObjects: [AbstractSiteObjectType!]! -# Represents a single stage of a processing pipeline -type ProcessingPipelineStageType { - # The name of the stage - name: String! + # The configuration of this site. + config: SiteConfigType! +} - # The state of the stage - state: ProcessingPipelineStageStateEnum! +# Represents a 3D pose in the free 3D space. +type Pose3DType { + # Represents the position of the pose. + position: Point3DType! - # The progress of the stage in percent - progress: Float! + # Represents the orientation of the pose. + orientation: QuaternionType! } -# Represents the states of a processing pipeline stage -enum ProcessingPipelineStageStateEnum { - # The stage is currently executed - ACTIVE +# Represents limits for a region of interest selection. +type RegionOfInterestLimitType { + width: Float! + height: Float! +} - # The stage is waiting for execution. This is either because the previous stage has not been executed yet or all available processing resources are occupied. - WAITING +# Describes the properties of a single camera. +type CameraDescriptionType { + # The unique identifier of the camera. + id: ID! - # The stage has been executed successfully. - COMPLETED + # The human-readable name of the camera. + name: String! - # An error occurred doing the execution. The pipeline execution will be canceled. - ERROR + # The topic name of the WebRTC resource. It should be used to offer a peer for a this camera specific camera. + webRtcTopic: String! - # It is not possible to query the state of the stage - UNKNOWN -} + # The topic name of the WebRTC resource. It should be used to offer a peer for a this camera specific camera. + webRTCTopic: String! + @deprecated( + reason: "[10.11.2022] renamed for consistency reasons. Use 'webRtcTopic' instead" + ) -# Represents a processing pipeline -type ProcessingPipelineType { - # The id of the pipeline - id: ID! + # Whether or not the camera supports region of interest selection. + regionOfInterestSupported: Boolean! - # The index of the stage that is/has to be executed. - currentStageIndex: Int! + # The limits of the region of interest selection. + minimumRegionOfInterest: RegionOfInterestLimitType - # The stages of the pipeline - stages: [ProcessingPipelineStageType!]! + # The limits of the region of interest selection. + maximumRegionOfInterest: RegionOfInterestLimitType } -# Represents the status of processing pipeline -type ProcessingPipelineStatusType { - # The timestamp of the status - timestamp: Timestamp! +# Represents the camera configuration of a robot. +type CameraConfigType { + # The websocket endpoint to access the WebRTC-based camera streams. + webRtcWebsocketUri: Uri! - # The processing pipeline - pipeline: ProcessingPipelineType -} + # The websocket endpoint to access the WebRTC-based camera streams. + webRTCWebsocketURI: Uri! + @deprecated( + reason: "[10.11.2022] renamed for consistency reasons. Use 'webRTCWebsocketUri' instead" + ) -type LegacySiteSnapshotHeadSelectionProcessingRequestType { - jobId: ID! - snapshot: SiteSnapshotType! -} + # Contains the URIs of the available WebRTC turn servers + webRtcTurnServerUris: [Uri!]! -# Represents the subscription type for a sites. -type SiteSubscriptionType { - # The timestamp of this subscription message. - timestamp: Timestamp! + # Contains the URIs of the available WebRTC turn servers + webRTCTurnServerURIs: [Uri!]! + @deprecated( + reason: "[10.11.2022] renamed for consistency reasons. Use 'webRtcTurnServerUris' instead" + ) - # The operation which has been applied to the site. - operation: DataOperationTypeEnum! + # The primary camera used for inspection. + inspectionCamera: CameraDescriptionType - # The site if only one is affected. - site: SiteType + # The primary camera used for teleoperated driving. + drivingCamera: CameraDescriptionType + + # Number of cameras available. + count: Int! + + # The list of available cameras. + cameras: [CameraDescriptionType!]! } -# Represents a user of the ER system -type UserType { - userId: Int! +# Represents a bin for a sensor data discretization +type SensorDataDiscretizationType { + # The name of the bin name: String! - email: String! - isEngineer: Boolean! + + # The min value of the bin + minValue: Float! + + # The may value of the bin + maxValue: Float! } -# A RobotSnapshot represents a specific robot configuration at a certain timestamp. A snapshot is owned by the site the robot was operating on. This has the effect of a new snapshot if the robot is moved to a new site or the configuration has changed. -type RobotSnapshotType { - # The timestamp this snapshot has been created. - timestamp: Timestamp! +# Represents the data description of one dimensional sensor data +type SensorDataDescriptionType { + # The human readable name of the data measured by the sensor. + name: String! - # The robot number of the robot. - number: Int! + # An abbreviation of the name + abbreviation: String! - # The type of the robot. - type: RobotTypeEnum! + # The physical unit of the measurements + unit: String! - # The human readable name of the robot. - name: String! + # The default unit range + unitRange: Float! - # The robot config of the robot during this snapshot. - config: RobotConfigType! + # An optional discretization of the sensor data + discretization: [SensorDataDiscretizationType!] } -# Represents a site recording performed by a robot -type SiteRecordingType { - # The id of the recording +# Represents a single sensor on a robot +type SensorDescriptionType { + # The unique id of the sensor id: ID! - # The timestamp the recording has been started - timestamp: Timestamp! + # The data port of the sensor + dataPort: Int! - # The state of the recording - state: SiteRecordingStateEnum! + # The power port of the sensor + powerPort: Int! - # Doing a running recording the robot that performs the recording. For all completed recordings the snap shot of the robot doing the recording. - robot: RobotUnion! + # An offset of the analog signal. It is assumed to be zero if not set. + analogInZeroOffset: Float - # The stage associated with the recording - siteStage: SiteStageType! -} + # Whether or not this sensor is as an ex meter + useAsExMeter: Boolean! -# Represents the site recording state -enum SiteRecordingStateEnum { - # A request to start a site recording has been sent to the robot - START_REQUESTED + # The sensor threshold used to turn of the robot in an ex zones. Only valid if 'useAsExMeter === true' + exThreshold: Float - # The robot received the start recording request and has accepted it - START_ACCEPTED + # The description of the sensor data + dataDescription: SensorDataDescriptionType! +} - # The recording has been started by the robot - STARTED +# Represents the full sensor configuration of a robot +type SensorConfigType { + # The list of available sensors + sensors: [SensorDescriptionType!]! +} - # A request to stop a site recording has been sent to the robot - STOP_REQUESTED +# Represents the configuration and capabilities of a robot. An important use case for this information is to check whether or not a robot is capable of executing a mission. +type RobotConfigType { + # The type of the robot. + type: RobotTypeEnum! + @deprecated( + reason: "[10.11.2022] The field has been moved to the robot type" + ) - # The robot received the stop recording request and has accepted it - STOP_ACCEPTED + # The region of the robot, eg. "eu". + region: String! - # The recording has been stopped - STOPPED + # The local pose of the robots' map coordinate system inside the site coordinate system. + originPose: Pose3DType! + @deprecated( + reason: "[10.11.2022] Conceptual changes make this property useless. It will always return the origin" + ) - # A request to decline a site recording has been sent to the robot - DECLINE_REQUESTED + # The type of locomotion. + locomotionType: LocomotionTypeEnum! + @deprecated( + reason: "[10.11.2022] The field has been moved to the robot type" + ) - # The robot received the decline recording request and has accepted it - DECLINE_ACCEPTED + # Weather or not the robot has moving joints. + hasMovingJoints: Boolean! - # The recording has been declined - DECLINED + # The URDF of the robot. + urdf: Urdf - # The recording has failed and was rejected by the robot - REJECTED + # The accent color for this robot in the user interface. + color: Color! - # The previous issued command has failed - COMMAND_FAILED + # All camera related configurations of this robot. + cameraConfig: CameraConfigType! + + # All camera related configurations of this robot. + sensorConfig: SensorConfigType! } -union RobotUnion = RobotType | RobotSnapshotType +# Represents the methods that the robot uses to transport itself from place to place. +enum LocomotionTypeEnum { + # The robot is equipped with two continuous tracks. + TRACKED -# Represents the subscription type of a site recording -type SiteRecordingStatusType { - # The timestamp of the status - timestamp: Timestamp! + # The robot is equipped with two four legs. + FOUR_LEGGED - # The recording - recording: SiteRecordingType + # The robot flies. + FLYING } -# Represents an internal site recording action request to the robot -type SiteRecordingControlRequestType { - # The timestamp of the request - timestamp: Timestamp! +# Represents the basic information of a robot. +type RobotType { + # The unique identifier of the robot. + id: ID! - # The requested action - action: SiteRecordingControlActionEnum! + # The robot number is unique number for each robot. + number: Int! - # The current recording - recording: SiteRecordingType! -} + # The type of the robot. + type: RobotTypeEnum! -# Represents the control actions for the site recording -enum SiteRecordingControlActionEnum { - # A request to start a recording - START + # The type of locomotion of the robot. + locomotionType: LocomotionTypeEnum! - # A request to stop a recording - STOP + # The human-readable name of the robot. + name: String! - # A request to decline a recording - DECLINE + # The specific configuration of this robot. It consists of the specific capabilities and sensors available on the robot. + config: RobotConfigType! + + # The deployment site of this robot. + site: SiteType } -# Represents a grid map of singed 8 bit integer values. -type GridMapType { - # The map resolution [m/cell] - resolution: Float! +# Represents the subscription type of a robot +type RobotSubscriptionType { + # The timestamp of the message + timestamp: Timestamp! - # Map width [cells] - width: Float! + # The robot + robot: RobotType! +} - # Map height [cells] - height: Float! +# A RobotSnapshot represents a specific robot configuration at a certain timestamp. A snapshot is owned by the site the robot was operating on. This has the effect of a new snapshot if the robot is moved to a new site or the configuration has changed. +type RobotSnapshotType { + # The timestamp this snapshot has been created. + timestamp: Timestamp! - # The origin of the map [m, m]. This is the real-world pose of the cell (0,0) in the map. - origin: Point3DType! + # The robot number of the robot. + number: Int! - # The tiles of the grid map. This enables to load large grid maps in batches. - tiles: [GridMapTileType!]! -} + # The type of the robot. + type: RobotTypeEnum! -# Represents a single tile of a grid map. A tile is represented as a png. -type GridMapTileType { - # The uri of the grid map tile. - uri: Uri! + # The human readable name of the robot. + name: String! + + # The robot config of the robot during this snapshot. + config: RobotConfigType! } -# This task performs the initialization of the robot, as well as the undocking if necessary. -type StartMissionTaskDefinitionType implements AbstractMissionTaskDefinitionType { - # The unique identifier of this task definition. - id: ID! - - # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. - isDynamicMission: Boolean! - - # A human readable name of the task. - name: String! +# Represents the subscription type for a data payload. +type DataPayloadSubscriptionType { + # The timestamp of this subscription message. + timestamp: Timestamp! - # The type of this task. - type: MissionTaskDefinitionTypeEnum! + # If true, the data payloads was already available and has been updated + updated: Boolean! - # The waypoint of this task. - waypoint: WaypointType + # The data payload + dataPayload: AbstractDataPayloadType! } -# Represents a waypoint. -type WaypointType { - # The id of the waypoint - waypointId: String! - - # The pose of the waypoint - pose: Pose3DStampedType! -} +# Represents the subscription type for a point of interest. +type PointOfInterestSubscriptionType { + # The timestamp of this subscription message. + timestamp: Timestamp! -# This task performs the docking of the robot. -type DockRobotTaskDefinitionType implements AbstractMissionTaskDefinitionType { - # The unique identifier of this task definition. - id: ID! + # The operation which has been applied to the point of interest. + operation: DataOperationTypeEnum! - # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. - isDynamicMission: Boolean! + # The point of interest if only one is affected. + pointOfInterest: PointOfInterestType +} - # A human readable name of the task. - name: String! +# Represents a operation which has been applied to some data. +enum DataOperationTypeEnum { + # The data has been created. + CREATE - # The type of this task. - type: MissionTaskDefinitionTypeEnum! + # The data has been updated. + UPDATE - # The waypoint of this task. - waypoint: WaypointType + # The data has been deleted. + DELETE - # The docking station the robot is supposed to use. - dockingStation: DockingStationSiteObjectType! + # Multiple entities of the data type have been deleted. + DELETE_MANY } -# This task performs an inspection action at the provided poi. -type PoiInspectionTaskDefinitionType implements AbstractMissionTaskDefinitionType { - # The unique identifier of this task definition. +# A SiteSnapshot represents a specific site configuration at a certain timestamp. This includes points of interests, site objects, maps and more. +type SiteSnapshotType { + # The unique identifier of the site snapshot. id: ID! - # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. - isDynamicMission: Boolean! - - # A human readable name of the task. - name: String! + # The timestamp this snapshot has been created. + timestamp: Timestamp! - # The type of this task. - type: MissionTaskDefinitionTypeEnum! + # Whether or not this snapshot is the current head. + isCurrentHead: Boolean! - # The waypoint of this task. - waypoint: WaypointType + # The human-readable name of the site. + name: String! - # The point of interest which should be inspected. - pointOfInterest: PointOfInterestType! -} + # The site number is unique number for each site. + number: Int! -# This task represents a waypoint which should be reached by the robot. -type WaypointTaskDefinitionType implements AbstractMissionTaskDefinitionType { - # The unique identifier of this task definition. - id: ID! + # The key of the map of this snapshot + mapKey: String! - # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. - isDynamicMission: Boolean! + # The points of interest (POIs) available on this site at the time of the snapshot + pointsOfInterest: [PointOfInterestType!]! - # A human readable name of the task. - name: String! + # A list of non-injectable objects of this site at the time of the snapshot + siteObjects: [AbstractSiteObjectType!]! - # The type of this task. - type: MissionTaskDefinitionTypeEnum! + # The site stage this snapshot is based on + siteStage: SiteStageType +} - # The waypoint of this task. - waypoint: WaypointType +type SiteSnapshotsType { + page: SiteSnapshotTypeConnection! + pageData: PageDataType } -type RosStampType { - secs: Float! - nsecs: Float! +type SiteSnapshotTypeConnection { + edges: [SiteSnapshotTypeEdge!] + pageInfo: SiteSnapshotTypePageInfo } -type RosHeaderType { - seq: Int! - stamp: RosStampType! - frame_id: String! +type SiteSnapshotTypeEdge { + cursor: String + node: SiteSnapshotType } -type RosPoseStampedType { - header: RosHeaderType! - pose: Pose3DType! +type SiteSnapshotTypePageInfo { + startCursor: String + endCursor: String + hasPreviousPage: Boolean! + hasNextPage: Boolean! } -type RosPathType { - header: RosHeaderType! - poses: [RosPoseStampedType!]! +# Represents an keyframe of a map +type PointCloudKeyframeType { + # An external provided uuid to re-identify the keyframe. + key: ID! + + # The uri to the pcd file of this keyframe. + uri: Uri! + + # The pose of this keyframe. + pose: Pose3DStampedType! } -# Represents an edge between two waypoints. -type MissionRoadmapEdgeType { - # The id of the source waypoint - source_waypoint_id: String! +# Represents the current changes to a site that have not been committed yet +type SiteStageType { + # The id of the site stage + id: ID! - # The id of the target waypoint - target_waypoint_id: String! + # The state of the stage + state: SiteStageStateEnum! - # The path between the two waypoints - path: RosPathType! + # The snapshot this stage is based on + siteSnapshotHead: SiteSnapshotType! - # Optional a cost which is later used by the Dijkstra algorithm. By default the length of the path is used. - cost: Float -} + # The new map key + mapKey: String! -# Represents a roadmap used by a robot to navigate within a mission -type MissionRoadmapType { - # The id of the roadmap, typically this id corresponds with the mission id it belongs to - roadmap_id: String! + # The list of keyframes that has been added by this stage + keyframeAddList: [PointCloudKeyframeType!]! - # The list of edges in this roadmap - roadmap_edges: [MissionRoadmapEdgeType!]! -} + # The list of points of interest that will be added with this stage + poiAddList: [PointOfInterestType!]! -# Represents the required configuration of a robot to execute a specific mission. -type RequiredRobotConfigType { - # Force this mission to be only available for a specific robot. - robotId: String + # The list of site objects that will be added with this stage + siteObjectAddList: [AbstractSiteObjectType!]! } -# Contains the path relevant properties of a mission definition. -type MissionDefinitionPathDataType { - # The full planned path of this mission. - fullPath: [Pose3DStampedType!]! +# Represents the state of a site stage. +enum SiteStageStateEnum { + # The stage is open and has not been committed yet. + OPEN - # Whether or not the mission is still processed. Use subscription to be notified about changes or query the mission later again. - isProcessing: Boolean! + # The stage has been discarded without being committed. + DISCARDED - # The id of the tasks which are still processing. - tasksInProgress: [String!]! + # The stage has been committed. + COMMITTED } -# Represents the definition of a mission as a result of the mission planning. (Not to be confused with the MissionExecution which represents a specific execution of a MissionDefinition by a specific robot) -type MissionDefinitionType { - # The unique identifier of the mission definition. - id: ID! - - # Whether or not this mission is a dynamic mission. Dynamic missions are generated to execute a single task on depend. - isDynamicMission: Boolean! +# Represents the subscription type of a site stage +type SiteStageStatusType { + # The timestamp of the status + timestamp: Timestamp! - # The legacy mission definition id. Don't use it for mission execution requests!. Use "id" field instead. - legacyMissionDefinitionId: String - @deprecated( - reason: "This field is only available to keep compatibility with a legacy system. It will be removed in the future." - ) + # The stage + stage: SiteStageType! +} - # A human-readable name of the mission task. +# Represents a single stage of a processing pipeline +type ProcessingPipelineStageType { + # The name of the stage name: String! - # The list of mission tasks. If 'legacyMissionDefinitionId' is set, this list will be empty. - tasks: [AbstractMissionTaskDefinitionType!]! + # The state of the stage + state: ProcessingPipelineStageStateEnum! - # The path details of the mission. - path: MissionDefinitionPathDataType + # The progress of the stage in percent + progress: Float! +} - # The type of the mission. - type: MissionDefinitionTypeEnum +# Represents the states of a processing pipeline stage +enum ProcessingPipelineStageStateEnum { + # The stage is currently executed + ACTIVE - # The name or path of the imported file - filename: String + # The stage is waiting for execution. This is either because the previous stage has not been executed yet or all available processing resources are occupied. + WAITING - # Defines the required robot configuration to execute this mission definition. - requiredRobotConfig: RequiredRobotConfigType -} + # The stage has been executed successfully. + COMPLETED -# The different mission definition types. -enum MissionDefinitionTypeEnum { - # Mission definition is using an imported mission file. - IMPORTED + # An error occurred doing the execution. The pipeline execution will be canceled. + ERROR - # Mission definition was created by the click and inspect feature. - CLICK_AND_INSPECT + # It is not possible to query the state of the stage + UNKNOWN +} - # Mission definition was created by the teach and repeat feature. - TEACH_AND_REPEAT -} - -# Subset of the mission definition type. It does not include large/computational expensive properties like 'tasks' and 'fullPath'. In order to retrieve this data query the specific mission definition explicitly. -type MissionDefinitionsType { - # The unique identifier of the mission definition. +# Represents a processing pipeline +type ProcessingPipelineType { + # The id of the pipeline id: ID! - # Whether or not this mission is a dynamic mission. Dynamic missions are generated to execute a single task on depend. - isDynamicMission: Boolean! - - # The legacy mission definition id. Don't use it for mission execution requests!. Use "id" field instead. - legacyMissionDefinitionId: String - @deprecated( - reason: "This field is only available to keep compatibility with a legacy system. It will be removed in the future." - ) + # The index of the stage that is/has to be executed. + currentStageIndex: Int! - # A human-readable name of the mission task. - name: String! + # The stages of the pipeline + stages: [ProcessingPipelineStageType!]! +} - # The type of the mission. - type: MissionDefinitionTypeEnum +# Represents the status of processing pipeline +type ProcessingPipelineStatusType { + # The timestamp of the status + timestamp: Timestamp! - # The name or path of the imported file - filename: String + # The processing pipeline + pipeline: ProcessingPipelineType +} - # Defines the required robot configuration to execute this mission definition. - requiredRobotConfig: RequiredRobotConfigType +type LegacySiteSnapshotHeadSelectionProcessingRequestType { + jobId: ID! + snapshot: SiteSnapshotType! } -# Represents the subscription type for a mission definition. -type MissionDefinitionSubscriptionType { +# Represents the subscription type for a sites. +type SiteSubscriptionType { # The timestamp of this subscription message. timestamp: Timestamp! - # The operation which has been applied to the mission definition. + # The operation which has been applied to the site. operation: DataOperationTypeEnum! - # The mission definition if only one is affected. - missionDefinition: MissionDefinitionType + # The site if only one is affected. + site: SiteType } -# Represents the sender of a chat message -type ChatUserType { - # The id of the user - userId: String! - - # The name of the user +# Represents a user of the ER system +type UserType { + userId: Int! name: String! - - # Whether or not the user is an energy robotics user - isERUser: Boolean! - - # Whether or not the message is from the current user - isCurrentUser: Boolean! + email: String! + isEngineer: Boolean! } -# Represents a single message in the chat system -type ChatMessageType { - # The unique id of the message - id: String! +# Represents a site recording performed by a robot +type SiteRecordingType { + # The id of the recording + id: ID! - # The timestamp of the message + # The timestamp the recording has been started timestamp: Timestamp! - # The text message - message: String! + # The state of the recording + state: SiteRecordingStateEnum! - # The sender of the message - user: ChatUserType! -} + # Doing a running recording the robot that performs the recording. For all completed recordings the snap shot of the robot doing the recording. + robot: RobotUnion! -# Represents a paginated batch of chat messages -type ChatMessagesType { - page: ChatMessageTypeConnection! - pageData: PageDataType + # The stage associated with the recording + siteStage: SiteStageType! } -type ChatMessageTypeConnection { - edges: [ChatMessageTypeEdge!] - pageInfo: ChatMessageTypePageInfo -} +# Represents the site recording state +enum SiteRecordingStateEnum { + # A request to start a site recording has been sent to the robot + START_REQUESTED -type ChatMessageTypeEdge { - cursor: String - node: ChatMessageType -} + # The robot received the start recording request and has accepted it + START_ACCEPTED -type ChatMessageTypePageInfo { - startCursor: String - endCursor: String - hasPreviousPage: Boolean! - hasNextPage: Boolean! -} + # The recording has been started by the robot + STARTED -# Represents a ICE (Interactive Connectivity Establishment) configuration which is used to establish a WebRTC connection. -type IceCandidateType { - # A DOMString describing the properties of the candidate. - candidate: IceCandidate! + # A request to stop a site recording has been sent to the robot + STOP_REQUESTED - # A DOMString which uniquely identifies the source media component from which the candidate draws data, or null if no such association exists for the candidate. - sdpMid: String! + # The robot received the stop recording request and has accepted it + STOP_ACCEPTED - # A number containing a 0-based index into the set of m-lines providing media descriptions, indicating which media source is associated with the candidate, or null if no such association is available. - sdpMLineIndex: Int! -} + # The recording has been stopped + STOPPED -# Represents an ICECandidate status update which provides the remote generated candidates. -type IceCandidatesStatusType { - # The timestamp of this ice candidates status. - timestamp: Timestamp! + # A request to decline a site recording has been sent to the robot + DECLINE_REQUESTED - # The list of generated remote ICECandidates. - iceCandidates: [IceCandidateType!] -} + # The robot received the decline recording request and has accepted it + DECLINE_ACCEPTED -# Represents the response of the WebRTC handshake. -type WebRtcHandshakeResponseType { - # The id of the webrtc connection - id: IceCandidate! + # The recording has been declined + DECLINED - # The SDP answer of the remote WebRTC peer. - sdp: Sdp! -} + # The recording has failed and was rejected by the robot + REJECTED -type ContextKeyValuePairType { - key: String! - value: [String!]! + # The previous issued command has failed + COMMAND_FAILED } -# Represents the creator of a feature flag. -type CreatorType { - # The user name. - name: String! +union RobotUnion = RobotType | RobotSnapshotType - # The user email. - email: String! +# Represents the subscription type of a site recording +type SiteRecordingStatusType { + # The timestamp of the status + timestamp: Timestamp! - # The user id. - userId: Float! + # The recording + recording: SiteRecordingType } -# Represents a feature flag -type FeatureFlagType { - # The name of the feature-flag. - name: String! +# Represents an internal site recording action request to the robot +type SiteRecordingControlRequestType { + # The timestamp of the request + timestamp: Timestamp! - # The context of the feature-flag. - context: [ContextKeyValuePairType!] + # The requested action + action: SiteRecordingControlActionEnum! - # The state of the feature-flag. - enabled: Boolean! + # The current recording + recording: SiteRecordingType! } -# Represents a feature flag -type PrivateFeatureFlagType { - # The name of the feature-flag. - name: String! +# Represents the control actions for the site recording +enum SiteRecordingControlActionEnum { + # A request to start a recording + START - # The context of the feature-flag. - context: [ContextKeyValuePairType!] + # A request to stop a recording + STOP - # The state of the feature-flag. - enabled: Boolean! + # A request to decline a recording + DECLINE +} - # The unique identifier of the feature-flag. - id: ID! +# Represents a grid map of singed 8 bit integer values. +type GridMapType { + # The map resolution [m/cell] + resolution: Float! - # The timestamp when the feature was first created - createdAt: Timestamp! + # Map width [cells] + width: Float! - # The timestamp when the feature last was modified - updatedAt: Timestamp + # Map height [cells] + height: Float! - # The description of the feature-flag. - description: String + # The origin of the map [m, m]. This is the real-world pose of the cell (0,0) in the map. + origin: Point3DType! - # The creator of the feature-flag. - creator: CreatorType! + # The tiles of the grid map. This enables to load large grid maps in batches. + tiles: [GridMapTileType!]! +} - # The ticket information of the feature-flag. - ticket: String +# Represents a single tile of a grid map. A tile is represented as a png. +type GridMapTileType { + # The uri of the grid map tile. + uri: Uri! } -# Represents execution details of a robot command. -type RobotCommandExecutionType { - # The unique identifier of the robot command execution. +# This task performs the initialization of the robot, as well as the undocking if necessary. +type StartMissionTaskDefinitionType implements AbstractMissionTaskDefinitionType { + # The unique identifier of this task definition. id: ID! - # The timestamp the command has been requested. - startTimestamp: Timestamp! + # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. + isDynamicMission: Boolean! - # The command definition which has been executed. - opcode: RobotCommandOperationCodeEnum! + # A human readable name of the task. + name: String! - # The context of the command execution if it exists - contextId: String + # The type of this task. + type: MissionTaskDefinitionTypeEnum! - # The current state of the execution. - state: RobotCommandExecutionStateEnum! + # The waypoint of this task. + waypoint: WaypointType +} - # The result of the last execution. - result: RobotCommandExecutionResultEnum -} - -# Represents the existing robot commands. Note: not all commands are available on all robots. -enum RobotCommandOperationCodeEnum { - # Compatibility: all robots. Set a new awake state for the robot. - OP_CODE_AWAKE - - # Compatibility: all robots. Take a photo with a provided camera. The id of the camera is considered as the context - OP_CODE_TAKE_PHOTO - - # Compatibility: all robots. Turn on or turn of the robots motors. - OP_CODE_MOTOR_ENABLE - - # Compatibility: all ground robots except EXR1. Send a initial pose guess to the robot for the localization. - OP_CODE_SET_INITIAL_ROBOT_POSE - - # Compatibility: all robots. Start a video recording with a provided camera. The id of the camera is considered as the context - OP_CODE_START_VIDEO_RECORDING +# Represents a waypoint. +type WaypointType { + # The id of the waypoint + waypointId: String! - # Compatibility: all robots. Stop a running video recording of a provided camera. The id of the camera is considered as the context - OP_CODE_STOP_VIDEO_RECORDING + # The pose of the waypoint + pose: Pose3DStampedType! } -# Represents the different states of a robot command execution. A command is always in one of these states. -enum RobotCommandExecutionStateEnum { - # The command execution is 'READY' if no command execution of this type is running. A new request by a client will trigger a transition into 'REQUESTED'. It is possible that a robot triggers a direct transition into 'ACKNOWLEDGED' (e.g. the robot goes to auto sleep after the execution of a mission). - READY +# This task performs the docking of the robot. +type DockRobotTaskDefinitionType implements AbstractMissionTaskDefinitionType { + # The unique identifier of this task definition. + id: ID! - # The command execution is 'REQUESTED' if a new command execution has been requested by an API client. If a command is in this state, it is not possible to create new execution requests of the same type until the state is 'READY' again. In the case the robot does not respond to the request, the request will timeout and will go back to 'READY'. If the robot responses to the request, a state transition to 'ACKNOWLEDGED' is performed. - REQUESTED + # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. + isDynamicMission: Boolean! - # The command execution is 'ACKNOWLEDGED' if a command request has been acknowledged by the robot. The robot tries to execute the requested command. If the execution is completed (with success or failure), a transition back to 'READY' is performed. There is also a timeout if the robot does not finish the execution within 5 minutes. - ACKNOWLEDGED -} + # A human readable name of the task. + name: String! -# Represents the generic results of a robot command execution. -enum RobotCommandExecutionResultEnum { - # The command execution was successful. - SUCCEEDED + # The type of this task. + type: MissionTaskDefinitionTypeEnum! - # The command execution was excepted by the robot but the execution was not successful. - FAILED + # The waypoint of this task. + waypoint: WaypointType - # The command execution was rejected. This is typically the case if the robot does not accept the request. The execution has run into a timeout. - REJECTED + # The docking station the robot is supposed to use. + dockingStation: DockingStationSiteObjectType! } -# Represents a robot command execution status update for all clients -type RobotCommandExecutionStatusType { - # The timestamp of this status - timestamp: Timestamp! +# This task performs an inspection action at the provided poi. +type PoiInspectionTaskDefinitionType implements AbstractMissionTaskDefinitionType { + # The unique identifier of this task definition. + id: ID! - # The command execution - commandExecution: RobotCommandExecutionType! -} + # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. + isDynamicMission: Boolean! -# Represents a robot command execution status update for all clients -type RobotCommandExecutionRequestType { - # The unique identifier of the robot command execution. - commandExecutionID: ID! + # A human readable name of the task. + name: String! - # The command definition which has been executed. - opcode: RobotCommandOperationCodeEnum! + # The type of this task. + type: MissionTaskDefinitionTypeEnum! - # The context of the command execution if it exists - contextId: String + # The waypoint of this task. + waypoint: WaypointType - # The arguments of the command. - args: Json + # The point of interest which should be inspected. + pointOfInterest: PointOfInterestType! } -# A unique person (either ER or customer) who currently has the right to drive the robot manually or launch autonomous missions. Multiple principal drivers are not allowed, even though multiple people can have “driver” access rights. -type PrincipalDriverType { - # The userId of the principal driver - userId: Float! - - # The timestamp the user got principal driver for a robot. - timestamp: Timestamp! +# This task represents a waypoint which should be reached by the robot. +type WaypointTaskDefinitionType implements AbstractMissionTaskDefinitionType { + # The unique identifier of this task definition. + id: ID! - # The email address of the principal driver - email: String! + # Whether or not this mission task definition is used in a dynamic mission. Dynamic missions are generated to execute a single task on depend. + isDynamicMission: Boolean! - # The name of the principal driver + # A human readable name of the task. name: String! - # Whether or not the current user is principal driver - isCurrentUser: Boolean! -} + # The type of this task. + type: MissionTaskDefinitionTypeEnum! -type PrincipalDriversType { - page: PrincipalDriverTypeConnection! - pageData: PageDataType + # The waypoint of this task. + waypoint: WaypointType } -type PrincipalDriverTypeConnection { - edges: [PrincipalDriverTypeEdge!] - pageInfo: PrincipalDriverTypePageInfo +# Represents the required configuration of a robot to execute a specific mission. +type RequiredRobotConfigType { + # Force this mission to be only available for a specific robot. + robotId: String } -type PrincipalDriverTypeEdge { - cursor: String - node: PrincipalDriverType -} +# Contains the path relevant properties of a mission definition. +type MissionDefinitionPathDataType { + # The full planned path of this mission. + fullPath: [Pose3DStampedType!]! -type PrincipalDriverTypePageInfo { - startCursor: String - endCursor: String - hasPreviousPage: Boolean! - hasNextPage: Boolean! + # Whether or not the mission is still processed. Use subscription to be notified about changes or query the mission later again. + isProcessing: Boolean! + + # The id of the tasks which are still processing. + tasksInProgress: [String!]! + @deprecated( + reason: "[25.05.2023] will no longer be supported. Processing procedure changed." + ) } -# Robot battery type contains the statuses related to the battery. -type BatteryStatusType { - # An estimate of the current battery percentage of the robot. - percentage: Float! +# Represents the definition of a mission as a result of the mission planning. (Not to be confused with the MissionExecution which represents a specific execution of a MissionDefinition by a specific robot) +type MissionDefinitionType { + # The unique identifier of the mission definition. + id: ID! - # The current charging state of the robot. - chargingState: ChargingStateEnum! + # A human-readable name of the mission task. + name: String! - # The charger type the robot to which the robot is connected to. - chargerType: ChargerTypeEnum! + # Whether or not this mission is a dynamic mission. Dynamic missions are generated to execute a single task on depend. + isDynamicMission: Boolean! - # The current charging current. Might be negative if the robot is discharging. - chargingCurrent: ElectricCurrent! -} + # The site of the mission. + site: SiteType! -# Represents the charging state of the robot. -enum ChargingStateEnum { - # The robot battery is discharging. Note: depending on the charging method and the current consumption of the robot the charging state may be set to DISCHARGING, even while the robot is connected to a charger. - DISCHARGING + # The legacy mission definition id. Don't use it for mission execution requests!. Use "id" field instead. + legacyMissionDefinitionId: String + @deprecated( + reason: "This field is only available to keep compatibility with a legacy system. It will be removed in the future." + ) - # The robot battery is charging. - CHARGING + # The list of mission tasks. If 'legacyMissionDefinitionId' is set, this list will be empty. + tasks: [AbstractMissionTaskDefinitionType!]! - # The battery is fully charged and being kept at that level by the charger. - CHARGED -} + # The path details of the mission. + path: MissionDefinitionPathDataType -# Represents the charger type to which the robot is connected to. Depending on the robot type, not all of the types are available. -enum ChargerTypeEnum { - # The robot is not connected to any charger. - NOT_CONNECTED + # The type of the mission. + type: MissionDefinitionTypeEnum - # The robot battery is charging. - WIRED_CHARGER + # The name or path of the imported file + filename: String - # The battery is fully charged and being kept at that level by the charger. - WIRELESS_CHARGER + # Defines the required robot configuration to execute this mission definition. + requiredRobotConfig: RequiredRobotConfigType } -# Connection status type which contains the information related to the data connection of the robot. -type ConnectionStatusType { - # The network type that the robot is connected to. - type: ConnectionTypeEnum! +# The different mission definition types. +enum MissionDefinitionTypeEnum { + # Mission definition is using an imported mission file. + IMPORTED - # The network name of carrier if the robot connected to mobile network or the SSID if the robot is connected to a WIFI network. - networkName: String! + # Mission definition was created by the click and inspect feature. + CLICK_AND_INSPECT - # The signal strength in percentage. - signalStrength: Float! + # Mission definition was created by the teach and repeat feature. + TEACH_AND_REPEAT } -# Represents the network connection type of the robot. -enum ConnectionTypeEnum { - # An IEEE 802.11 network. - NET_WIFI +# Subset of the mission definition type. It does not include large/computational expensive properties like 'tasks' and 'fullPath'. In order to retrieve this data query the specific mission definition explicitly. +type MissionDefinitionsType { + # The unique identifier of the mission definition. + id: ID! - # A third generation wireless mobile telecommunication network. - NET_3G + # A human-readable name of the mission task. + name: String! - # A fourth generation wireless mobile telecommunication network. - NET_4G + # Whether or not this mission is a dynamic mission. Dynamic missions are generated to execute a single task on depend. + isDynamicMission: Boolean! - # A fifth generation wireless mobile telecommunication network. - NET_5G -} + # The legacy mission definition id. Don't use it for mission execution requests!. Use "id" field instead. + legacyMissionDefinitionId: String + @deprecated( + reason: "This field is only available to keep compatibility with a legacy system. It will be removed in the future." + ) -# The state of the camera -type CameraStateType { - # The id of the camera - cameraId: String! + # The type of the mission. + type: MissionDefinitionTypeEnum - # The current state of the camera - state: CameraStateEnum! + # The name or path of the imported file + filename: String - # If state === VIDEO_RECORDING the start recording timestamp - recordingStartTimestamp: Timestamp + # Defines the required robot configuration to execute this mission definition. + requiredRobotConfig: RequiredRobotConfigType } -# Represents the different states of a camera -enum CameraStateEnum { - # The camera is idle and ready to use - IDLE - - # The camera is currently recording a video - VIDEO_RECORDING -} - -# A Robot Status provides the temporal state of a particular robot at the specified timestamp. It provides information about the robot connection, battery, motor state and more. It is a report about the state of a robots components that could effect a mission.The status is even provided if the robot is not connected to the cloud. It also provides details about state transitions, triggered by robot commands. -type RobotStatusType { - # The timestamp of the temporal state of the robot. This field always contains a valid value. - timestamp: Timestamp! - - # The timestamp when the robot was last connected to the cloud (see connected). It is undefined if the robot has never been seen. - lastSeen: Timestamp - - # Whether or not, the robot has a working wireless connection to the cloud. This field always contains a valid value. In the case connected === false, the remaining properties are invalid. - isConnected: Boolean! - - # The current principal driver of this robot. - principal: PrincipalDriverType - - # The awake state of the robot. This property is only valid in the case the robot is connected. - awakeStatus: AwakeStatusEnum - - # The robot battery status contains the statuses related to the battery. This property is only valid in the case the robot is connected. - batteryStatus: BatteryStatusType - - # The state of the cameras of the robot - cameraStates: [CameraStateType!] - - # The connection status type contains the statuses related to the data connection of the robot. This property is only valid in the case the robot is connected. - connectionStatus: ConnectionStatusType - - # The emergency switch has been pressed. The robot is unable to move. This property is only valid in the case the robot is connected. - isEmergencySwitchPressed: Boolean - - # The motors of the robot are enabled. The availability of this option depends on the robot type (if not the value is always true). The robot is only able to move if the motors are enabled. This property is only valid in the case the robot is connected. - isMotorsEnabled: Boolean - - # Indicate whether or not the robot is in the docking station. - isDocking: Boolean +type RosStampType { + secs: Float! + nsecs: Float! } -# Represents the sleep status of the robot. It consists of two primary states: AWAKE and ASLEEP. The transitions between the two are usually not applied instantaneously. During this time, the sleep state is in an intermediate state. -enum AwakeStatusEnum { - # The robot is fully available. This state is mandatory to perform actions on the robot or get access to sensor data (e.g. camera images). In this state, the robot has larger battery consumption even if the robot does not executes any tasks. - AWAKE - - # In this state, the robot is in a low-power mode. It is still connected to the cloud and publishes its status but at a significantly lower frequency. It is also possible to wake the robot up remotely. All other consumers are shut down. - ASLEEP - - # The transition state from 'ASLEEP' to 'AWAKE'. - WAKING_UP - - # The transition state from 'AWAKE' to 'ASLEEP'. - GOING_TO_SLEEP +type RosHeaderType { + seq: Int! + stamp: RosStampType! + frame_id: String! } -# Represents a pair of an robot id and a corresponding robot status -type StatusPerRobotType { - # The robot id of the robot which produces the status. - robotID: ID! - - # The status of the robot. - status: RobotStatusType! +type RosPoseStampedType { + header: RosHeaderType! + pose: Pose3DType! } -# Represents the status of the principal driver of a robot. -type PrincipalDriverStatusType { - # The timestamp of this principal driver status. - timestamp: Timestamp! - - # The current principal driver. - principal: PrincipalDriverType +type RosPathType { + header: RosHeaderType! + poses: [RosPoseStampedType!]! } -# Represents a single human robot supervisor session. -type HumanRobotSupervisorSessionType { - # The start date of the session - startTimestamp: Timestamp! +# Represents an edge between two waypoints. +type MissionRoadmapEdgeType { + # The id of the source waypoint + source_waypoint_id: String! - # The end timestamp of the session. If it is set the session is considered as closed. - endTimestamp: Timestamp + # The id of the target waypoint + target_waypoint_id: String! - # The responsible human supervisor - supervisor: UserType! + # The path between the two waypoints + path: RosPathType! - # Represents the acknowledgement state of the principal driver regarding the supervisor session. - acknowledgementState: HumanRobotSupervisorAcknowledgementStateEnum! + # Optional a cost which is later used by the Dijkstra algorithm. By default the length of the path is used. + cost: Float } -# Represents acknowledgement of a principal driver in a human robot supervisor session. -enum HumanRobotSupervisorAcknowledgementStateEnum { - # There is not an answer from the principal driver yet. - NOT_ANSWERED - - # The principal driver accepted the takeover request of the human robot supervisor - ACCEPTED +# Represents a roadmap used by a robot to navigate within a mission +type MissionRoadmapType { + # The id of the roadmap, typically this id corresponds with the mission id it belongs to + roadmap_id: String! - # The principal driver declined the takeover request of the human robot supervisor - DECLINED + # The list of edges in this roadmap + roadmap_edges: [MissionRoadmapEdgeType!]! } -# Represents the status of a human robot supervisor session. -type HumanRobotSupervisorSessionStatusType { - # The timestamp of this human robot supervisor session status. +# Represents the subscription type for a mission definition. +type MissionDefinitionSubscriptionType { + # The timestamp of this subscription message. timestamp: Timestamp! - # The current robot assistant session. - session: HumanRobotSupervisorSessionType -} - -# Represents a permission of a user to a robot -type RobotPermissionType { - # The robot corresponding to the access - robotNumber: Int! + # The operation which has been applied to the mission definition. + operation: DataOperationTypeEnum! - # The roles of the user - accessRoles: [RobotAccessRoleEnum!]! + # The mission definition if only one is affected. + missionDefinition: MissionDefinitionType } -# Represents the access role of user to a robot resource -enum RobotAccessRoleEnum { - # The user has viewer access - VIEWER +# Represents the sender of a chat message +type ChatUserType { + # The id of the user + userId: String! - # The user has viewer access - DRIVER -} + # The name of the user + name: String! -# Represents the permission of a user to a site -type SitePermissionType { - # The site corresponding to the permission - siteNumber: Int! + # Whether or not the user is an energy robotics user + isERUser: Boolean! - # The role of the user - accessRoles: [SiteAccessRoleEnum!]! + # Whether or not the message is from the current user + isCurrentUser: Boolean! } -# Represents the access role of user to a site resource -enum SiteAccessRoleEnum { - # The user has viewer access. He/She may only read site data. - VIEWER - - # The user has planner access. He/She may be able to create missions. - PLANNER +# Represents a single message in the chat system +type ChatMessageType { + # The unique id of the message + id: String! - # The user has manager access. He/She has full access to the site and its configurations. - MANAGER -} + # The timestamp of the message + timestamp: Timestamp! -# Represents a users account in the user management system -type UserAccountType { - userId: Int! - firstName: String! - lastName: String! - email: String! - robotPermissions: [RobotPermissionType!]! - sitePermissions: [SitePermissionType!]! -} + # The text message + message: String! -# Represents the general user account info -type UserAccountInfoType { - userId: Int! - firstName: String! - lastName: String! - email: String! + # The sender of the message + user: ChatUserType! } -type UserAccountInfosType { - page: UserAccountInfoTypeConnection! +# Represents a paginated batch of chat messages +type ChatMessagesType { + page: ChatMessageTypeConnection! pageData: PageDataType } -type UserAccountInfoTypeConnection { - edges: [UserAccountInfoTypeEdge!] - pageInfo: UserAccountInfoTypePageInfo +type ChatMessageTypeConnection { + edges: [ChatMessageTypeEdge!] + pageInfo: ChatMessageTypePageInfo } -type UserAccountInfoTypeEdge { +type ChatMessageTypeEdge { cursor: String - node: UserAccountInfoType + node: ChatMessageType } -type UserAccountInfoTypePageInfo { +type ChatMessageTypePageInfo { startCursor: String endCursor: String hasPreviousPage: Boolean! hasNextPage: Boolean! } -# Represents the scope of an event. -type EventScopeType { - # The type of the scope. - type: EventScopeTypeEnum! - - # In case of type 'SITE', the specific site the event is associated with. - siteId: String - - # In case of type 'ROBOT', the specific robot the event is associated with. - robotId: String -} - -# The different types of event scopes. -enum EventScopeTypeEnum { - # The event is related to the overall system. - SYSTEM +# Represents a ICE (Interactive Connectivity Establishment) configuration which is used to establish a WebRTC connection. +type IceCandidateType { + # A DOMString describing the properties of the candidate. + candidate: IceCandidate! - # The event is related to a site. - SITE + # A DOMString which uniquely identifies the source media component from which the candidate draws data, or null if no such association exists for the candidate. + sdpMid: String! - # The event is related to a robot. - ROBOT + # A number containing a 0-based index into the set of m-lines providing media descriptions, indicating which media source is associated with the candidate, or null if no such association is available. + sdpMLineIndex: Int! } -# Represents a single diagnostic message -type DiagnosticsType { - # The timestamp the event happens. +# Represents an ICECandidate status update which provides the remote generated candidates. +type IceCandidatesStatusType { + # The timestamp of this ice candidates status. timestamp: Timestamp! - # The type/level of this message. This might be an hint how critical the message is. - type: DiagnosticsTypeEnum! + # The list of generated remote ICECandidates. + iceCandidates: [IceCandidateType!] +} - # The component which has generated the diagnostic message. - component: String +# Represents the response of the WebRTC handshake. +type WebRtcHandshakeResponseType { + # The id of the webrtc connection + id: IceCandidate! - # The diagnostic key. - value: String! + # The SDP answer of the remote WebRTC peer. + sdp: Sdp! } -# Represents the type of a single diagnostic message. -enum DiagnosticsTypeEnum { - # The message represents an information to the user. - INFO - - # The message represents an warning to the user. - WARNING +# Represents execution details of a robot command. +type RobotCommandExecutionType { + # The unique identifier of the robot command execution. + id: ID! - # The message represents an error to the user. - ERROR -} + # The timestamp the command has been requested. + startTimestamp: Timestamp! -# Represents a generic event in the ER GraphQL API. -type EventType { - # The id of the event. - id: String! + # The command definition which has been executed. + opcode: RobotCommandOperationCodeEnum! - # The timestamp of the event. - timestamp: Timestamp! + # The context of the command execution if it exists + contextId: String - # The scope of the event (e.g. a specific robot or site). - scope: EventScopeType! + # The current state of the execution. + state: RobotCommandExecutionStateEnum! - # The diagnostics describing the event. - diagnostics: [DiagnosticsType!]! + # The result of the last execution. + result: RobotCommandExecutionResultEnum } -# Represents the paginated type of the AbstractDataPayload -type EventsType { - page: EventTypeConnection! - pageData: PageDataType -} +# Represents the existing robot commands. Note: not all commands are available on all robots. +enum RobotCommandOperationCodeEnum { + # Compatibility: all robots. Set a new awake state for the robot. + OP_CODE_AWAKE -type EventTypeConnection { - edges: [EventTypeEdge!] - pageInfo: EventTypePageInfo -} + # Compatibility: all robots. Take a photo with a provided camera. The id of the camera is considered as the context + OP_CODE_TAKE_PHOTO -type EventTypeEdge { - cursor: String - node: EventType -} + # Compatibility: all robots. Turn on or turn of the robots motors. + OP_CODE_MOTOR_ENABLE -type EventTypePageInfo { - startCursor: String - endCursor: String - hasPreviousPage: Boolean! - hasNextPage: Boolean! -} + # Compatibility: all ground robots except EXR1. Send a initial pose guess to the robot for the localization. + OP_CODE_SET_INITIAL_ROBOT_POSE -# Represents a mission execution control request by the Cloud Core API (triggered by the user interface or the API directly) to a particular robot. -type MissionExecutionControlRequestType { - # The mission execution this request is associated with. It may be used by the robot to send processes ans status updates. - missionExecutionID: ID! + # Compatibility: all robots. Start a video recording with a provided camera. The id of the camera is considered as the context + OP_CODE_START_VIDEO_RECORDING - # The mission control action which has been requested. Depending on the value other fields are available or not. - action: MissionExecutionControlActionEnum! + # Compatibility: all robots. Stop a running video recording of a provided camera. The id of the camera is considered as the context + OP_CODE_STOP_VIDEO_RECORDING +} - # Available if: action in ['START', 'GO_TO_TASK']. The mission definition which should be executed by the robot. - missionDefinition: MissionDefinitionType +# Represents the different states of a robot command execution. A command is always in one of these states. +enum RobotCommandExecutionStateEnum { + # The command execution is 'READY' if no command execution of this type is running. A new request by a client will trigger a transition into 'REQUESTED'. It is possible that a robot triggers a direct transition into 'ACKNOWLEDGED' (e.g. the robot goes to auto sleep after the execution of a mission). + READY - # Available if: action in ['GO_TO_TASK']. The mission status before the request. - previousStatus: MissionExecutionStatusEnum + # The command execution is 'REQUESTED' if a new command execution has been requested by an API client. If a command is in this state, it is not possible to create new execution requests of the same type until the state is 'READY' again. In the case the robot does not respond to the request, the request will timeout and will go back to 'READY'. If the robot responses to the request, a state transition to 'ACKNOWLEDGED' is performed. + REQUESTED - # Available if: action in ['GO_TO_TASK']. The mission task definition which should be the next executed task. - nextMissionTaskDefinitionId: String + # The command execution is 'ACKNOWLEDGED' if a command request has been acknowledged by the robot. The robot tries to execute the requested command. If the execution is completed (with success or failure), a transition back to 'READY' is performed. There is also a timeout if the robot does not finish the execution within 5 minutes. + ACKNOWLEDGED } -# Represents the mission execution control action, which is used to send user command requests to the robot -enum MissionExecutionControlActionEnum { - # Represents a request to start or resume a mission - START +# Represents the generic results of a robot command execution. +enum RobotCommandExecutionResultEnum { + # The command execution was successful. + SUCCEEDED - # Represents a request to pause a mission. - PAUSE + # The command execution was excepted by the robot but the execution was not successful. + FAILED - # Represents a request to set the next executed task to a provided one. - GO_TO_TASK + # The command execution was rejected. This is typically the case if the robot does not accept the request. The execution has run into a timeout. + REJECTED } -# Represents the status of a mission execution. -enum MissionExecutionStatusEnum { - # The mission execution is "START_REQUESTED" if a request for a new mission execution has been sent to the robot. - START_REQUESTED +# Represents a robot command execution status update for all clients +type RobotCommandExecutionStatusType { + # The timestamp of this status + timestamp: Timestamp! - # The mission execution is "PAUSE_REQUESTED" if an request has been sent to the robot to pause the mission. - PAUSE_REQUESTED + # The command execution + commandExecution: RobotCommandExecutionType! +} - # The mission execution is "RESUME_REQUESTED" if an request has been sent to the robot to resume the mission. - RESUME_REQUESTED +# Represents a robot command execution status update for all clients +type RobotCommandExecutionRequestType { + # The unique identifier of the robot command execution. + commandExecutionID: ID! - # The mission execution is "GO_TO_TASK_REQUESTED" if an request has been sent to the robot to go to a desired task. - GO_TO_TASK_REQUESTED + # The command definition which has been executed. + opcode: RobotCommandOperationCodeEnum! - # The mission execution is "REJECTED" if something went wrong during the mission execution command. - REJECTED - @deprecated( - reason: "The robot should send its actual state instead of rejecting a request." - ) + # The context of the command execution if it exists + contextId: String - # The mission execution is "WAKING_UP" if the robot is still in sleep mode and needs to be waken up before executing the mission. - WAKING_UP + # The arguments of the command. + args: Json +} - # The mission execution is "STARTING" if the robot has acknowledged the request and prepared the mission execution. (e.g. waking up the robot, enabling motors and sensors etc.) - STARTING +# A unique person (either ER or customer) who currently has the right to drive the robot manually or launch autonomous missions. Multiple principal drivers are not allowed, even though multiple people can have “driver” access rights. +type PrincipalDriverType { + # The userId of the principal driver + userId: Float! - # The mission execution is "IN_PROGRESS" if the mission is currently running. - IN_PROGRESS + # The timestamp the user got principal driver for a robot. + timestamp: Timestamp! - # The mission execution is "PAUSED" if the mission has been interrupted either by the user or by an anomaly. - PAUSED + # The email address of the principal driver + email: String! - # The mission execution has been "COMPLETED" if the mission execution is completed. This is usually the case if the robot has been returned to the docking station. - COMPLETED + # The name of the principal driver + name: String! + + # Whether or not the current user is principal driver + isCurrentUser: Boolean! } -# Represents the online data of an executed mission by a particular robot (Not to be confused with the mission report, which represents a persistent data of a mission execution.). -type MissionExecutionType { - # The unique identifier of the mission execution. - id: ID! +type PrincipalDriversType { + page: PrincipalDriverTypeConnection! + pageData: PageDataType +} - # The timestamp the mission execution has started. - startTimestamp: Timestamp! +type PrincipalDriverTypeConnection { + edges: [PrincipalDriverTypeEdge!] + pageInfo: PrincipalDriverTypePageInfo +} - # The current control mode during the mission. - controlMode: ControlModeEnum! +type PrincipalDriverTypeEdge { + cursor: String + node: PrincipalDriverType +} - # The status, of the mission execution. - status: MissionExecutionStatusEnum! +type PrincipalDriverTypePageInfo { + startCursor: String + endCursor: String + hasPreviousPage: Boolean! + hasNextPage: Boolean! +} - # In the case the mission has been paused unexpectedly: The occurred failures. - failures: [MissionExecutionFailureEnum!]! - @deprecated( - reason: "[27.04.2023] This field will be removed in the future." - ) +# Robot battery type contains the statuses related to the battery. +type BatteryStatusType { + # An estimate of the current battery percentage of the robot. + percentage: Float! - # The mission definition which has been selected. - missionDefinition: MissionDefinitionType + # The current charging state of the robot. + chargingState: ChargingStateEnum! - # The id of the task definition which is currently executed. - currentExecutedTaskId: String + # The charger type the robot to which the robot is connected to. + chargerType: ChargerTypeEnum! + + # The current charging current. Might be negative if the robot is discharging. + chargingCurrent: ElectricCurrent! } -# Represents the control mode of the robot. -enum ControlModeEnum { - # The robot is controlled manually by a user with driver access. - MANUAL +# Represents the charging state of the robot. +enum ChargingStateEnum { + # The robot battery is discharging. Note: depending on the charging method and the current consumption of the robot the charging state may be set to DISCHARGING, even while the robot is connected to a charger. + DISCHARGING - # The robot autonomously executes a mission. - AUTONOMOUS + # The robot battery is charging. + CHARGING - # The robot has been stopped and is not being controlled at the moment (e.g. is located in the docking station). - STOPPED + # The battery is fully charged and being kept at that level by the charger. + CHARGED } -# Represents failures which might occur during a mission execution. -enum MissionExecutionFailureEnum { - # A stop tag has been detected. - MISSION_FAILURE_STOP_TAG +# Represents the charger type to which the robot is connected to. Depending on the robot type, not all of the types are available. +enum ChargerTypeEnum { + # The robot is not connected to any charger. + NOT_CONNECTED - # The robot has lost the line. - MISSION_FAILURE_LINE_LOST + # The robot battery is charging. + WIRED_CHARGER - # The wired quick charger is still connected. - MISSION_FAILURE_QUICK_CHARGER_CONNECTED + # The battery is fully charged and being kept at that level by the charger. + WIRELESS_CHARGER +} - # The emergency stop is still pressed. - MISSION_FAILURE_ESTOP_PRESSED +# Connection status type which contains the information related to the data connection of the robot. +type ConnectionStatusType { + # The network type that the robot is connected to. + type: ConnectionTypeEnum! - # Nobody is supervising the robot. - MISSION_FAILURE_WATCHDOG_LOST + # The network name of carrier if the robot connected to mobile network or the SSID if the robot is connected to a WIFI network. + networkName: String! - # A sensor value is above the maximum threshold. - MISSION_FAILURE_SENSOR_LEVEL_ABOVE_THRESHOLD + # The signal strength in percentage. + signalStrength: Float! +} - # A sensor value is below the minimum threshold. - MISSION_FAILURE_SENSOR_LEVEL_BELOW_THRESHOLD +# Represents the network connection type of the robot. +enum ConnectionTypeEnum { + # An IEEE 802.11 network. + NET_WIFI - # The battery level is to low to continue the mission. - MISSION_FAILURE_LOW_BATTERY + # A third generation wireless mobile telecommunication network. + NET_3G - # The robot detected a potential collision with an obstacle. - MISSION_FAILURE_COLLISION_DETECTED + # A fourth generation wireless mobile telecommunication network. + NET_4G - # An failure which cannot identified has been accrued during the mission execution. - MISSION_FAILURE_UNKNOWN + # A fifth generation wireless mobile telecommunication network. + NET_5G +} - # An failure which cannot identified has been accrued - UNKNOWN - @deprecated( - reason: "Changed convention, use 'MISSION_FAILURE_UNKNOWN' instead." - ) +# The state of the camera +type CameraStateType { + # The id of the camera + cameraId: String! + + # The current state of the camera + state: CameraStateEnum! + + # If state === VIDEO_RECORDING the start recording timestamp + recordingStartTimestamp: Timestamp } -# Represents the status of the mission execution of a robot. -type MissionExecutionStatusType { - # The timestamp of this mission execution status. - timestamp: Timestamp! +# Represents the different states of a camera +enum CameraStateEnum { + # The camera is idle and ready to use + IDLE - # The current executed mission. If no mission is running null is provided. - missionExecution: MissionExecutionType + # The camera is currently recording a video + VIDEO_RECORDING } -# Represents the subscription type of a trajectory. -type TrajectorySubscriptionType { - # The timestamp of the trajectory. +# A Robot Status provides the temporal state of a particular robot at the specified timestamp. It provides information about the robot connection, battery, motor state and more. It is a report about the state of a robots components that could effect a mission.The status is even provided if the robot is not connected to the cloud. It also provides details about state transitions, triggered by robot commands. +type RobotStatusType { + # The timestamp of the temporal state of the robot. This field always contains a valid value. timestamp: Timestamp! - # The trajectory data. - trajectory: [Pose3DStampedType!]! -} + # The timestamp when the robot was last connected to the cloud (see connected). It is undefined if the robot has never been seen. + lastSeen: Timestamp -# Represents the snapshot of a mission execution. -type MissionExecutionSnapshotType { - # The unique identifier of the site. - site: String! + # Whether or not, the robot has a working wireless connection to the cloud. This field always contains a valid value. In the case connected === false, the remaining properties are invalid. + isConnected: Boolean! - # The unique identifier of the robot snapshot. - robotSnapshotId: String! + # The current principal driver of this robot. + principal: PrincipalDriverType - # The timestamp of this mission execution snapshot. - timestamp: Timestamp! + # The awake state of the robot. This property is only valid in the case the robot is connected. + awakeStatus: AwakeStatusEnum - # The current mission execution status. - executionStatus: MissionExecutionStatusEnum! + # The robot battery status contains the statuses related to the battery. This property is only valid in the case the robot is connected. + batteryStatus: BatteryStatusType - # The unique identifier of the mission definition. - missionDefinitionId: String! + # The state of the cameras of the robot + cameraStates: [CameraStateType!] - # Flag that marks whether the mission should be considered for Energy Robotics performance KPIs. - kpiRelevantMission: Boolean! + # The connection status type contains the statuses related to the data connection of the robot. This property is only valid in the case the robot is connected. + connectionStatus: ConnectionStatusType + + # The emergency switch has been pressed. The robot is unable to move. This property is only valid in the case the robot is connected. + isEmergencySwitchPressed: Boolean + + # The motors of the robot are enabled. The availability of this option depends on the robot type (if not the value is always true). The robot is only able to move if the motors are enabled. This property is only valid in the case the robot is connected. + isMotorsEnabled: Boolean + + # Indicate whether or not the robot is in the docking station. + isDocking: Boolean } -# The recorded data is an image. Typically it is stored as a PNG. -type PhotoDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! +# Represents the sleep status of the robot. It consists of two primary states: AWAKE and ASLEEP. The transitions between the two are usually not applied instantaneously. During this time, the sleep state is in an intermediate state. +enum AwakeStatusEnum { + # The robot is fully available. This state is mandatory to perform actions on the robot or get access to sensor data (e.g. camera images). In this state, the robot has larger battery consumption even if the robot does not executes any tasks. + AWAKE - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! + # In this state, the robot is in a low-power mode. It is still connected to the cloud and publishes its status but at a significantly lower frequency. It is also possible to wake the robot up remotely. All other consumers are shut down. + ASLEEP - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The transition state from 'ASLEEP' to 'AWAKE'. + WAKING_UP - # The type of this payload. - dataType: DataPayloadTypeEnum! + # The transition state from 'AWAKE' to 'ASLEEP'. + GOING_TO_SLEEP +} - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType +# Represents a pair of an robot id and a corresponding robot status +type StatusPerRobotType { + # The robot id of the robot which produces the status. + robotID: ID! - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The status of the robot. + status: RobotStatusType! +} - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) +# Represents the status of the principal driver of a robot. +type PrincipalDriverStatusType { + # The timestamp of this principal driver status. + timestamp: Timestamp! - # - pointOfInterest: PointOfInterestType + # The current principal driver. + principal: PrincipalDriverType +} - # Represents the POI name specified in the mission editor. - poiName: String +# Represents a single human robot supervisor session. +type HumanRobotSupervisorSessionType { + # The start date of the session + startTimestamp: Timestamp! - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! + # The end timestamp of the session. If it is set the session is considered as closed. + endTimestamp: Timestamp - # The timestamp the data has been generated. + # The responsible human supervisor + supervisor: UserType! + + # Represents the acknowledgement state of the principal driver regarding the supervisor session. + acknowledgementState: HumanRobotSupervisorAcknowledgementStateEnum! +} + +# Represents acknowledgement of a principal driver in a human robot supervisor session. +enum HumanRobotSupervisorAcknowledgementStateEnum { + # There is not an answer from the principal driver yet. + NOT_ANSWERED + + # The principal driver accepted the takeover request of the human robot supervisor + ACCEPTED + + # The principal driver declined the takeover request of the human robot supervisor + DECLINED +} + +# Represents the status of a human robot supervisor session. +type HumanRobotSupervisorSessionStatusType { + # The timestamp of this human robot supervisor session status. timestamp: Timestamp! - # The uri to access the photo. - uri: Uri! + # The current robot assistant session. + session: HumanRobotSupervisorSessionType } -# The recorded payload is an audio file. Typically it is stored in the WEBM format. -type AudioDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! +# Represents a permission of a user to a robot +type RobotPermissionType { + # The robot corresponding to the access + robotNumber: Int! - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! + # The roles of the user + accessRoles: [RobotAccessRoleEnum!]! +} - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String +# Represents the access role of user to a robot resource +enum RobotAccessRoleEnum { + # The user has viewer access + VIEWER - # The type of this payload. - dataType: DataPayloadTypeEnum! + # The user has viewer access + DRIVER +} - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType +# Represents the permission of a user to a site +type SitePermissionType { + # The site corresponding to the permission + siteNumber: Int! - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The role of the user + accessRoles: [SiteAccessRoleEnum!]! +} - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) +# Represents the access role of user to a site resource +enum SiteAccessRoleEnum { + # The user has viewer access. He/She may only read site data. + VIEWER - # - pointOfInterest: PointOfInterestType + # The user has planner access. He/She may be able to create missions. + PLANNER - # Represents the POI name specified in the mission editor. - poiName: String + # The user has manager access. He/She has full access to the site and its configurations. + MANAGER +} - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! +# Represents a users account in the user management system +type UserAccountType { + userId: Int! + firstName: String + lastName: String! + email: String! + robotPermissions: [RobotPermissionType!]! + sitePermissions: [SitePermissionType!]! +} - # The start timestamp of the audio file. - fromTimestamp: Timestamp! +# Represents the general user account info +type UserAccountInfoType { + userId: Int! + firstName: String + lastName: String! + email: String! +} - # The end timestamp of the audio file. - toTimestamp: Timestamp! +type UserAccountInfosType { + page: UserAccountInfoTypeConnection! + pageData: PageDataType +} - # The uri to access the audio file. (Currently only the filename is provided.) - uri: Uri! +type UserAccountInfoTypeConnection { + edges: [UserAccountInfoTypeEdge!] + pageInfo: UserAccountInfoTypePageInfo } -# The recorded payload is an video file. Typically it is stored in the MP4 format using H.264 encoding. -type VideoDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! +type UserAccountInfoTypeEdge { + cursor: String + node: UserAccountInfoType +} - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +type UserAccountInfoTypePageInfo { + startCursor: String + endCursor: String + hasPreviousPage: Boolean! + hasNextPage: Boolean! +} - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String +# Represents the scope of an event. +type EventScopeType { + # The type of the scope. + type: EventScopeTypeEnum! - # The type of this payload. - dataType: DataPayloadTypeEnum! + # In case of type 'SITE', the specific site the event is associated with. + siteId: String - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType + # In case of type 'ROBOT', the specific robot the event is associated with. + robotId: String +} - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String +# The different types of event scopes. +enum EventScopeTypeEnum { + # The event is related to the overall system. + SYSTEM - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) + # The event is related to a site. + SITE - # - pointOfInterest: PointOfInterestType + # The event is related to a robot. + ROBOT +} - # Represents the POI name specified in the mission editor. - poiName: String +# Represents a single diagnostic message +type DiagnosticsType { + # The timestamp the event happens. + timestamp: Timestamp! - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! + # The type/level of this message. This might be an hint how critical the message is. + type: DiagnosticsTypeEnum! - # The start timestamp of the video file. - fromTimestamp: Timestamp! + # The component which has generated the diagnostic message. + component: String - # The end timestamp of the video file. - toTimestamp: Timestamp! + # The diagnostic key. + value: String! +} - # The uri to access the audio file. - uri: Uri! +# Represents the type of a single diagnostic message. +enum DiagnosticsTypeEnum { + # The message represents an information to the user. + INFO + + # The message represents an warning to the user. + WARNING + + # The message represents an error to the user. + ERROR } -# The recorded payload has the form of a 1D time series. This means we have have a discrete series of timestamps. For every timestamp we have a corresponding scalar value (e.g. temperature measurements). -type TimeSeries1DDataType { - # The name of the data series. +# Represents a customer flag on an event +type CustomerFlagType { + # The timestamp the event was flagged timestamp: Timestamp! - # The position of the robot during the recording of this entry - position: Point3DType! - - # The distance which has been traveled to this measurement point. - distanceTraveled: Float! + # The user who flagged the event + user: UserType! - # The measured value. - value: Float + # The customer flag + reason: String! } -# Represents a 1D timestamped data series. -type TimeSeries1DDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! +# Represents a generic event in the ER GraphQL API. +type EventType { + # The id of the event. + id: String! - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! + # The timestamp of the event. + timestamp: Timestamp! - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The scope of the event (e.g. a specific robot or site). + scope: EventScopeType! - # The type of this payload. - dataType: DataPayloadTypeEnum! + # The diagnostics describing the event. + diagnostics: [DiagnosticsType!]! - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType + # A customer flag if available + customerFlag: CustomerFlagType +} - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String +# Represents the paginated type of the AbstractDataPayload +type EventsType { + page: EventTypeConnection! + pageData: PageDataType +} - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) +type EventTypeConnection { + edges: [EventTypeEdge!] + pageInfo: EventTypePageInfo +} + +type EventTypeEdge { + cursor: String + node: EventType +} + +type EventTypePageInfo { + startCursor: String + endCursor: String + hasPreviousPage: Boolean! + hasNextPage: Boolean! +} - # - pointOfInterest: PointOfInterestType +# The categories of robot events +type EventCategoriesType { + # Obstructions causing the robot to stop. + obstruction: [String!]! - # Represents the POI name specified in the mission editor. - poiName: String + # Weather related issues causing the robot to stop + weather: [String!]! - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! + # Software related issues causing the robot to stop + software: [String!]! - # The name of the data series. - name: String! + # Hardware related issues causing the robot to stop + hardware: [String!]! +} - # The unit of the data entries. - unit: String! +# Represents a mission execution control request by the Cloud Core API (triggered by the user interface or the API directly) to a particular robot. +type MissionExecutionControlRequestType { + # The mission execution this request is associated with. It may be used by the robot to send processes ans status updates. + missionExecutionID: ID! - # The time series data. - data: [TimeSeries1DDataType!]! -} + # The mission control action which has been requested. Depending on the value other fields are available or not. + action: MissionExecutionControlActionEnum! -# Represents superset of the PHOTO type but with the option to render (multiple) svg based overlays on top of it. -type PhotoOverlayDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! + # Available if: action in ['START', 'GO_TO_TASK']. The mission definition which should be executed by the robot. + missionDefinition: MissionDefinitionType - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! + # Available if: action in ['GO_TO_TASK']. The mission status before the request. + previousStatus: MissionExecutionStatusEnum - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # Available if: action in ['GO_TO_TASK']. The mission task definition which should be the next executed task. + nextMissionTaskDefinitionId: String +} - # The type of this payload. - dataType: DataPayloadTypeEnum! +# Represents the mission execution control action, which is used to send user command requests to the robot +enum MissionExecutionControlActionEnum { + # Represents a request to start or resume a mission + START - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType + # Represents a request to pause a mission. + PAUSE - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # Represents a request to set the next executed task to a provided one. + GO_TO_TASK +} - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) +# Represents the status of a mission execution. +enum MissionExecutionStatusEnum { + # The mission execution is "START_REQUESTED" if a request for a new mission execution has been sent to the robot. + START_REQUESTED - # - pointOfInterest: PointOfInterestType + # The mission execution is "PAUSE_REQUESTED" if an request has been sent to the robot to pause the mission. + PAUSE_REQUESTED - # Represents the POI name specified in the mission editor. - poiName: String + # The mission execution is "RESUME_REQUESTED" if an request has been sent to the robot to resume the mission. + RESUME_REQUESTED - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! + # The mission execution is "GO_TO_TASK_REQUESTED" if an request has been sent to the robot to go to a desired task. + GO_TO_TASK_REQUESTED - # The timestamp the image has been created. - timestamp: Timestamp! + # The mission execution is "REJECTED" if something went wrong during the mission execution command. + REJECTED + @deprecated( + reason: "The robot should send its actual state instead of rejecting a request." + ) - # The uri to access the photo. - uri: Uri! + # The mission execution is "WAKING_UP" if the robot is still in sleep mode and needs to be waken up before executing the mission. + WAKING_UP - # The overlay (e.g. an SVG) that can be rendered on top of the photo. - overlayUri: Uri! -} + # The mission execution is "STARTING" if the robot has acknowledged the request and prepared the mission execution. (e.g. waking up the robot, enabling motors and sensors etc.) + STARTING -# Represents a single data accessor which allows a skill provider to highlight important fields in the json data. -type JSONDataAccessorType { - # A human readable name of the data field. - name: String! + # The mission execution is "IN_PROGRESS" if the mission is currently running. + IN_PROGRESS - # A key accessor in dot notation. (e.g. jsonData.subfield.subsubfield). - accessor: String! + # The mission execution is "PAUSED" if the mission has been interrupted either by the user or by an anomaly. + PAUSED + + # The mission execution has been "COMPLETED" if the mission execution is completed. This is usually the case if the robot has been returned to the docking station. + COMPLETED } -# Represents the recorded data in a JSON structure. The schema is defined by the data producer. Typically the producer is a skill. -type JSONDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. +# Represents the online data of an executed mission by a particular robot (Not to be confused with the mission report, which represents a persistent data of a mission execution.). +type MissionExecutionType { + # The unique identifier of the mission execution. id: ID! - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! - - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String - - # The type of this payload. - dataType: DataPayloadTypeEnum! + # The timestamp the mission execution has started. + startTimestamp: Timestamp! - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType + # The current control mode during the mission. + controlMode: ControlModeEnum! - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The status, of the mission execution. + status: MissionExecutionStatusEnum! - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion + # In the case the mission has been paused unexpectedly: The occurred failures. + failures: [MissionExecutionFailureEnum!]! @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." + reason: "[27.04.2023] This field will be removed in the future." ) - # - pointOfInterest: PointOfInterestType + # The mission definition which has been selected. + missionDefinition: MissionDefinitionType - # Represents the POI name specified in the mission editor. - poiName: String + # The id of the task definition which is currently executed. + currentExecutedTaskId: String - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! + # Flag that marks whether the mission should be considered for Energy Robotics performance KPIs. + kpiRelevantMission: Boolean! +} - # The JSON data structure. - jsonData: Json! +# Represents the control mode of the robot. +enum ControlModeEnum { + # The robot is controlled manually by a user with driver access. + MANUAL - # Data accessors to highlight important fields in the jsonData field. - dataAccessors: [JSONDataAccessorType!] + # The robot autonomously executes a mission. + AUTONOMOUS + + # The robot has been stopped and is not being controlled at the moment (e.g. is located in the docking station). + STOPPED } -# Represents a composite type to group multiple payloads together. -type GroupDataPayloadType implements AbstractDataPayloadType { - # The unique identifier of this payload. - id: ID! +# Represents failures which might occur during a mission execution. +enum MissionExecutionFailureEnum { + # A stop tag has been detected. + MISSION_FAILURE_STOP_TAG - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! + # The robot has lost the line. + MISSION_FAILURE_LINE_LOST - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The wired quick charger is still connected. + MISSION_FAILURE_QUICK_CHARGER_CONNECTED - # The type of this payload. - dataType: DataPayloadTypeEnum! + # The emergency stop is still pressed. + MISSION_FAILURE_ESTOP_PRESSED - # The producer of this payload. Can be null for Energy Robotics. - producer: DataPayloadProducerType + # Nobody is supervising the robot. + MISSION_FAILURE_WATCHDOG_LOST - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # A sensor value is above the maximum threshold. + MISSION_FAILURE_SENSOR_LEVEL_ABOVE_THRESHOLD - # (For future use, currently always null) The region of interest on the site were the data has been recorded. It has been either a point of interest or an area of interest. - regionOfInterest: RegionOfInterestUnion - @deprecated( - reason: "[03-05-2023] area of interest was never used and will not be implemented. For points of interest use the 'pointOfInterest' field instead." - ) + # A sensor value is below the minimum threshold. + MISSION_FAILURE_SENSOR_LEVEL_BELOW_THRESHOLD - # - pointOfInterest: PointOfInterestType + # The battery level is to low to continue the mission. + MISSION_FAILURE_LOW_BATTERY - # Represents the POI name specified in the mission editor. - poiName: String + # The robot detected a potential collision with an obstacle. + MISSION_FAILURE_COLLISION_DETECTED - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean! + # An failure which cannot identified has been accrued during the mission execution. + MISSION_FAILURE_UNKNOWN - # The data payloads of this group. - group: [AbstractDataPayloadType!]! + # An failure which cannot identified has been accrued + UNKNOWN + @deprecated( + reason: "Changed convention, use 'MISSION_FAILURE_UNKNOWN' instead." + ) } -# Represents the description of the producer e.g. skill which has generated the payload data. -type DataPayloadProducerType { - # An dot seperated identifier that groups skills of the same provider. E.g.: com.energy-robotics - group: String! +# Represents the status of the mission execution of a robot. +type MissionExecutionStatusType { + # The timestamp of this mission execution status. + timestamp: Timestamp! - # A human readable name of the skill that produced the payload. - name: String! + # The current executed mission. If no mission is running null is provided. + missionExecution: MissionExecutionType } -# Represents the paginated type of the AbstractDataPayload -type AbstractDataPayloadsType { - page: AbstractDataPayloadTypeConnection! - pageData: PageDataType -} +# Represents the subscription type of a trajectory. +type TrajectorySubscriptionType { + # The timestamp of the trajectory. + timestamp: Timestamp! -type AbstractDataPayloadTypeConnection { - edges: [AbstractDataPayloadTypeEdge!] - pageInfo: AbstractDataPayloadTypePageInfo + # The trajectory data. + trajectory: [Pose3DStampedType!]! } -type AbstractDataPayloadTypeEdge { - cursor: String - node: AbstractDataPayloadType -} +# Represents the snapshot of a mission execution. +type MissionExecutionSnapshotType { + # The unique identifier of the site. + site: String! -type AbstractDataPayloadTypePageInfo { - startCursor: String - endCursor: String - hasPreviousPage: Boolean! - hasNextPage: Boolean! -} + # The unique identifier of the robot snapshot. + robotSnapshotId: String! -# Represents the subscription type for a data payload. -type DataPayloadSubscriptionType { - # The timestamp of this subscription message. + # The timestamp of this mission execution snapshot. timestamp: Timestamp! - # If true, the data payloads was already available and has been updated - updated: Boolean! + # The current mission execution status. + executionStatus: MissionExecutionStatusEnum! - # The data payload - dataPayload: AbstractDataPayloadType! + # The unique identifier of the mission definition. + missionDefinitionId: String! + + # Flag that marks whether the mission should be considered for Energy Robotics performance KPIs. + kpiRelevantMission: Boolean! } # Represents a copy of a subset of the mission definition. It is used to store the relevant information in the mission report. This data is still available even if the original mission has been removed or modified. @@ -2420,7 +2427,19 @@ type MissionReportType { missionDefinitions: [MissionDefinitionSnapshotType!]! # All the data payloads recorded the mission. It does not matter if it was part of a planned mission or manual taken, or if the data has been generated during postprocessing by a skill. - dataPayloads: [AbstractDataPayloadType!] + dataPayloads( + # A filter to specify which payloads should be included. + payloadFilter: FilterDataPayloadsInput! = { includeSkillData: true } + ): [AbstractDataPayloadType!] +} + +# A filter type for data payload queries. It allows to specify which payloads are returned. +input FilterDataPayloadsInput { + # Include payloads produced by skills. + includeSkillData: Boolean! = true + + # List of payload types that should be included. A BadRequest error is returned if list is empty. + includePayloadTypes: [DataPayloadTypeEnum!] } # Subset of the mission report type. It does not include large data property like the 'trajectory' or the 'dataPayloads'. In order to retrieve this data query the specific report explicitly. @@ -2487,6 +2506,65 @@ type MissionReportSubscriptionType { missionReport: MissionReportType! } +type ContextKeyValuePairType { + key: String! + value: [String!]! +} + +# Represents the creator of a feature flag. +type CreatorType { + # The user name. + name: String! + + # The user email. + email: String! + + # The user id. + userId: Float! +} + +# Represents a feature flag +type FeatureFlagType { + # The name of the feature-flag. + name: String! + + # The context of the feature-flag. + context: [ContextKeyValuePairType!] + + # The state of the feature-flag. + enabled: Boolean! +} + +# Represents a feature flag +type PrivateFeatureFlagType { + # The name of the feature-flag. + name: String! + + # The context of the feature-flag. + context: [ContextKeyValuePairType!] + + # The state of the feature-flag. + enabled: Boolean! + + # The unique identifier of the feature-flag. + id: ID! + + # The timestamp when the feature was first created + createdAt: Timestamp! + + # The timestamp when the feature last was modified + updatedAt: Timestamp + + # The description of the feature-flag. + description: String + + # The creator of the feature-flag. + creator: CreatorType! + + # The ticket information of the feature-flag. + ticket: String +} + # A field whose value can accept any string except empty ones. It will trim any additional white space before validation. scalar NonEmptyString @@ -2571,6 +2649,9 @@ type Query { # The id of the site siteId: String! + # The desired order of the snapshots + orderByTimestamp: OrderTypeEnum! = DESCENDING + # The pagination parameters. filter: ConnectionInput ): SiteSnapshotsType! @@ -2599,6 +2680,51 @@ type Query { key: String! ): PointOfInterestType! + # Request a specific point of interest of a site by customer tag. + pointOfInterestByCustomerTag( + # The ID of the point of interest. + siteId: String! + + # The customer provided tag + customerTag: NonEmptyString! + ): PointOfInterestType! + + # Find all available payloads recorded by a certain robot. + dataPayloadsByRobot( + # The query parameters. + input: QueryDataPayloadsByRobotInput! + + # The pagination parameters. + filter: ConnectionInput! + ): AbstractDataPayloadsType! + + # @Internal Find all available payloads recorded at a specific point of interest. + dataPayloadsByPointOfInterest( + # The id of the interested point of interest + pointOfInterestId: String! + + # The pagination parameters. + filter: ConnectionInput + ): AbstractDataPayloadsType! + + # Find a specific payload. + dataPayload( + # The id of the data payload + id: String! + ): AbstractDataPayloadType! + + # Find a specific payload by key. + dataPayloadForKey( + # The key of the payload + key: String! + ): AbstractDataPayloadType! + + # Find all payloads involved by a particular skill execution. + dataPayloadsBySkillExecution( + # The parameters which identify the interested skill execution. + input: QueryDataPayloadsBySkillExecutionInput! + ): [AbstractDataPayloadType!]! + # Request a specific point of interest. siteObject( # The id of the site object. @@ -2662,9 +2788,12 @@ type Query { # The id of the requested mission definition. missionDefinitionId: String! - # The id of the requested mission definition. + # The id of the robot. robotId: String! ): MissionRoadmapType! + @deprecated( + reason: "[25.05.2023]: This operation should not be a query, since it might update the roadmap. Use mutation 'computeMissionRoadmapForRobot' instead." + ) # @Private Find all task definitions. missionTaskDefinitions: [AbstractMissionTaskDefinitionType!]! @@ -2675,6 +2804,12 @@ type Query { robotId: String! ): GridMapType! + # @Private Receive a sites' current grid map which is used by the path planner. + gridMapForSite( + # The ID of the requested site. + siteId: String! + ): GridMapType! + # @Private Get the chat history of a particular robot. The messages are ordered by timestamp in descending order robotChatHistory( # The id of the robot @@ -2774,6 +2909,9 @@ type Query { filter: FilterEventsInput ): EventsType! + # @Private All categories and reasons a robot event can have. + presetEventCategories: EventCategoriesType! + # @Internal Receive a list of mission execution snapshots of a specific robot for a specified period. missionExecutionSnapshots( # The id of the site. @@ -2821,42 +2959,6 @@ type Query { # The key of the desired mission report. key: String! ): MissionReportType! - - # Find all available payloads recorded by a certain robot. - dataPayloadsByRobot( - # The query parameters. - input: QueryDataPayloadsByRobotInput! - - # The pagination parameters. - filter: ConnectionInput! - ): AbstractDataPayloadsType! - - # @Internal Find all available payloads recorded at a specific point of interest. - dataPayloadsByPointOfInterest( - # The id of the interested point of interest - pointOfInterestId: String! - - # The pagination parameters. - filter: ConnectionInput - ): AbstractDataPayloadsType! - - # Find a specific payload. - dataPayload( - # The id of the data payload - id: String! - ): AbstractDataPayloadType! - - # Find a specific payload by key. - dataPayloadForKey( - # The key of the payload - key: String! - ): AbstractDataPayloadType! - - # Find all payloads involved by a particular skill execution. - dataPayloadsBySkillExecution( - # The parameters which identify the interested skill execution. - input: QueryDataPayloadsBySkillExecutionInput! - ): [AbstractDataPayloadType!]! } # This input may be used to apply filters to the robot fleet query. The filter criteria are applied as conjunctions. Each filter criterion is optional. @@ -2868,6 +2970,15 @@ input QueryRobotsInput { siteId: String } +# Represents the order of a list of results. +enum OrderTypeEnum { + # The data is/should be in ascending order + ASCENDING + + # The data is/should be in descending order + DESCENDING +} + input ConnectionInput { # Paginate before opaque cursor. before: String @@ -2882,6 +2993,36 @@ input ConnectionInput { last: Float } +# Parameters to query data payloads by robot +input QueryDataPayloadsByRobotInput { + # Provide data payloads generated by a robot with a provided robot id. + robotId: String + + # Provide data payloads generated by a robot with a provided robot number. + robotNumber: Int + + # Provide data payloads generated by a list of robot snapshots. + robotSnapshotIds: [String!] = [] + + # Specify the payload types which should be considered. If this parameter is not set all types are considered. If an empty array is provided a Bad Request is returned. + types: [DataPayloadTypeEnum!] + + # Include payloads produced by skills. + includeSkillData: Boolean! = true +} + +# Parameters to query data payloads by skill execution details. +input QueryDataPayloadsBySkillExecutionInput { + # The key of the parent payload, the skill has been executed on. + parentPayloadKey: String! + + # The group of the skill. + producerGroup: String! + + # The name of the skill. + producerName: String! +} + # Query options for mission definition queries. input QueryMissionDefinitionInput { # Query for mission definitions defined on a specific site. @@ -2944,33 +3085,6 @@ input RobotFilterInput { robotId: String } -# Parameters to query data payloads by robot -input QueryDataPayloadsByRobotInput { - # Provide data payloads generated by a robot with a provided robot id. - robotId: String - - # Provide data payloads generated by a robot with a provided robot number. - robotNumber: Int - - # Provide data payloads generated by a list of robot snapshots. - robotSnapshotIds: [String!] = [] - - # Specify the payload types which should be considered. If this parameter is not set all types are considered. - types: [DataPayloadTypeEnum!] -} - -# Parameters to query data payloads by skill execution details. -input QueryDataPayloadsBySkillExecutionInput { - # The key of the parent payload, the skill has been executed on. - parentPayloadKey: String! - - # The group of the skill. - producerGroup: String! - - # The name of the skill. - producerName: String! -} - type Mutation { # @Internal createSite(input: CreateSiteInput!): SiteType! @@ -3156,23 +3270,69 @@ type Mutation { # The ID of the point of interest. id: String! - # The new transformation - transformation: Transformation3dInput! = { - sourceFrameId: "map" - targetFrameId: "map" - translation: { x: 0, y: 0, z: 0 } - rotation: { w: 1, x: 0, y: 0, z: 0 } - } - ): PointOfInterestType! + # The new transformation + transformation: Transformation3dInput! = { + sourceFrameId: "map" + targetFrameId: "map" + translation: { x: 0, y: 0, z: 0 } + rotation: { w: 1, x: 0, y: 0, z: 0 } + } + ): PointOfInterestType! + + # @Private Update the reference payload of an point of interest + updatePointOfInterestReferenceDataPayload( + # The ID of the point of interest. + pointOfInterestId: String! + + # The ID of the data payload. + dataPayloadId: String! + ): PointOfInterestType! + + # @Internal Update the visual serving reference image of one or multiple poi + updatePointOfInterestReferenceImage( + # The key of the poi + input: [UpdatePointOfInterestReferenceImageInput!]! + ): [PointOfInterestType!]! + + # @Internal Deletes all point of interest of a provided site. + deleteAllPointOfInterestForSite( + # The site which should be considered + siteId: String! + ): Int! + @deprecated( + reason: "[04-05-2023] No longer possible, change site snapshot head instead" + ) + + # @Internal Create new photo data payload. + upsertPhotoDataPayload( + input: CreatePhotoDataPayloadInput! + ): PhotoDataPayloadType! + + # @Internal Create new audio data payload. + upsertAudioDataPayload( + input: CreateAudioDataPayloadInput! + ): AudioDataPayloadType! + + # @Internal Create new video data payload. + upsertVideoDataPayload( + input: CreateVideoDataPayloadInput! + ): VideoDataPayloadType! + + # @Internal Create new time series 1D data payload. + upsertTimeSeries1DDataPayload( + input: CreateTimeSeries1dDataPayloadInput! + ): TimeSeries1DDataPayloadType! - # @Internal Deletes all point of interest of a provided site. - deleteAllPointOfInterestForSite( - # The site which should be considered - siteId: String! - ): Int! - @deprecated( - reason: "[04-05-2023] No longer possible, change site snapshot head instead" - ) + # @Internal Create new JSON data payload. + upsertJSONDataPayload( + input: CreateJSONDataPayloadInput! + ): JSONDataPayloadType! + + # @Internal Create a new snapshot of the robot. This has to be done after the configuration of the robot has been completed and/or the robot moved to a different site. + createRobotSnapshot( + # The id of the robot which should be snapshotted + robotId: String! + ): RobotSnapshotType! # @Private Create or update a docking station site object. upsertDockingStationSiteObject( @@ -3208,11 +3368,11 @@ type Mutation { createFeatureFlag(input: CreateFeatureFlagInput!): PrivateFeatureFlagType! # @Internal Remove a feature-flag - removeFeatureFlag(id: String!): String! + removeFeatureFlag(name: String!): String! # @Internal Update a feature flag updateFeatureFlag( - id: String! + name: String! input: UpdateFeatureFlagInput! ): PrivateFeatureFlagType! @@ -3376,12 +3536,6 @@ type Mutation { robotId: String! ): SiteRecordingType! - # @Internal Create a new snapshot of the robot. This has to be done after the configuration of the robot has been completed and/or the robot moved to a different site. - createRobotSnapshot( - # The id of the robot which should be snapshotted - robotId: String! - ): RobotSnapshotType! - # @Internal Transfer a site snapshot to a target site. The target site has to be on the initial snapshot. transferSiteSnapshotToSite( # The id of the desired snapshot of the source site @@ -3397,6 +3551,15 @@ type Mutation { input: CreateMissionDefinitionInput! ): MissionDefinitionType! + # @Private Duplicate an existing mission definition. + duplicateMissionDefinition( + # The id of the mission definition which should be duplicated. + id: String! + + # The name of the new mission definition. + name: String! + ): MissionDefinitionType! + # @Private Rename an existing mission definition. renameMissionDefinition( # The mission definition id which should be renamed. @@ -3445,6 +3608,21 @@ type Mutation { id: String! ): MissionDefinitionType! + # @Private Request the roadmap of a specified mission definition and robot. + computeMissionRoadmapForRobot( + # The id of the requested mission definition. + missionDefinitionId: String! + + # The id of the robot. + robotId: String! + ): MissionRoadmapType! + + # @Private Request the roadmap of a specified mission definition and robot. + computeMissionPath( + # The id of the requested mission definition. + missionDefinitionId: String! + ): MissionDefinitionPathDataType! + # @Private Create a new dock robot task definition. createDockRobotTaskDefinition( # The parameters to create the task definition. @@ -3724,12 +3902,6 @@ type Mutation { missionTaskDefinitionId: String! ): MissionExecutionType! - # @Internal This mutation is used by a robot to accept or reject mission execution requests. It also may be used to trigger a teleoperated mission by the robot. - startMissionExecutionFromRobot( - # The parameters to configure the mission execution. - input: StartMissionExecutionFromRobotInput! - ): MissionExecutionType! - # @Internal Allows the robot to update current mission execution. The updates are published to all connected clients. updateMissionExecutionFeedbackFromRobot( # The id of the robot that sent the mission execution feedback. @@ -3834,47 +4006,23 @@ type Mutation { # The end timestamp of the mission. endTimestamp: Timestamp! ): MissionReportType! - - # @Internal Create new photo data payload. - upsertPhotoDataPayload( - input: CreatePhotoDataPayloadInput! - ): PhotoDataPayloadType! - - # @Internal Create new audio data payload. - upsertAudioDataPayload( - input: CreateAudioDataPayloadInput! - ): AudioDataPayloadType! - - # @Internal Create new video data payload. - upsertVideoDataPayload( - input: CreateVideoDataPayloadInput! - ): VideoDataPayloadType! - - # @Internal Create new time series 1D data payload. - upsertTimeSeries1DDataPayload( - input: CreateTimeSeries1dDataPayloadInput! - ): TimeSeries1DDataPayloadType! - - # @Internal Create new photo overlay data payload. - upsertPhotoOverlayDataPayload( - input: CreatePhotoOverlayDataPayloadInput! - ): PhotoOverlayDataPayloadType! - - # @Internal Create new JSON data payload. - upsertJSONDataPayload( - input: CreateJSONDataPayloadInput! - ): JSONDataPayloadType! - - # @Internal Create a new group data payload. - upsertGroupDataPayload( - input: CreateGroupDataPayloadInput! - ): GroupDataPayloadType! } input CreateSiteInput { number: Int! name: String! location: String + origin: SiteOriginInput +} + +input SiteOriginInput { + coordinates: CoordinateInput! +} + +# Parameters to create a coordinate. +input CoordinateInput { + longitude: Float! + latitude: Float! } # The payload necessary to update an existing site. @@ -3884,6 +4032,9 @@ input UpdateSiteInput { # A location description of the site. location: String + + # Setting the origin explicitly to 'null' will remove the origin config, if it is nor provided it remains un touched. + origin: SiteOriginInput } input AddSitePointCloudConfigInput { @@ -4059,857 +4210,761 @@ input PointOfInterestActionVideoInput { # The pose of the robot. robotPose: Pose3DInput! - # The sensor name used to take a video with. (front_cam_link, inspection_cam_link, ...) - sensor: String! - - # The action type - duration: Int! -} - -# The payload necessary to create or update a point of interest. -input UpsertPointOfInterestInput { - # The external generated uuid of the poi. If the key is already available, the existing payload is updated. - key: String! - - # The name of the poi - name: NonEmptyString! - - # A customer provided tag. It allows the user to correlate poi data in the energy robotics system with their own digital twin. - customerTag: NonEmptyString - - # The type the new poi. - type: PointOfInterestTypeEnum! - - # The site, this poi should be added to. - siteId: String! - - # The transformation that should be applied to the pose - transformation: Transformation3dInput! = { - sourceFrameId: "map" - targetFrameId: "map" - translation: { x: 0, y: 0, z: 0 } - rotation: { w: 1, x: 0, y: 0, z: 0 } - } - - # The pose of the poi. - pose: Pose3DStampedInput! - - # The producer of the point of interest. - producer: PointOfInterestProducerInput! - - # The inspection parameters of this poi. - inspectionParameters: Json! -} - -# The parameters necessary to create a new 3D transformation. -input Transformation3dInput { - # The source coordinate frame - sourceFrameId: String! - - # The target coordinate frame - targetFrameId: String! - - # The translation of the transformation - translation: Point3DInput! - - # The rotation of the transformation - rotation: QuaternionInput! -} - -# The payload necessary to create a point of interest producer. -input PointOfInterestProducerInput { - # The robot number. - type: PointOfInterestProducerTypeEnum! - - # The robot number. - robotNumber: Int - - # The robot type. - robotType: RobotTypeEnum -} - -# Describes the different ways a point of interest has been produced. -enum PointOfInterestProducerTypeEnum { - # The point of interest is the result of teaching process with the robot. - ROBOT_TEACHING - - # The point of interest is defined by a visual marker. - VISUAL_MARKER - - # The point of interest is the result of a manual import of the user. - MANUAL_IMPORT -} - -# Parameters to create a new docking station site object. -input CreateDockingStationSiteObjectInput { - # An external provided uuid to re-identify the site object. - key: String! - - # The name of the site object. - name: String! - - # The site, this poi should be added to. - transformation: Transformation3dInput! = { - sourceFrameId: "map" - targetFrameId: "map" - translation: { x: 0, y: 0, z: 0 } - rotation: { w: 1, x: 0, y: 0, z: 0 } - } - - # The pose of the object in the world. - pose: Pose3DStampedInput! - - # The waypoint in front of the docking station that allows it to perform the docking behavior. - waypoint: Pose3DStampedInput! - - # The robot type that is compatible with this docking station. - compatibleRobotType: RobotTypeEnum! -} - -input CreateFeatureFlagInput { - name: String! - context: [ContextKeyValuePairInput!] - ticket: String - description: String - enabled: Boolean! = false -} - -input ContextKeyValuePairInput { - key: String! - value: [String!]! -} - -input UpdateFeatureFlagInput { - name: String - context: [ContextKeyValuePairInput!] - ticket: String - description: String - enabled: Boolean! -} - -# Payloads to create the description of a single camera -input AddCameraDescriptionInput { - # The human readable name of the camera - name: String! - - # The topic name of the camera used by the signaling server - webRtcTopic: String! -} - -# Payloads to add a new sensor description -input AddSensorDescriptionInput { - # The physical data port on the robot - dataPort: Int! - - # The physical power port on the robot - powerPort: Int! - - # An offset of the analog signal. It is assumed to be zero if not set. - analogInZeroOffset: Float - - # Whether or not this sensor is as an ex meter - useAsExMeter: Boolean = false - - # The sensor threshold used to turn of the robot in an ex zones. Only valid if 'useAsExMeter === true' - exThreshold: Float - - # The description of the sensor data - dataDescription: AddSensorDataDescriptionInput! -} - -# Payload to add sensor data description -input AddSensorDataDescriptionInput { - # The human readable name of the data measured by the sensor. - name: String! - - # An abbreviation of the name - abbreviation: String! - - # The physical unit of the measurements - unit: String! - - # The unit range of sensor data. We assume the lower bound to be 0 (e.g. resulting unit range is [0, unitRange]) - unitRange: Float! + # The sensor name used to take a video with. (front_cam_link, inspection_cam_link, ...) + sensor: String! - # An optional discretization of the sensor data - discretization: [AddSensorDataDiscretizationInput!] + # The action type + duration: Int! } -# Payload to create a bin for a sensor data discretization -input AddSensorDataDiscretizationInput { - # The name of the bin - name: String! +# The payload necessary to create or update a point of interest. +input UpsertPointOfInterestInput { + # The external generated uuid of the poi. If the key is already available, the existing payload is updated. + key: String! - # The minimum value - minValue: Float! + # The name of the poi + name: NonEmptyString! - # The maximum value - maxValue: Float! -} + # A customer provided tag. It allows the user to correlate poi data in the energy robotics system with their own digital twin. + customerTag: NonEmptyString -# Payload to update a sensor description -input UpdateSensorDescriptionInput { - # The physical data port on the robot - dataPort: Int! + # The type the new poi. + type: PointOfInterestTypeEnum! - # The physical power port on the robot - powerPort: Int! + # The site, this poi should be added to. + siteId: String! - # An offset of the analog signal. It is assumed to be zero if not set. - analogInZeroOffset: Float + # The transformation that should be applied to the pose + transformation: Transformation3dInput! = { + sourceFrameId: "map" + targetFrameId: "map" + translation: { x: 0, y: 0, z: 0 } + rotation: { w: 1, x: 0, y: 0, z: 0 } + } - # Whether or not this sensor is as an ex meter - useAsExMeter: Boolean = false + # The pose of the poi. + pose: Pose3DStampedInput! - # The sensor threshold used to turn of the robot in an ex zones. Only valid if 'useAsExMeter === true' - exThreshold: Float + # The producer of the point of interest. + producer: PointOfInterestProducerInput! - # The description of the sensor data - dataDescription: UpdateSensorDataDescriptionInput! + # The inspection parameters of this poi. + inspectionParameters: Json! } -# Payload to add sensor data description -input UpdateSensorDataDescriptionInput { - # The human readable name of the data measured by the sensor. - name: String! - - # An abbreviation of the name - abbreviation: String! +# The parameters necessary to create a new 3D transformation. +input Transformation3dInput { + # The source coordinate frame + sourceFrameId: String! - # The physical unit of the measurements - unit: String! + # The target coordinate frame + targetFrameId: String! - # The unit range of sensor data. We assume the lower bound to be 0 (e.g. resulting unit range is [0, unitRange]) - unitRange: Float! + # The translation of the transformation + translation: Point3DInput! - # An optional discretization of the sensor data - discretization: [UpdateSensorDataDiscretizationInput!] + # The rotation of the transformation + rotation: QuaternionInput! } -# Payload to create a bin for a sensor data discretization -input UpdateSensorDataDiscretizationInput { - # The name of the bin - name: String! +# The payload necessary to create a point of interest producer. +input PointOfInterestProducerInput { + # The robot number. + type: PointOfInterestProducerTypeEnum! - # The minimum value - minValue: Float! + # The robot number. + robotNumber: Int - # The maximum value - maxValue: Float! + # The robot type. + robotType: RobotTypeEnum } -# Parameters to create a new mission definition. -input CreateMissionDefinitionInput { - # The site the new mission belongs to - siteId: String! +# Describes the different ways a point of interest has been produced. +enum PointOfInterestProducerTypeEnum { + # The point of interest is the result of teaching process with the robot. + ROBOT_TEACHING - # The legacy mission definition id from the er_web_api. - legacyMissionDefinitionId: String + # The point of interest is defined by a visual marker. + VISUAL_MARKER - # The name of the mission. - name: String! + # The point of interest is the result of a manual import of the user. + MANUAL_IMPORT +} - # The name or path of the imported file - filename: String +# Payloads to update the reference image of a point of interest +input UpdatePointOfInterestReferenceImageInput { + # The key of the poi + pointOfInterestKey: String! - # Specify the requirements of the robot which should be able to execute this mission definition. - requiredRobotConfig: CreateRequiredRobotConfigInput + # The name of the reference image (including file exertion) + referenceImageName: NonEmptyString! } -# Parameters to create a new required robot config. -input CreateRequiredRobotConfigInput { - # Force this mission to be only available for a specific robot. - robotId: String -} +# Parameters to create a new photo data payload. +input CreatePhotoDataPayloadInput { + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! -# Parameters to create a new dock robot task definition. -input CreateDockRobotTaskDefinitionInput { - # The id of the site this task should associated with. - siteId: String! + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # A human readable name of the task. - name: String! + # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). + producer: CreateDataPayloadProducerInput - # The id of the docking that should be used in the task. - dockingStationId: String! -} + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String -# Parameters to create a new point of interest inspection task definition. -input CreatePoiInspectionTaskDefinitionInput { - # The id of the site this task should associated with. - siteId: String! + # The id of the robot snapshot which has generated the payload. + robotNumber: Float! - # A human readable name of the task. - name: String! + # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. + acquisitionTimestamp: Timestamp - # The id of the poi which should be inspected. - poiId: String! -} + # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + pointOfInterestId: String -# Parameters to create a new waypoint task definition. -input CreateWaypointTaskDefinitionInput { - # The id of the site this task should associated with. - siteId: String! + # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + areaOfInterestId: String - # A human readable name of the task. - name: String! + # Represents the POI name specified in the mission editor. + poiName: String - # The pose of the waypoint - waypoint: Pose3DStampedInput! -} + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean -# Data payload to generate a new chat message. -input SendMessageInput { - # The text message - message: String! + # Metadata associated with this data payload. + jsonMetaData: Json + + # The timestamp the data has been generated. + timestamp: Timestamp! + + # The uri to access the photo. (Currently only the filename is provided.) + uri: String! } -input CreatePrincipalDriverInput { - userId: Float! +# Parameters to create a payload producer. +input CreateDataPayloadProducerInput { + # An dot seperated identifier that groups skills of the same provider. E.g.: com.energy-robotics + group: String! + + # A human readable name of the skill that produced the payload. name: String! - email: String! } -# Represents the different types of WebRTC connections. -enum WebRtcConnectionTypeEnum { - # The (bidirectional) data channel connection to the robot. - ROBOT_DATA_CHANNEL -} +# Parameters to create a new audio data payload. +input CreateAudioDataPayloadInput { + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! -# Create a ICE (Interactive Connectivity Establishment) configuration which is used to establish a WebRTC connection. -input CreateIceCandidateInput { - # A DOMString describing the properties of the candidate. - candidate: IceCandidate! + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # A DOMString which uniquely identifies the source media component from which the candidate draws data, or null if no such association exists for the candidate. - sdpMid: String! + # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). + producer: CreateDataPayloadProducerInput - # A number containing a 0-based index into the set of m-lines providing media descriptions, indicating which media source is associated with the candidate, or null if no such association is available. - sdpMLineIndex: Int! -} + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String -input UpdateRobotStateInput { - isConnected: Boolean - awakeState: AwakeStateEnum - batteryStatus: BatteryStatusInput - connectionStatus: ConnectionStatusInput - isEmergencySwitchPressed: Boolean - isMotorsEnabled: Boolean - isDocking: Boolean -} + # The id of the robot snapshot which has generated the payload. + robotNumber: Float! -# Represents the internal awake state of the robot. Not to confused with the 'AwakeStatusEnum' which also provides details about the transition states. -enum AwakeStateEnum { - # The robot is fully available. This state is mandatory to perform actions on the robot or get access to sensor data (e.g. camera images). In this state, the robot has larger battery consumption even if the robot does not executes any tasks. - AWAKE + # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. + acquisitionTimestamp: Timestamp - # In this state, the robot is in a low-power mode. It is still connected to the cloud and publishes its status but at a significantly lower frequency. It is also possible to wake the robot up remotely. All other consumers are shut down. - ASLEEP -} + # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + pointOfInterestId: String -input BatteryStatusInput { - percentage: Float! - chargingState: ChargingStateEnum! - chargerType: ChargerTypeEnum! - chargingCurrent: ElectricCurrent! -} + # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + areaOfInterestId: String -input ConnectionStatusInput { - type: ConnectionTypeEnum! - networkName: String! - signalStrength: Float! -} + # Represents the POI name specified in the mission editor. + poiName: String + + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean + + # Metadata associated with this data payload. + jsonMetaData: Json -input CameraStateInput { - # The id of the camera - cameraId: String! + # The start timestamp of the audio file. + fromTimestamp: Timestamp! - # The current state of the camera - state: CameraStateEnum! + # The end timestamp of the audio file. + toTimestamp: Timestamp! - # If state === VIDEO_RECORDING the start recording timestamp - recordingStartTimestamp: Timestamp + # The uri to access the audio file. (Currently only the filename is provided.) + uri: String! } -input TakePhotoCommandOptionsInput { - # The region of interest the photo should be taken. All coordinates have to be provided as percentage values relative to the full image dimensions. - regionOfInterest: RegionOfInterestInput -} +# Parameters to create a new video data payload. +input CreateVideoDataPayloadInput { + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! -input RegionOfInterestInput { - x: Float! - y: Float! - width: Float! - height: Float! -} + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String -input StartVideoRecordingCommandInput { - # The maximum duration of the recording. - maxDuration: Int + # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). + producer: CreateDataPayloadProducerInput - # The region of interest the video should be taken. All coordinates have to be provided as percentage values relative to the full image dimensions. - regionOfInterest: RegionOfInterestInput -} + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String -input RegisterSiteInput { - name: String! - location: String! -} + # The id of the robot snapshot which has generated the payload. + robotNumber: Float! -# The parameters to start an autonomous mission -input StartMissionExecutionInput { - # The mission definition which should be executed autonomously. - missionDefinitionID: String! + # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. + acquisitionTimestamp: Timestamp - # The id of the robot, which should execute the mission. - robotID: ID! + # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + pointOfInterestId: String - # Flag that marks whether the mission should be considered for our performance KPIs. - kpiRelevantMission: Boolean -} + # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + areaOfInterestId: String -# Only for internal use. The parameters to start a mission from the robot. -input StartMissionExecutionFromRobotInput { - # The id of the robot, which should execute the mission. - robotID: ID! + # Represents the POI name specified in the mission editor. + poiName: String - # The initial mission execution status. - status: MissionExecutionStatusEnum! + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean - # The control mode the new mission has been started. - controlMode: ControlModeEnum! + # Metadata associated with this data payload. + jsonMetaData: Json - # The current principal driver who started the mission. - principal: PrincipalDriverInput! -} + # The start timestamp of the video. + fromTimestamp: Timestamp! -input PrincipalDriverInput { - userId: Float! - name: String! - email: String! + # The end timestamp of the video. + toTimestamp: Timestamp! + + # The uri to access the video. (Currently only the filename is provided.) + uri: String! } -# Only for internal use. Parameters for the robot to updated a mission execution. -input MissionExecutionFeedbackFromRobotInput { - # The new mission execution status. Note: COMPLETED will close the mission execution. - status: MissionExecutionStatusEnum! +# Parameters to create a new time series 1d data payload. +input CreateTimeSeries1dDataPayloadInput { + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! - # The mission definition executed autonomously. - missionDefinitionId: String + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # The currently executed task id. - currentExecutedTaskId: String -} + # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). + producer: CreateDataPayloadProducerInput -# Represents all data to generate a new diagnostic message. -input CreateDiagnosticsInput { - # The timestamp the event happens. - timestamp: Timestamp! + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The type/level of this message. This might be an hint how critical the message is. - type: DiagnosticsTypeEnum! + # The id of the robot snapshot which has generated the payload. + robotNumber: Float! - # The component which has generated the diagnostic message. - component: String + # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. + acquisitionTimestamp: Timestamp - # The diagnostic value. - value: DiagnosticsValueEnum! + # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + pointOfInterestId: String - # The diagnostic message. - key: String -} + # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + areaOfInterestId: String -# Represents the set of all possible diagnostic values. It is a union of different types. Currently it consists of: MissionExecutionFailureEnum -enum DiagnosticsValueEnum { - # A stop tag has been detected. - MISSION_FAILURE_STOP_TAG + # Represents the POI name specified in the mission editor. + poiName: String - # The robot has lost the line. - MISSION_FAILURE_LINE_LOST + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean - # The wired quick charger is still connected. - MISSION_FAILURE_QUICK_CHARGER_CONNECTED + # Metadata associated with this data payload. + jsonMetaData: Json - # The emergency stop is still pressed. - MISSION_FAILURE_ESTOP_PRESSED + # The uri to access the json file containing the time series + uri: String! +} - # Nobody is supervising the robot. - MISSION_FAILURE_WATCHDOG_LOST +# Parameters to create a new JSON data payload. +input CreateJSONDataPayloadInput { + # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). + key: String! - # A sensor value is above the maximum threshold. - MISSION_FAILURE_SENSOR_LEVEL_ABOVE_THRESHOLD + # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. + parentPayloadKey: String - # A sensor value is below the minimum threshold. - MISSION_FAILURE_SENSOR_LEVEL_BELOW_THRESHOLD + # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). + producer: CreateDataPayloadProducerInput - # The battery level is to low to continue the mission. - MISSION_FAILURE_LOW_BATTERY + # A label provided by the skill provider which allows him/her to re-identify his/her payloads + dataLabel: String - # The robot detected a potential collision with an obstacle. - MISSION_FAILURE_COLLISION_DETECTED + # The id of the robot snapshot which has generated the payload. + robotNumber: Float! - # An failure which cannot identified has been accrued during the mission execution. - MISSION_FAILURE_UNKNOWN + # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. + acquisitionTimestamp: Timestamp - # An failure which cannot identified has been accrued - UNKNOWN - @deprecated( - reason: "Changed convention, use 'MISSION_FAILURE_UNKNOWN' instead." - ) -} + # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + pointOfInterestId: String -# Represents all data to generate a diagnostic message issued by the customer. -input CreateCustomerDiagnosticsInput { - # The type/level of this message. This might be an hint how critical the message is. - type: DiagnosticsTypeEnum! + # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. + areaOfInterestId: String - # The diagnostic message key. - value: String! + # Represents the POI name specified in the mission editor. + poiName: String - # The reason to flag - reason: String! + # Whether or not the data is synced from the robot to the cloud. + isSynced: Boolean + + # Metadata associated with this data payload. + jsonMetaData: Json + + # The JSON data structure. + jsonData: Json! + + # Data accessors to highlight important fields in the jsonData field. + dataAccessors: [CreateJSONDataAccessorInput!] } -# Represents the data to generate customer flag. -input CreateCustomerFlagInput { - # The reason to flag - reason: String! +# Parameters to create a new JSON data accessor +input CreateJSONDataAccessorInput { + # A human readable name of the data field. + name: String! + + # A key accessor in dot notation. (e.g. jsonData.subfield.subsubfield). + accessor: String! } -# Only for internal use. Parameters to create a new mission report. -input CreateMissionReportInput { - # An external provided uuid to re-identify the mission report (e.g. to prevent duplicates). +# Parameters to create a new docking station site object. +input CreateDockingStationSiteObjectInput { + # An external provided uuid to re-identify the site object. key: String! - # The start timestamp of the mission execution. - startTimestamp: Timestamp! + # The name of the site object. + name: String! - # The end timestamp of the mission execution. - endTimestamp: Timestamp + # The site, this poi should be added to. + transformation: Transformation3dInput! = { + sourceFrameId: "map" + targetFrameId: "map" + translation: { x: 0, y: 0, z: 0 } + rotation: { w: 1, x: 0, y: 0, z: 0 } + } - # The specific robot snapshot, which has executed the mission. The exact configuration of the robot during the mission is preserved even if the robot configuration changes in the future or removed from the site. - robotNumber: Float! + # The pose of the object in the world. + pose: Pose3DStampedInput! - # The filename of the file which contains the trajectory driven by the robot during this mission. - trajectoryUri: String + # The waypoint in front of the docking station that allows it to perform the docking behavior. + waypoint: Pose3DStampedInput! - # The ids of the mission definition (if available) which has been executed during the period of this mission report. - missionDefinitionIds: [ID!] = [] + # The robot type that is compatible with this docking station. + compatibleRobotType: RobotTypeEnum! +} + +input CreateFeatureFlagInput { + name: String! + context: [ContextKeyValuePairInput!] + ticket: String + description: String + enabled: Boolean! = false +} + +input ContextKeyValuePairInput { + key: String! + value: [String!]! +} + +input UpdateFeatureFlagInput { + context: [ContextKeyValuePairInput!] + ticket: String + description: String + enabled: Boolean } -# Parameters to create a new photo data payload. -input CreatePhotoDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +# Payloads to create the description of a single camera +input AddCameraDescriptionInput { + # The human readable name of the camera + name: String! - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The topic name of the camera used by the signaling server + webRtcTopic: String! +} - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput +# Payloads to add a new sensor description +input AddSensorDescriptionInput { + # The physical data port on the robot + dataPort: Int! - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The physical power port on the robot + powerPort: Int! - # The id of the robot snapshot which has generated the payload. - robotNumber: Float! + # An offset of the analog signal. It is assumed to be zero if not set. + analogInZeroOffset: Float - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp + # Whether or not this sensor is as an ex meter + useAsExMeter: Boolean = false - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String + # The sensor threshold used to turn of the robot in an ex zones. Only valid if 'useAsExMeter === true' + exThreshold: Float - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String + # The description of the sensor data + dataDescription: AddSensorDataDescriptionInput! +} - # Represents the POI name specified in the mission editor. - poiName: String +# Payload to add sensor data description +input AddSensorDataDescriptionInput { + # The human readable name of the data measured by the sensor. + name: String! - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean + # An abbreviation of the name + abbreviation: String! - # Metadata associated with this data payload. - jsonMetaData: Json + # The physical unit of the measurements + unit: String! - # The timestamp the data has been generated. - timestamp: Timestamp! + # The unit range of sensor data. We assume the lower bound to be 0 (e.g. resulting unit range is [0, unitRange]) + unitRange: Float! - # The uri to access the photo. (Currently only the filename is provided.) - uri: String! + # An optional discretization of the sensor data + discretization: [AddSensorDataDiscretizationInput!] } -# Parameters to create a payload producer. -input CreateDataPayloadProducerInput { - # An dot seperated identifier that groups skills of the same provider. E.g.: com.energy-robotics - group: String! - - # A human readable name of the skill that produced the payload. +# Payload to create a bin for a sensor data discretization +input AddSensorDataDiscretizationInput { + # The name of the bin name: String! + + # The minimum value + minValue: Float! + + # The maximum value + maxValue: Float! } -# Parameters to create a new audio data payload. -input CreateAudioDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +# Payload to update a sensor description +input UpdateSensorDescriptionInput { + # The physical data port on the robot + dataPort: Int! - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The physical power port on the robot + powerPort: Int! - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput + # An offset of the analog signal. It is assumed to be zero if not set. + analogInZeroOffset: Float - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # Whether or not this sensor is as an ex meter + useAsExMeter: Boolean = false - # The id of the robot snapshot which has generated the payload. - robotNumber: Float! + # The sensor threshold used to turn of the robot in an ex zones. Only valid if 'useAsExMeter === true' + exThreshold: Float - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp + # The description of the sensor data + dataDescription: UpdateSensorDataDescriptionInput! +} - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String +# Payload to add sensor data description +input UpdateSensorDataDescriptionInput { + # The human readable name of the data measured by the sensor. + name: String! - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String + # An abbreviation of the name + abbreviation: String! - # Represents the POI name specified in the mission editor. - poiName: String + # The physical unit of the measurements + unit: String! - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean + # The unit range of sensor data. We assume the lower bound to be 0 (e.g. resulting unit range is [0, unitRange]) + unitRange: Float! - # Metadata associated with this data payload. - jsonMetaData: Json + # An optional discretization of the sensor data + discretization: [UpdateSensorDataDiscretizationInput!] +} - # The start timestamp of the audio file. - fromTimestamp: Timestamp! +# Payload to create a bin for a sensor data discretization +input UpdateSensorDataDiscretizationInput { + # The name of the bin + name: String! - # The end timestamp of the audio file. - toTimestamp: Timestamp! + # The minimum value + minValue: Float! - # The uri to access the audio file. (Currently only the filename is provided.) - uri: String! + # The maximum value + maxValue: Float! } -# Parameters to create a new video data payload. -input CreateVideoDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +# Parameters to create a new mission definition. +input CreateMissionDefinitionInput { + # The site the new mission belongs to + siteId: String! - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The legacy mission definition id from the er_web_api. + legacyMissionDefinitionId: String - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput + # The name of the mission. + name: String! - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The name or path of the imported file + filename: String - # The id of the robot snapshot which has generated the payload. - robotNumber: Float! + # Specify the requirements of the robot which should be able to execute this mission definition. + requiredRobotConfig: CreateRequiredRobotConfigInput +} - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp +# Parameters to create a new required robot config. +input CreateRequiredRobotConfigInput { + # Force this mission to be only available for a specific robot. + robotId: String +} - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String +# Parameters to create a new dock robot task definition. +input CreateDockRobotTaskDefinitionInput { + # The id of the site this task should associated with. + siteId: String! - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String + # A human readable name of the task. + name: String! - # Represents the POI name specified in the mission editor. - poiName: String + # The id of the docking that should be used in the task. + dockingStationId: String! +} - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean +# Parameters to create a new point of interest inspection task definition. +input CreatePoiInspectionTaskDefinitionInput { + # The id of the site this task should associated with. + siteId: String! - # Metadata associated with this data payload. - jsonMetaData: Json + # A human readable name of the task. + name: String! - # The start timestamp of the video. - fromTimestamp: Timestamp! + # The id of the poi which should be inspected. + poiId: String! +} - # The end timestamp of the video. - toTimestamp: Timestamp! +# Parameters to create a new waypoint task definition. +input CreateWaypointTaskDefinitionInput { + # The id of the site this task should associated with. + siteId: String! - # The uri to access the video. (Currently only the filename is provided.) - uri: String! + # A human readable name of the task. + name: String! + + # The pose of the waypoint + waypoint: Pose3DStampedInput! } -# Parameters to create a new time series 1d data payload. -input CreateTimeSeries1dDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +# Data payload to generate a new chat message. +input SendMessageInput { + # The text message + message: String! +} - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String +input CreatePrincipalDriverInput { + userId: Float! + name: String! + email: String! +} - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput +# Represents the different types of WebRTC connections. +enum WebRtcConnectionTypeEnum { + # The (bidirectional) data channel connection to the robot. + ROBOT_DATA_CHANNEL +} - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String +# Create a ICE (Interactive Connectivity Establishment) configuration which is used to establish a WebRTC connection. +input CreateIceCandidateInput { + # A DOMString describing the properties of the candidate. + candidate: IceCandidate! + + # A DOMString which uniquely identifies the source media component from which the candidate draws data, or null if no such association exists for the candidate. + sdpMid: String! + + # A number containing a 0-based index into the set of m-lines providing media descriptions, indicating which media source is associated with the candidate, or null if no such association is available. + sdpMLineIndex: Int! +} - # The id of the robot snapshot which has generated the payload. - robotNumber: Float! +input UpdateRobotStateInput { + isConnected: Boolean + awakeState: AwakeStateEnum + batteryStatus: BatteryStatusInput + connectionStatus: ConnectionStatusInput + isEmergencySwitchPressed: Boolean + isMotorsEnabled: Boolean + isDocking: Boolean +} - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp +# Represents the internal awake state of the robot. Not to confused with the 'AwakeStatusEnum' which also provides details about the transition states. +enum AwakeStateEnum { + # The robot is fully available. This state is mandatory to perform actions on the robot or get access to sensor data (e.g. camera images). In this state, the robot has larger battery consumption even if the robot does not executes any tasks. + AWAKE - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String + # In this state, the robot is in a low-power mode. It is still connected to the cloud and publishes its status but at a significantly lower frequency. It is also possible to wake the robot up remotely. All other consumers are shut down. + ASLEEP +} - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String +input BatteryStatusInput { + percentage: Float! + chargingState: ChargingStateEnum! + chargerType: ChargerTypeEnum! + chargingCurrent: ElectricCurrent! +} - # Represents the POI name specified in the mission editor. - poiName: String +input ConnectionStatusInput { + type: ConnectionTypeEnum! + networkName: String! + signalStrength: Float! +} - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean +input CameraStateInput { + # The id of the camera + cameraId: String! - # Metadata associated with this data payload. - jsonMetaData: Json + # The current state of the camera + state: CameraStateEnum! - # The uri to access the json file containing the time series - uri: String! + # If state === VIDEO_RECORDING the start recording timestamp + recordingStartTimestamp: Timestamp } -# Parameters to create a new photo overlay data payload. -input CreatePhotoOverlayDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +input TakePhotoCommandOptionsInput { + # The region of interest the photo should be taken. All coordinates have to be provided as percentage values relative to the full image dimensions. + regionOfInterest: RegionOfInterestInput +} - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String +input RegionOfInterestInput { + x: Float! + y: Float! + width: Float! + height: Float! +} - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput +input StartVideoRecordingCommandInput { + # The maximum duration of the recording. + maxDuration: Int - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The region of interest the video should be taken. All coordinates have to be provided as percentage values relative to the full image dimensions. + regionOfInterest: RegionOfInterestInput +} - # The id of the robot snapshot which has generated the payload. - robotNumber: Float! +input RegisterSiteInput { + name: String! + location: String! + origin: SiteOriginInput +} - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp +# The parameters to start an autonomous mission +input StartMissionExecutionInput { + # The mission definition which should be executed autonomously. + missionDefinitionID: String! - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String + # The id of the robot, which should execute the mission. + robotID: ID! - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String + # Flag that marks whether the mission should be considered for our performance KPIs. + kpiRelevantMission: Boolean +} - # Represents the POI name specified in the mission editor. - poiName: String +# Only for internal use. Parameters for the robot to updated a mission execution. +input MissionExecutionFeedbackFromRobotInput { + # The new mission execution status. Note: COMPLETED will close the mission execution. + status: MissionExecutionStatusEnum! - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean + # The mission definition executed autonomously. + missionDefinitionId: String - # Metadata associated with this data payload. - jsonMetaData: Json + # The currently executed task id. + currentExecutedTaskId: String +} - # The timestamp the data has been generated. +# Represents all data to generate a new diagnostic message. +input CreateDiagnosticsInput { + # The timestamp the event happens. timestamp: Timestamp! - # The uri to access the photo. (Currently only the filename is provided.) - uri: String! + # The type/level of this message. This might be an hint how critical the message is. + type: DiagnosticsTypeEnum! - # The uri to access the overlay. (Currently only the filename is provided.) - overlayUri: String! -} + # The component which has generated the diagnostic message. + component: String -# Parameters to create a new JSON data payload. -input CreateJSONDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! + # The diagnostic value. + value: DiagnosticsValueEnum! = UNKNOWN - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String + # The diagnostic message. + key: String! = "unknownError" +} - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput +# Represents the set of all possible diagnostic values. It is a union of different types. Currently it consists of: MissionExecutionFailureEnum +enum DiagnosticsValueEnum { + # A stop tag has been detected. + MISSION_FAILURE_STOP_TAG - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The robot has lost the line. + MISSION_FAILURE_LINE_LOST - # The id of the robot snapshot which has generated the payload. - robotNumber: Float! + # The wired quick charger is still connected. + MISSION_FAILURE_QUICK_CHARGER_CONNECTED - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp + # The emergency stop is still pressed. + MISSION_FAILURE_ESTOP_PRESSED - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String + # Nobody is supervising the robot. + MISSION_FAILURE_WATCHDOG_LOST - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String + # A sensor value is above the maximum threshold. + MISSION_FAILURE_SENSOR_LEVEL_ABOVE_THRESHOLD - # Represents the POI name specified in the mission editor. - poiName: String + # A sensor value is below the minimum threshold. + MISSION_FAILURE_SENSOR_LEVEL_BELOW_THRESHOLD - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean + # The battery level is to low to continue the mission. + MISSION_FAILURE_LOW_BATTERY - # Metadata associated with this data payload. - jsonMetaData: Json + # The robot detected a potential collision with an obstacle. + MISSION_FAILURE_COLLISION_DETECTED - # The JSON data structure. - jsonData: Json! + # An failure which cannot identified has been accrued during the mission execution. + MISSION_FAILURE_UNKNOWN - # Data accessors to highlight important fields in the jsonData field. - dataAccessors: [CreateJSONDataAccessorInput!] + # An failure which cannot identified has been accrued + UNKNOWN + @deprecated( + reason: "Changed convention, use 'MISSION_FAILURE_UNKNOWN' instead." + ) } -# Parameters to create a new JSON data accessor -input CreateJSONDataAccessorInput { - # A human readable name of the data field. - name: String! +# Represents all data to generate a diagnostic message issued by the customer. +input CreateCustomerDiagnosticsInput { + # The type/level of this message. This might be an hint how critical the message is. + type: DiagnosticsTypeEnum! - # A key accessor in dot notation. (e.g. jsonData.subfield.subsubfield). - accessor: String! + # The diagnostic message key. + value: String! + + # The reason to flag + reason: String! } -# Parameters to create a new group data payload. -input CreateGroupDataPayloadInput { - # An external provided uuid to re-identify the payload (e.g. to prevent duplicates). - key: String! +# Represents the data to generate customer flag. +input CreateCustomerFlagInput { + # The reason to flag + reason: String! +} - # The payload from which this payload has been derived from (e.g. a skill has performed on a payload with the parentPayloadKey to produce this payload. - parentPayloadKey: String +# Only for internal use. Parameters to create a new mission report. +input CreateMissionReportInput { + # An external provided uuid to re-identify the mission report (e.g. to prevent duplicates). + key: String! - # The producer of this payload. Can be null for payloads which has been generated directly from the robot (e.g. images, videos, audios). - producer: CreateDataPayloadProducerInput + # The start timestamp of the mission execution. + startTimestamp: Timestamp! - # A label provided by the skill provider which allows him/her to re-identify his/her payloads - dataLabel: String + # The end timestamp of the mission execution. + endTimestamp: Timestamp - # The id of the robot snapshot which has generated the payload. + # The specific robot snapshot, which has executed the mission. The exact configuration of the robot during the mission is preserved even if the robot configuration changes in the future or removed from the site. robotNumber: Float! - # The timestamp the original payload has been recorded. This timestamp is propagated to child payloads and is used to assign the payload to mission reports. If a parentPayloadKey is provided, this field is ignored. - acquisitionTimestamp: Timestamp - - # The point of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - pointOfInterestId: String - - # The area of interest id, the data is recorded at. Please note that only a POI or an AOI can be provided at the same time. - areaOfInterestId: String - - # Represents the POI name specified in the mission editor. - poiName: String - - # Whether or not the data is synced from the robot to the cloud. - isSynced: Boolean - - # Metadata associated with this data payload. - jsonMetaData: Json + # The filename of the file which contains the trajectory driven by the robot during this mission. + trajectoryUri: String - # The is of the payloads which should be grouped together. - group: [String!]! + # The ids of the mission definition (if available) which has been executed during the period of this mission report. + missionDefinitionIds: [ID!] = [] } type Subscription { @@ -4962,6 +5017,15 @@ type Subscription { siteId: String! ): PointOfInterestSubscriptionType! + # Subscribe to new recorded or updated data payloads of a robot. + onDataPayloadByRobot( + # The id of the robot the data payload should requested from. + robotId: String! + + # Specify the payload types which should be considered. If this parameter is not set all types are considered. + types: [DataPayloadTypeEnum!] + ): DataPayloadSubscriptionType! + # @Private Get updates for the site recordings for a robot. onSiteRecordingStatus( # The id of the robot. @@ -5075,13 +5139,4 @@ type Subscription { # The id of the robot the mission reports should requested from. robotId: String! ): MissionReportSubscriptionType! - - # Subscribe to new recorded or updated data payloads of a robot. - onDataPayloadByRobot( - # The id of the robot the data payload should requested from. - robotId: String! - - # Specify the payload types which should be considered. If this parameter is not set all types are considered. - types: [DataPayloadTypeEnum!] - ): DataPayloadSubscriptionType! }