Get desktop application:
View/edit binary Protocol Buffers messages
Common request header.
The Lease to show ownership of the robot.
Common response header.
The AuthService provides clients the ability to convert a user/password pair into a token. The token can then be added to the http2 headers for future requests in order to establish the identity of the requester.
Request to get the auth token for the robot.
The GetAuthToken request message includes login information for the robot.
Common request header.
Username to authenticate with. Must be set if password is set.
Password to authenticate with. Not necessary if token is set.
Token to authenticate with. Can be used in place of the password, to re-mint a token.
The GetAuthToken response message includes an authentication token if the login information is correct and succeeds.
The status of the grpc GetAuthToken request.
Token data. Only specified if status == STATUS_OK.
The DataAcquisitionPluginService is a gRPC service that a payload developer implements to retrieve data from a sensor (or more generally perform some payload action) and optionally store that data on the robot via the DataAcquisitionStore service.
Trigger a data acquisition to save metadata and non-image data to the data buffer. Sent by the main Data Acquisition service as a result of a data acquisition request from the tablet or a client.
Message sent by main Data Acquisition service to all data acquisition plugin services.
Common request header
Metadata acquirers use these DataIdentifier objects to associate them with the acquired metadata when storing them in the DataBuffer. Data acquirers simply get the timestamp from these DataIdentifier objects to use when storing the data in the DataBuffer.
Metadata specified by the requester.
Id to be associated with all the data buffered for this request. It will be stored in the DataIdentifier field of each piece of data buffered from this request.
List of capability requests specific for this Data Acquisition plugin.
Common response header
Result of the AcquirePluginData RPC call. Further monitoring on the success of the acquisition request can be done using the GetStatus RPC.
Identifier which can be used to check the status of or cancel the acquisition action..
Time (in the robot's clock) by which this capture should definitely be complete. If it is not complete by this time, something has gone wrong.
Filled out if status is STATUS_CUSTOM_PARAMS_ERROR.
Query the status of a data acquisition.
Get information from a Data Acquisition service; lists acquisition capabilities.
Cancel an in-progress data acquisition.
Request live data available from this plugin during teleoperation. Please use the other RPCs for typical data acquisition.
The DataAcquisitionService is the main data acquisition service run on robot, which receives incoming requests and sends queries to all directory-registered DataAcquisitionPluginServices.
Trigger a data acquisition to save data and metadata to the data buffer. Sent by the tablet or a client to initiate a data acquisition and buffering process.
Common response header
Result of the AcquirePluginData RPC call. Further monitoring on the success of the acquisition request can be done using the GetStatus RPC.
Identifier which can be used to check the status of or cancel the acquisition action.
Query the status of a data acquisition.
Get information from a Data Acquisition service; lists acquisition capabilities.
Cancel an in-progress data acquisition.
Request live data available from DAQ plugins during teleoperation. Please use the other RPCs for typical data acquisition.
The DataAcquisitionStoreService is used to store data (images, data, metadata) on the robot in association with the DataIdentifiers specified by the DataAcquisitionService. Additionally, requests can be made to the DataAcquisitionStoreService to identify different pieces of data or entire capture actions which match query parameters, such as time ranges or action/group names.
List all CaptureActionIds (which identify an entire AcquireData RPC's data captures) that match the query parameters provided in the request.
Common request header.
Query parameters for finding action ids.
Common response header.
List of action ids that satisfied the query parameters.
List data identifiers (which identify specific pieces of data from an action) for stored data that satisfy the query parameters in the request.
Common request header.
Query parameters for finding data.
Common response header.
List of data identifiers that satisfied the query parameters.
Store arbitrary data associated with a DataIdentifier.
Common request header.
Data to store.
Data identifier of the data.
File extension to use when writing the data to file.
Common response header.
Store arbitrary data associated with a DataIdentifier through a stream. Supports files > 100 MB and below the Data Acquisition Store capacity.
Common request header.
Data identifier of the data.
File extension to use when writing the data to file.
The piece of the data to store.
Common response header.
Type-safe to images: list data identifiers (which identify specific images from an action) for stored images that satisfy the query parameters in the request.
Common request header.
Query parameters for finding images.
Common response header.
List of image data identifiers that satisfied the query parameters.
Type-safe to images: store image data associated with a DataIdentifier.
Common request header.
Image to store.
Data identifier of the image.
Common response header.
Type-safe to JSON metadata: list data identifiers (which identify specific metadata from an action) for stored metadata that satisfy the query parameters in the request.
Common request header.
Query parameters for finding metadata.
Common response header.
List of metadata data identifiers that satisfied the query parameters.
Type-safe to JSON metadata: store metadata associated with a DataIdentifier.
Common request header.
Metadata to store.
Data identifier of the metadata.
Common response header.
List data identifiers (which identify specific AlertData from an action) for stored AlertData that satisfy the query parameters in the request.
Common request header.
Query parameters for finding AlertData.
Common response header.
List of AlertData data identifiers that satisfied the query parameters.
Store AlertData associated with a DataIdentifier.
Common request header.
AlertData to store.
Data identifier of the alert.
Common response header.
Query the Data Acquisition Store for captured data. This streaming RPC returns a single QueryStoredCapturesResponse message, encoded as a list of DataChunk messages. If the first capture matching the query is larger than an internal size limit set in the service, the QueryStoredCapturesResponse message contains only that first capture matching the query. Otherwise, the QueryStoredCapturesResponse message contains as many matching captures as can fit within the internal size limit, without breaking the results order. To get all captures that match a query, you must make this RPC until it returns an empty QueryStoredCapturesResponse with no elements in its "results" field.
Common request header.
Query parameters for finding data.
Common request header.
Query parameters for finding data.
This service is a mechanism for adding information to the robot's log files.
Add text messages to the log.
Common request header.
The text messages to be logged.
Common response header.
Errors which occurred when logging text message data.
Add a set of operator messages to the log.
Common request header.
The operator comments to be logged.
Common response header.
Errors which occurred when logging operator comments.
Add message-style data to the log.
Common request header.
The data blobs to be logged.
When set, the data blob is committed to the log synchronously. The RPC does not return until the data is written.
Common response header.
Errors which occurred when logging data blobs.
Add event data to the log.
Common request header.
The events to be logged.
Common response header.
Errors which occurred when logging events.
Register a log tick schema, allowing client to later log tick data.
Common request/response header.
Defines a schema for interpreting SignalTick data containing packed signals-type data.
Common request/response header.
Server returns a unique ID based on the client ID and schema definition. Always greater than zero.
Add signal data for registered signal schema to the log.
Common request header.
The signals data to be logged.
Common response header.
Errors which occurred when logging signal ticks.
The DataService is a mechanism for querying and managing data stored on robot.
Get index of current data matching a given DataQuery.
GRPC response with requested data index information.
GRPC request for data index information.
Get events and comments.
GRPC request for Events and OperatorComments.
GRPC response with requested Events and OperatorComments.
Get basic stats on data buffer storage.
Get a list pf pages matching a given time range
Delete a list of pages matching a given time range or page ids
GRPC request to delete pages. Both time_range and page_ids can be set.
Delete all pages in this time range
Delete all pages with matching ids
DirectoryRegistrationService is a private class that lets services be discovered by clients by adding them to a discovery database. Services can live on robot, payload, or other accessible cloud-based locations. Each service is responsible for registering itself with this service.
Called by a producer to register as a provider with the application. Returns the record for that provider. Requires unique name and correctly filled out service record in request.
The RegisterService request message sends the service's entry and endpoint to the robot's directory. This Request serves as a heartbeat to the Directory.
Common request header.
The endpoint at which this service may be contacted.
The service to create. The name must not match any existing service.
The RegisterService response message has information of whether the service was registered correctly.
Common response Header.
Return status for the request.
Called by a producer to remove its registration from the DirectoryManager.
The UnregisterService request message will unregister a service based on name.
Common request header.
The unique user-friendly name of the service.
The UnregisterService response message has information of whether the service was unregistered.
Common response Header.
Return status for the request.
Update the ServiceEntry for a producer on the server.
The UpdateService request message will update a service based on name to include the new endpoint and service entry. This Request serves as a heartbeat to the Directory.
Common request header.
The endpoint at which this service may be contacted.
New record for service. The name field is used as lookup key.
The UpdateService response message has information of whether the service was updated on robot.
Common response Header.
Return status for the request.
DirectoryService lets clients discover which API services are available on a robot.
Get information about a specific service.
The GetServiceEntry request message sends the service name to the robot.
Common request header.
The unique user-friendly name of the service.
The GetServiceEntry response message returns a ServiceEntry for the desired service name.
Common response Header.
Current status of the request.
The record for the discovered service. Only set if 'status' field == STATUS_OK.
List all known services at time of call.
The ListServiceEntries request message will ask the robot for all services.
Common request header.
The ListServiceEntries response message returns all known services at the time the request was received.
Common response header.
The resources managed by the LeaseService.
The software robot E-Stop system: 1. Uses challenge-style communication to enforce end user (aka "originators") connection for Authority to Operate (ATO). 2. Offers the ability to issue a direct denial of ATO. The EstopService provides a service interface for the robot EStop/Authority to operate the system.
Register an Estop "originator" or "endpoint". This may be a replacement for another active endpoint.
Response to registration request.
Common response header
Copy of the initial request.
The resulting endpoint on success.
Status code for the response.
Deregister the requested estop endpoint.
Response to E-Stop endpoint deregistration request.
Common response header.
Copy of the initial request.
Status code for the response.
Answer challenge from previous response (unless this is the first call), and request a stop level.
Server response to EstopCheckInRequest.
Common response header.
Copy of initial request.
Next challenge to answer.
Status code for the response.
Request the current EstopConfig, describing the expected set of endpoints.
Response to EstopConfigRequest.
Common response header.
Copy of the request.
The currently active configuration.
Set a new active EstopConfig.
Response to EstopConfigRequest.
Common response header.
Copy of the request.
The currently active configuration.
Ask for the current status of the estop system.
Ask for the current status of the Estop system.
Common request header.
Respond with the current Estop system status.
Common response header.
Status of the Estop system.
The service fault service enables modification of the robot state ServiceFaultState.
Sends a ServiceFault to be reporting in robot state.
Trigger a new service fault that will be reported in the robot ServiceFaultState. These faults will be displayed in the tablet. Developers should be careful to avoid overwhelming operators with dozens of minor messages.
Common request header.
The fault to report in ServiceFaultState.
The TriggerServiceFault response message contains a header indicating success.
Common response header.
Return status for the request.
Clears an active ServiceFault from robot state.
Clear a service fault from the robot's ServiceFaultState (in robot_state.proto). The active ServiceFault to clear will be determined by matching fault_name and service_name/payload_guid, specified in the ServiceFaultId message.
Common request header.
Identifying information of the fault to clear.
Clear all faults that are associated with the same service_name. Use carefully.
Clear all faults that are associated with the same payload_guid. Use carefully.
The ClearServiceFault response message contains a header indicating success.
Common response header.
Return status for the request.
The GripperCameraParam request message sets new gripper sensor parameters. Gripper sensor parameters do not persist across reboots.
Common request header.
Common response header.
The GripperCameraGetParam request message queries the robot for the current gripper sensor parameters.
Common request header.
The GripperCameraGetParam response message contains the current gripper sensor parameters. Gripper sensor parameters do not persist across reboots.
Common request header.
/< Common request header.
/< Common response header.
An Image service provides access to one or more images, for example from cameras. It supports querying for the list of available images provided by the service and then supports requesting a latest given image by source name.
Obtain the list of ImageSources for this given service. Note that there may be multiple ImageServices running, each with their own set of sources The name field keys access to individual images when calling GetImage.
The ListImageSources request message for the robot image service.
Common request header.
The ListImageSources response message which contains all known image sources for the robot.
Common response Header.
The set of ImageSources available from this service. May be empty if the service serves no cameras (e.g., if no cameras were found on startup).
Request an image by name, with optional parameters for requesting image quality level.
The GetImage request message which can send multiple different image source requests at once.
Common request header.
The different image requests for this rpc call.
The GetImage response message which includes image data for all requested sources.
Common response header.
The ordering of these image responses is defined by the order of the ImageRequests.
LeaseService provides Leases of shared resources to clients. An example of a shared resource is the set of leg motors on Spot, which has the resource name of "body". Clients can delegate out the Leases they receive from the LeaseService to additional clients or services by generating sub-leases. Leases obtained from the LeaseService may be revoked if the Lease holder does not check in frequently to the LeaseService, or if another client force-acquires a Lease.
Acquire a lease to a specific resource if the resource is available.
The AcquireLease request message which sends which resource the lease should be for.
Common request header.
The resource to obtain a Lease for.
The AcquireLease response returns the lease for the desired resource if it could be obtained. If a client is returned a new lease, the client should initiate a RetainLease bidirectional streaming request immediately after completion of AcquireLease.
Common response Header.
Return status for the request.
The lease for the resource. Only set if status field == STATUS_OK.
The owner for the lease. Set if status field == OK or status field == RESOURCE_ALREADY_CLAIMED.
Take a lease for a specific resource even if another client has a lease.
The TakeLease request message which sends which resource the lease should be for.
Common request header.
The resource to obtain a Lease for.
The TakeLease response returns the lease for the desired resource if it could be obtained. In most cases if the resource is managed by the LeaseService, TakeLease will succeed. However, in the future policies may be introduced which will prevent TakeLease from succeeding and clients should be prepared to handle that case. If a client obtains a new lease, the client should initiate a RetainLease bidirectional streaming request immediately after completion of TakeLease.
Common response header.
Return status for the request.
The lease for the resource. Only set if status field == STATUS_OK.
The owner for the lease. Set if status field == STATUS_OK.
Return a lease to the LeaseService.
The ReturnLease request message will be sent to the LeaseService. If the lease is currently active for the resource, the LeaseService will invalidate the lease. Future calls to AcquireLease by any client will now succeed.
Common request header.
The Lease to return back to the LeaseService.
The ReturnLease response message
Common response header.
Return status for the request.
List state of all leases managed by the LeaseService.
The ListLease request message asks for information about any known lease resources.
Common request header.
Include the full data of leases in use, if available. Defaults to false to receive basic information.
The ListLease response message returns all known lease resources from the LeaseService.
Common response header.
The resources managed by the LeaseService.
Provide the hierarchical lease structure. A resource can encapsulate multiple sub-resources. For example, the "body" lease may include control of the legs, arm, and gripper.
Retain possession of a lease.
The RetainLease request will inform the LeaseService that the application contains to hold ownership of this lease. Lease holders are expected to be reachable and alive. If enough time has passed since the last RetainLeaseRequest, the LeaseService will revoke the lease.
Common request header.
The Lease to retain ownership over. May also be a "super" lease of the lease to retain ownership over.
The RetainLease response message sends the result of the attempted RetainLease request, which contains whether or not the lease is still owned by the application sending the request.
Common response header.
Result of using the lease.
The LicenseService allows clients to query the currently installed license on robot.
Get information, such as the license number, dates of validity, and features for the license currently uploaded on the robot.
Common request header.
Common response header
The details about the current license that is uploaded to the robot.
Check if specific features (identified by string names) are enabled under the currently loaded license for this robot.
Common request header.
Check if specific named features are enabled on the robot under the currently loaded license.
Common response header.
The resulting map showing the feature name (as the map key) and a boolean indicating if the feature is enabled with this license (as the map value).
The map service provides access multiple kinds of cell-based map data. It supports querying for the list of available types of local grids provided by the service, and supports requesting a set of the latest local grids by map type name.
Obtain the list of available map types. The name field keys access to individual local grids when calling GetLocalGrids.
The GetLocalGridTypes request message asks to the local grid types.
Common request header.
The GetLocalGridTypes response message returns to get all known string names for local grid types.
Common response header.
The list of available local grid types.
Request a set of local grids by type name.
The GetLocalGrid request message can request for multiple different types of local grids at one time.
Common request header.
Specifications of the requested local grids.
The GetLocalGrid response message replies with all of the local grid data for the requested types, and a numerical count representing the amount of status errors that occurred when getting this data.
Common response header.
Response of local grid or error status for each requested local grid.
The number of individual local grids requests which could not be satisfied.
Common request header.
The Lease to show ownership of the robot.
Walk to an object with a raycast in to the world
Walk to an object at a pixel location in an image.
Pick up an object.
Pick up an object at a pixel location in an image.
Pick up an object based on a ray in 3D space. This is the lowest-level, most configurable object picking command.
Execute a previously planned pick.
/ Common response header.
ID of the manipulation command either just issued or that we are providing feedback for.
Details about how the lease was used.
Common request header.
Unique identifier for the command, provided by ManipulationApiResponse.
/ Common response header.
The unique identifier for the ManipulationApiFeedbackRequest.
Data from the manipulation system: \ "walkto_raycast_intersection": \ If you sent a WalkToObject request, we raycast in the world to intersect your pixel/ray with the world. The point of intersection is included in this transform snapshot with the name "walkto_raycast_intersection". \ "grasp_planning_solution": \ If you requested a grasp plan, this frame will contain the planning solution if available. This will be the pose of the "hand" frame at the completion of the grasp. \ "gripper_nearest_object": \ If the range camera in the hand senses an object, this frame will have the position of the nearest object. This is useful for getting a ballpark range measurement.
Common response header.
RPCs for sending images or other data to networked server for computation.
Set of RPCs for workers of the network compute bridge. This is separate from the RPCs for the on-robot network compute bridge so that if they need to diverge in the future it is possible to do so.
Common request header.
Common response header.
Non image-type data that can optionally be returned by a remote server.
Command status
Filled out if status is NETWORK_COMPUTE_STATUS_CUSTOM_PARAMS_ERROR.
Output images generated by this model.
This service provides a way to register new payloads.
Register a payload with the directory.
The RegisterPayload request message contains the payload information and secret to be able to register it to the directory.
Common request header.
The payload to register, which must have, at minimum, GUID specified correctly. The admin console can be used to verify that the payload definition is valid after registration.
A private string provided by the payload to verify identity for auth.
The RegisterPayload response message contains the status of whether the payload was successfully registered to the directory.
Common response header.
Return status for the request.
Update the version for the registered payload.
Update the payload definition of the payload with matching GUID. The existing payload must have a secret set and the request must provide the secret for access. GUID and is_authorized fields are immutable and cannot be updated.
Common request header.
Payload credentials.
The GUID of the payload to be updated. DEPRECATED as of 3.0.0. Please use payload_credentials instead.
The payload secret for the specified payload. DEPRECATED as of 3.0.0. Please use payload_credentials instead.
The new software version that the payload is being updated to.
The UpdatePayloadVersion response message contains the status of whether the update was successful.
Common response header.
Return status for the request.
Get the authentication token information associated with a given payload.
Request a user token from the robot A token will only be provided after the registered payload has been enabled by an admin. The returned user token will have limited access to the services necessary for a simple payload.
Common request header.
Payload credentials.
The GUID to identify which payload to get the auth token for. DEPRECATED as of 3.0.0. Please use payload_credentials instead.
The payload secret for the specified payload. DEPRECATED as of 3.0.0. Please use payload_credentials instead.
The GetPayloadAuthToken response message that returns the token for the payload.
Common response header.
Return status for the request.
A limited-access user token provided on successful payload registration
Tell the robot whether the specified payload is attached..
Attach/detach the payload with the matching GUID. The existing payload must have a secret set and the request must provide the secret for access. GUID is immutable and cannot be updated.
Common request header.
Payload credentials, used to identify the payload and authorize the changes.
Attach or detach the payload.
The UpdatePayloadAttached response message contains the status of whether the update was successful.
Common response header.
Return status for the request.
This service provides a way to query for the currently-registered payloads.
List all payloads the robot knows about.
The ListPayloads request message sent to the robot to get all known payloads.
Common request header.
The ListPayloads response message returns all payloads registered in the robot's directory.
Common response header.
The returned list of payloads registered in the directory.
The point cloud service provides access to one or more point cloud sources, for example from a lidar. It supports querying the list of available sources provided by the service and it supports requesting the latest point cloud data for each source by name.
Obtain the list of PointCloudSources for this given service. Note that there may be multiple PointCloudServices running, each with their own set of sources The name field keys access to individual point clouds when calling GetPointCloud.
Common request header.
The GetPointCloud response message which returns any point cloud data associated with that service.
Common response Header.
The set of PointCloudSources available from this service. May be empty if the service serves no point clouds (e.g., if no sensors were found on startup).
Request point clouds by source name.
The GetPointCloud request message to ask a specific point cloud service for data.
Common request header.
Sources to retrieve from. The service will return a response for each PointCloudRequest.
Common response header.
The resulting point clouds for each requested source.
The power service for the robot that can power on/off the robot's motors.
Starts a power command on the robot. A robot can only accept one power command at once. Power commands, are not interruptible. Once a command is issued, it must complete before another command can be issued.
The PowerCommand request which specifies a change in the robot's motor power.
Common request header.
The Lease to show ownership of the robot.
The PowerCommand response message which contains a unique identifier that can be used to get feedback on the progress of a power command from the power service.
Common response header.
Details about how the lease was used.
Current feedback of specified command.
Unique identifier for the command, If empty, was not accepted.
License check status
Optional list of active faults blocking success of the PowerCommandRequest
Check the status of a power command.
The PowerCommandFeedback request message, which can get the feedback for a specific power command id number.
Common request header.
Unique identifier for the command of which feedback is desired.
The PowerCommandFeedback response message, which contains the progress of the power command.
Common response header.
Current status of specified command.
Optional list of active faults blocking success of the PowerCommandRequest
Separate RPC for toggling fan power due to need for time/percent power parameters
Common request header.
The Lease to show ownership of the robot.
What percent power does the user want the fans to run at? Range is 0 to 100, with 0 being off and 100 being full power
How long the user wants control of the fans May not be duration the command is actually in effect for if temperature gets too high
Common response header.
Details about how the lease was used.
Current feedback of specified command.
Based on received duration, the time when this command will stop being in effect
Unique identifier for the command, If empty, was not accepted.
Check the status of a fan power command.
The PowerCommandFeedback request message, which can get the feedback for a specific power command id number.
Common request header.
Unique identifier for the command of which feedback is desired.
The PowerCommandFeedback response message, which contains the progress of the power command.
Common response header.
Current status of specified command.
Based on duration, the time that this command was intended to stop being in effect. If stopped/overridden prematurely, early_stop_time will reflect the actual time the command stopped being in effect
If the command was stopped or overridden before its desired end time, the time at which it was stopped. If command succeeded, this time is empty.
Reset the safety stop bit on SRSF-configured robots.
Common request header.
The Lease to show ownership of the robot.
Common response header.
Details about how the lease was used.
Current feedback of specified command.
Asks robot to cast the desired ray against its map of the surrounding environment to find the nearest intersection point.
Common request header.
The ray's coordinate frame. When unset, this will default to vision frame.
The ray, containing and origin and an direction.
Ignore intersections closer than this location on the ray. Defaults to 0 if not provided.
Type of the raycast you want to perform. If multiple are set, the result will wait until all raycasts are complete and return a single result proto. If this field is left empty, all available sources are used.
Common response header.
Return status for a request.
Human-readable error description. Not for programmatic analysis.
The frame raycast hits are returned in. Generally this should be the same frame the client initially requested in.
Ray cast hits, sorted with the closest hit first along the ray's extent.
A tree-based collection of transformations, which will include the transformations to each of the returned world objects in addition to transformations to the common frames ("vision", "body", "odom"). All transforms within the snapshot are taken at the time when the request is received. Note that each object's frame names are defined within the properties submessage e.g. "frame_name".
The robot command service allows a client application to control and move the robot.
Starts a behavior command on the robot. Issuing a new command overrides the active command. Each command is issued a UID for feedback retrieval.
A RobotCommand request message includes the lease and command as well as a clock identifier to ensure timesync when issuing commands with a fixed length.
Common request header.
The Lease to show ownership of the robot.
A command for a robot to execute. A command can be comprised of several subcommands.
Identifier provided by the time sync service to verify time sync between robot and client.
The RobotCommand response message contains a robot command id that can be used to poll the robot command service for feedback on the state of the command.
Common response header.
Details about how the lease was used.
Return status for a request.
Human-readable error description. Not for programmatic analysis.
Unique identifier for the command, If empty, command was not accepted.
A client queries this RPC to determine a robot's progress towards completion of a command. This updates the client with metrics like "distance to goal." The client should use this feedback to determine whether the current command has succeeded or failed, and thus send the next command.
The RobotCommandFeedback request message, which can get the feedback for a specific robot command id number.
Common request header.
Unique identifier for the command, provided by StartRequest.
The RobotCommandFeedback response message, which contains the progress of the robot command.
Common response header.
Details about how the lease was used.
Command specific feedback.
Clear robot behavior fault.
A ClearBehaviorFault request message has the associated behavior fault id to be cleared.
Common request header.
The Lease to show ownership of the robot.
Unique identifier for the error
A ClearBehaviorFault response message has status indicating whether the service cleared the fault or not.
Common response header.
Details about how the lease was used.
Return status for a request.
Echo back the behavior fault if it was active at the time of request.
Blocking hardware faults for an unclearable behavior fault.
This service is used to stream high rate commands to the robot once they have been activated using RobotCommandService.RobotCommand This service is in BETA and may undergo changes in future releases.
Command updates for joint control
Common request header.
Joint command details
Optional contact advice which may improve kinematic odometry.
Common response header.
Return status for the stream.
Human-readable error description. Not for programmatic analysis.
RobotIdService provides mostly static identifying information about a robot. User authentication is not required to access RobotIdService to assist with early robot discovery.
Get the robot id information. The ID contains basic information about a robot which is made available over the network as part of robot discovery without requiring user authentication.
The RobotId request message sent to a robot to learn it's basic identification information.
Common request/response header.
The RobotId response message, including the ID information for a robot.
Common request/response header.
The requested RobotId information.
The robot state service tracks all information about the measured and computed states of the robot at the current time.
Get robot state information (such as kinematic state, power state, or faults).
The RobotState request message to get the current state of the robot.
Common request header.
The RobotState response message, which returns the robot state information from the time the request was received.
Common response header.
The requested RobotState.
Get different robot metrics and parameters from the robot.
The RobotMetrics request message to get metrics and parameters from the robot.
Common request header.
The RobotMetrics response message, which returns the metrics information from the time the request was received.
Common response header.
The requested robot metrics.
Get the hardware configuration of the robot, which describes the robot skeleton and urdf.
The RobotHardwareConfiguration request message to get hardware configuration, described by the robot skeleton and urdf.
Common request header.
The RobotHardwareConfiguration response message, which returns the hardware config from the time the request was received.
Common response header.
The requested RobotState.
Returns the OBJ file for a specific robot link. Intended to be called after GetRobotHardwareConfiguration, using the link names returned by that call.
The RobotLinkModel request message uses a link name returned by the RobotHardwareConfiguration response to get the associated OBJ file.
Common request header.
The link name of which the OBJ file should represent.
The RobotLinkModel response message returns the OBJ file for a specific robot link.
Common response header.
The requested RobotState skeleton obj model.
This service is in BETA and may undergo changes in future releases.
Lightweight Streaming version of RobotState
The RobotStateStream request message to get the current state of the robot.
Common request header.
Common response header.
Joint state of all robot joints.
IMU state
Foot contact state, see FootState above for details.
For determining latency information about the last command received is provided.
The time-sync service estimates the difference between server and client clocks. Time synchronization is a tool which allows applications to work in a unified timebase with precision. It is useful in cases where a precise time must be set, independently of network communication lag. In distributed systems and robotics, hardware, system-level, and per-process approaches can be used to obtain synchronization. This service implements a stand alone time synchronization service. It enables clients to establish a per-process offset between two processes which may be on separate systems.
See the exchange documentation in time_sync.proto. This call makes one client/server round trip toward clock synchronization.
Request message for a time-sync Update RPC.
Common request header.
Round-trip timing information from the previous Update request.
Identifier to verify time sync between robot and client. If unset, server will assign one to client.
Request message for a time-sync Update RPC.
Common response header.
Clock synchronization estimate from the previous RPC round-trip, if available.
Current best clock synchronization estimate according to server.
Identifier to verify time sync between robot and client. Assigned upon first Request and echoed with each subsequent request.
The world object service provides a way to track and store objects detected in the world around the robot.
Request a list of all the world objects in the robot's perception scene.
The ListWorldObject request message, which can optionally include filters for the object type or timestamp.
Common request header
Optional filters to apply to the world object request Specific type of object; can request multiple different properties
Timestamp to filter objects based on. The time should be in robot time All objects with header timestamps after (>) timestamp_filter will be returned
The ListWorldObject response message, which contains all of the current world objects in the robot's perception scene.
Common response header
The currently perceived world objects.
Mutate (add, change, or delete) the world objects.
The MutateWorldObject request message, which specifies the type of mutation and which object the mutation should be applied to.
Common request header
The mutation for this request.
The MutateWorldObject response message, which includes the world object id for the object that the mutation was applied to if the request succeeds.
Common response header
Return status for the request.
ID set by the world object service for the mutated object
Used as request type in: DataAcquisitionService.AcquireData
Used as field type in:
,Common request header.
Define the unique action that all data should be saved with.
Metadata to store with the data capture. The main Data Acquisition service saves it in the DataBuffer.
List of capability requests that should be collected as part of this capture action.
Optional duration used to extend the amount of time that the data request may take, in the event that a plugin is incorrectly specifying its timeout. The amount of time allowed will be the maximum of this duration and any requests made to plugins or other capture sources.
Used in:
The capture action has successfully started acquiring the data.
One of the capability requests in the AcquisitionRequestList is unknown.
Used in:
UNKNOWN should never be used. An internal LeaseService issue has happened if UNKNOWN is set.
AcquireLease was successful.The lease field will be populated with the new lease for the resource. The client is expected to call the RetainLease method immediately after.
AcquireLease failed since the resource has already been claimed. The TakeLease method may be used to forcefully grab the lease.
AcquireLease failed since the resource is not known to LeaseService. The ListLeaseResources method may be used to list all known resources.
The LeaseService is not authoritative - so Acquire should not work.
Used in:
The capture action has successfully started acquiring the data.
One of the capability requests in the AcquisitionRequestList is unknown.
See custom_param_error field for details.
A list of all capabilities (data and images) that a specific data acquisition plugin service can successfully acquire and save the data specified in each capability.
Used in:
,List of non-image data acquisition capabilities.
List of image data acquisition capabilities.
List of network compute capabilities.
The grouping of all individual image and data captures for a given capture action.
Used in:
,List of image requests.
List of non-image data and metadata requests.
List of Network Compute Bridge requests
A query parameter which filters the possible set of data identifiers to those which contain the same action/group names matching any of the names in the set of CaptureActionIds.
Used in:
The action ids to filter with.
Ex 3: "Critical Condition" (boolean signal) - alert_data.severity: SEVERITY_LEVEL_CRITICAL - condition: false If the value is false, then SEVERITY_LEVEL_CRITICAL.
Used in:
Indicate severity if thresholds are met or exceeded.
Use min, max, and bounds fields for double and int signals. Use condition field for boolean signals.
If the signal value is <= the min, the condition is met.
If the signal value is >= the max, the condition is met.
If the signal value is >= the lower bound and <= the upper bound, the condition is met.
If boolean signal value is false, and the condition is false, the condition is met.
Structured data indicating an alert detected off the robot that can be stored in the DataBuffer and associated with with previously stored data.
Used in:
, , , ,Severity of this alert.
Human readable alert title/summary.
The source that triggered the alert.
JSON data for any additional info attached to this alert.
Used in:
, , , ,Do not use. If severity is unknown, must assume issue is highest severity.
Informational message that requires no action.
An error may occur in the future if no action is taken, but no action presently required.
Action required. Error fatal to operation.
Action required. Severe error that requires immediate attention.
Allowable orientation allow you to specify vectors that the different axes of the robot's gripper will be aligned with in the final grasp pose. \ Frame: \ In stow position, +X is to the front of the gripper, pointing forward. \ +Y is out of the side of the gripper going to the robot's left \ +Z is straight up towards the sky \ Here, you can supply vectors that you want the gripper to be aligned with at the final grasp position. For example, if you wanted to grasp a cup, you'd wouldn't want a top-down grasp. So you might specify: \ frame_name = "vision" (so that Z is gravity aligned) \ VectorAlignmentWithTolerance: \ axis_to_on_gripper_ewrt_gripper = Vec3(0, 0, 1) <--- we want to control the gripper's z-axis. \ axis_to_align_with_ewrt_frame = Vec3(0, 0, 1) <--- ...and we want that axis to be straight up \ tolerance_z = 0.52 <--- 30 degrees \ This will ensure that the z-axis of the gripper is pointed within 30 degrees of vertical so that your grasp won't be top-down (which would need the z-axis of the gripper to be pointed at the horizon). \ You can also specify more than one AllowableOrientation to give the system multiple options. For example, you could specify that you're OK with either a z-up or z-down version of the cup grasp, allowing the gripper roll 180 from the stow position to grasp the cup.
Used in:
Parameters for how angular trajectories will be interpolated on robot.
Used in:
Unknown interpolation, do not use.
Linear interpolation for angular data.
Cubic interpolation (using Euler method) for angular data.
Use this message to assert the ground truth about grasping. Grasping is usually detected automatically by the robot. If the client wishes to override the robot's determination of grasp status, send an ApiGraspOverride message with either: OVERRIDE_HOLDING, indicating the gripper is holding something, or OVERRIDE_NOT_HOLDING, indicating the gripper is not holding anything.
Used in:
Used in:
Used as request type in: ManipulationApiService.OverrideGrasp
Used as field type in:
Common request header.
If the grasp override is set to NOT_HOLDING, setting a carry_state_override message will cause the request to be rejected as malformed.
Use this message to assert properties about the grasped item. By default, the robot will assume all grasped items are not carriable.
Used in:
World object properties describing a fiducial object.
Used in:
Consistent integer id associated with a given apriltag. April Tag detections will be from the tag family 36h11.
Apriltag size in meters, where x is the row/width length and y is the height/col length of the tag
The frame name for the raw version of this fiducial. This will be included in the transform snapshot.
Status of the pose estimation of the unfiltered fiducial frame.
The frame name for the filtered version of this fiducial. This will be included in the transform snapshot.
Status of the pose estimation of the filtered fiducial frame.
The frame name for the camera that detected this fiducial.
A 6 x 6 Covariance matrix representing the marginal uncertainty of the last detection. The rows/columns are: rx, ry, rz, tx, ty, tz which represent incremental rotation and translation along the x, y, and z axes of the given frame, respectively. This is computed using the Jacobian of the pose estimation algorithm.
The frame that the detection covariance is expressed in.
Used in:
No known issues with the pose estimate.
The orientation of the tag is ambiguous.
The pose may be unreliable due to high reprojection error.
Represents an area in the XY plane.
Represents an area in the XY plane, with integer indices
Used in:
,Command the end effector of the arm. Each axis in the task frame is allowed to be set to position mode (default) or Force mode. If the axis is set to position, the desired value is read from the pose_trajectory_in_task. If the axis is set to force, the desired value is read from the wrench_trajectory. This supports hybrid control of the arm where users can specify, for example, Z to be in force control with X and Y in position control.
(message has no fields)
Used in:
Current status of the pose trajectory.
Current linear tracking error of the tool frame [meters].
Current rotational tracking error of the tool frame [radians].
Linear distance from the tool to the tool trajectory's end point [meters].
Rotational distance from the tool to the trajectory's end point [radians].
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Tool frame has reached the end of the trajectory within tracking error bounds.
Robot is attempting to reach the target.
Tool frame exceeded maximum allowable tracking error from the desired trajectory.
The arm has stopped making progress to the goal. Note, this does not cancel the trajectory. For example, if the requested goal is too far away, walking the base robot closer to the goal will cause the arm to continue along the trajectory once the goal point is inside the workspace.
Used in:
The root frame is used to set the optional task frame that all trajectories are specified with respect to. If the optional task frame is left un-specified it defaults to the identity transform and the root frame becomes the task frame.
The tool pose relative to the parent link (wrist). Defaults to [0.19557 0 0] [1 0 0 0] a frame with it's origin slightly in front of the gripper's palm plate aligned with wrist's orientation.
The fields below are specified in this optional task frame. If unset it defaults to the identity transform and all quantities are therefore expressed in the root_frame_name.
A 3D pose trajectory for the tool expressed in the task frame, e.g. task_T_tool. This pose trajectory is optional if requesting a pure wrench at the end-effector, otherwise required for position or mixed force/position end-effector requests.
Optional Maximum acceleration magnitude of the end-effector. Valid ranges (0, 20]
Optional Maximum linear velocity magnitude of the end-effector. (m/s)
Optional Maximum angular velocity magnitude of the end-effector. (rad/s)
Maximum allowable tracking error of the tool frame from the desired trajectory before the arm will stop moving and cancel the rest of the trajectory. When this limit is exceeded, the hand will stay at the pose it was at when it exceeded the tracking error, and any other part of the trajectory specified in the rest of this message will be ignored. max position tracking error in meters
max orientation tracking error in radians
Set a "preferred joint configuration" for this trajectory. When near a singularity, the robot will move towards the specified pose. If no pose is provided (i.e. no value is set for this oneof), a default one will be chosen. If the user wishes to explicitly tell the robot to not prefer any pose, (useful if doing a local move, and the user wants to avoid large joint motions) they should set force_remain_near_current_joint_configuration to be true. The robot's behavior around singularities will then be to simply minimize joint velocity, resulting in the robot coming in and out of the singularity with similar joint angles
A force/torque trajectory for the tool expressed in the task frame. This trajectory is optional if requesting a pure pose at the end-effector, otherwise required for force or mixed force/position end-effector requests.
Disables protection that prevents the arm from moving unexpectedly fast. If you are commanding an especially aggressive arm trajectory, you may need to disable this protection. WARNING: setting `disable_velocity_limiting` to true may result in fast arm motions!
If an axis is set to position mode (default), read desired from SE3Trajectory trajectory command. If mode is set to Force, read desired from WrenchTrajectory wrench_trajectory command. This supports hybrid control of the arm where users can specify, for example, Z to be in force control with X and Y in position control. The elements are expressed in the same task_frame as the trajectories.
Used in:
The synchronized command message for commanding the arm to move. A synchronized commands is one of the possible robot command messages for controlling the robot.
(message has no fields)
The feedback for the arm command that will provide information on the progress of the command.
Used in:
The feedback message associated with the requested command. Some commands may have an empty feedback message if they do not provide any updates/progress.
Feedback for the end-effector Cartesian command.
Feedback for the joint move command.
Feedback for the named position move command.
Feedback for the gaze command.
Feedback for the drag command.
Feedback for impedance command.
The arm request must be one of the basic command primitives.
Used in:
Only one command can be requested at a time.
Control the end-effector in Cartesian space.
Control joint angles of the arm.
Move the arm to some predefined configurations.
Velocity control of the end-effector.
Point the gripper at a point in the world.
Stop the arm in place with minimal motion.
Use the arm to drag something held in the gripper.
Impedance control of arm (beta)
Any arm parameters to send, common across all arm commands
(message has no fields)
Used in:
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Robot is dragging.
Robot is not dragging because grasp failed. This could be due to a lost grasp during a drag, or because the gripper isn't in a good position at the time of request. You'll have to reposition or regrasp and then send a new drag request to overcome this type of error. Note: When requesting drag, make sure the gripper is positioned in front of the robot (not to the side of or above the robot body).
Robot is not dragging for another reason. This might be because the gripper isn't holding an item. You can continue dragging once you resolve this type of error (i.e. by sending an ApiGraspOverride request). Note: When requesting drag, be sure to that the robot knows it's holding something (or use APIGraspOverride to OVERRIDE_HOLDING).
Used in:
(message has no fields)
Specify impedance about the end-effector. Users can set up frames along with stiffness and damping parameters to control how the end-effector will respond to external contact as it moves along a specified trajectory
(message has no fields)
Used in:
Current status of the pose trajectory.
A tree-based collection of transformations relevant to the current impedance operation. In addition to the common frames ("vision", "body", "odom"), this snapshot contains the following: "task": The task frame that the impedance action is specified in. "desired_tool": The pose of the desired_tool frame at the current time. "tool": The current measured pose of the tool. "desired_tool_at_end": The desired tool pose at the end of the requested trajectory. "measured_tool_at_start": The measured pose of the tool when this command was first sent. While these poses can be used in any way the user sees fit, here are some useful ideas: desired_tool_tform_tool: The current measured tool pose relative to the `desired_tool` frame [meters, quaternion]. This is our "tracking error". Multiplying this error by `diagonal_stiffness_matrix` should yield `commanded_wrench_from_stiffness_at_tool_in_desired_tool`. desired_tool_at_end_tform_tool: The current measured tool pose relative to the `desired_tool` frame at the end of the user trajectory [meters, quaternion]. This is our "distance to goal", and can be used for checking when an impedance move is "complete". measured_tool_at_start_tform_tool_in_task: The current measured tool pose relative to the measured tool frame at the start, expressed in the task frame [meters, quaternion]. This can be used to see how far the tool has moved since the beginning of the command.
The component of our commanded wrench at the tool expressed with respect to the `desired_tool` frame from our stiffness matrix [Newtons / Nm]
The component of our commanded wrench at the tool expressed with respect to the `desired_tool` frame from our damping matrix [Newtons / Nm]
The component of our commanded wrench at the tool expressed with respect to the `desired_tool` frame from our feed forward wrench [Newtons / Nm]
The commanded total wrench at the tool expressed with respect to the `desired_tool` frame. This wrench has been saturated to obey `max_force_mag` and `max_torque_mag` [Newtons / Nm]
Sometimes the arm cannot achieve the commanded wrench exactly because of the underlying controller or arm pose. This looks at the joint torque sensors to determine the actual force and torque being applied at the tool. [Newtons / Nm]
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Tool frame has reached the end of the trajectory, and is close to the `desired_tool` in directions with high stiffness and no feed forwards
Robot is moving along the `desired_tool` trajectory
The arm has stopped making progress to the goal and the measured tool frame is far from the `desired_tool` along directions where we expect good tracking
Detected an arm instability, so the commanded motion was cancelled. Consider lowering stiffness or lowering both stiffness and damping to improve stability.
Used in:
Name of the frame relative to which the task frame is defined for this command. Common frames for this include "odom", "vision", "body", and "flat_body".
This transform specifies the pose of the task frame relative to the root frame. If unset, it defaults to identity, and the task frame coincides with the root frame. The `desired_tool` frame will be specified relative to the task frame. For peg in hole tasks for example, the task frame could be a frame attached to the top of the hole with z-axis aligned with the hole axis, and the `desired_tool` frame could move in z to direct the peg deeper into the hole.
The tool pose relative to the parent link (link_wr1). This can also be thought of as the "remote center" frame. For peg in hole tasks for example, one might put the tool frame at the tip of the peg, or slightly below the tip floating in space, at the point on which we want our virtual springs to pull. Defaults to [0.19557 0 0] [1 0 0 0] which is a frame aligned with the wrist frame, with its origin slightly in front of the gripper's palm plate.
Trajectory of where we want the tool to be relative to the task frame. Note that this `desired_tool` frame is not the same as the tool frame attached to the wrist link. If our tool deviates from this `desired_tool` pose, it will be subject to a wrench determined by our stiffness and damping matrices.
Feed forward wrench to apply at the tool, expressed with respect to the `desired_tool` frame
Stiffness matrix in the `desired_tool` frame. The matrix is parameterized by a vector of 6 doubles, representing the diagonal of this 6x6 matrix: [x,y,z,tx,ty,tz] (N/m, N/m, N/m, Nm/rad, Nm/rad, Nm/rad). All other entries will be set to 0. All stiffness values along the diagonal should be non-negative.
Damping matrix in the `desired_tool` frame. The matrix is parameterized by a vector of 6 doubles, representing the diagonal of this 6x6 matrix: [x,y,z,tx,ty,tz] (Ns/m, Ns/m, Ns/m, Nms/rad, Nms/rad, Nms/rad) All other entries will be set to 0. All damping values along the diagonal should be non-negative.
Maximum force magnitude in Newtons we're allowed to exert. If the tool deviates such that the magnitude of the requested force would exceed this threshold, saturate the requested force. If this value is not set, a default of 60N will be used.
Maximum torque magnitude in Newton meters we're allowed to exert. If the tool deviates such that the magnitude of the requested torque would exceed this threshold, saturate the requested torque. If this value is not set, a default of 15Nm will be used.
Set to True to disable cancelling the trajectory for unsafe behaviors. NOTE: If disable_safety_check is set to True, the robot may damage itself or the environment. Extreme caution should be used when setting disable_safety_check to True.
Specify a set of joint angles to move the arm.
(message has no fields)
Used in:
Current status of the request.
Current status of the trajectory planner.
Based on the user trajectory, the planned knot points that obey acceleration and velocity constraints. If these knot points don't match the requested knot points, consider increasing velocity/acceleration limits, and/or staying further away from joint position limits. In situations where we've modified you last point, we append a minimum time trajectory (that obeys the velocity and acceleration limits) from the planner's final point to the requested final point. This means that the length of planned_points may be one point larger than the requested. The planner works on a moving window of up to 10 points from the input trajectory, so the length of planned points will be at most 10, and its contents will change over time for long trajectories.
Returns amount of time remaining until the joints are at the goal position. For multiple point trajectories, this is the time remaining to the final point.
Used in:
PLANNER_STATUS_UNKNOWN should never be used. If used, an internal error has happened.
A solution passing through the desired points and obeying the constraints was found.
The planner had to modify the desired points in order to obey the constraints. For example, if you specify a 1 point trajectory, and tell it to get there in a really short amount of time, but haven't set a high allowable max velocity / acceleration, the planner will do its best to get as close as possible to the final point, but won't reach it. In situations where we've modified you last point, we append a minimum time trajectory (that obeys the velocity and acceleration limits) from the planner's final point to the requested final point.
Failed to compute a valid trajectory, will go to first point instead. It is possible that our optimizer till fail to solve the problem instead of returning a sub-optimal solution. This is un-likely to occur.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened
The arm is at the desired configuration.
Robot is re-configuring arm to get to desired configuration.
The arm has stopped making progress towards the goal. This could be because it is avoiding a collision or joint limit.
Used in:
Note: Sending a single point empty trajectory will cause the arm to freeze in place. This is an easy way to lock the arm in its current configuration.
Position of our 6 arm joints in radians. If a joint angle is not specified, we will use the joint position at time the message is received on robot.
Used in:
, , ,This allows a user to move the arm's joints directly. Each of the arm's joints will never move faster than maximum_velocity and never accelerate faster than maximum_acceleration. The user can specify a trajectory of joint positions and optional velocities for the arm to follow. The trajectory will be acted upon as follows. If a single trajectory point with no time is provided, the arm will take the joint currently furthest away from the goal pose and plan a minimum time trajectory such that the joint accelerates at maximum_acceleration, coasts at maximum_velocity, and decelerates at maximum_acceleration. The other joints will accelerate at maximum_acceleration, but then coast at a slower speed such that all joints arrive at the goal pose simultaneously with zero velocity. If the user provides trajectory times, the robot will fit a piece-wise cubic trajectory (continuous position and velocity) to the user's requested positions and (optional) velocities. If the requested trajectory is not achievable because it will violate position limits or the maximum_velocity or maximum_acceleration, the robot will pick a trajectory that is as close as possible to the user requested without violating velocity or acceleration limits. If the robot is not hitting the desired trajectory, try increasing the time between knot points, increasing the max velocity and acceleration, or only specifying joint position goals without a velocity
Used in:
,The points in our trajectory. (positions, (optional) velocity, (optional) time)
All trajectory points specify times relative to this reference time. The reference time should be in robot clock. If this field is not included, this time will be the receive time of the command.
The maximum velocity in rad/s that any joint is allowed to achieve. If this field is not set, a default value will be used.
The maximum acceleration in rad/s^2 that any joint is allowed to achieve. If this field is not set, a default value will be used.
A set of joint angles and velocities that can be used as a point within a joint trajectory.
Used in:
,Desired joint angles in radians
Optional desired joint velocities in radians / sec
The time since reference at which we wish to achieve this position / velocity
Velocity of our 6 arm joints in radians / second. If a velocity for a joint is specified, velocities for all joints we are trying to move must be specified.
Used in:
Parameters common across arm commands.
Used in:
/ Whether or not to disable the body force limiter running on the robot. By default, this is / on, and the chance that the body falls over because the arm makes contact in the world is / low. If this is purposely disabled (by setting disable_body_force_limiter to True), the arm / may be able to accelerate faster, and apply more force to the world and to objects than / usual, but there is also added risk of the robot falling over.
Stop the arm applying minimal forces to the world. For example, if the arm is in the middle of opening a heavy door and a stop command is sent, the arm will comply and let the door close.
(message has no fields)
Stop command provides no feedback
Used in:
(message has no fields)
Stop command takes no arguments.
Used in:
(message has no fields)
ArmSurfaceContact lets you accurately move the robot's arm in the world while having some ability to perform force control. This mode is useful for drawing, wiping, and other similar behaviors. The message is similar to the ArmCartesianCommand message, which you can look at for additional details.
(message has no fields)
(message has no fields)
Used in:
The root frame is used to set the optional task frame that all trajectories are specified with respect to. If the optional task frame is left un-specified it defaults to the identity transform and the root frame becomes the task frame.
The tool pose relative to the parent link (wrist). Defaults to [0.19557 0 0] [1 0 0 0] a frame with it's origin slightly in front of the gripper's palm plate aligned with wrists orientation.
The fields below are specified in this optional task frame. If unset int defaults to the identity transform and all quantities are therefore expressed in the root_frame_name.
A 3D pose trajectory for the tool expressed in the task frame, e.g. task_T_tool. This pose trajectory is optional if requesting a pure wrench at the end-effector, otherwise required for position or mixed force/position end-effector requests.
Optional Maximum acceleration magnitude of the end-effector. Valid ranges (0, 20]
Optional Maximum linear velocity magnitude of the end-effector. (m/s)
Optional Maximum angular velocity magnitude of the end-effector. (rad/s)
Maximum allowable tracking error of the tool frame from the desired trajectory before the arm will stop moving and cancel the rest of the trajectory. When this limit is exceeded, the hand will stay at the pose it was at when it exceeded the tracking error, and any other part of the trajectory specified in the rest of this message will be ignored. max position tracking error in meters
max orientation tracking error in radians
Set a "preferred joint configuration" for this trajectory. When near a singularity, the robot will move towards the specified pose. If no pose is provided (ie no value is set for this oneof), a default one will be chosen. If the user wishes to explicitly tell the robot to not prefer any pose, (useful if doing a local move, and the user wants to avoid large joint motions) they should set ignore_joint_configuration to be true. The robot's behavior around singularities will then be to simply minimize joint velocity, resulting in the robot coming in and out of the singularity with similar joint angles
Amount of force to use on each axis, from 0 (no force) to 1.0 (maximum force), can also be negative. Full range: [-1.0, 1.0]
Admittance settings for each axis in the admittance frame.
Cross term, making force in the XY axis cause movement in the z-axis. By default is OFF Setting this value will make the arm move in the negative Z-axis whenever it feels force in the XY axis.
Specifies a force that the body should expect to feel. This allows the robot to "lean into" an external force. Be careful using this field, because if you lie to the robot, it can fall over.
Gripper control
Set to true to have robot is walk around to follow the hand.
Parameters for controlling admittance. By default, the robot will stop moving the arm when it encounters resistance. You can control that reaction to make the robot stiffer or less stiff by changing the parameters.
Used in:
No admittance.
Normal reaction to touching things in the world
Robot will not push very hard against objects
Robot will push hard against the world
Robot will push very hard against the world
If an axis is set to position mode (default), read desired from SE3Trajectory command. If mode is set to force, use the "press_force_percentage" field to determine force.
Used in:
When controlling the arm with a joystick, because of latency it can often be better to send velocity commands rather than position commands. Both linear and angular velocity can be specified. The linear velocity can be specified in a cylindrical frame around the shoulder or with a specified frame.
(message has no fields)
Used in:
The frame to express our velocities in
The x-y-z velocity of the hand (m/s) with respect to the frame
Used in:
/ The linear velocities for the end-effector are specified in unitless cylindrical / coordinates. The origin of the cylindrical coordinate system is the base of the arm / (shoulder). The Z-axis is aligned with gravity, and the X-axis is the unit vector from / the shoulder to the hand-point. This construction allows for 'Z'-axis velocities to / raise/lower the hand, 'R'-axis velocities will cause the hand to move towards/away from / the shoulder, and 'theta'-axis velocities will cause the hand to travel / clockwise/counter-clockwise around the shoulder. Lastly, the command is unitless, with / values for each axis specified in the range [-1, 1]. A value of 0 denotes no velocity / and values of +/- 1 denote maximum velocity (see max_linear_velocity).
/ The maximum velocity in meters / second for the hand. / If unset and default value of 0 received, will set max_linear_velocity to 0.5 m/s.
ArmVelocityCommand provides no feedback
Used in:
(message has no fields)
Used in:
Specify the linear velocity of the hand in either a cylindrical or Cartesian coordinate system.
The angular velocity of the hand frame measured with respect to the odom frame, expressed in the hand frame. A 'X' rate will cause the hand to rotate about its x-axis, e.g. the final wrist twist joint will rotate. And similarly, 'Y' and 'Z' rates will cause the hand to rotate about its y and z axis respectively. \ The units should be rad/sec.
Optional maximum acceleration magnitude of the end-effector. (m/s^2)
The timestamp (in robot time) by which a command must finish executing. This is a required field and used to prevent runaway commands.
This message can be stored as a DataBlob in the data buffer in order to be recognized as AlertData that is associated with previously stored data.
Used in:
,The data that this AlertData refers to. The timestamp field is ignored. If only the action_id is filled out, this AlertData is associated with the entire capture action.
AlertData message to be stored.
This message can be stored as a DataBlob in the data buffer in order to be recognized as metadata that is associated with previously stored data.
Used in:
,The data that this metadata refers to. The timestamp field is ignored. If only the action_id is filled out, this metadata is associated with the entire capture action.
Metadata message to be stored.
Used in:
MAC address of the associated station
Time duration since the station last connected.
Signal strength of last received packet
Signal strength average
Signal strength average for beacons only.
Expected throughput
Total received bytes
Total received packets from the associated station
Last unicast receive rate
Total transmitted bytes
Total transmitted packets to the associated station
Current unicast transmit rate
Cumulative retry count to this station, within connected time
Cumulative failed tx packet count to this station, within connected time
Number of beacons received from this peer
Number of times beacon loss was detected
Used in:
,Contains model name, class labels, and per-model parameters.
Get the robot into a convenient pose for changing the battery
(message has no fields)
Used in:
Used in:
Robot is finished rolling
Robot still in process of rolling over
Robot has failed to roll onto its side
Used in:
Used in:
Unknown direction, just hold still
Roll over right (right feet end up under the robot)
Roll over left (left feet end up under the robot)
The battery state for the robot. This includes information about the charge or the battery temperature.
Used in:
Robot clock timestamp corresponding to these readings.
An identifier for this battery (could be a serial number or a name. subject to change).
Number from 0 (empty) to 100 (full) indicating the estimated state of charge of the battery.
An estimate of remaining runtime. Note that this field might not be populated.
Measured current into (charging, positive) or out of (discharging, negative) the battery in Amps.
Measured voltage of the entire battery in Volts.
Measured temperature measurements of battery, in Celsius. Temperatures may be measured in many locations across the battery.
Current state of the battery.
Used in:
The battery is in an unknown / unexpected state.
The battery is not plugged in or otherwise not talking.
The battery is plugged in to shore power and charging.
The battery is not plugged into shore power and discharging.
The battery was just plugged in and is booting up= 3;
The details of what the behavior fault consists of, and the id for the fault. The unique behavior_fault_id can be used to clear the fault in robot command service ClearBehaviorFault rpc.
Used in:
, ,Behavior fault unique id
Time of robot local clock at time of the error
The potential cause of the fault.
Information about the status/what can be done with the fault.
Used in:
Unknown cause of error
Error caused by mobility failure or fall
Error caused by robot hardware malfunction
/ A lease has timed out
Used in:
Unknown clearable status
Fault is clearable
Fault is currently not clearable
This describes any current behavior faults on the robot, which would block any robot commands from going through. These can be cleared using the ClearBehaviorFault rpc in the robot command service.
Used in:
Current errors potentially blocking commands on robot
The current state of the behavior
Used in:
Used in:
Unknown behavior state
The robot is not ready to move
The robot is in transition from sit to stand or from stand to sit
The robot is standing in place
The robot is stepping
A set of blob messages of a given channel/msgtype within a given data page.
Used in:
A set of pages of data which contain specified Blob messages from the data-buffer.
Used in:
Specification for selecting of blob messages.
Used in:
, ,If set, require the message source to match this.
If set, require the message type to match this value.
If set, require the channel to match this value (or channel_glob, if set).
Optionally require the channel to match a glob (or channel, if set).. For example, 'gps/*' will match all channels starting with 'gps/'.
A boolean parameter.
Used in:
The value sent by a client.
Used in:
Default value. If unset, UIs can pick their own default OR force user to make a selection.
Used in:
An Oriented Bounding Box, with position and orientation at the frame provided in the transforms snapshot. The size of the box is expressed with respect to the frame.
Frame the size is expressed with respect to.
Represents bounds on a value, such that lower < value < upper. If you do not want to specify one side of the bound, set it to an appropriately large (or small) number.
Used in:
,Geometric primitive describing a two-dimensional box.
Used in:
,Geometric primitive to describe a 2D box in a specific frame.
Used in:
The box is specified with width (y) and length (x), and the full box is fixed at an origin, where it's sides are along the coordinate frame's axes.
The pose of the axis-aligned box is in 'frame_name'.
The transformation of the axis-aligned box into the desired frame (specified above).
Geometric primitive describing a three-dimensional box.
Used in:
,Geometric primitive to describe a 3D box in a specific frame.
Used in:
The box width (y), length (x), and height (z) are interpreted in, and the full box is fixed at an origin, where it's sides are along the coordinate frame's axes.
The pose of the axis-aligned box is in 'frame_name'.
The transformation of the axis-aligned box into the desired frame (specified above).
Used as request type in: DataAcquisitionPluginService.CancelAcquisition, DataAcquisitionService.CancelAcquisition
Common request header
Which acquisition request to cancel.
Used as response type in: DataAcquisitionPluginService.CancelAcquisition, DataAcquisitionService.CancelAcquisition
Common response header
The status of the Cancellation RPC. Further monitoring on the success of the cancellation request can be done using the GetStatus RPC.
Used in:
Successfully cancelled the data acquisition request.
Unable to stop the data acquisition request.
[Error] The request_id does not exist.
The CaptureActionId describes the entire capture action for an AcquireData request and will be used to uniquely identify that full request's set of stored data.
Used in:
, , , , , ,The action name is used to group all pieces of data associated with a single AcquireData request. The action name must be unique for the given group name, meaning no two actions with the same group name can have the same action name.
The group name is used to group a "session" of data, such as a mission or a teleop capture session, which includes multiple capture actions (from multiple AcquireData RPCs).
Time (in the robot's clock) at which this capture was triggered. If the timestamp is not specified in the AcquireData RPC, the main data acquisition service on robot will populate the timestamp field with the timestamp of when the RPC was received.
Sensor parameters associated with an image capture.
Used in:
The duration of exposure in microseconds.
Sensor gain in dB.
Any other custom parameters used in the image capture.
Represents a circular 2D area.
Used in:
,Dimensions in m from center_pt.
Geometric primitive to describe a 2D circle in a specific frame.
Used in:
The circle is specified with a radius and center point in x-y coordinates.
The pose of the circle is in 'frame_name'.
The transformation of the circle into the desired frame (specified above).
Command to open and close the gripper.
(message has no fields)
Used in:
Current status of the command.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
The gripper is opening or closing.
The gripper is at the final point of the trajectory.
During a close, detected contact and transitioned to force control.
Used in:
,Scalar trajectory for opening/closing the gripper. If 1 point is specified with no end time, we will execute a minimum time trajectory that observes velocity and acceleration constraints. Otherwise, we will use piecewise cubic interpolation, meaning there will be a cubic polynomial between each trajectory point, with continuous position and velocity at each trajectory point. If the requested trajectory violates the velocity or acceleration constraints below, a trajectory that is as close as possible but still obeys the constraints will be executed instead. position is radians: 0 is fully closed -1.5708 (-90 degrees) is fully open velocity is radians / sec.
If unspecified, a default value of 10 (rad/s) will be used.
If unspecified, a default value of 40 (rad/s/s) will be used.
Maximum torque applied. If unspecified, a default value of 5.5 (Nm) will be used.
By default the gripper transitions to force control when it detects an object closing. Setting this field to true disables the transition to force control on contact detection and always keeps the gripper in position control.
Used in:
An unknown / unexpected error occurred.
The BehaviorFault has been cleared.
The BehaviorFault could not be cleared.
Used in:
UNKNOWN should never be used.
Success. The fault has been cleared.
ServiceFaultId not found in active faults.
Used in:
Robot clock timestamp corresponding to these readings.
The ordering of joints in these repeated fields follows the order defined by the bosdyn.api.spot.JointIndex enum.
General error code are returned in the header to facilitate error-handling which is not message-specific. This can be used for generic error handlers, aggregation, and trend analysis.
Used in:
The different error codes that can be returned on a grpc response message.
Human-readable error description. Not for programmatic analysis.
Extra information that can optionally be provided for generic error handling/analysis.
Used in:
Code is not specified.
Not an error. Request was successful.
Service experienced an unexpected error state.
Ill-formed request. Request arguments were not valid.
The current comms information, including what comms the robot is using and the current status of the comms network.
Used in:
Robot timestamp corresponding to these readings.
The communication state is WiFi.
Used in:
,Other data that isn't an image. NetworkComputeBridge service will pass it through to the remote server so you can do computation on arbitrary data.
Name of the model to be run on the input data.
For some computer vision operations a number of reference images are required along with the input image. These images might have been taken months ago, not necessarily taken right now.
Input parameters unique to this worker that do not match any of the above fields.
(message has no fields)
Used in:
Desired wrench in odom world frame, applied at hand frame origin
A boolean signal indicating constrained manipulation has seen enough motion to estimate the constraint and that the wrench is being applied along the estimated directions.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Constrained manipulation is working as expected
Arm is stuck, either force is being applied in a direction where the affordance can't move or not enough force is applied
The grasp was lost. In this situation, constrained manipulation will stop applying force, and will hold the last position.
Used in:
Frame that the initial wrench will be expressed in
Direction of the initial wrench to be applied Depending on the task, either the force vector or the torque vector are required to be specified. The required vector should not have a magnitude of zero and will be normalized to 1. For tasks that require the force vector, the torque vector can still be specified as a non-zero vector if it is a good guess of the axis of rotation of the task. (for e.g. TASK_TYPE_SE3_ROTATIONAL_TORQUE task types.) Note that if both vectors are non-zero, they have to be perpendicular. Once the constrained manipulation system estimates the constraint, the init_wrench_direction and frame_name will no longer be used.
The desired velocity to move the object For all tasks besides SE3_ROTATIONAL_TORQUE, set tangential_speed in units of m/s. For SE3_ROTATIONAL_TORQUE, set rotational_speed with units of rad/s.
Recommended values are in the range of [-4, 4] m/s
Recommended values are in the range of [-4, 4] rad/s
The limit on the force that is applied on any translation direction Value must be positive If unspecified, a default value of 40 N will be used.
The limit on the torque that is applied on any rotational direction Value must be positive If unspecified, a default value of 4 Nm will be used.
The timestamp (in robot time) by which a command must finish executing. This is a required field and used to prevent runaway commands.
Whether to enable the robot to take steps during constrained manip to keep the hand in the workspace.
Desired final task position to achieve The position is computed relative to the starting position.
Desired linear position to travel for task type TASK_TYPE_R3_LINEAR_FORCE
Desired rotation in task space for all tasks other than TASK_TYPE_R3_LINEAR_FORCE This angle is about the estimated axis of rotation.
Acceleration limit for the planned trajectory in the free task DOF. Note that the units of this variable will be m/(s^2) or rad/(s^2) depending on the choice of target_linear_position vs. target_angle above.
Constrained manipulation estimates the task frame given the observed initial motion. Setting this to false saves and uses the estimation state from the previous constrained manipulation move. This is true by default.
Used in:
Position control mode, either a linear or angular position is specified and constrained manipulation moves to that position with a trapezoidal trajectory that has the max velocity specified in task_speed
Velocity control mode where constrained manipulation applies forces to maintain the velocity specified in task_speed
Geometrical category of a task. See the constrained_manipulation_helper function for examples of each of these categories. For e.g. SE3_CIRCLE_FORCE_TORQUE corresponds to lever type objects.
Used in:
This task type corresponds to circular tasks where both the end-effector position and orientation rotate about a circle to manipulate. The constrained manipulation logic will generate forces and torques in this case. Example tasks are: A lever or a ball valve with a solid grasp This task type will require an initial force vector specified in init_wrench_direction_in_frame_name. A torque vector can be specified as well if a good initial guess of the axis of rotation of the task is available.
This task type corresponds to circular tasks that have an extra degree of freedom. In these tasks the end-effector position rotates about a circle but the orientation does not need to follow a circle (can remain fixed). The constrained manipulation logic will generate translational forces in this case. Example tasks are: A crank that has a loose handle and moves in a circle and the end-effector is free to rotate about the handle in one direction. This task type will require an initial force vector specified in init_wrench_direction_in_frame_name.
This task type corresponds to purely rotational tasks. In these tasks the orientation of the end-effector follows a circle, and the position remains fixed. The robot will apply a torque at the end-effector in these tasks. Example tasks are: rotating a knob or valve that does not have a lever arm. This task type will require an initial torque vector specified in init_wrench_direction_in_frame_name.
This task type corresponds to circular tasks where the end-effector position and orientation rotate about a circle but the orientation does always strictly follow the circle due to slips. The constrained manipulation logic will generate translational forces in this case. Example tasks are: manipulating a cabinet where the grasp on handle is not very rigid or can often slip. This task type will require an initial force vector specified in init_wrench_direction_in_frame_name.
This task type corresponds to linear tasks where the end-effector position moves in a line but the orientation does not need to change. The constrained manipulation logic will generate a force in this case. Example tasks are: A crank that has a loose handle, or manipulating a cabinet where the grasp of the handle is loose and the end-effector is free to rotate about the handle in one direction. This task type will require an initial force vector specified in init_wrench_direction_in_frame_name.
This option simply holds the hand in place with stiff impedance control. You can use this mode at the beginning of a constrained manipulation task or to hold position while transitioning between two different constrained manipulation tasks. The target pose to hold will be the measured hand pose upon transitioning to constrained manipulation or upon switching to this task type. This mode should only be used during constrained manipulation tasks, since it uses impedance control to hold the hand in place. This is not intended to stop the arm during position control moves.
Used in:
,Used in:
,Type and type-specific specifications of this parameter.
This parameter is actually a set of sub-parameters. Useful for setting up a parameter hierarchy, e.g. param A / \ / \ param A.B param A.C
This parameter is a list of things.
Collection of both specifications and values. Meant to be used as a snapshot of specifications offered by a service, and the values chosen by a user.
Used in:
,Errors specific to the use of custom parameters.
Used in:
, , , , , , ,List of error messages from this parameter and its children
Used in:
Invalid, do not use.
No problems!
The combination of parameters was invalid.
One or more of the children parameters is unsupported by the service.
One or more of the parameters had an invalid value.
One or more of the parameters had an invalid type (e.g. a string when an int was needed).
Cylindrical coordinates are a generalization of polar coordinates, adding a height axis. See (http://mathworld.wolfram.com/CylindricalCoordinates.html) for more details.
Used in:
Radial coordinate
Azimuthal coordinate
Vertical coordinate
Description of a data acquisition capability. A data acquisition plugin service will have a set of capabilities for which it can acquire and save the appropriate data.
Used in:
Unique identifier for the data acquisition capability. Used for identification purposes when making acquire data requests.
A human readable name of the data acquisition capability that will be shown on the tablet.
Channel name that will be associated with all data stored in the data buffer through each data acquisition plugin. Metadata acquirers do not specify this field.
The data acquisition plugin service's service name used in directory registration.
Custom parameters supported by this instance of the service.
Capability has live data available via GetLiveData RPC.
Message-style data to add to the log.
Used in:
Timestamp of data in robot clock time. This is required.
A general label for this blob. This is distinct from type_id, which identifies how the blob is to be parsed. In practice, this is often the same as the type_id.
A description of the data's content and its encoding. This is required. This should be sufficient for deciding how to deserialize the data. For example, this could be the full name of a protobuf message type.
Raw data. For example, jpeg data or a serialized protobuf.
Used in:
An individual capture which can be specified in the AcquireData or LiveData request to identify a piece of non-image data to be collected.
Used in:
,Name of the data to be captured. This should match the uniquely identifying name from the DataAcquisitionCapability.
Values passed to the service at capture time. See the DictParam.Spec in DataAcquisitionCapability.
Represents a chunk of (possibly serialized) data. Chunks will be concatenated together to produce a datagram. This is to avoid size limit restrictions in grpc implementations.
Used as request type in: autowalk.AutowalkService.CompileAutowalk, autowalk.AutowalkService.LoadAutowalk, mission.MissionService.LoadMissionAsChunks, mission.MissionService.LoadMissionAsChunks2
Used as response type in: DataAcquisitionStoreService.QueryStoredCaptures, autowalk.AutowalkService.CompileAutowalk, autowalk.AutowalkService.LoadAutowalk, mission.MissionService.GetInfoAsChunks, mission.MissionService.GetMissionAsChunks, mission.MissionService.LoadMissionAsChunks2
Used as field type in:
, , , , , , , , , , , ,The total size in bytes of the datagram that this chunk is a part of.
Bytes in this data chunk. Bytes are sent sequentially.
A DataDescriptor describes a data block which immediately follows it in the file. A corresponding SeriesDescriptor with a matching series_index must precede this in the file.
The series_index references the SeriesDescriptor to which the data following is associated.
The time at which the data is considered to be captured/sampled. E.g., the shutter-close time of a captured image.
Sometimes a visualizer will want to organize message by data timestamp, sometimes by the time messages were published or logged. The additional_indexes field allows extra indexes or timestamps to be associated with each data block for this purpose. Other identifying information may also be used here, such as the PID of the process which originated the data (e.g., for detecting if and when that process restarted). The values in this field should correspond to the labels defined in "additional_index_names" in the corresponding SeriesDescriptor.
An error associated with a particular capture action and piece of data.
Used in:
Identifier for the data to be saved.
Human-readable message describing the error. If a capability was misconfigured, e.g. by an invalid CustomParam in one of the requests, it should show up here.
Custom plugin-specific data about the problem.
A way to identify an individual piece of data stored in the data buffer.
Used in:
, , , , , , , , , , , , , ,The action where the data was acquired.
Data buffer channel associated with the DataBlob. The channel is used to group data across actions by a specific source, and it can be used in queries to retrieve some subset of data. For example, the channel could be "ptz" and queries can be made for all PTZ images.
Data-specific identifier that can optionally be used to disambiguate cases where the action_id and channel are insufficient. For example, you save cropped SpotCAM pano image that are detected as gauges to a "detected_gauges" channel, but want a way to further individually identify them as each specific gauge, so you give each detection a unique data_name.
Unique identifier specified by the Data Acquisition Store service for this individual piece of data. It is a monotonically-increasing value that is incremented for each stored capture. This value is intended to be unique to a robot and not globally unique. We do not guarantee uniqueness pre and post software upgrades or factory resets. This id does not necessarily start at 0.
Description of data matching a given DataQuery.
Used in:
A query for pages containing the desired data.
Used in:
Timespan for data we want to query
Request for pages containing different kinds of data.
return pages of text-messages during the specified timespan
return pages of events
return pages of operator comments during the specified timespan
The message containing the different query parameters which can be applied to the ListData requests.
Used in:
, , , ,Time range to query.
List of action ids to query.
Used in:
Used in:
Deregister the specified E-Stop endpoint registration.
Used as request type in: EstopService.DeregisterEstopEndpoint
Used as field type in:
Common request header
The endpoint to deregister.
ID of the configuration we are registering against.
Used in:
An unknown / unexpected error occurred.
Request succeeded.
Target endpoint did not match.
Registered to wrong configuration.
You cannot deregister an endpoint while the motors are on.
A Descriptor block typically describes a series of messages, but the descriptor at the start of the file describes the contents of the file as a whole, and the descriptor at the end of the file is an index structure to allow efficient access to the contents of the file.
A dictionary of parameters.
Used in:
, , , , , , , , , , , ,Used in:
Used in:
, , , , , , , , ,Each element can have its own type. Dictionaries can even contain dictionaries!
Whether the dict should initially appear hidden/collapsed. For example an "Advanced" section that users infrequently access. The client may ignore this value if there is sufficient screen space.
World object properties describing a dock
Used in:
Consistent id associated with a given dock.
Type of dock.
The frame name for the location of dock origin. This will be included in the transform snapshot.
Availability if the dock can be used
The dock is an unconfirmed prior detection
A 64-bit floating point parameter. Wraps specification-related messages, and contains fields for the value sent by a client.
Used in:
Value should be provided in the same units as defined by the spec.
Used in:
Default value. If unspecified, UIs can pick their own default OR force user to make a selection.
Units of value, default_value, and min_max.
A value sent by the client must be within this minimum and maximum (inclusive). If unset, only limited by system representation. ERROR: It is an error to specify a min_value larger than the max_value.
A directed arrow drawing object.
Used in:
A three dimensional box drawing object.
Used in:
A oval-like capsule drawing object.
Used in:
A cylinder drawing object.
Used in:
A coordinate frame drawing object, describing how large to render the arrows.
Used in:
A line strip drawing object.
Used in:
A set of points drawing object.
Used in:
The drawing and visualization information for a world object.
Used in:
Color of the object.
Label to be drawn at the origin of the object.
Drawn objects in wireframe.
The object to draw, e.g. a Sphere.
A drawable frame (oneof drawable field).
A drawable sphere (oneof drawable field).
A drawable box (oneof drawable field).
A drawable arrow (oneof drawable field).
A drawable capsule (oneof drawable field).
A drawable cylinder (oneof drawable field).
A drawable linestrip (oneof drawable field).
A drawable set of points (oneof drawable field).
The frame name for the drawable object. This will optionally be included in the frame tree snapshot.
RGBA values for color ranging from [0,255] for R/G/B, and [0,1] for A.
Used in:
Red value ranging from [0,255].
/ Green value ranging from [0,255].
Blue value ranging from [0,255].
Alpha (transparency) value ranging from [0,1].
A sphere drawing object.
Used in:
The robot's current E-Stop states and endpoints. A typical robot has several different E-Stops, all which must be "NOT_ESTOPPED" in order to run the robot.
Used in:
Robot clock timestamp corresponding to these readings.
Name of the E-Stop
What kind of E-Stop this message describes.
The state of the E-Stop (is it E-Stopped or not?)
Optional description of E-Stop status.
Used in:
No E-Stop information is present. Only happens in an error case.
E-Stop is active -- robot cannot power its actuators.
E-Stop is released -- robot may be able to power its actuators.
Used in:
Unknown type of E-Stop. Do not use this field.
E-Stop is a physical button
E-Stop is a software process
A message containing information that allows a client to identify a given endpoint host using an ip and a port.
Used in:
,The IP address of the computer hosting this endpoint.
The port number on which the endpoint is provided, between 0 and 65535.
Client request for setting/maintaining an E-Stop system level. After the first CheckIn, must include response to previous challenge.
Used as request type in: EstopService.EstopCheckIn
Used as field type in:
Common request header.
The endpoint making the request.
Challenge being responded to. Don't set if this is the first EstopCheckInRequest.
Response to above challenge. Don't set if this is the first EstopCheckInRequest.
Assert this stop level.
Used in:
Unknown error occurred.
Valid challenge has been returned.
The endpoint specified in the request is not registered.
The challenge and/or response was incorrect.
Configuration of a root / server.
Used in:
, ,EstopEndpoints that are part of this configuration. Unique IDs do not have to be filled out, but can be.
Unique ID for this configuration.
An to the robot software-E-Stop system.
Used in:
, , , , ,Role of this endpoint. Should be a user-friendly string, e.g. "OCU".
Name of this endpoint. Specifies a thing to fill the given role, e.g. "patrol-ocu01"
Unique ID assigned by the server.
Maximum delay between challenge and response for this endpoint prior to soft power off handling. After timeout seconds has passed, the robot will try to get to a safe state prior to disabling motor power. The robot response is equivalent to an ESTOP_LEVEL_SETTLE_THEN_CUT which may involve the robot sitting down in order to prepare for disabling motor power.
Optional maximum delay between challenge and response for this endpoint prior to disabling motor power. After cut_power_timeout seconds has passed, motor power will be disconnected immediately regardless of current robot state. If this value is not set robot will default to timeout plus a nominal expected duration to reach a safe state. In practice this is typically 3-4 seconds. The response is equivalent to an ESTOP_LEVEL_CUT.
EstopEndpoint with some extra status data.
Used in:
The endpoint.
Stop level most recently requested by the endpoint.
Time since a valid response was provided by the endpoint.
The state of the E-Stop system.
Used in:
, ,Invalid stop level.
Immediately cut power to the actuators.
Prepare for loss of actuator power, then cut power.
No-stop level. The endpoint believes the robot is safe to operate.
Status of Estop system.
Used in:
Status for all available endpoints.
Current stop level for the system. Will be the most-restrictive stop level specified by an endpoint, or a stop level asserted by the system as a whole (e.g. if an endpoint timed out).
Human-readable information on the stop level.
This message contains event data for logging to the public timeline.
Used in:
, , , , ,Type of event, typically prefixed with a project or organization, e.g. "bosdyn:startup"
Event description. This is optional.
A description of the source of this event. May be the client name. - Not required to be unique. - Disambiguates the source of similar event types.
Unique identifier. Used to link start and end messages for events with a duration. - Long running events may have separate messages at the start and end, in case the message for the end of the event is lost. - For events without a separate start and end message (in which case both start_time and end time should be specified), the 'id' field will be set by the service during upload, unless the user has already set it. - This id is not tracked internally by the service. It is only used to consume the event timeline. - To be effective, the id value should be generated randomly by the client.
Start and end times for the event: - Some events are instantaneous. For these, set start_timestamp and end_timestamp to the same value and send a single message (without an id). - Some events take time. At the onset, send a message with a unique id, the start time, and type. The end message should include all data from the start message, any additional data, and an end time. If you have the end message, you should not need the start message since it is a strict subset.
The relative importance of the event.
Optional set of event parameters.
Optionally request that the robot try to preserve data near this time for a service log.
Level, or similarly "visibility," "importance," or "weight" of event. - Higher level events will increase the visibility on the event timeline, relative to other events. - In general, higher level events should be more consequential with respect to the robot operation on a per-occurrence basis. - Lower level events should be less consequential on a per-occurrence basis. - Non-critical events may be one of LOW, MEDIUM, or HIGH. UNSET is logically equivalent to LOW level. - Critical events may be either mission or system critical. - System-critical is quasi-reserved for internal robot use, and is used to identify events that directly affect robot status or capability, such as the onset of a critical fault or start of an enabling capability. - Mission-critical is quasi-reserved client use, and is intended for events that directly affect the ability of the robot to "do what the user wants," such as the onset of a service fault or start of an enabling capability.
Used in:
Non-critical events
Critical events
LogPreserveHint may encode a hint to the robot's logging system for whether to preserve internal log data near the time of this event. This could be useful in saving data to be used in a service log to send to Boston Dynamics.
Used in:
,If this this is unset, it is equivalent to LOG_PRESERVE_HINT_NORMAL.
Do not change the robot's default log data preservation behavior in response to this event.
Request that the robot try to preserve data near the time of this event. Log space on the robot is limited, so this does not guarantee that the data will be preserved.
Specification for selecting Events.
Used in:
Requested Events and/or OperatorComments.
Used in:
Timespan for data
True if the number of events returned was limited by query maximum.
True if the number of comments returned was limited by query maximum.
A request for Events and/or OperatorComments over a given time range.
Used in:
Timespan for data we want to query
Return events which match the request.
Return operator comments which match the request.
Maximum number of events to return (limited to 1024).
Maximum number of comments to return (limited to 1024).
Feedback on the current state of a fan power command on the robot.
Used in:
Status is not specified.
Fan Power command succeeded for entire requested duration and is now done.
Fan command is still in effect due to requested duration but has succeeded so far
ERROR: Command stopped before finish due to temperature becoming too high
ERROR: A newer Fan Power Request took over before the full duration of this request was up.
Feedback on the current state of a fan power command on the robot.
Used in:
Status is not specified.
Fan Power command succeeded. May still get overridden later in duration
ERROR: Fan Power command rejected because temperature above safe threshold
The first block in the file should be a DescriptorBlock containing a FileFormatDescriptor. FileFormatDescriptor indicates the file format version and annotations. Annotations describe things like the robot from which the log was taken and the release id. The format of annotation keys should be {project-or-organization}/{annotation-name} For example, 'bosdyn/robot-serial-number'.
Used in:
The version number of the BDDF file.
File/stream-wide annotations to describe the content of the file.
The type of checksum supported by this stream. For BDDF version 1.0.0 this should be SHA1.
The number of bytes used for the BDDF checksum. For BDDF version 1.0.0 this should always be 20, even if CHECKSUM_NONE is used.
Used in:
Checksum type is unspecified. Should not be used.
The writer of this stream is not computing a checksum. The stream checksum at the end of the file will be 160 bits all set to 0.
A 160 bit SHA1 checksum will be included at the end of the stream. This checksum will be computed over all data before digest itself at the end of the stream, and can be used to verify the stream was received uncorrupted.
The current data file format is 1.0.0.
Used in:
As a file is closed, a DescriptorBlock containing a FileIndex should be written. The FileIndex summarizes the data series stored in the file and the location of the block-indexes for each type in the file. Each series is assigned a "series_index" within the file, and this index may be used to index into the repeated fields in this message. E.g., for the series with series_index N, you can access its SeriesIdentifier by accessing element N the of the series_identifiers repeated field.
Used in:
SeriesIdentifier for each series in this file.
The offset from the start of the file of the SeriesBlockIndex block for each series.
The hash of the series_identifier for each series.
The base will move in response to the hand's location, allow the arm to reach beyond its current workspace. If the hand is moved forward, the body will begin walking forward to keep the base at the desired offset from the hand.
(message has no fields)
FollowArmCommand commands provide no feedback.
Used in:
(message has no fields)
Used in:
Optional body offset from the hand. For example, to have the body 0.75 meters behind the hand, use (0.75, 0, 0)
DEPRECATED as of 3.1. To reproduce the robot's behavior of disable_walking == true, issue a StandCommand setting the enable_body_yaw_assist_for_manipulation and enable_hip_height_assist_for_manipulation MobilityParams to true. Any combination of the enable_*_for_manipulation are accepted in stand giving finer control of the robot's behavior.
Information about the foot positions and contact state, on a per-foot basis.
Used in:
,The foot position described relative to the body.
Is the foot in contact with the ground?
Used in:
,Unknown contact. Do not use.
The foot is currently in contact with the ground.
The foot is not in contact with the ground.
Foot specific terrain data. Data may not be valid if the contact state is not CONTACT_MADE.
Used in:
Estimated ground coefficient of friction for this foot.
Reference frame name for vector data.
Foot slip distance rt named frame
Foot slip velocity rt named frame
Ground contact normal rt named frame
Mean penetration (meters) of the foot below the ground visual surface. For penetrable terrains (gravel/sand/grass etc.) these values are positive. Negative values would indicate potential odometry issues.
Standard deviation of the visual surface ground penetration.
* A frame is a named location in space. \ For example, the following frames are defined by the API: \ - "body": A frame centered on the robot's body. \ - "vision": A non-moving (inertial) frame that is the robot's best estimate of a fixed location in the world. It is based on both dead reckoning and visual analysis of the world. \ - "odom": A non-moving (inertial) frame that is based on the kinematic odometry of the robot only. \ Additional frames are available for robot joints, sensors, and items detected in the world. \ The FrameTreeSnapshot represents the relationships between the frames that the robot knows about at a particular point in time. For example, with the FrameTreeSnapshot, an API client can determine where the "body" is relative to the "vision". \ To reduce data bandwidth, the FrameTreeSnapshot will typically contain a small subset of all known frames. By default, all services MUST include "vision", "body", and "odom" frames in the FrameTreeSnapshot, but additional frames can also be included. For example, an Image service would likely include the frame located at the base of the camera lens where the picture was taken. \ Frame relationships are expressed as edges between "parent" frames and "child" frames, with an SE3Pose indicating the pose of the "child" frame expressed in the "parent" frame. These edges are included in the edge_map field. For example, if frame "hand" is 1m in front of the frame "shoulder", then the FrameTreeSnapshot might contain: \ edge_map { \ key: "hand" \ value: { \ parent_frame_name: "shoulder" \ parent_tform_child: { \ position: { \ x: 1.0 \ y: 0.0 \ z: 0.0 \ } \ } \ } \ } \ Frame relationships can be inverted. So, to find where the "shoulder" is in relationship the "hand", the parent_tform_child pose in the edge above can be inverted: \ hand_tform_shoulder = shoulder_tform_hand.inverse() \ Frame relationships can also be concatenated. If there is an additional edge specifying the pose of the "shoulder" relative to the "body", then to find where the "hand" is relative to the "body" do: \ body_tform_hand = body_tform_shoulder * shoulder_tform_hand \ The two properties above reduce data size. Instead of having to send N^2 edge_map entries to represent all relationships between N frames, only N edge_map entries need to be sent. Clients will need to determine the chain of edges to follow to get from one frame to another frame, and then do inversion and concatenation to generate the appropriate pose. \ Note that all FrameTreeSnapshots are expected to be a single rooted tree. The syntax for FrameTreeSnapshot could also support graphs with cycles, or forests of trees - but clients should treat those as invalid representations. \
Used in:
, , , , , , , , , , , ,child_to_parent_edge_map maps the child frame name to the ParentEdge. In aggregate, this forms the tree structure.
ParentEdge represents the relationship from a child frame to a parent frame.
Used in:
The name of the parent frame. If a frame has no parent (parent_frame_name is empty), it is the root of the tree.
Transform representing the pose of the child frame in the parent's frame.
Freeze all joints at their current positions (no balancing control).
(message has no fields)
Freeze command provides no feedback.
Used in:
(message has no fields)
Freeze command request takes no additional arguments.
Used in:
(message has no fields)
The robot command message to specify a basic command that requires full control of the entire robot to be completed.
(message has no fields)
The feedback for the fully body command that will provide information on the progress of the robot command.
Used in:
The feedback message associated with the requested command. Some commands may have an empty feedback message if they do not provide any updates/progress.
Feedback for the stop command request.
Feedback for the freeze command request.
Feedback for the self-right command request.
Feedback for the safe power off command request.
Feedback for the battery change pose command request.
Feedback for the payload estimation command request.
Feedback for the constrained manipulation command request
Feedback for joint level control
The full body request must be one of the basic command primitives.
Used in:
Only one full body command can be requested at a time.
Command to stop the robot.
Command to freeze all joints of the robot.
Command to self-right the robot to a ready position.
Command to safely power off the robot.
Command to put the robot in a position to easily change the battery.
Command to perform payload mass property estimation
Command to perform full body constrained manipulation moves
Activate joint level control
Robot specific command parameters.
/ Move the hand in such a way to point it at a position in the world.
(message has no fields)
Used in:
Current status of the command.
If we are gazing at the target Rotation from the current gaze point to the trajectory's end [radians]
If the hand's position is at the goal. Distance from the hand's current position to the trajectory's end [meters]
If the hand's roll is at the goal. Rotation from the current hand position to the desired roll at the trajectory's end [radians]
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Robot is gazing at the target at the end of the trajectory.
Robot is re-configuring arm to gaze at the target.
The arm has stopped making progress to the goal pose for the tool. Note, this does not cancel the trajectory. For example, if the requested goal is too far away, walking the base robot closer to the goal will cause the arm to continue along the trajectory once it can continue.
Used in:
Point(s) to look at expressed in frame1.
Optional, desired pose of the tool expressed in frame2. Will be constrained to 'look at' the target regardless of the requested orientation.
The transformation of the tool pose relative to the parent link (wrist). If the field is left unset, the transform will default to: The position is wrist_tform_hand.position() [20 cm translation in wrist x]. The rotation is wrist_tform_hand_camera.rotation() [-9 degree pitch about wrist y].
Optional velocity to move the target along the shortest path from the gaze's starting position to the first point in the target trajectory.
Optional Maximum acceleration magnitude of the end-effector. Valid ranges (0, 20]
Optional Maximum linear velocity magnitude of the end-effector. (m/s)
Optional Maximum angular velocity magnitude of the end-effector. (rad/s)
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
STATUS_OK indicates that authentication has succeeded. The 'token' field field will be populated with a session token that can be used to authenticate the user.
STATUS_INVALID_LOGIN indicates that authentication has failed since an invalid username and/or password were provided.
STATUS_INVALID_TOKEN indicates that authentication has failed since the 'token' provided in the request is invalid. Reasons for the token being invalid could be because it has expired, because it is improperly formed, for the wrong robot, the user that the token is for has changed a password, or many other reasons. Clients should use username/password-based authentication when refreshing the token fails.
STATUS_TEMPORARILY_LOCKED_OUT indicates that authentication has failed since authentication for the user is temporarily locked out due to too many unsuccessful attempts. Any new authentication attempts should be delayed so they may happen after the lock out period ends.
Get the active EstopConfig.
Used as request type in: EstopService.GetEstopConfig
Used as field type in:
Common request header.
The 'unique_id' of EstopConfig to get.
Used in:
UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened if UNKNOWN is set.
Success. The token is available.
GetPayloadAuthToken failed because the payload guid & secret do not match any registered payloads.
GetPayloadAuthToken failed because the payload has not been authorized by an admin.
Used in:
UNKNOWN should never be used. An internal DirectoryService issue has happened if UNKNOWN is set.
GetService was successful. The service_entry field is filled out.
GetService failed because the requested service name does not exist.
Used as request type in: DataAcquisitionPluginService.GetServiceInfo, DataAcquisitionService.GetServiceInfo
Common request header
Used as response type in: DataAcquisitionPluginService.GetServiceInfo, DataAcquisitionService.GetServiceInfo
Common response header.
List of capabilities that the data acquisition (plugin) service can collect and save data for.
Used as request type in: DataAcquisitionPluginService.GetStatus, DataAcquisitionService.GetStatus
Common request header
Which acquisition to check the status of.
Used as response type in: DataAcquisitionPluginService.GetStatus, DataAcquisitionService.GetStatus
Common response header
Data that has been successfully saved into the data buffer for the capture action.
A list of data captures which have failed in some way during the action. For example, the data acquisition plugin is unable to communicate to a sensor and responds with a data error for that specific data capture.
Services which failed independent of a particular data id. For example, if a plugin times out or crashes, it could be reported here.
Network compute services which failed independent of a particular data id. For example, if a worker times out or crashes, it could be reported here.
Used in:
[Status]
Data acquisition is still in progress.
Data has been acquired, processing and storage is now in progress.
Data acquisition is complete.
The data acquisition service is cancelling the request.
The data acquisition request was cancelled manually.
[Error - AcquireData]
An error occurred while acquiring, processing, or saving data.
The data collection has passed the deadline for completion.
An error occurred such that we don't even know our status.
[Error - CancelAcquisition]
The cancellation request failed to complete.
[Error - GetStatus]
The request_id does not exist.
Properties related to GPS measurements of our location with respect to the Earth.
Used in:
Used in:
, ,Where the grasp is on the hand. Set to 0 to be a (default) palm grasp, where the object will be pressed against the gripper's palm plate. Set to 1.0 to be a fingertip grasp, where the robot will try to pick up the target with just the tip of its fingers. \ Intermediate values move the grasp location between the two extremes.
Frame name for the frame that the constraints in allowable_orientation are expressed in.
Optional constraints about the orientation of the grasp. This field lets you specify things like "only do a top down grasp," "grasp only from this direction," or "grasp with the gripper upside-down." If you don't pass anything, the robot will automatically search for a good grasp orientation.
Optional parameter on how much the robot is allowed to move the grasp from where the user requested. Set this to be GRASP_POSITION_CONSTRAINT_FIXED_AT_USER_POSITION to get a grasp that is at the exact position you requested, but has less or no automatic grasp selection help in position.
Optional hint about which camera was used to generate the target points. The robot will attempt to correct for calibration error between the arm and the body cameras.
Used in:
Used in:
, , ,CameraMode sets the resolution, frame rate and image format.
Set the image brightness level. Min 0, max 1
Set the image contrast level. Min 0, max 1
Set the image saturation level. Min 0, max 1
Set the image gain level. This parameter is only effective when manual exposure is used. Min 0, max 1
Whether the camera should use auto exposure. Unset is equivalent to setting exposure_auto = true
Manually set the image exposure level. This value is only used if exposure_auto is false. Min 0, max 1
Region of interest for exposure. Specify a spot exposure on a certain part of the image. Only used in auto-exposure mode.
Whether the camera should automatically focus the image. Unset is equivalent to setting focus_auto = true
Manually set the image focus. This value is only used if focus_auto is false. If focus_auto is true, this value will be populated with the current focus value. Min 0, max 1 0 corresponds to focus at infinity, 1 corresponds to a focal point close to the camera.
Region of interest for focus. Only used when in auto-focus mode.
Set to true to draw a rectangle in the image where the focus ROI is. Unset is equivalent to setting draw_focus_roi_rectangle = false
High dynamic range (HDR) mode sets the camera to take multiple frames to get exposure in a large range. HDR will reduce framerate in high-framerate modes.
Set the LED mode.
Brightness of the LED in torch mode. Min = 0, max = 1. Note: A brightness value of 0 is *not* off, but is the minimum brightness. To turn off the LED, set the led_mode to LED_MODE_OFF
Whether the camera should use auto white balance Unset is equivalent to setting white_balance_temperature_auto = true
Set the image gamma level. Min 0, max 1
Manually set the white balance focus. This value is only used if white_balance_temperature_auto is false. Min 0, max 1 0 corresponds to focus at infinity, 1 corresponds to a focal point close to the camera.
Set the image sharpness level. Min 0, max 1
Used in:
MODE_UNKNOWN should not be used.
640x480 pixels.
1280x720 pixels.
1920x1080 pixels.
3840x2160 pixels.
4096x2160 pixels.
4208x3120 pixels.
Used in:
LED_MODE_UNKNOWN should not be used.
Off
Constantly on. Brightness level can be set in the led_torch_brightness field.
The synchronized command message for commanding the gripper to move. A synchronized commands is one of the possible robot command messages for controlling the robot.
(message has no fields)
The feedback for the gripper command that will provide information on the progress of the command.
Used in:
Feedback for the claw gripper command.
The gripper request must be one of the basic command primitives.
Used in:
,Only one command can be requested at a time.
Control opening and closing the gripper.
A set of pages of data which contain specied GRPC request and response messages.
Specification for selecting of GRPC logs.
Used in:
Robot Hardware Configuration, described with the robot skeleton.
Used in:
Robot link and joint description.
Turn off the robot. Same as physical switch.
Power cycle the robot. Same as physical switch.
Control power to the payload ports.
Control power to the hardware Wi-Fi radio.
Robot has audio visual system installed.
Robot is configured with redundant safety stop.
High dynamic range (HDR) modes available. HDR sets the camera to take multiple frames to get exposure in a large range. HDR will reduce framerate in high-framerate modes.
Used in:
(or not set): will not change HDR settings.
HDR disabled
Camera's on-board processor determines how much HDR is needed
Manual HDR enabled (minimum)
Manual HDR enabled (maximum)
Used in:
Unspecified value -- should not be used.
Disable emissions.
Enable emissions.
Rectangular color/greyscale/depth images.
Used in:
,Number of columns in the image (in pixels).
Number of rows in the image (in pixels).
Raw image data.
How the image is encoded.
Pixel format of the image; this will be set even when the Format implies the pixel format.
Used in:
, ,Unknown image format.
Color/greyscale formats. JPEG format.
Uncompressed. Requires pixel_format.
1 byte run-length before each pixel value.
Used in:
, , , ,Unspecified value -- should not be used.
One byte per pixel.
Three bytes per pixel.
Four bytes per pixel.
Little-endian uint16 z-distance from camera (mm).
Big-endian uint16
Description of an image acquisition capability. The image acquisition capabilities will be available through the main data acquisition service on robot and are populated based on all bosdyn.api.ImageService services registered to the robot's directory.
Used in:
The image service's service name used in directory registration.
DEPRECATED as of 3.1.0. Please use "image_sources" below for information regarding the image source associated with the service.
List of image sources reported by the image service (through the ListImageSources RPC).
Rectangular color/greyscale images.
Used in:
, , , ,The time at which the image data was acquired in the robot's time basis.
A tree-based collection of transformations, which will include the transformations to each image's sensor in addition to transformations to the common frames ("vision", "body", "odom"). All transforms within the snapshot are at the acquisition time of the image.
The frame name for the image's sensor source. This will be included in the transform snapshot.
Image data.
Sensor parameters associated with this image capture.
This message is a subset of the ImageResponse message with only the information needed to pass captured images to other services.
Used in:
, , , , ,The image capture contains the image data and information about the state of the camera and robot at the time the image was collected.
The source describes general information about the camera source the image data was collected from.
Image service. If blank, it is assumed to be the robot's default image service.
World object properties describing image coordinates associated with an object or scene.
Used in:
Camera Source of such as "back", "frontleft", etc.
Image coordinates of the corners of a polygon (pixels of x[row], y[col]) in either clockwise/counter clockwise order
A set of keypoints and their associated metadata.
Camera parameters.
Image that produced the data.
Frame name for the object described by image coordinates.
The image request specifying the image source and data format desired.
Used in:
, ,The string name of the image source to get image data from.
Image quality: a number from 0 (worst) to 100 (highest). Note that jpeg quality 100 is still lossy.
Specify the desired image encoding (e.g. JPEG, RAW). If no format is specified (e.g. FORMAT_UNKNOWN), the image service will choose the best format for the data.
Optional specification of the desired image dimensions. If the original image is 1920x1080, a resize_ratio of (2/3) will return an image with size 1280x720 The range is clipped to [0.01, 1] while maintaining the original aspect ratio. For backwards compatibility, a value of 0 means no resizing. Note: this field is not supported by the robot body cameras image service (`image`).
Specify the desired pixel format (e.g. GREYSCALE_U8, RGB_U8). If no format is specified (e.g. PIXEL_FORMAT_UNKNOWN), the image service will choose the best format for the data.
Specify a pixel format that will be used if the format specified in the pixel_format field is invalid. If multiple formats are specified the valid format with the lowest index will be preferred.
Parameters unique to the servicer that do not match any of the above fields. Whether or not these are valid may depend on the values of the above fields.
The image response for each request, that includes image data and image source information.
Used in:
, , ,The image capture contains the image data and information about the state of the camera and robot at the time the image was collected.
The source describes general information about the camera source the image data was collected from.
Return status of the request.
Filled out if status is STATUS_CUSTOM_PARAMS_ERROR.
Used in:
UNKNOWN should never be used. An internal ImageService issue has happened if UNKNOWN is set. None of the other fields are filled out.
Call succeeded at filling out all the fields.
Image source name in request is unknown. Other fields are not filled out.
Failed to fill out ImageSource. All the other fields are not filled out.
There was a problem with the image data. Only the ImageSource is filled out.
The requested image format is unsupported for the image-source named. The image data will not be filled out. Note, if an image request has "FORMAT_UNKNOWN", the service should choose the best format to provide the data in.
The requested pixel format is unsupported for the image-source named. The image data will not be filled out. Note, if an image request has "PIXEL_FORMAT_UNKNOWN", the service should choose the best format to provide the data in.
The requested ratio is out of bounds [0,1] or unsupported by the image service
One or more keys or values in custom_params are unsupported by the image service. See the custom_param_error for details.
Proto for a description of an image source on the robot.
Used in:
, , , ,The name of this image source used to get images.
Number of columns in the image (in pixels).
Number of rows in the image (in pixels).
For depth images, the pixel value that represents a depth of one meter. Depth in meters can be computed by dividing the raw pixel value by this scale factor.
Rectilinear camera model.
The pinhole camera model with the 5 parameter brown Conrady distortion model.
The Kannala-Brandt camera model for modeling fisheye lenses.
The kind of images returned by this image source.
The pixel formats a specific image source supports.
The image formats a specific image source supports.
ImageRequest parameters unique to this source that do not match any of the above fields.
Used in:
Unspecified image type.
Color or greyscale intensity image.
Pixel values represent distances to objects/surfaces.
The Kannala-Brandt camera model, also called the fisheye camera model in OpenCV (https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html) and the equidistant distortion model (https://github.com/ethz-asl/kalibr/wiki/supported-models), fits cameras with fisheye lenses well. The projection and un-projection equations for this model can be found at: https://arxiv.org/pdf/1807.08957.pdf.
Used in:
The camera intrinsics are necessary for describing the KB4 camera matrix.
Used in:
Pinhole intrinsics of the camera.
The Kannala-Brandt distortion coefficients for the camera.
The 5 parameter Brown-Conrady or "radtan" model is used to correct radial and tangential distortions. Original paper: http://close-range.com/docs/Decentering_Distortion_of_Lenses_Brown_1966_may_444-462.pdf We use the opencv convention for naming the distortion coefficients: k1, k2, p1, p2, k3. Here k1, k2, and k3 are radial distortion terms. p1 and p2 are tangential terms.
Used in:
The camera intrinsics are necessary for describing the KB4 camera matrix.
Used in:
Pinhole intrinsics of the camera.
The Brown-Conrady distortion coefficients for the camera.
The camera can be modeled as a pinhole camera described with a matrix. Camera Matrix can be constructed by the camera intrinsics: [[focal_length.x, skew.x, principal_point.x], [[ skew.y, focal_length.y, principal_point.y], [[ 0, 0, 1]]
Used in:
, ,The camera intrinsics are necessary for describing the pinhole camera matrix.
Intrinsic parameters are in pixel space.
Used in:
, ,The focal length of the camera.
The optical center in sensor coordinates.
The skew for the intrinsic matrix.
Used in:
,Image request information.
When only an image source is specified, network compute bridge will choose default values for other request options.
A full image request with the image source name as well as other options.
Image service. If blank, it is assumed to be the robot's default image service.
An individual capture which can be specified in the AcquireData request to identify a piece of image data to be collected.
Used in:
Name of the image service that the data should be requested from.
Options for requesting this particular image.
DEPRECATED as of 3.2.0. Use image_request instead. Specific image source to use from the list reported by the image service within the ImageAcquisitionCapability message.
DEPRECATED as of 3.2.0. Use image_request instead. Specific pixel format to capture reported by the ImageAcquisitionCapability message.
Used in:
Frequency at which IMU packets are expected to arrive.
A set of data packets since the last message.
Name for this imu.
Name of the link the IMU is mounted on. This name matches a link listed in RobotState.kinematic_state.transforms_snapshot.
Position of the IMU in the mounting link frame expressed in the mounting link's frame (m).
Used in:
Linear acceleration of the imu relative to the odom frame expressed in the mounting link's frame (m/s^2).
Angular velocity of the imu relative to the odom frame expressed in the mounting link's frame (rad/s).
Rotation from mounting link to odom frame as reported by the IMU.
Packet timestamp. Note that a given state update may contain many imu packets so this timestamp will be different than the header timestamp for the state message.
A 64-bit integer parameter. Wraps specification-related messages, and contains fields for the value sent by a client.
Used in:
Value should be provided in the same units as defined by the spec.
Used in:
Default value. If unspecified, UIs can pick their own default OR force user to make a selection.
Units of value, default_value, min_value, min_value.
A value sent by the client must be within this minimum and maximum (inclusive). If unset, only limited by system representation. ERROR: It is an error to specify a min_value larger than the max_value.
(message has no fields)
Used in:
(Optional) Contact advice to improve kinematic odometry. This field should either have the same length as number of contacts on the robot (4 for Spot) OR be empty. Incorrectly sized repeateds will return an error.
Usage notes for contact advice. These notes and definitions should be considered BETA and actual implementation may change in future revisions. ContactAdvice acts as hints to the robot's internal state machine determining whether a contact is on the ground. See FootState in robot_state for more details on reported contact states. If a leg is on the ground (CONTACT_MADE): ADVICE_NONE: leg may enter CONTACT_LOST if force sensing falls below threshold ADVICE_IN_CONTACT: no change ADVICE_NOT_IN_CONTACT: leg will enter CONTACT_LOST state on receipt. If a leg is not on the ground (CONTACT_LOST): ADVICE_NONE: leg will enter CONTACT_MADE if any collision is detected on the foot. ADVICE_IN_CONTACT: leg will enter CONTACT_MADE if any collision is detected on the foot. ADVICE_NOT_IN_CONTACT: no change Contact states may be used by the robot to improve state estimation.
Used in:
ADVICE_UNKNOWN should not be used.
No advice. Contact state will be assumed based on force sensing. This is the same behavior that will be used for all legs if contact advice is not provided
Advise robot that the foot is likely in contact with the ground.
Advise robot that the foot is likely not in contact with the ground.
Used in:
Number of UpdateRequest messages received through the stream
Used in:
Command is still active and processing incoming joint requests
An error has occurred and joint requests are no longer being processed
Empty message, no parameters required to activate.
Used in:
(message has no fields)
Used in:
The timestamp (in robot time) when the command will stop executing. This is a required field and used to prevent runaway commands.
(Optional) joint trajectory reference time. See extrapolation_time for detailed explanation. If unspecified, this will default to the time the command is received. If the time is in the future, no extrapolation will be performed until that time (extrapolation never goes backwards in time)
(Optional) joint trajectory extrapolation time. If specified, the robot will extrapolate desired position based on desired velocity, starting at reference_time for at most extrapolation_duration (or until end_time, whichever is sooner)
Commanded joint details
Gains are required to be specified on the first message. After that can be optionally updated by filling out the gains message again. Partial updates of gains are not supported, a full gain set must be specified each time.
user_command_key is optional, but it can be used for tracking when commands take effect on the robot and calculating latencies. Avoid using 0
(Optional) Joint velocity safety limit. Possibly useful during initial development or gain tuning. If the magnitude of any joint velocity passes the threshold the robot will trigger a behavior fault and go into a safety state. Client must power down the robot or clear the behavior fault via the Robot Command Service. Values less than or equal to 0 will be considered invalid and must be sent in every UpdateRequest for use.
Used in:
position error proportional coefficient
velocity error proportional coefficient
Used in:
An unknown / unexpected error occurred.
Steam was accepted and ended normally
[Programming Error]
Request was invalid / malformed in some way.
The robot is not in joint control mode.
[Timesync Error]
The command was received after its end_time had already passed.
The command end time was too far in the future.
JointLimits contain hip joint angles where limb to payload collisions occur.
Used in:
Label identifying the respective limb to which these apply [fr,fl,hr,hl]
(hy, hx) coordinates outlining the hip joint limits where collisions occur between robot hip and payload. Paired vectors must be of equal length. Angles are measured with actual contact. Appropriate margin will be provided in software. Radians. Left legs must have hx > 0. Right legs must have hx < 0.
All legs must have hy > 1.3.
Proto containing the state of a joint on the robot. This can be used with the robot skeleton to update the current view of the robot.
Used in:
This name maps directly to the joints in the URDF.
This is typically an angle in radians as joints are typically revolute. However, for translational joints this could be a distance in meters.
The joint velocity in [m/s].
The joint acceleration in [m/s^2].
This is typically a torque in Newton meters as joints are typically revolute. However, for translational joints this could be a force in Newtons.
A point of interest in an image expressed as a pixel coordinate with associated metadata.
Used in:
The image pixel coordinates of the keypoint.
A binary descriptor representing the keypoint.
The score of this keypoint from the underlying keypoint detector, if applicable.
The diameter in pixels of the local neighborhood used to construct the descriptor.
The orientation of the keypoint, if applicable.
A pair of keypoint sets containing only features in common that have been matched.
The set of common keypoints in a first ("reference") image.
The set of common keypoints in a second ("live") image.
Indices of pairs of matches in the two KeypointSets and their distance measure.
The algorithm used to compute these matches.
Used in:
Keypoints matched by the ORB feature matching algorithm (Oriented FAST and Rotated BRIEF).
Keypoints matched by the LightGlue matching algorithm.
A set of keypoints detected in a single image.
Used in:
,A set of detected keypoints and associated metadata.
The algorithm used to compute this keypoint and its descriptor.
Used in:
Keypoints that consist only of image coordinates. Simple keypoints do not have descriptors.
Keypoints detected by the ORB feature extraction algorithm (Oriented FAST and Rotated BRIEF).
Keypoints detected by the DISK feature extraction algorithm (Discrete Keypoints).
The kinematic state of the robot describes the current estimated positions of the robot body and joints throughout the world. It includes a transform snapshot of the robot’s current known frames as well as joint states and the velocity of the body.
Used in:
, ,Joint state of all robot joints.
Robot clock timestamp corresponding to these readings.
A tree-based collection of transformations. See https://dev.bostondynamics.com/docs/concepts/geometry_and_frames for conceptual documentation on frames. The snapshot will include the following frames: “odom”: An inertial frame that estimates the fixed location in the world (relative to where the robot is booted up) using the kinematics of the robot. “vision”: An inertial frame that estimates the fixed location in the world (relative to where the robot is booted up), and is calculated using visual analysis of the world and the robot’s odometry. “body”: A frame describing the robot body’s position and orientation. The frame’s origin is at the geometric center of the hips with the x-axis pointing from the hip center to the middle of the front hips. “flat_body”: A gravity-aligned frame describing the robot body’s position and orientation. The position is at the robot’s center, and the x/y-axes lie flat in the “odom” frame x-y plane. Specifically, the x-axis is the normalized projection of the robot’s “body” frame x-axis to the “odom” x-y plane. "gpe”: A frame that represents the robot’s ground plane estimate. The full SE(3) pose can be converted into a plane (a point and normal). “feet_center”: A gravity-aligned frame representing the robot's footprint. The position is at the geometric center of the robot's feet. The x-axis is aligned such that it points from the center of the rear feet to the center of the front feet in the x-y plane. For robots with a SpotArm attached, see https://support.bostondynamics.com/s/article/Spot-Arm-specifications-and-concepts conceptual documentation on SpotArm specific frames. The snapshot will also include the following frames: "hand": The hand frame is used by many of the ArmCommand requests available in the API. The origin is slightly in front of the gripper's palm plate and its orientation is aligned with 'arm0.link_wr1'. "arm0.link_wr1": A frame describing the robot's distal wrist link's position and orientation. The origin of the frame is at the end of the link on its rotational axis. It's x-axis is aligned with the rotational axis. All transforms within the snapshot are at the acquisition time of kinematic state.
Velocity of the body frame with respect to vision frame and expressed in vision frame. The linear velocity is applied at the origin of the body frame.
Velocity of the body frame with respect to odom frame and expressed in odom frame. Again, the linear velocity is applied at the origin of the body frame.
Leases are used to verify that a client has exclusive access to a shared resources. Examples of shared resources are the motors for a robot, or indicator lights on a robot. Leases are initially obtained by clients from the LeaseService. Clients then attach Leases to Commands which require them. Clients may also generate sub-Leases to delegate out control of the resource to other services.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,The resource that the Lease is for.
The epoch for the Lease. The sequences field are scoped to a particular epoch. One example of where this can be used is to generate a random epoch at LeaseService startup.
Logical vector clock indicating when the Lease was generated.
The set of different clients which have sent/received the lease.
Details about who currently owns the Lease for a resource.
Used in:
, , ,The name of the client application.
The name of the user.
Describes all information about a specific lease: including the resource it covers, the active lease, and which application is the owner of a lease.
Used in:
The resource name.
The active lease, if any.
The Lease Owner, if there is a Lease.
The robot time when this lease will become stale. A stale lease can be acquired with an AcquireLeaseRequest OR a TakeLeaseRequest, while a lease that is not stale can only be acquired with a TakeLeaseRequest. Leases get marked stale when they haven't been used in a while. If you want to prevent your lease from being marked stale, you need to either: - Periodically send RetainLeaseRequests. - Periodically send valid commands to the robot using the lease. Note that only some types of commands will actually cause explicit lease retention. Commands & RetainLeaseRequests issued with a stale lease will still be accepted. Stale leases, when used, will cause the used lease to no longer be stale. DEPRECATED as of 3.3. Lease staleness is now set by the Keepalive service. This value is only an estimate, and may not be correct if a Keepalive client has changed it. Please use the is_stale flag for an instantaneous report on staleness, or check the GetStatusResponse in the Keepalive service to get a time.
This lease has been marked stale, and may be acquired by another client.
Result for when a Lease is used - for example, in a LeaseRetainer, or associated with a command.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,The current lease owner.
The lease which was attempted for use.
The previous lease, if any, which was used.
The "latest"/"most recent" lease known to the system.
Represents the latest "leaf" resources of the hierarchy.
Used in:
An internal issue occurred.
The Lease was accepted.
The Lease is invalid.
The Lease is older than the current lease, and rejected.
The Lease holder did not check in regularly enough, and the Lease is stale.
The Lease was for an unmanaged resource.
The Lease was for the wrong epoch.
Used in:
The status of the uploaded license for this robot.
Unique license number.
Serial number of the robot this license covers.
The license is not valid for use for any dates before this timestamp.
The license is not valid for use for any dates after this timestamp.
/ Human readable list of licensed features included for this license.
Used in:
, , , ,Used as request type in: NetworkComputeBridge.ListAvailableModels, NetworkComputeBridgeWorker.ListAvailableModels
Common request header
Configuration about which server to use.
Used as response type in: NetworkComputeBridge.ListAvailableModels, NetworkComputeBridgeWorker.ListAvailableModels
Common response header.
Provide list of available models. DEPRECATED as of 3.3. Replaced by AvailableModels.
Optional information about available classes for each model DEPRECATED as of 3.3. Replaced by AvailableModels.
Envelope message for repeated ModelData.
Command status
Used in:
Status is not specified.
Succeeded.
External service not found in the robot's directory.
The call to the external server did not succeed.
A list of elements of given types.
Used in:
Used in:
Each element in the list must follow the specification of the matching type. For example, if element_specs.int_spec is filled out, all values should follow that specification. If element_specs.string_spec is filled out, all values should follow that specification.
Minimum and maximum number of values the client may send (inclusive). If min_number_of_values is 0, the parameter is optional. 0 <= min_number_of_values <= max_number_of_values
Request live data from a DAQ plugin service by DataCapture capability name.
Used as request type in: DataAcquisitionPluginService.GetLiveData, DataAcquisitionService.GetLiveData
Common request header.
Include capability name and parameter values.
Live data response of a DAQ plugin service for a single capability.
Used as response type in: DataAcquisitionPluginService.GetLiveData, DataAcquisitionService.GetLiveData
Common response header.
One entry for each data capture in the request. Order matches LiveDataRequest order.
Used in:
Map of signal id to signal specification and data.
Unique name of the data that is captured.
Filled out if status is STATUS_CUSTOM_PARAMS_ERROR.
Used in:
The capability name is unknown.
See custom_param_error field for details.
Some other problem occurred.
A grid-based local grid structure, which can represent different kinds of data, such as terrain or obstacle data.
Used in:
,The human readable string name that is used to identify the type of local grid data.
The time at which the local grid data was computed and last valid at.
A tree-based collection of transformations, which will include the transformations to each of the returned local grids in addition to transformations to the common frames ("vision", "body", "odom"). All transforms within the snapshot are at the acquisition time of the local grid.
The frame name for the local grid data. This frame refers to the corner of cell (0, 0), such that the map data is in the +x, +y quadrant. The cell data is packed in x-y order, so the cell at: data[xi + extent.num_cells_x * yj] has its center at position: {(xi + 0.5) * extent.cell_size, (yj + 0.5) * extent.cell_size}.
Location, size and resolution of the local grid.
The data type of all individual cells in the local grid.
The encoding for the 'data' field of the local grid message.
The encoded local grid representation. Cells are encoded according to the encoding enum, and are stored in in row-major order (x-major). This means that the data field has data entered row by row. The grid cell located at (i, j) will be at the (index = i * num_cells_x + j) within the data array.
RLE pixel repetition counts: use data[i] repeated rle_counts[i] times when decoding the bytes data field.
The scale for the cell value data; only valid if it is a non-zero number.
A fixed value offset that is applied to each value of the cell data. Actual values in local grid are: (({value from data} * cell_value_scale) + cell_value_offset).
Map of unknown cells. If unknown_cells[i] = 0, then data[i] is known. If unknown_cells[i] = 1, then data[i] is unknown. Each cell is encoded as a uint8_t. Cells are stored in row-major order (x-major). This means that the data field has data entered row by row. The grid cell located at (i, j) will be at the (index = i * num_cells_x + j) within the data array.
Describes the data type of a cell.
Used in:
Not specified -- not a valid value.
Each cell of the local grid is encoded as a little-endian 32-bit floating point number.
Each cell of the local grid is encoded as a little-endian 64-bit floating point number.
Each cell of the local grid is encoded as a signed 8-bit integer.
Each cell of the local grid is encoded as an unsigned 8-bit integer.
Each cell of the local grid is encoded as a little-endian signed 16-bit integer.
Each cell of the local grid is encoded as a little-endian unsigned 16-bit integer.
Encoding used for storing the local grid.
Used in:
Not specified -- not a valid value.
Cells are stored packed uncompressed.
Run-length encoding: repeat counts stored in rle_counts.
Information about the dimensions of the local grid, including the number of grid cells and the size of each cell.
Used in:
Size of each side of the individual cells in the local grid (in meters). The area of a grid cell will be (cell_size x cell_size).
Number of cells along x extent of local grid (number of columns in local grid/ the local grid width). Note, that the (num_cells_x)x(num_cells_y) represents the total number of grid cells in the local grid.
Number of cells along y extent of local grid (number of rows in local grid). Note, that the (num_cells_x)x(num_cells_y) represents the total number of grid cells in the local grid.
LocalGrids are requested by LocalGridType string name.
Used in:
The local grid response message will contain either the local grid or an error status.
Used in:
The type name of the local grid included in this response.
Status of the request for the individual local grid.
The requested local grid data.
Used in:
Not specified -- not a valid value.
LocalGrid was returned successfully.
The requested local grid-type is unknown.
The request local grid data is not available at this time.
The local grid data was not valid for some reason.
Representation of an available type of local grid.
Used in:
Used in:
Used in:
Note: if you are experiencing raycast failures during grasping, consider using a different grasping call that does not require the robot to automatically walk up to the grasp.
The grasp planner is waiting for the gaze to have the target object not on the edge of the camera view. If you are seeing this in an automatic mode, the robot will soon retarget the grasp for you. If you are seeing this in a non-auto mode, you'll need to change your gaze to have the target object more in the center of the hand-camera's view.
/ Additional state published if an arm is attached to the robot.
Used in:
How open the gripper is, measured in percent. 0 = fully closed, 100 = fully open.
/ Will be true if the gripper is holding an item, false otherwise.
The estimated force on the end-effector expressed in the hand frame.
/ Information on if the arm is stowed, or deployed.
Velocity of the hand frame with respect to vision frame and expressed in vision frame. The linear velocity is applied at the origin of the hand frame.
Velocity of the hand frame with respect to odom frame and expressed in odom frame. Again, the linear velocity is applied at the origin of the hand frame.
The stowing behavior is modified as a function of the Carry State. If holding an item, the stowing behavior will be modified as follows: NOT_CARRIABLE - The arm will not stow, instead entering stop CARRIABLE - The arm will not stow, instead entering stop CARRIABLE_AND_STOWABLE - The arm will stow while continuing to grasp the item The comms loss behavior of the arm is also modified as follows: NOT_CARRIABLE - The arm will release the item and stow CARRIABLE - The arm will not stow, instead entering stop CARRIABLE_AND_STOWABLE - The arm will stow while continuing to grasp the item
Used in:
,Used in:
Used in:
The index in the reference KeypointSet of the keypoint in the matching pair.
The index in the live KeypointSet of the keypoint in the matching pair.
The distance in descriptor space between the two keypoints.
Represents a row-major order matrix of doubles.
Used in:
Represents a row-major order matrix of int32.
Represents a row-major order matrix of int64.
Represents a row-major order matrix of floats.
Used in:
, ,If a data series contains a sequence of binary messages, the encoding and format of these messages is described by a MessageTypeDescriptor.
Used in:
Description of the content type. E.g., "application/protobuf", "image/jpeg", "text/csv", ...
If content_type is "application/protobuf", this is the full-name of the protobuf type.
If true, message contents are necessary for interpreting other messages. If the content of this file is split into multiple output files, these messages should be copied into each.
Structured data that can be included within a AcquireData RPC and saved in association with that capture action.
Used in:
, , ,JSON representation of metadata.
The robot command message to specify a basic command that moves the robot.
(message has no fields)
The feedback for the mobility command that will provide information on the progress of the robot command.
Used in:
The feedback message associated with the requested command. Some commands may have an empty feedback message if they do not provide any updates/progress.
Feedback for the trajectory command.
Feedback for the velocity command.
Feedback for the sit command.
Feedback for the stand command.
The mobility request must be one of the basic command primitives.
Used in:
Only one mobility command can be requested at a time.
Command to move the robot along a trajectory.
Command to move the robot at a fixed velocity.
Command to sit the robot down.
Command to stand up the robot.
Robot specific command parameters.
Used in:
The model name used should match a name specified here.
List of class labels returned by this model (optional).
An ordered list of what types of outputs this NCB model generates. This can be used by clients to determine which NCB images to display first at action configuration time. It's ok for the NCB worker to return a different set of outputs (more / fewer) than specified here.
Per-model parameters.
Used in:
,Model name.
List of class labels returned by this model.
Structure describing the moment of inertia of a body. The xx, yy, zz fields are the diagonal of the MOI tensor, and the xy, xz, and yz fields are the off diagonal terms.
Used in:
Used in:
Name of the affected motor of the robot, specified by the joint name and degree of freedom.
Measured temperature of the motor, in Celsius.
Payloads are defined relative to a frame on the robot. These are the possible frames.
Used in:
,This is the default. For backwards compatibility, we assume unknown means body mount frame.
The body payload mount frame, as defined in documentation.
The gripper payload mount frame, as defined in documentation.
The wrist link frame, as defined in the gripper CAD and documentation.
Used in:
Invalid action.
Add a new object.
Change an existing objected (ID'd by integer ID number). This is only allowed to change objects added by the API-user, and not objects detected by Spot's perception system.
Delete the object, ID'd by integer ID number. This is only allowed to change objects added by the API-user, and not objects detected by Spot's perception system.
Used in:
The action (add, change, or delete) to be applied to a world object.
World object to be mutated. If an object is being changed/deleted, then the world object id must match a world object id known by the service.
Used in:
Status of request is unknown. Check the status code of the response header.
Request was accepted; GetObjectListResponse must still be checked to verify the changes.
The mutation object's ID is unknown such that the service could not recognize this object. This error applies to the CHANGE and DELETE actions, since it must identify the object by it's id number given by the service.
The mutation request is not allowed because it is attempting to change or delete an object detected by Spot's perception system.
The mutation request is not allowed because some aspect of the world object is invalid. For example, something could be defined in an unallowed reference frame.
Command the arm move to a predefined configuration.
(message has no fields)
Used in:
Current status of the request.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
The arm is at the desired configuration.
Robot is re-configuring arm to get to desired configuration.
Some requests may not execute if the gripper is holding an item declared not stowable, e.g. POSITIONS_STOW with carry_state == CARRY_STATE_CARRIABLE. In these situations, Spot will instead run an ArmStopCommand request while the blocking condition remains true. Clearing the condition will cause the request to proceed and the arm will start moving.
Used in:
Invalid request; do not use.
The carry position is a damped, force limited position close to stow, with the hand slightly in front of the robot.
Move arm to ready position. The ready position is defined with the hand directly in front of and slightly above the body, with the hand facing forward in the robot body +X direction.
Stow the arm, safely. If the robot is holding something, it will freeze the arm instead of stowing. Overriding the carry_state to CARRY_STATE_CARRIABLE_AND_STOWABLE, will allow the robot to stow the arm while grasping an item.
Used in:
Used in:
Service information.
Provide list of available models. DEPRECATED as of 3.3. Replaced by AvailableModels.
Information about available classes for each model. DEPRECATED as of 3.3. Replaced by AvailableModels.
Envelope message for repeated ModelData.
Used in:
Data source and model.
DEPRECATED as of 3.3. Please use input_data_bridge instead.
Which service to use.
Used in:
Name of the service with the error
General type of error that occurred.
Any particular failure mode reported.
Description of the error.
Used in:
The request was rejected.
The request had an error reaching the worker.
Some other problem prevented the request from succeeding.
Used in:
,Image source to collect an image from.
Image to process, if you are not using an image source.
Other data that isn't an image. NetworkComputeBridge service will pass it through to the remote server so you can do computation on arbitrary data.
Name of the model to be run on the input data.
Minimum confidence [0.0 - 1.0] an object must have to be returned. Detections below this confidence threshold will be suppressed in the response.
Options for rotating the image before processing. When unset, no rotation is applied. Rotation is supported for data from image services that provide a FrameTreeSnapshot defining the sensor's frame with respect to Spot's body and vision frames. Field is ignored for non-image input. DEPRECATED as of 3.3. Please rotate the image client-side before passing it to NCB worker.
Used in:
Unspecified rotation method. Do not use.
No rotation applied.
Rotate the images so the horizon is not rolled with respect to gravity.
Rotate the images so that the horizon in the image is aligned with the inclination of the body. For example, when applied to the left body camera this option rotates the image so that the world does not appear upside down when the robot is standing upright, but if the body is pitched up, the image will appear rotated.
* The network compute bridge will receive this input data, and convert it to a [NetworkComputeInputDataWorker] before sending an RPC to the network compute bridge worker.
Used in:
,Image sources to collect a number of images from. The ImageResponses will populate the [images] field in [NetworkComputeInputDataWorker].
* The network compute bridge worker will receive this input data.
Used in:
Live images (usually) filled out by NetworkComputeBridge right before NCB worker is called.
Input data.
Used as request type in: NetworkComputeBridge.NetworkCompute, NetworkComputeBridgeWorker.NetworkCompute
Common request header.
There are two forms of input for NetworkComputeRequest. Input | Worker has NetworkCompute | Worker has WorkerCompute | Result ------------------+---------------------------+--------------------------+------- input_data | True | True | 1 input_data | True | False | 2 input_data | False | True | 3 input_data_bridge | True | True | 4 input_data_bridge | True | False | 5 input_data_bridge | False | True | 6 -------------+--------------------------------+--------------------------+------- Notes: If the client specifies the old deprecated input_data field, the NetworkComputeBridge will responds with the older output format. This is because the NetworkComputeBridge does not know if the client can handle the new output format. 1. NetworkComputeBridge will call the worker's deprecated [NetworkCompute] RPC, and use deprecated output fields. 2. NetworkComputeBridge will call the worker's deprecated [NetworkCompute] RPC, and use deprecated output fields. 3. Returns an RPC error. This row represents older clients talking to newer workers. Upgrade the client in this cast. 4. NetworkComputeBridge will call the [WorkerCompute] RPC, and use the new output fields. 5. NetworkComputeBridge will call the [WorkerCompute] RPC which will return an Unimplemented error. The NetworkComputeBridge will then silently gobble up that error, call the worker's old deprecated [NetworkCompute] RPC, and convert the output of that RPC to the new format. 6. NetworkComputeBridge will call the [WorkerCompute] RPC, and use the new output fields.
Input data. DEPRECATED as of 3.3, use input_data_bridge instead.
Configuration about which server to use.
Used as response type in: NetworkComputeBridge.NetworkCompute, NetworkComputeBridgeWorker.NetworkCompute
Common response header.
Detection information. May include bounding boxes, image coordinates, 3D pose information, etc. DEPRECATED as of 4.0. Use object_in_image field in OutputImage instead.
The image we computed the data on. If the input image itself was provided in the request, this field is not populated. This field is not set for non-image input. DEPRECATED as of 3.3. Use image_responses instead.
The image we computed the data on. This field is not set for non-image input.
If the image was rotated for processing, this field will contain the amount it was rotated by (counter-clockwise, in radians). Note that the image returned is *not* rotated, regardless of if it was rotated for processing. This ensures that all other calibration and metadata remains valid. DEPRECATED as of 3.3. Please rotate the image client-side before passing it to NCB worker.
Non image-type data that can optionally be returned by a remote server.
Command status
Filled out if status is NETWORK_COMPUTE_STATUS_CUSTOM_PARAMS_ERROR.
Optional field to indicate an alert detected by this model. Note that this alert will be reported for this entire response (including all output images). If you have multiple output images and only want to alert on a specific image, use the alert_data field in the associated OutputImage message. DEPRECATED as of 3.3. Use alert_data in OutputImage instead.
Optional field to output images generated by this model. Maps name to OutputImage.
Information computed about the regions of interest by the worker. DEPRECATED as of 3.3. Support for non-image products will be added in the future.
Used in:
, , ,Service name in the robot's Directory for the worker that will process the request.
Used in:
, ,Status is not specified.
Succeeded.
External service not found in the robot's directory.
The call to the external server did not succeed.
The robot failed to rotate the image as requested.
One or more keys or values in the input custom_params are unsupported by the service. See the custom_param_error for details.
Transient error to indicate that the model failed to analyze the set of input images, but a retry might work.
A box or circle no-go region
Used in:
Define the geometry of the region. Note that currently, these regions may only be defined in the Vision world frame, or Odometry world frame.
If set true, will NOT create a foot obstacle for this region.
If set true, will NOT create a body obstacle for this region.
If set true, and a foot obstacle is being generated, will make the foot obstacle the exact size specified in the "region" field and NOT inflate by approx. robot foot width.
A selected param from one of several options. Can be useful to specify parameters that have correlations. Example 1 - A camera that advertises an "exposure" parameter: OneOf Option 1: Auto exposure [no additional parameters] OneOf Option 2: Manual exposure [additional exposure double parameter from 0 - 100 ms] Example 2 - A NCB worker that will alert if temperature outside a specified bound: OneOf Option 1: No alert [no additional parameters] OneOf Option 2: Alert if above max [additional max_temp parameter] OneOf Option 3: Alert if below min [additional min_temp parameter] OneOf Option 4: Alert if above max or below min [additional max_temp and min_temp parameters] In the above examples, the service advertises a OneOf spec, the UI lets user PICK which child of the OneOf they want, and then the UI lets the user specify any child specific parameters.
Used in:
The values of the chosen spec will is guaranteed to be at value[key]. The values of the other specs might at value[that_specs_key], but no guarantees.
Used in:
Used in:
What options are available. Only one will be specified by the user. If an option has no additional parameters, its spec should be an empty DictParam.Spec.
Which option to start selected. If left blank, UI will pick one for you.
An operator comment to be added to the log. These are notes especially intended to mark when logs should be preserved and reviewed to ensure that robot hardware and/or software is working as intended.
Used in:
,String annotation message to add to the log.
The timestamp of the annotation. This must be in robot time. If this is not specified, this will default to the time the server received the message.
Two-dimensional box with an angle
Used in:
Used in:
Optional metadata related to this image/region.
Optional detection information. May include bounding boxes, image coordinates, 3D pose information, etc.
Optional alert related to this image/region.
Optional data of a custom type.
Used in:
,Annotated image showing process/end results.
Optional metadata related to this image.
Optional detection information. May include bounding boxes, image coordinates, 3D pose information, etc.
Optional alert related to this image.
Information about the output of an NCB worker.
Used in:
This string corresponds to the key in `output_images`
A human readable name for this output_image.
A unit of data storage. This may be a bddf data file. Like a file, this data may be downloaded or deleted all together for example.
Used in:
, , ,Identifier unique to robot.
Relative path to file, if file storage.
Name of service/client which provided the data.
Time range of the relevant data in the page.
Number of time samples or blobs.
Total size of data in the page.
True if data is still being written into this page, false if page is complete.
True if data is marked as having been downloaded.
If this exists, the page was deleted from the robot at the specified time.
If this exists, download from this page was started at the specified time.
True if data has been requested to be preserved.
Used in:
Not set -- do not use.
Data is not compressed.
Data uses gzip compression.
Data uses zstd compression.
Used in:
Unset -- do not use.
Data is stored in a .bddf file
A set of pages and the associated time range they cover.
Used in:
A generic parameter message used by the robot state service to describe different, parameterized aspects of the robot.
Used in:
, , , ,Name of parameter.
Units of parameter value.
Value of a countable measure.
Value of a continuous measure.
A point in time.
A time duration.
Value as a string.
Value as true/false.
Unsigned integer
Description of the parameter or its value.
A Payload describes a single payload installed on the Spot platform. It includes all external information necessary to represent the payload to the user as a single record.
Used in:
, , ,A unique id provided by the payload or auto-generated by the website.
A human readable name describing this payload. It is provided by the payload as part of the payload announcement system.
A human-readable description string providing more context as to the function of this payload. It is displayed in UIs.
A list of labels used to indicate what type of payload this is.
Set true once the payload is authorized by the administrator in the payload webpage. Must be set to false at registration time.
Set true if the payload is attached to the robot. Must be set to false at registration time.
Set true for payloads registered without their own computers. These records are all manually entered.
Payload version details.
The pose of the payload relative to the body frame.
The pose of the payload relative to the mount frame.
Optional - mount frame_name (if not included, payload is assumed to be in the body mount frame)
Number of seconds to wait between heartbeats before assuming payload is no longer live If unset (0) liveness checks will be disabled for this service.
IP address of the payload for the robot to ping If left empty, assume that the payload will send heartbeats
In mbps (10, 100, 1000, etc)
The mass and volume properties of the payload.
A list of possible physical configurations for the payload.
PayloadCredentials are used to authorize a payload.
Used in:
, ,The GUID of the payload.
The secret of the payload.
Command the robot to stand and execute a routine to estimate the mass properties of an unregistered payload attached to the robot.
(message has no fields)
The PayloadEstimationCommand provides several pieces of feedback: - If the routine is finished running (and its current progress). - If the routine encountered any errors while running. - The resulting payload estimated by the routine.
Used in:
Status of the estimation routine.
The approximate progress of the routine, range [0-1].
Error status of the estimation routine.
The resulting payload estimated by the estimation routine.
Used in:
No error has occurred.
Robot failed to stand/change stance.
Failed to calculate results.
Used in:
Completed estimation routine successfully; estimated_payload is populated.
Completed estimation routine successfully, but estimated mass is small enough to not significantly impact mobility; estimated_payload is empty.
Estimation routine is currently running; estimated_payload is empty.
Error occurred during the routine; estimated_payload is empty.
PayloadEstimation command request takes no additional arguments. The estimation routine takes about ~1min to run. Subsequent PayloadEstimationCommand requests issued while the routine is in progress are ignored until the routine is completed.
Used in:
(message has no fields)
PayloadMassVolumeProperties contain mass and volume information for the payload in the format that the user interacts with it. It is transmitted to the control and perception systems and processed there to inform those systems.
Used in:
,Total mass of payload in kg.
Position of the center of mass of the payload in the payload frame. Meters.
The moment of inertia of the payload, represented about the payload center of mass, in the payload frame. Units in [kg*m^2].
Zero or more bounding boxes indicating the occupied volume of the payload. These boxes must be represented in the payload frame by specifying Must have Box3WithFrame.frame_name == "payload".
Joint limits defining limits to range of motion of the hips of the robot, in order to prevent collisions with the payload. This field is optional and is only recommended for advanced development purposes.
The physical configurations for the payload.
Used in:
A human readable name describing this configuration. It is displayed in the admin console, but will not overwrite the top level payload name.
A human-readable description providing context on this configuration. It is displayed in the admin console.
The pose of the payload relative to the body frame.
Optional - mount frame_name (if not included, payload is assumed to be in the body mount frame)
The mass and volume properties of the payload.
A list of labels used to indicate what type of payload this is.
Used in:
Name of the frame you want to give your input in.
Pickup an object at the location, given in the frame named above.
Optional parameters for the grasp.
No data
Used in:
(message has no fields)
Used in:
Pickup an object that is at a pixel location in an image.
A tree-based collection of transformations, which will include the transformations to each image's sensor in addition to transformations to the common frames ("vision", "body", "odom"). All transforms within the snapshot are at the acquisition time of the image.
The frame name for the image's sensor source. This must be included in the transform snapshot.
Camera model.
Optional parameters for the grasp.
Automatic walking / gazing configuration. See detailed comment in the PickObjectRayInWorld message.
Used in:
Cast a ray in the world and pick the first object found along the ray. \ This is the lowest-level grasping message; all other grasp options internally use this message to trigger a grasp. \ Example: You see the object you are interested in with the gripper's camera. To grasp it, you cast a ray from the camera out to 4 meters (well past the object). \ To do this you'd set: \ ray_start_rt_frame: camera's position \ ray_end_rt_frame: camera's position + unit vector along ray of interest * 4 meters
Name of the frame the above parameters are represented in.
Optional parameters for the grasp.
Configure if the robot should automatically walk and/or gaze at the target object before performing the grasp. \ 1. If you haven't moved the robot or deployed the arm, use PICK_AUTO_WALK_AND_GAZE \ 2. If you have moved to the location you want to pick from, but haven't yet deployed the arm, use PICK_AUTO_GAZE. \ 3. If you have already moved the robot and have the hand looking at your target object, use PICK_NO_AUTO_WALK_OR_GAZE. \ If you are seeing issues with "MANIP_STATE_GRASP_FAILED_TO_RAYCAST_INTO_MAP," that means that the automatic system cannot find your object when trying to automatically walk to it, so consider using PICK_AUTO_GAZE or PICK_NO_AUTO_WALK_OR_GAZE.
Plane primitive, described with a point and normal.
A point on the plane.
The direction of the planes normal.
An error associated with a particular data acquisition plugin service that was
Used in:
Name of the service with the error
Failure mode.
Description of the error.
Possible ways a plugin can fail.
Used in:
The initial RPC to the plugin failed
The GetStatus request to the plugin failed with a data error or timeout.
The plugin reported an internal error.
If a data series contains signals-style data of time-sampled "plain old datatypes", this describes the content of the series. All POD data stored in data blocks is stored in little-endian byte order. Any number of samples may be stored within a given data block.
Used in:
The type of machine-readable values stored.
If empty, indicates a single POD per sample. If one-element, indicates a vector of the given size per sample. If two-elements, indicates a matrix of the given size, and so on. An M x N x .. x P array of data is traversed from innermost (P) to outermost (M) dimension.
"Plain old data" types which may be stored within POD data blocks.
Used in:
Data from a point-cloud producing sensor or process.
Used in:
,The sensor or process that produced the point cloud.
The number of points in the point cloud.
Representation of the underlying point cloud data.
Constants needed to decode the point cloud.
Raw byte data representing the points.
Point clouds may be encoded in different ways to preserve bandwidth or disk space.
Used in:
The point cloud has an unknown encoding.
Each point is x,y,z float32 value (12 bytes, little-endian) stored sequentially. This allows the point cloud to be expressed in any range and resolution represented by floating point numbers, but the point cloud will be larger than if one of the other encodings is used.
Each point is 3 signed int8s plus an extra shared signed int8s (4 byte). byte layout: [..., p1_x, p1_y, p1_z, x, ...] Each coordinate is mapped to a value between -1 and +1 (corresponding to a minimum and maximum range). The resulting point is: P = remap(p1 * f + p2, c * f, m) Where: p1 = the highest byte in each dimension of the point. p2 = a vector of "extra" bytes converted to metric units. = [mod (x, f), mod(x/f, f), mod(x/(f^2), f)] - f/2 x = the "extra" byte for each point. f = An integer scale factor. m = [max_x, max_y, max_z], the point cloud max bounds in meters. c = a remapping constant. And: remap(a, b, c) = (a + b)/(2 * b) - c Point clouds use 1/3 the memory of XYZ_32F, but have limits on resolution and range. Points must not lie outside of the box of size [-m, m]. Within that box, the resolution of the point cloud will depend on the encoding parameters. For example if m = [10, 10, 10], and f = 5 with c = 127 the resolution is approximately 1.5 cm per point.
Each point is 3 signed int8s plus two extra shared signed int8s (5 byte). The encoding is the same as XYZ_4SC, except the "extra" value x is a 16 bit integer. This encoding has roughly double the resolution of XYZ_4SC, but takes up an additional byte for each point.
Parameters needed to decode the point cloud.
Used in:
Used in the remapping process from bytes to metric units. (unitless)
In XYZ_4SC and XYZ_5SC, the point cloud is assumed to lie inside a box centered in the data frame. max_x, max_y, max_z are half the dimensions of that box. These dimensions should be assumed to be meters.
max_y is half the dimensions of the assumed box (for XYZ_4SC and XYZ_5SC). These dimensions should be assumed to be meters.
max_z is half the dimensions of the assumed box (for XYZ_4SC and XYZ_5SC). These dimensions should be assumed to be meters.
Used in the remapping process from bytes to metric units. (unitless) For XYZ_4SC and XYZ_5C, this should equal 127.
Number of bytes in each point in this encoding.
Used in:
Name of the point cloud source to request from.
Used in:
Return status for the request.
The current point cloud from the service.
Used in:
UNKNOWN should never be used. An internal PointCloudService issue has happened if UNKNOWN is set. None of the other fields are filled out.
Call succeeded at filling out all the fields.
Failed to fill out PointCloudSource. All the other fields are not filled out.
There was a problem with the point cloud data. Only the PointCloudSource is filled out.
Provided point cloud source was not found. One
Information about a sensor or process that produces point clouds.
Used in:
,The name of the point cloud source. This is intended to be unique across all point cloud sources, and should be human readable.
The frame name of the sensor. The transformation from vision_tform_sensor can be computed by traversing the tree in the FrameTreeSnapshot.
Time that the data was produced on the sensor in the robot's clock.
A tree-based collection of transformations, which will include the transformations to the point cloud data frame and the point cloud sensor frame.
Multi-part, 1D line segments defined by a series of points.
Polygon in the XY plane. May be concave, but should not self-intersect. Vertices can be specified in either clockwise or counterclockwise orders.
Used in:
, ,Represents a region in the XY plane that consists of a single polygon from which polygons representing exclusion areas may be subtracted. A point is considered to be inside the region if it is inside the inclusion polygon and not inside any of the exclusion polygons. Note that while this can be used to represent a polygon with holes, that exclusions are not necessarily holes: An exclusion polygon may not be completely inside the inclusion polygon.
Parameters for how positional trajectories will be interpolated on robot.
Used in:
, , ,Unknown interpolation, do not use.
Linear interpolation for positional data.
Cubic interpolation for positional data.
Commands for the robot to execute. Note that not all Spot robots are compatible with all these commands. Check your robot's HardwareConfiguration in bosdyn.api.robot_state.
Used in:
,Invalid request; do not use.
Cut power to motors immediately.
Turn on power to the robot motors.
Cut power to motors immediately.
Turn on power to the robot motors.
Turn off the robot. Same as physical switch.
Power cycle the robot. Same as physical switch.
Cut power to the payload ports.
Turn on power to the payload ports.
Cut power to the hardware Wi-Fi radio.
Power on the hardware Wi-Fi radio.
Feedback on the current state of a power command on the robot.
Used in:
,Status is not specified.
Power command is executing.
Power command succeeded.
ERROR: Robot cannot be powered on while on wall power.
ERROR: Battery not inserted into robot.
ERROR: Power command cant be overwritten.
ERROR: Cannot power on while estopped. A robot may have multiple estops. Inspect EStopState for additional info.
ERROR: Cannot power due to a fault. Inspect FaultState for more info.
ERROR: Internal error occurred, may be clear-able by issuing a power off command.
ERROR: License check failed. Check license_status field for details.
ERROR: The Spot hardware is not compatible with the request request.
ERROR: Robot has overridden the power command and disabled motor power. In the case of a commanded power OFF, robot will report SUCCESS if power is disabled.
ERROR: Cannot power on while a Keepalive policy with a motors-off action is active. See the Keepalive API service for more details.
The power state for the robot. If a robot is not in the POWER OFF state, if is not safe to approach. The robot must not be E-Stopped to enter the POWER_ON state.
Used in:
Robot clock timestamp corresponding to these readings.
The motor power state of the robot.
The shore power state of the robot.
The payload ports power state of the robot.
The payload ports power state of the robot.
The hardware radio power state of the robot.
Number from 0 (empty) to 100 (full) indicating the estimated state of charge. This field provides a summary of the BatteryStates that provide power for motor and/or base compute power, both of which are required for locomotion.
An estimate of remaining runtime. Note that this field might not be populated. This field provides a summary of the BatteryStates that provide power for motor and/or base compute power, both of which are required for locomotion.
Used in:
Unknown motor power state. Do not use this field.
Motors are off, the robot is safe to approach.
The motors are powered.
The robot has received an ON command, and is turning on.
In the process of powering down, not yet safe to approach.
The robot is in an error state and must be powered off before attempting to re-power.
State describing if the payload port has power.
Used in:
Unknown payload port power state. Do not use this field.
The payload port is powered on.
The payload port does not have power.
State describing if the robot has power.
Used in:
Unknown robot power state. Do not use this field.
The robot is powered on.
The robot does not have power. Impossible to get this response, as the robot cannot respond if it is powered off.
State describing if robot is connected to shore (wall) power. Robot can't be powered on while on shore power
Used in:
Unknown shore power state. Do not use.
The robot is connected to shore power. The robot will not power on while connected to shore power.
The robot is disconnected from shore power and motors can be powered up.
State describing if the robot Wi-Fi router has power.
Used in:
Unknown radio power state. Do not use this field.
The radio is powered on.
The radio does not have power.
Used in:
Pound-force per square inch
KiloPascal
Bar
A square oriented in 3D space.
The center of the quad and the orientation of the normal. The normal axis is [0, 0, 1].
The side length of the quad.
Quaternion primitive. A quaternion can be used to describe the rotation.
Used in:
, , , ,Used in:
, ,Time range to query.
List of action ids to query. The constructed query statement will have an OR relation between the action_ids specified in this list, with an AND relation for the fields inside each action_id. For example, specifying [{action_name="action1", group_name="group1"}, {action_name="action2", group_name="group2"}] will insert the following in the WHERE part of the query: (action_name="action1" AND group_name="group1") OR (action_name="action2" AND group_name="group2").
Channels to include in the query results. The constructed query statement will have an OR relation for all the channel values listed in this field.
Query for captures with id higher or equal to this value. Specifying 0 means that the Data Acquisition Store will return all captured data it has. Otherwise, it will return new captures stored with an id greater than the value specified in this field.
Setting this field to true only returns the DataIdentifiers in the response and not the actual captures.
The following fields specify which capture types to include in the results. If none of the following fields is specified, then all capture types will be included in the results.
Setting this value will return results that are classified as large data. If this value is not set these captures will not be returned even when none of the other captures types are set.
Boolean that specifies how to order the query results based on capture id field, ascending (default) or descending. Ascending: Captures with lowest id are first, meaning oldest stored captures are ordered first. Descending: Captures with highest id are first, meaning newest stored captures are ordered first.
Used in:
Common response header.
CaptureActionIds that match the query parameters and are included in the results.
Results that match the query parameters.
Max capture_id in the database matching the query parameters.
A ray in 3D space.
Used in:
,Base of ray.
Unit vector defining the direction of the ray.
Used in:
Type of the raycast intersection that was performed.
Position of ray cast hit in the RaycastResponse hit_frame.
Distance of hit from ray origin.
Used in:
,TYPE_UNKNOWN should not be used.
Intersected against estimated ground plane.
Intersected against the terrain map.
Intersected against the full 3D voxel map.
Intersected against the hand depth data.
Used in:
Ray, usually pointing from the camera to the object.
Frame the ray is expressed with respect to.
Used in:
An unknown / unexpected error occurred.
Request was accepted.
[Programming Error] Request was invalid / malformed in some way.
[Programming Error] Requested source not valid for current robot configuration.
[Frame Error] The frame_name for a command was not a known frame.
DataBlob recording error.
Used in:
The type of error: if it was caused by the client or the service.
An error message.
The index to identify the data being stored.
Used in:
Event recording error.
Used in:
The type of error: if it was caused by the client, the service, or something else.
An error message.
The index to identify the data being stored.
Used in:
Operator comment recording error.
Used in:
The type of error: if it was caused by the client or the service.
An error message.
The index to identify the data being stored.
Used in:
Signal tick recording error.
Used in:
The type of error: if it was caused by the client, the service, or something else.
An error message.
The index to identify the data being stored.
Used in:
Text message recording error.
Used in:
The type of error: if it was caused by the client or the service.
An error message.
The index to identify the data being stored.
Used in:
Represents a rectangle, with integer indices.
Used in:
Distance from the left
Distance from the top
Width of the rectangle in pixels
Height of the rectangle in pixels
Region of Interest parameter, region is associated with a specific image.
Used in:
The name of the image service and source the UI had the user specify the ROI on.
Width of the image (in pixels) when the ROI was specified. This should be used to ensure that the ROI is applied to an image with the same size / aspect ratio.
Height of the image (in pixels). This should be used to ensure that the ROI is applied to an image with the same size / aspect ratio.
Used in:
,Used in:
Sometimes, which image the ROI will reference is obvious: - Image services - Network compute bridge workers that accept a single image Other times, it might not be clear which image an ROI is supposed to reference. In those cases, the Spec for the ROI can advertise which image it wants.
Default value. If unset, UIs can pick their own default OR force user to make a selection.
Area may eventually contain many shape primitives. In that case, services can constrain which primitives they accept. These will be opt in, so that adding new primitive types won't be automatically advertised by older services.
Register an endpoint. EstopEndpoints must be registered before they can send commands or request challenges.
Used as request type in: EstopService.RegisterEstopEndpoint
Used as field type in:
Common request header
The endpoint to replace. Set the endpoint's unique ID if replacing an active endpoint.
ID of the configuration we are registering against.
The description of the new endpoint. Do not set the unique ID. It will be ignored.
Used in:
An unknown / unexpected error occurred.
Request succeeded.
Target endpoint did not match.
Registered to wrong configuration.
New endpoint was invalid.
Used in:
UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened if UNKNOWN is set.
Success. The new service record is available.
RegisterPayload failed because a payload with this GUID already exists.
Used in:
UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set.
Success. The new service record is available.
RegisterService failed because a service with this name already exists.
Standard header attached to all GRPC requests to services.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,Time that the request was sent, as measured by the client's local system clock.
Name of the client to identify itself. The name will typically include a symbolic string to identify the program, and a unique integer to identify the specific instance of the process running.
If Set to true, request that request and response messages for this call are not recorded in the GRPC log.
Types of safety stop commands the robot can execute.
Used in:
Invalid request; do not use.
Primary safety stop.
Redundant safety stop.
Feedback on the reset safety stop command.
Used in:
Status is not specified.
Reset safety stop command succeeded.
ERROR: Reset safety stop command failed due to incompatible hardware.
ERROR: Reset safety stop command was run and failed.
ERROR: Reset safety stop command failed due to unknown stop type.
Lease resources can be divided into a hierarchy of sub-resources that can be commanded together. This message describes the hierarchy of a resource.
Used in:
The name of this resource.
Sub-resources that make up this resource.
Standard header attached to all GRPC responses from services.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,Echo-back the RequestHeader for timing information, etc....
Time that the request was received. The server clock is the time basis.
Time that the response was received. The server clock is the time basis.
Common errors, such as invalid input or internal server problems. If there is a common error, the rest of the response message outside of the ResponseHeader will be invalid.
Echoed request message. In some cases it may not be present, or it may be a stripped down representation of the request.
Used in:
UNKNOWN should never be used. An internal LeaseService issue has happened if UNKNOWN is set.
ReturnLease was successful.
ReturnLease failed because the resource covered by the lease is not being managed by the LeaseService.
ReturnLease failed because the lease was not the active lease.
The LeaseService is not authoritative - so Acquire should not work.
A command for a robot to execute. The server decides if a set of commands is valid for a given robot and configuration.
Used in:
,Commands which require control of entire robot.
A synchronized command, for partial or full control of robot.
Command specific feedback. Distance to goal, estimated time remaining, probability of success, etc. Note that the feedback should directly mirror the command request.
Used in:
Commands which require control of entire robot.
A synchronized command, for partial or full control of robot.
(message has no fields)
Used in:
, , , ,/ Behavior execution is in an unknown / unexpected state.
/ The robot is actively working on the command
/ The command was replaced by a new command
/ The command expired
/ The robot is in an unsafe state, and will only respond to known safe commands.
/ The request cannot be executed because the required hardware is missing. / For example, an armless robot receiving a synchronized command with an arm_command / request will return this value in the arm_command_feedback status.
Used in:
An unknown / unexpected error occurred.
Request was accepted.
[Programming Error]
Request was invalid / malformed in some way.
The robot does not understand this command.
[Timesync Error]
Client has not done timesync with robot.
The command was received after its end_time had already passed.
The command end time was too far in the future.
[Hardware Error]
The robot must be powered on to accept a command.
[Robot State Error]
The robot must not have behavior faults.
The robot cannot be docked for certain commands.
// [Frame Error]
The frame_name for a command was not a known frame.
Robot identity information, which should be static while robot is powered-on.
Used in:
,A unique string identifier for the particular robot.
Type of robot. E.g., 'spot'.
Robot version/platform.
Version information about software running on the robot.
Optional, customer-supplied nickname.
Computer Serial Number. Unlike serial_number, which identifies a complete robot, the computer_serial_number identifies the computer hardware used in the robot.
Keeps track of why the robot is not able to drive autonomously.
Used in:
, , , , , ,If the status is ROBOT_IMPAIRED, this is specifically why the robot is impaired.
If impaired_status is STATUS_SYSTEM_FAULT, these are the faults which caused the robot to stop.
If impaired_status is STATUS_SERVICE_FAULT, these are the service faults which caused the robot to stop.
If impaired_status is STATUS_BEHAVIOR_FAULT, these are the behavior faults which caused the robot to stop.
If the robot is stopped due to being impaired, this is the reason why.
Used in:
Unknown/unexpected error.
The robot is able to drive.
The autonomous system does not have any data from the robot state service.
There is a system fault which caused the robot to stop. See system_fault for details.
The robot's motors are not powered on.
The autonomous system is expected to have a remote point cloud (e.g. a LIDAR), but this is not working.
A remote service the autonomous system depends on is not working.
A behavior fault caused the robot to stop. See behavior_faults for details.
The autonomous system expected to have a payload providing an entity detector. The detector is either not present, or not working. Note that if the detector exists but is throwing a system fault, the status will be IMPAIRED_STATUS_SYSTEM_FAULT.
Key robot metrics (e.g., Gait cycles (count), distance walked, time moving, etc...).
Used in:
Robot timestamp corresponding to these metrics.
Key tracked robot metrics, such as distance walked, runtime, etc.
Description of the software release currently running on the robot.
Used in:
The software version, e.g., 2.0.1
The name of the robot, e.g., '20190601'
Kind of software release.
Timestamp of the changeset.
Changeset hash.
API version. E.g., 2.14.5.
Extra information associated with the build.
Date/time when release was installed.
Other information about the build.
The current state of the robot.
Used in:
,Power state (e.g. motor power).
Battery state (e.g. charge, temperature, current).
Communication state (e.g. type of comms network).
Different system faults for the robot.
Because there may be multiple E-Stops, and because E-Stops may be supplied with payloads, this is a repeated field instead of a hardcoded list.
Kinematic state of the robot (e.g. positions, velocities, other frame information).
Robot behavior fault state.
The foot states (and contact information).
/ State of the manipulator, only populated if an arm is attached to the robot.
Service faults for services registered with the robot.
Relevant terrain data beneath and around the robot
Temperature data for the motors.
Robot behavior states
Used in:
Used in:
Robot clock timestamp corresponding to these readings.
Transform representing the pose of the body frame in the odom frame.
Transform representing the pose of the body frame in the vision frame.
Velocity of the body frame with respect to vision frame. See KinematicState above for details.
Velocity of the body frame with respect to odom frame and expressed in odom frame. See KinematicState above for details.
Region of interest (ROI) indicates the region within the image that should be used for determination of automatic focus or exposure.
Used in:
Center point of the ROI in the image. The upper lefthand corner of the image is (0, 0) and the lower righthand corner is (1, 1). The middle of the image is (0.5, 0.5).
Size of the region of interest.
Used in:
ROI window size, 1 is the smallest, 8 is the largest.
Used in:
Geometric primitive to describe 2D position and rotation.
Used in:
, , ,(m)
(rad)
A 2D pose trajectory, which specified multiple points and the desired times the robot should reach these points.
Used in:
The points in trajectory
All trajectories specify times relative to this reference time. The reference time should be in robot clock. If this field is not included, this time will be the receive time of the command.
Parameters for how trajectories will be interpolated on robot.
Move along a trajectory in 2D space.
(message has no fields)
The SE2TrajectoryCommand will provide feedback on whether or not the robot has reached the final point of the trajectory.
Used in:
Current status of the command.
Current status of how the body is moving
Flag indicating if the final requested position was achievable.
Used in:
,STATUS_UNKNOWN should never be used. If used, an internal error has happened.
The robot body is not settled at the goal.
The robot is at the goal and the body has stopped moving.
Used in:
FINAL_GOAL_STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Robot is not stopped or stopping.
Final position was achievable.
Final position was not achievable.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
The robot has stopped. Either the robot has reached the end of the trajectory or it believes that it cannot reach the desired position. Robot may start to move again if a blocked path clears.
The robot is nearing the end of the requested trajectory and is doing final positioning.
The robot is actively following the requested trajectory.
The following enum values were possibly confusing in situations where the robot cannot achieve the requested trajectory and are now deprecated.
Used in:
The timestamp (in robot time) by which a command must finish executing. This is a required field and used to prevent runaway commands.
The name of the frame that trajectory is relative to. The trajectory must be expressed in a gravity aligned frame, so either "vision", "odom", or "body". Any other provided se2_frame_name will be rejected and the trajectory command will not be executed.
The trajectory that the robot should follow, expressed in the frame identified by se2_frame_name.
A SE2 pose that can be used as a point within a trajectory.
Used in:
Required pose the robot will try and achieve.
The duration to reach the point relative to the trajectory reference time.
Geometric primitive that describes a 2D velocity through it's linear and angular components.
Used in:
, , ,(m/s)
(rad/s)
Move the robot at a specific SE2 velocity for a fixed amount of time.
(message has no fields)
Planar velocity commands provide no feedback.
Used in:
(message has no fields)
Used in:
The timestamp (in robot time) by which a command must finish executing. This is a required field and used to prevent runaway commands.
The name of the frame that velocity and slew_rate_limit are relative to. The trajectory must be expressed in a gravity aligned frame, so either "vision", "odom", or "flat_body". Any other provided se2_frame_name will be rejected and the velocity command will not be executed.
Desired planar velocity of the robot body relative to se2_frame_name.
If set, limits how quickly velocity can change relative to se2_frame_name. Otherwise, robot may decide to limit velocities using default settings. These values should be non-negative.
Geometric primitive to couple minimum and maximum SE2Velocities in a single message.
Used in:
, ,If set, limits the maximum velocity.
If set, limits the minimum velocity.
Represents the translation/rotation covariance of an SE3 Pose. The 6x6 matrix can be viewed as the covariance among 6 variables: \ rx ry rz x y z \ rx rxrx rxry rxrz rxx rxy rxz \ ry ryrx ryry ryrz ryx ryy ryz \ rz rzrx rzry rzrz rzx rzy rzz \ x xrx xry xrz xx xy xz \ y yrx yry yrz yx yy yz \ z zrx zry zrz zx zy zz \ where x, y, z are translations in meters, and rx, ry, rz are rotations around the x, y and z axes in radians. \ The matrix is symmetric, so, for example, xy = yx. \
Used in:
, ,Row-major order representation of the covariance matrix.
Variance of the yaw component of the SE3 Pose. Warning: DEPRECATED as of 2.1. This should equal cov_rzrz, inside `matrix`. Will be removed in a future release. FIXME(sberard): https://bostondynamics.atlassian.net/browse/SPOT-12523
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Warning: DEPRECATED as of 2.1. Use 'matrix.' Will be removed in a future release.
Geometric primitive to describe 3D position and rotation.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,(m)
A 3D pose trajectory, which specified multiple poses (and velocities for each pose) and the desired times the robot should reach these points.
Used in:
, , , , , ,The points in trajectory
All trajectories specify times relative to this reference time. The reference time should be in robot clock. If this field is not included, this time will be the receive time of the command.
Parameters for how trajectories will be interpolated on robot.
A SE3 pose and velocity that can be used as a point within a trajectory.
Used in:
Required pose the robot will try and achieve.
Optional velocity (linear and angular) the robot will try and achieve. Linear and angular velocity is expressed with respect to the base frame of the pose.
The duration to reach the point relative to the trajectory reference time.
Geometric primitive that describes a 3D velocity through it's linear and angular components.
Used in:
, , ,(m/s)
(rad/s)
Get robot into a position where it is safe to power down, then power down. If the robot has fallen, it will power down directly. If the robot is standing, it will first sit then power down. With appropriate request parameters and under limited scenarios, the robot may take additional steps to move to a safe position. The robot will not power down until it is in a sitting state.
(message has no fields)
The SafePowerOff will provide feedback on whether or not it has succeeded in powering off the robot yet.
Used in:
Current status of the command.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Robot has powered off.
Robot is trying to safely power off.
Used in:
,Robot action in response to a command received while in an unsafe position. If not specified, UNSAFE_MOVE_TO_SAFE_POSITION will be used
Used in:
Robot may attempt to move to a safe position (i.e. descends stairs) before sitting and powering off.
Force sit and power off regardless of positioning. Robot will not take additional steps
A Point trajectory.
Used in:
The points in trajectory
All trajectories specify times relative to this reference time. The reference time should be in robot clock. If this field is not included, this time will be the receive time of the command.
Parameters for how trajectories will be interpolated on robot. (Note: ignored for ClawGripperCommand.Request, which will automatically select between cubic interpolation or a minimum time trajectory)
Used in:
Required position at the trajectory point's reference time.
Optional speed at the trajectory point's reference time.
The duration to reach the point relative to the trajectory reference time.
Move the robot into a "ready" position from which it can sit or stand up.
(message has no fields)
Used in:
Used in:
Self-right has completed
Robot is in progress of attempting to self-right
SelfRight command request takes no additional arguments.
Used in:
(message has no fields)
Sensor output specification.
Used in:
Min and max (lower and upper) range of the sensor.
Ex: 0.0 - 100.0 psia
Ex: 0.02 (+/-)
The units of the sensor data.
Ex: "psia"
The sample rate of the sensor.
Ex: 0.5 Hz
This describes the location of the SeriesDescriptor DescriptorBlock for the series, and the timestamp and location in the file of every data block in the series.
Used in:
The series_index for the series described by this index block.
Offset of type descriptor block from start of file.
The timestamp and location of each data block for this series.
The total size of the data stored in the data blocks of this series.
Used in:
The timestamp of data in this block.
The offset of the data block from the start of the file.
Values of the additional indexes for describing this block.
A description of a series of data blocks. These data blocks may either represent binary messages of a variable size, or they may represent a sequence of samples of POD data samples: single/vector/matrix/... of integer or floating-point values.
Used in:
This index for the series is unique within the data file.
This is the globally unique {key -> value} mapping to identify the series.
This is a hash of the series_identifier. The hash is the first 64 bits (read as a big-endian encoded uint64_t) of SHA1(S K1 V1 K2 V2 ...) where, - S is series identifier text, - K1 and V1 are the key and value of the first key and value of the `spec`, - K2 and V2 are the second key and value of the spec, etc... Here, all strings are encoded as utf-8, and keys are sorted lexicographically using this encoding (K1 < K2 < ...).
Annotations are a {key -> value} mapping for associating additional information with the series. The format of annotation keys should be {project-or-organization}/{annotation-name} For example, 'bosdyn/channel-name', 'bosdyn/protobuf-type'. Annotation keys without a '/' are reserved. The only current key in the reserved namespace is 'units': e.g., {'units': 'm/s2'}.
Labels for additional index values which should be attached to each DataDescriptor in the series. See the description of "additional_indexes" in DataDescriptor.
A key or description for selecting a message series. Because there may be multiple ways of describing a message series, we identify them by a unique mapping of {key -> value}. A series_type corresponds to a set of keys which are expected in the mapping. A 'bosdyn:grpc:requests' series_type, containing GRPC robot-id request messages, might thus be specified as: {'service': 'robot_id', 'message': 'bosdyn.api.RobotIdRequest'} A 'bosdyn:logtick' series_type, containing a signals data variable from LogTick annotations might be specified as: {'varname': 'tablet.wifi.rssi', 'schema': 'tablet-comms', 'client': 'bd-tablet'}
Used in:
,This is the kind of spec, which should correspond to a set of keys which are expected in the spec.
This is the "key" for naming the series within the file. A key->value description which should be unique for this series within the file with this series_type.
A message representing a discoverable service. By definition, all services discoverable by this system are expected to be grpc "services" provided by some server.
Used in:
, , ,The unique user-friendly name of this service.
The type of this service. Usually identifies the underlying implementation. Does not have to be unique among all ServiceEntry objects.
Information used to route to the desired Service. Can either be a full address (aService.spot.robot) or just a DNS label that will be automatically converted to an address (aService).
Last update time in robot timebase for this service record. This serves as the time of the last heartbeat to the robot.
If 'user_token_required' field is true, any requests to this service must contain a user token for the machine. Requests without a user token will result in a 401. Most services will want to require a user_token, but ones like auth_service do not.
If 'permission_required' field is non-empty, any requests to this service must have the same string in the "per" claim of the user token.
Number of seconds to wait between heartbeats before assuming service in no longer live If unset (0) liveness checks will be disabled for this service.
The GUID of the payload that this service was registered from. An empty string represents a service that was registered via a client using standard user credentials or internal to the robot. This value is set automatically based on the user token and cannot be set or updated via the API, so it should not be populated by the client at registration time.
The current service faults for services registered with the robot. A fault is an indicator of a problem with a service or payload registered with the robot. An active fault may indicate a service may fail to comply with a user request. If the name, service_name, and payload_guid of a newly triggered ServiceFault matches an already active ServiceFault the new fault will not be added to the active fault list. The oldest matching fault will be maintained.
Used in:
, , ,Identifying information of the fault.
User visible description of the fault (and possibly remedies). Will be displayed on tablet.
Fault attributes Each fault may be flagged with attribute metadata (strings in this case.) These attributes are useful to communicate that a particular fault may have significant effect on the operations of services. Some potential attributes may be "autowalk", "Spot CORE", "vision", or "gauge detection". These attributes enable the caller to flag a fault as indicating a problem with particular robot abstractions. A fault may have, zero, one, or more attributes attached to it.
The severity level will have some indication of the potential breakage resulting from the fault. For example, a fault associated with payload X and severity level SEVERITY_INFO may indicate the payload is in an unexpected state but still operational. However, a fault with severity level SEVERITY_CRITICAL may indicate the payload is no longer operational.
Time of robot local clock at fault onset. Set by robot-state service.
Time elapsed since onset of the fault. Set by robot-state service.
Used in:
,Unknown severity
Service still functional
Service performance may be degraded
Critical service fault
Information necessary to uniquely specify a service fault. A service fault typically is associated with a service running on the robot or a payload. Occasionally, the fault may pertain to a payload but no specific service on the payload. In that situation, no service_name should not be specified and instead a payload_guid should be specified. Otherwise, in the standard case of a service originating fault, only the service_name should be specified and the payload_guid will be populated automatically by the fault service on robot.
Used in:
,Name of the fault.
Name of the registered service associated with the fault. Optional. Service name does not need to be specified if this is a payload-level fault with no associated service.
GUID of the payload associated with the faulted service. Optional. If not set, it will be assigned to the payload associated with the service_name.
The current state of each service fault the robot is experiencing. An "active" fault indicates a fault currently in a service. A "historical" fault indicates a, now cleared, service problem.
Used in:
Currently active faults
Service faults that have been cleared. Acts as a ring buffer with size of 50.
Aggregated service fault data. Maps attribute string to highest severity level of any active fault containing that attribute string. This provides a very quick way of determining if there any "locomotion" or "vision" faults above a certain severity level.
Set a new active EstopConfig.
Used as request type in: EstopService.SetEstopConfig
Used as field type in:
Common request header.
New configuration to set.
The 'unique_id' of EstopConfig to replace, if replacing one.
Used in:
An unknown / unexpected error occurred.
Request succeeded.
Tried to replace a EstopConfig, but provided bad ID.
You cannot set a configuration while the motors are on.
The signal specification and the recorded data.
Used in:
The recorded signal data.
Used in:
Optional timestamp for when the data was collected. If unset, the RPC time will be used.
Used in:
Signal display information.
Used in:
Optional display name typically used for signal acronyms or abbreviations. Ex: "PT1" (short name) If unset, no name will be displayed.
An optional description that provides additional information about the signal. Ex: "Pressure Transducer 1" (long name) If unset, no description will be displayed.
This is an optional sorting hint for how to display a set of signals. If unset, the list will be sorted alphabetically by name or id.
A description of a set of signals-style variables to log together as timestamped samples.
Used in:
,A SignalTick using this schema contains the values of this ordered list of variables.
The name of the schema.
A variable of signals-style data, which will be sampled in time.
Used in:
The name of the variable.
The type of the data.
Zero or one variable in 'vars' may be specified as a time variable. A time variable must have type TYPE_FLOAT64.
Used in:
{schema, id} pair
The signal specification.
Used in:
A signal can have multiple alert conditions. If multiple conditions are simultaneously met, the higher severity condition or first in the list will be the accepted alert state.
A timestamped set of signals variable values.
Used in:
Successive ticks should have successive sequence_id's. The robot uses this to determine if a tick was somehow lost.
Timestamp at which the variable values were sampled.
The client name. This may be used to segregate data for the same variables to different parts of the buffer.
This specifies the SignalSchema to be used in interpreting the |data| field. This value was returned by the server when the schema was registered.
Format describing how the data bytes array is encoded.
The encoded data representing a tick of multiple values of signal-styles data.
Used in:
Bytes array is a concatenation of little-endian machine representations of the variables from the SignalSchema, in order listed in that schema.
Sit the robot down in its current position.
(message has no fields)
Used in:
Current status of the command.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Robot is currently sitting.
Robot is trying to sit.
Sit command request takes no additional arguments.
Used in:
(message has no fields)
Kinematic model of the robot skeleton.
Used in:
The list of links that make up the robot skeleton.
URDF description of the robot skeleton.
Each link of the robot skeleton.
Used in:
The link name, which matches those used in the urdf.
The OBJ file representing the model of this link.
Model to draw, expressed as an obj file. Note: To limit the size of responses, obj_file_contents might be omitted.
Used in:
,Name of the file.
The contents of the file.
The software versioning number for a release.
Used in:
, , ,Significant changes to software.
Normal changes to software.
Fixes which should not change intended capabilities or affect compatibility.
A "squeeze grasp" is a top-down grasp where we try to keep both jaws of the gripper in contact with the ground and bring the jaws together. This can allow the robot to pick up small objects on the ground. If you specify a SqueezeGrasp as: allowed: - with no other allowable orientations: then the robot will perform a squeeze grasp. - with at least one other allowable orientation: the robot will attempt to find a normal grasp with that orientation and if it fails, will perform a squeeze grasp. disallowed: - with no other allowable orientations: the robot will perform an unconstrained grasp search and a grasp if a good grasp is found. If no grasp is found, the robot will report MANIP_STATE_GRASP_PLANNING_NO_SOLUTION - with other allowable orientations: the robot will attempt to find a valid grasp. If it cannot it will report MANIP_STATE_GRASP_PLANNING_NO_SOLUTION
Used in:
Used in:
,The staircase origin is the bottom-center of the first rise. X-axis is oriented pointing up the stairs. Y-axis is oriented to the left when facing up the stairs. Z-axis is oriented facing up (opposite gravity).
Used in:
,How do we know about this staircase.
Location of the stairs origin relative to some named frame. Origin defined as the center of the bottom of the lowest riser.
Number of vertical risers. DEPRECATED as of 4.0. Use the length of the steps field instead.
Average vertical height of each step in meters.
Average horizontal distance between risers in meters.
Average width.
The individual steps ordered from lowest to highest.
Unique identifier used to equate staircases shared across edges and externally. This should be randomly generated.
Used in:
A staircase that was in a map (e.g. an AutoWalk edge annotation). Dimensions are expected to be accurate, but location is subject to localization accuracy.
A staircase that we are currently tracking. Location should be accurate, but the farther-away portions may be inaccurate.
A recently-traversed staircase that we tracked during the traversal. This should be accurate in both dimensions and location, but behind us.
Something else?
Used in:
Center of edge in stairs frame.
Unit vector pointing up the stairs in stairs frame, perpendicular to edge.
Width of stairs at this step.
Used in:
,The distance in meters between the left and right side of the staircase.
The two sides of a staircase are designated "east" and "west" as if north is up. The "west" side is the left when facing up the stairs and the right when facing down. The "east" side is the right when facing up the stairs and the left when facing down.
Used in:
Landing associated with a staircase
Used in:
Pose of the landing's center relative to the stairs frame.
The half-size of the box representing the landing in the x axis.
The half-size of the box representing the landing in the y axis.
Used in:
Stairs and their associated landings.
Used in:
Used in:
The frame name which the desired foot_positions are described in.
Map of foot name to its x,y location in specified frame. Required positions for spot: "fl", "fr", "hl", "hr".
Required foot positional accuracy in meters Advised = 0.05 ( 5cm) Minimum = 0.02 ( 2cm) Maximum = 0.10 (10cm)
Precise foot placement This can be used to reposition the robots feet in place.
(message has no fields)
Used in:
Used in:
Robot has finished moving feet and they are at the specified position
Robot is in the process of moving feet to specified position
Robot is not moving, the specified stance was too far away. Hint: Try using SE2TrajectoryCommand to safely put the robot at the correct location first.
Used in:
/ The timestamp (in robot time) by which a command must finish executing. / This is a required field and used to prevent runaway commands.
The stand the robot up in its current position.
(message has no fields)
The StandCommand will provide two feedback fields: status, and standing_state. Status reflects if the robot has four legs on the ground and is near a final pose. StandingState reflects if the robot has converged to a final pose and does not expect future movement.
Used in:
Current status of the command.
What type of standing the robot is doing currently.
Used in:
STANDING_UNKNOWN should never be used. If used, an internal error has happened.
Robot is standing up and actively controlling its body so it may occasionally make small body adjustments.
Robot is standing still with its body frozen in place so it should not move unless commanded to. Motion sensitive tasks like laser scanning should be performed in this state.
Used in:
STATUS_UNKNOWN should never be used. If used, an internal error has happened.
Robot has finished standing up and has completed desired body trajectory.
Robot is trying to come to a steady stand.
Stand command request takes no additional arguments.
Used in:
(message has no fields)
Stop the robot in place with minimal motion.
(message has no fields)
Stop command provides no feedback.
Used in:
,(message has no fields)
Stop command request takes no additional arguments.
Used in:
,(message has no fields)
Used in:
File extension to use for writing the data to a file.
Used in:
Data related to capture.
Start index of resulting bytes.
File extension to use for writing the data to a file.
Used in:
The staircase origin is the bottom-center of the first rise.
It is expressed in ko frame of the from_waypoint. This field is only used in GraphNav.
Outside GraphNav, this field specifies the stair origin.
Each stair should be rise followed by run. The last stair will have zero run.
The lowermost landing of the stairs. The robot will try to align itself to the stairs while on this landing.
The uppermost landing of the stairs.
Straight staircases have two landings, one at the top and one at the bottom. Landings are areas of free space before and after the stairs, and are represented as oriented bounding boxes.
Used in:
Pose of the landing's center relative to the stairs frame.
The half-size of the box representing the landing in the x axis.
The half-size of the box representing the landing in the y axis.
A single stair from a staircase.
Used in:
Height of each stair.
Depth of each stair.
A text parameter. Wraps specification-related messages, and contains fields for the value sent by a client.
Used in:
The value sent by a client.
Used in:
A value sent by the client must be equal to one of these.
Whether or not this parameter accepts a freeform string. If set to true, clients can pick one of the given options OR type their own value. If set to false, clients have to pick one of the given options. If no options are specified, clients should type their own value (ignoring this bool).
Default value. If empty, UIs can pick their own default OR force user to make a selection.
A hint to the UI to use a textarea / multiline EditText.
A struct series is a composite formed by a set of other series whose messages or signals-ticks are sampled at the same time. For example, all there may be a struct series for a set of signals variables, all from a process with an 'update()' function within which all all variables are sampled with the same timestamp. DataBlocks will not directly reference this series, but only child series of this series. Struct series may reference other struct series, but the series structure must be a directed acyclic graph (DAG): no circular reference structures.
Used in:
A map of a name-reference to a series, identified by its series_identifier_hash.
(message has no fields)
Used in:
Used in:
The current system faults for a robot. A fault is an indicator of a hardware or software problem on the robot. An active fault may indicate the robot may fail to comply with a user request. The exact response a fault may vary, but possible responses include: failure to enable motor power, loss of perception enabled behavior, or triggering a fault recovery behavior on robot.
Used in:
, , , , ,Name of the fault.
Time of robot local clock at fault onset.
Time elapsed since onset of the fault.
Error code returned by a fault. The exact interpretation of the fault code is unique to each variety of fault on the robot. The code is useful for Boston Dynamics support staff to diagnose hardware/software issues on robot.
Fault UID
User visible description of the fault (and possibly remedies.)
Fault attributes Each fault may be flagged with attribute metadata (strings in this case.) These attributes are useful to communicate that a particular fault may have significant effect on robot operations. Some potential attributes may be "robot", "imu", "vision", or "battery". These attributes would let us flag a fault as indicating a problem with the base robot hardware, gyro, perception system, or battery respectively. A fault may have, zero, one, or more attributes attached to it, i.e. a "battery" fault may also be considered a "robot" fault.
Fault severity, how bad is the fault? The severity level will have some indication of the potential robot response to the fault. For example, a fault marked with "battery" attribute and severity level SEVERITY_WARN may indicate a low battery state of charge. However a "battery" fault with severity level SEVERITY_CRITICAL likely means the robot is going to shutdown immediately.
Used in:
,Unknown severity
No hardware problem
Robot performance may be degraded
Critical fault
The current state of each system fault the robot is experiencing. An "active" fault indicates a hardware/software currently on the robot. A "historical" fault indicates a, now cleared, hardware/software problem. Historical faults are useful to diagnose robot behavior subject to intermittent failed states.
Used in:
Currently active faults
Inactive faults that cleared within the last 10 minutes
Aggregated fault data. This provides a very quick way of determining if there any "battery" or "vision" faults above a certain severity level.
Used in:
Temperature of the robot motors.
Used in:
UNKNOWN should never be used. An internal LeaseService issue has happened if UNKNOWN is set.
TakeLease was successful. The lease field will be populated with the new lease for the resource. The client is expected to call the RetainLease method immediately after.
TakeLease failed since the resource is not known to LeaseService. The ListLeaseResources method may be used to list all known resources.
The LeaseService is not authoritative - so Acquire should not work.
Used in:
Relevant terrain data beneath and around the robot
Used in:
Is the terrain immediately under the robot such that sitting or powering off the robot may cause the robot to be in an unstable position?
A text message to add to the log. These could be internal text-log messages from a client for use in debugging, for example.
Used in:
String annotation message.
The timestamp of the annotation. This must be in robot time. If this is not specified, this will default to the time the server received the message.
The client name. This may be used to segregate data for the same variables to different parts of the buffer.
The relative importance of the message.
Optional tag to identify from what code/module this message originated from.
Optional source file name originating the log message.
Optional source file line number originating the log message.
Used in:
Invalid, do not use.
Events likely of interest only in a debugging context.
Informational message during normal operation.
Information about an unexpected but recoverable condition.
Information about an operation which did not succeed.
Representation of a time range from a start time through an end time.
Used in:
, , , , , , , , ,A query parameter which filters the possible set of data identifiers to those with timestamps within the specified range.
Used in:
,Start of the time range to query.
End of the time range to query.
Estimate of network speed and clock skew. Both for the last complete sample and a recent average. Populated by the server.
Used in:
,Observed network delay (excludes processing between server_rx and server_tx). If zero, this estimate is unpopulated.
Add the skew to the client system clock to get the server clock.
Timestamp information from a full GRPC call round-trip. These are used to estimate the round-trip communication time and difference between client and server clocks.
Used in:
Client system time when the message was sent, if not zero.
Server system time when the message was received, if not zero.
Server system time when the response was sent, if not zero.
Client time when the response was received, if not zero.
Current best estimate status of time sync.
Used in:
Best clock synchronization estimate currently available, if any.
STATUS_OK once time sync is established.
Time of best estimate, in server time.
Used in:
Invalid, do not use.
Clock skew is available.
More updates are required to establish a synchronization estimate.
Server still establishing time sync internally.
Used in:
UNKNOWN should never be used.
Success. The fault has been triggered.
ServiceFaultId already in active faults.
Used in:
, ,Use this field if the desired unit is not a supported enum.
If a service wants an absolute temperature threshold between 0 C and 100 C, that would show up as 32 F to 212 F on any Fahrenheit loving clients IF is_relative is set to false. Note the change from 0 C to 32 F. If a service wants a relative temperate threshold (region A must be no more than X degrees hotter than region B), between 0 and 100 C, that would show up as 0 F to 180 F on any Fahrenheit loving clients IF is_relative is set to true. Note that 0 C now maps to 0 F. NOTE: Only relevant for units with non equal zero points.
Used in:
UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set.
Success. The service record was deleted.
The provided service name was not found.
Used in:
Used in:
UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened if UNKNOWN is set.
Success. The payload version has been updated.
UpdatePayloadAttached failed because a payload with this GUID does not yet exist.
UpdatePayloadAttached failed because the payload guid & secret do not match any registered payloads.
UpdatePayloadAttached failed because the requested payload has not yet been authorized. Authorize the payload in the webserver first, then try again.
Used in:
UNKNOWN should never be used. An internal PayloadRegistrationService issue has happened if UNKNOWN is set.
Success. The payload version has been updated.
UpdatePayload failed because a payload with this GUID does not yet exist.
UpdatePayload failed because the payload guid & secret do not match any registered payloads.
Used in:
UNKNOWN should never be used. An internal DirectoryRegistrationService issue has happened if UNKNOWN is set.
Success. The new service record is available.
The provided service name was not found.
Used in:
,This string is an optional display name for the UI. If left unset, UI will use the DictParam key to label the corresponding UI element. DictParam key is meant to be machine readable, and shouldn't change across releases. display_name is meant to be human readable, and can change from release to release if needed.
An optional description that provides additional information about the parameter. Use in combination with display_name.
This is an optional sorting hint. UI elements will likely be shown in a list, and Dictionary children will be sorted by [display_order, display_name, dictionary key], in ascending numerical order and alphabetical string order.
Two dimensional vector primitive.
Used in:
, , , , , , , , , , , , , , , , ,A 2D vector of doubles that uses wrapped values so we can tell which elements are set.
Used in:
, , , , , , , , ,Three dimensional vector primitive.
Used in:
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,A 3D point trajectory, described by 3D points, a starting and ending velocity, and a reference time.
Used in:
The points in trajectory.
All trajectories specify times relative to this reference time. The reference time should be in robot clock. If this field is not included, this time will be the receive time of the command.
Parameters for how trajectories will be interpolated on robot.
Velocity at the starting point of the trajectory.
Velocity at the ending point of the trajectory.
A 3D point (and linear velocity) that can be used as a point within a trajectory.
Used in:
The point 3D position.
These are all optional. If nothing is specified, good defaults will be chosen server-side.
The duration to reach the point relative to the trajectory reference time.
A 3D vector of doubles that uses wrapped values so we can tell which elements are set.
Used in:
, , , , , , , , , , ,Represents a vector of doubles
Used in:
Used in:
Axis on the gripper that you want to align. For example, to align the front of the gripper to be straight down, you'd use: axis_on_gripper_ewrt_gripper = Vec3(1, 0, 0) \ axis_to_align_with_ewrt_frame = Vec3(0, 0, -1) (in the "vision" frame) \
Represents a volume of space in an unspecified frame.
Dimensions in m, centered on frame origin.
Configure automatic walking and gazing at the target.
Used in:
,Default, walk to the target and gaze at it automatically
Don't move the robot base, but automatically look at the grasp target.
No automatic gazing or walking. Note: if you choose this option, the target location must not be near the edges or off the screen on the hand camera's view.
Only plan for the grasp, don't move the robot. Since we won't move the robot, the target location must not be near the edges or out of the hand camera's view. The robot must be located near the object. (Equivalent conditions as for success with PICK_NO_AUTO_WALK_OR_GAZE)
Used in:
Walk to an object that is at a pixel location in an image.
A tree-based collection of transformations, which will include the transformations to each image's sensor in addition to transformations to the common frames ("vision", "body", "odom"). All transforms within the snapshot are at the acquisition time of the image.
The frame name for the image's sensor source. This will be included in the transform snapshot.
Camera model.
Optional offset distance for the robot to stand from the object's location. The robot will walk forwards or backwards from where it is so that its center of mass is this distance from the object. \ If unset, we use a reasonable default value.
Walks the robot up to an object. Useful to prepare to grasp or manipulate something.
Used in:
Position of the start of the ray (see PickObjectRayInWorld for detailed comments.)
Position of the end of the ray.
Name of the frame that the above parameters are expressed in.
Optional offset distance for the robot to stand from the object's location. The robot will walk forwards or backwards from where it is so that its center of mass is this distance from the object. \ If unset, we use a reasonable default value.
Used in:
Current WiFi mode.
Essid of robot (master mode) or connected network.
Used in:
The robot's comms state is unknown, or no user requested mode.
The robot is acting as an access point.
The robot is connected to a network.
Used in:
Used in:
The world object message is used to describe different objects seen by a robot. It contains information about the properties of the object in addition to a unique id and the transform snapshot. The world object uses "properties" to describe different traits about the object, such as image coordinates associated with the camera the object was detected in. A world object can have multiple different properties that are all associated with the single object.
Used in:
, , , , , ,Unique integer identifier that will be consistent for the duration of a robot's battery life The id is set internally by the world object service.
A human readable name for the world object. Note that this differs from any frame_name's associated with the object (since there can be multiple frames describing a single object).
Time in robot time clock at which this object was most recently detected and valid.
A tree-based collection of transformations, which will include the transformations to each of the returned world objects in addition to transformations to the common frames ("vision", "body", "odom"). All transforms within the snapshot are at the acquisition time of the world object. Note that each object's frame names are defined within the properties submessage. For example, the apriltag frame name is defined in the AprilTagProperties message as "frame_name_fiducial"
Duration of time after which the obstacle expires. If this field is left blank, the object will expire according to a default time set in the world object service. The duration is relative to the acquisition_time if filled out, or relative to the time the object is added to the world object service if acquisition_time is left blank.
The drawable properties describe geometric shapes associated with an object.
The apriltag properties describe any fiducial identifying an object.
Property for a user no-go
The image properties describe any camera and image coordinates associated with an object.
Properties describing a dock
A ray pointing at the object. Useful in cases where position is unknown but direction is known.
Bounding box in the world, oriented at the location provided in the transforms_snapshot.
The staircase properties provide information that helps the robot traverse or see a staircase.
Information about the Earth relative to the robot, localized by GPS.
An extra field for application-specific object properties.
A type for the world object, which is associated with whatever properties the world object includes. This can be used to request specific kinds of objects; for example, a request for only fiducials.
Used in:
Geometric primitive used to specify forces and torques.
Used in:
, , , ,(N)
(Nm)
A time-based trajectories of wrenches.
Used in:
The wrenches in the trajectory
All trajectories specify times relative to this reference time. The reference time should be in robot clock. If this field is not included, this time will be the receive time of the command.
Used in:
The wrench to apply at this point in time.
The duration to reach the point relative to the trajectory reference time.