Servi
These endpoints and their message types are only available for the Servi robot family. Attempting to run a Servi commands on a non Servi robot will result in an INVALID_ARGUMENT error.
CreateMission¶
Use the shared CreateMission
endpoint to send missions for Servi robots. Servi-specific missions must be sent using the appropriate request message format.
Note
When sending a Servi mission, servi.Feedback
is returned in SubscribeMissionStatus
response message.
servi.Feedback enum
¶
Name | Number | Description |
---|---|---|
STATUS_UNKNOWN | 0 | Default value. It means status field is not returned. |
STATUS_NAVIGATING | 1 | The robot is currently navigating to its goal. |
STATUS_ARRIVED | 2 | The robot has arrived at a goal. |
STATUS_DOCKING | 3 | The robot is performing a docking maneuver. |
STATUS_UNDOCKING | 4 | The robot is performing an undocking maneuver. |
Request¶
robot_id string
required
¶
The ID of the robot that will receive this command.
mission Mission
required
¶
Universal wrapper for mission types. Only one mission type may be set at a time.
Field (oneof) | Message Type | Description |
---|---|---|
base_mission |
BaseMission |
Base missions are applicable to all robot families. Refer to Mission for how to create and send a base mission. |
servi_mission |
servi.Mission |
Servi missions are specific to the Servi robot family. |
carti_mission |
carti.Mission |
Carti missions are specific to the Carti robot family. Refer to Carti for how to create and send a carti mission. |
servi_mission servi.Mission
¶
Use the field servi_mission
to create and send a servi mission. Current API version supports 4 types of Servi mission.
Field (oneof) | Message Type | Description |
---|---|---|
bussing_mission |
BussingMission |
Create a servi mission of type Bussing . |
bussing_patrol_mission |
BussingPatrolMission |
Create a servi mission of type BussingPatrol . |
delivery_mission |
DeliveryMission |
Create a servi mission of type Delivery . |
delivery_patrol_mission |
DeliveryPatrolMission |
Create a servi mission of type DeliveryPatrol . |
bussing_mission BussingMission
¶
A mission that navigates to one or more goals, stopping at each for a set amount of time or until some weight is added.
Field | Message Type | Description |
---|---|---|
goals |
repeated Goal required |
a list of Goal |
params |
BussingParams optional |
There is no param defined in this API version. |
bussing_patrol_mission BussingPatrolMission
¶
A mission that continuously loops through goals, stopping at each for a set amount of time or until weight exceeds a threshold.
Field | Message Type | Description |
---|---|---|
goals |
repeated Goal required |
a list of Goal |
params |
BussingPatrolParams optional |
There is no param defined in this API version. |
delivery_mission DeliveryMission
¶
A mission that navigates to one or more goals, stopping at each for a set amount of time or until some weight is removed.
Field | Message Type | Description |
---|---|---|
goals |
repeated Goal required |
a list of Goal |
params |
DeliveryParams optional |
There is no param defined in this API version. |
delivery_patrol_mission DeliveryPatrolMission
¶
A that continuously loops through goals, stopping at each for a set amount of time or until all weight is removed.
Field | Message Type | Description |
---|---|---|
goals |
repeated Goal required |
a list of Goal |
params |
DeliveryPatrolParams optional |
There is no param defined in this API version. |
JSON Request Example¶
Response¶
mission_id string
¶
The ID of the mission created.
JSON Response Example¶
Errors¶
ErrorCode | Description |
---|---|
INVALID_ARGUMENT |
This command is sending to is not a Carti family robot. |
FAILED_PRECONDITION |
The robot is already executing another mission. This command is valid if current mission is in terminal state, e.g Cancelled, Succeeded, Failed. |
SubscribeTrayStatuses¶
Subscribes to the robot’s tray status updates.
Upon subscription, the latest known tray states are sent immediately. Updates are streamed when any tray state changes.
Weight changes are reported with 10g precision.
Request¶
selector RobotSelector
required
¶
RobotSelector
is used to select specific robots.
It supports selection by a list of robot IDs or all robots at a given location.
-
robot_ids
RobotIDs
Selects robots by their specific IDs.
Example:["pennybot-123abc", "pennybot-abc123"]
-
location_id
string
Selects all robots at the specified location.
JSON Request Example¶
Response¶
tray_states map<string, TrayStatesWithMetadata>
¶
A mapping of tray states reported by individual robots. Each entry pairs a robot ID (key) with its corresponding tray states.
TrayStatesWithMetadata¶
Field | Message Type | Description |
---|---|---|
metadata |
EventMetadata | Metadata associated with the tray states. |
tray_states |
TrayStates | The tray states reported by the robot. |
TrayStates TrayState
repeated
¶
State of enabled trays, ordered from the top-most tray on the robot to the bottom.
TrayState¶
Represents the state of a single tray.
Field | Message Type | Description |
---|---|---|
tray_name |
string | Unique string name for the given tray. e.g. "top", "middle", "bottom" See illustrations for tray configurations on different robot models. |
load_state |
LoadState enum | |
weight_kg |
float | Weight on the tray in kilograms. Minimum precision is 10g. |
load_ratio |
float | Ratio of the current load to the tray’s maximum load capacity. This value may exceed 1.0 if the tray is overloaded. Caveats: - If the maximum load is misconfigured (e.g., set to 0.0), this value may return NaN. |
LoadState enum
¶
Name | Number | Description |
---|---|---|
LOAD_STATE_UNKNOWN | 0 | Default value. It means the load_state field is not returned. |
LOAD_STATE_LOADED | 1 | The tray has a valid load. |
LOAD_STATE_EMPTY | 2 | The tray is empty. |
LOAD_STATE_OVERLOADED | 3 | The tray is carrying more than its maximum capacity. |
Errors¶
ErrorCode | Description |
---|---|
INVALID_ARGUMENT |
This command is sending to is not a Servi family robot. |
PERMISSION_DENIED |
Attempting to request status for a robot_id or location_id you don't own. Tip: check the spelling of all robot_id or location_id values. |
JSON Response Example¶
{
"trayStates": {
"pennybot-456efg": {
"metadata": {
"timestamp": "2025-04-01T16:00:00Z",
"sequenceNumber": 105
},
"trayStates": [
{
"trayName": "top",
"loadState": "LOAD_STATE_OVERLOADED",
"weightKg": 8.1,
"loadRatio": 1.18
},
{
"trayName": "middle",
"loadState": "LOAD_STATE_LOADED",
"weightKg": 2.3,
"loadRatio": 0.76
},
{
"trayName": "bottom",
"loadState": "LOAD_STATE_EMPTY",
"weightKg": 0,
"loadRatio": 0
}
]
}
}
}