Mission
Missions are atomic units of behavior that define a robot's high-level actions. This API enables you to control robot behavior—from simple navigation tasks to complex, conditional workflows.
CreateMission¶
Create a mission of the specified type.
Request¶
mission Mission required¶
Universal wrapper for mission types. Only one mission type may be set at a time.
Note
When using destination_id in the Goal, it should match the display_name field from the map's annotation destinations. See LocationsAndMaps for more details.
| Field (oneof) | Message Type | Description |
|---|---|---|
base_mission |
BaseMission |
Base missions are applicable to all robot families. |
servi_mission |
servi.Mission |
Servi missions are specific to the Servi robot family. Refer to Servi for how to create and send a servi mission. |
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. |
BaseMission¶
Use the base_mission field to send a mission to a Base unit. Current API version supports 2 types of base missions.
| Field (oneof) | Message Type | Description |
|---|---|---|
navigate_mission |
NavigateMission |
Create a base mission of type Navigate. |
navigate_auto_mission |
NavigateAutoMission |
Create a base mission of type NavigateAuto. |
NavigateMission¶
A mission consisting of a single, explicitly defined goal.
| Field | Message Type | Description |
|---|---|---|
goal |
Goal |
The target destination for the mission. |
NavigateAutoMission¶
A mission that automatically selects the first unoccupied and unclaimed goal from the provided list, preferring goals with lower index values.
| Field | Message Type | Description |
|---|---|---|
goals |
repeated Goal |
The list of target destinations for the mission. |
JSON Request Example¶
Response¶
mission_id string¶
The ID of the mission created.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
The robot is already executing another mission, or another mission is queued. CreateMission is only valid if there is no running or queued mission on the robot, with its state in one of the terminal states, i.e., Cancelled, Succeeded, Failed, Default. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. This covers sending empty requests, invalid goals, goals that do not match mission type, and other format errors. Client should update their usage to have correctly formatted requests with valid goals for the missions as defined in documentation. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry creating the mission. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry creating the mission. |
CreateMissionBatch¶
Atomically create multiple missions in a single request. The created missions are queued contiguously in the order they appear in the request, and the returned mission IDs match that order.
Note
This call is atomic: if any mission in the batch fails validation or creation, no missions are created.
Request¶
missions repeated CreateMissionRequest required¶
The list of missions to create, in execution order. Each entry is a
CreateMissionRequest, wrapping a single
Mission. Only one mission type
may be set per entry.
JSON Request Example¶
Response¶
mission_ids repeated string¶
The IDs of the missions created, in the same order as the request.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
Another mission is running or queued, or the robot is unable to start a mission. CreateMissionBatch is only valid if there is no running or queued mission on the robot. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. This covers empty requests, an empty missions list, invalid goals, goals that do not match mission type, and other format errors. Since the call is atomic, a single invalid mission causes the entire batch to be rejected. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry creating the batch. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry creating the batch. |
CreateMissionWorkflow¶
Create a mission workflow that mirrors touchscreen presets (e.g. automatic return point selection). Exactly one workflow type must be set. The created missions are returned as a list of mission IDs.
Request¶
mission_workflow MissionWorkflow required¶
Preset workflow to run. Only one workflow type may be set at a time.
| Field (oneof) | Message Type | Description |
|---|---|---|
servi_workflow |
servi.MissionWorkflow |
Servi preset workflows. Refer to Servi for details. |
carti_workflow |
carti.MissionWorkflow |
Carti preset workflows. Refer to Carti for details. |
Servi workflow types¶
Only one workflow type may be set at a time. Each type takes only goals (or a single goal for birthday) with no params. See Servi workflow payloads.
| Field (oneof) | Message Type | Description |
|---|---|---|
delivery |
DeliveryWorkflow |
Create a servi mission of type Delivery. |
delivery_patrol |
DeliveryPatrolWorkflow |
Create a servi mission of type DeliveryPatrol. |
bussing |
BussingWorkflow |
Create a servi mission of type Bussing. |
bussing_patrol |
BussingPatrolWorkflow |
Create a servi mission of type BussingPatrol. |
birthday |
BirthdayWorkflow |
Create a servi mission of type Birthday. |
hosting |
HostingWorkflow |
Create a servi mission of type Hosting. |
hosting_patrol |
HostingPatrolWorkflow |
Create a servi mission of type HostingPatrol. |
Carti workflow types¶
Only one workflow type may be set at a time. Each type takes only goals with no params. See Carti workflow payloads.
| Field (oneof) | Message Type | Description |
|---|---|---|
traverse |
TraverseWorkflow |
Create a carti mission of type Traverse. |
traverse_patrol |
TraversePatrolWorkflow |
Create a carti mission of type TraversePatrol. |
JSON Request Example¶
Response¶
mission_ids repeated string¶
The IDs of the missions created for this workflow.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
The robot is already executing another mission. CreateMissionWorkflow is only valid when there is no running mission on the robot, with its state in one of the terminal states, i.e., Cancelled, Succeeded, Failed, Default. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. This covers a missing or invalid mission_workflow, workflow type not set to ServiWorkflow or CartiWorkflow, or a workflow type not supported for the robot's family. Client should update their usage to have a correctly formatted request. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry creating the workflow. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry creating the workflow. |
AppendMission¶
Appends a mission to the end of the mission queue. Use this when a mission is currently running; otherwise, prefer CreateMission. Missions are executed in the order they are appended.
Request / Response¶
Note
AppendMission request and response message types are the same as CreateMission. See CreateMission JSON Examples.
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
There is no mission in the mission queue. Client should first create the initial mission, and only use Append for queuing additional missions. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. This covers sending empty requests, invalid goals, goals that do not match mission type, and other format errors. Client should update their usage to have correctly formatted requests with valid goals for the missions as defined in documentation. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry appending the mission. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry appending the mission. |
AppendMissionBatch¶
Atomically append multiple missions to the end of the mission queue. All missions are appended contiguously in the request order. Missions can be appended even when other missions are already queued.
Note
This call is atomic: if any mission in the batch fails validation or append, no missions are appended.
Request¶
missions repeated AppendMissionRequest required¶
The list of missions to append, in execution order. Each entry is an
AppendMissionRequest, wrapping a single
Mission.
JSON Request Example¶
Response¶
mission_ids repeated string¶
The IDs of the missions appended, in the same order as the request.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
There is no mission in the mission queue. Client should first create the initial mission, and only use Append (or AppendBatch) for queuing additional missions. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. This covers empty requests, an empty missions list, invalid goals, goals that do not match mission type, and other format errors. Since the call is atomic, a single invalid mission causes the entire batch to be rejected. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry appending the batch. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry appending the batch. |
ChargeRobot¶
ChargeRobot is a special type of mission. Use this command to instruct the robot to begin charging, regardless of its current battery level. This command is only supported on robots equipped with a contact-based charging dock.
You can use SubscribeRobotStatus to monitor the charging process.
Request¶
This request takes no fields.
JSON Request Example¶
Response¶
mission_id string¶
The ID of the mission created. Since this command is a special type of mission, its execution state is also available in response messages from SubscribeMissionStatus.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
The robot is already executing a mission. The current mission must be canceled before issuing this command. |
NOT_FOUND |
The robot's map has no charging location configured (no contact-charger destination). |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry creating the mission. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry creating the mission. |
ClearMissionStatus¶
Clears the robot's mission status, removing the missions reported by SubscribeMissionStatus. Use this to reset the mission queue once all missions have reached a terminal state.
Warning
This call will fail if the robot is on a running or paused mission. Cancel or finish the active mission before clearing.
Request¶
This request takes no fields.
JSON Request Example¶
Response¶
mission_ids repeated string¶
The unique identifiers of the cleared missions.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
The robot is on a running or paused mission. The mission must reach a terminal state (Cancelled, Succeeded, Failed) before its status can be cleared. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry. |
SkipGoal¶
Advance the current mission to the next goal, skipping the current one. On success, returns the mission ID of the mission where the goal was skipped.
Request¶
This request takes no fields.
JSON Request Example¶
Response¶
mission_id string¶
The ID of the mission where the goal was skipped.
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
The robot is not on a mission. SkipGoal is only valid when a mission is actively running. |
INTERNAL |
The skip goal request could not be delivered to the robot or the operation failed. Client should retry. |
UpdateMission¶
Issues a command to control or update the current mission (e.g., pause, cancel).
Warning
We currently do not support updating missions in mission queue.
Attempting to send UpdateMission command to a queued mission will result in NOT_FOUND error.
Request¶
mission_command MissionCommand required¶
Command to update the state of an active mission.
| Field | Message Type | Description |
|---|---|---|
mission_id |
string required |
The ID of the mission to control. |
command |
Command enum required |
Command to update the state of an active mission. |
Command enum¶
| Name | Number | Description |
|---|---|---|
| COMMAND_UNKNOWN | 0 | Default value. This should never be used explicitly. It means the command field is not set. |
| COMMAND_CANCEL | 1 | Cancel this mission. |
| COMMAND_PAUSE | 2 | Pause this mission. |
| COMMAND_RESUME | 3 | Resume a paused mission. |
| COMMAND_FINISH | 4 | Mark the mission as completed. |
JSON Request Example¶
Response¶
(No fields defined)
JSON Response Example¶
Errors¶
| ErrorCode | Description |
|---|---|
FAILED_PRECONDITION |
The robot is either not on a mission, or the command is invalid for the robot's current state. For example, mission in terminal state (Cancelled, Succeeded, Failed) can't be updated. |
INVALID_ARGUMENT |
The client supplied a request with invalid format. This covers sending empty requests, invalid commands, incorrect mission ID, and other format errors. Client should update their usage to have correctly formatted requests with valid commands, and ensure the mission id matches the currently running mission. |
NOT_FOUND |
The specified mission is not the active mission (e.g., it is still queued). Updating queued missions is not supported. |
INTERNAL |
The request failed to execute due to internal error in mission system. Client should retry. |
DEADLINE_EXCEEDED |
The request was accepted but timed out waiting for the robot to confirm. Client should retry. |
SubscribeMissionStatus¶
Streaming mode: event
A server side streaming RPC endpoint to get updates on the robot's mission state. Upon subscription, the latest known mission state is sent immediately. Subsequent updates are streamed as the state changes.
Request¶
This request takes no fields. The stream reports the mission status of the robot you are connected to.
JSON Request Example¶
Response¶
This endpoint returns a stream of messages in response.
Each message includes:
metadata EventMetadata¶
Metadata about the streamed event.
EventMetadata¶
| Field | Message Type | Description |
|---|---|---|
timestamp |
Timestamp |
The time when the event was recorded. |
sequence_number |
int64 |
An incremental sequence number generated by the robot. The sequence number should never be negative and can be reset to 0. i.e. sequence is valid if it is larger than the previous number or 0. |
mission_states MissionStates¶
The current mission status of the robot.
MissionStates¶
| Field | Message Type | Description |
|---|---|---|
missions |
repeated MissionState |
List of all missions assigned to the robot, in order from first to last assigned mission. |
current_mission_index |
int32 |
Index of the currently active mission in the missions list. -1 if no mission is currently active. |
MissionState¶
| Field | Message Type | Description |
|---|---|---|
mission_id |
string |
Unique identifier for the mission. |
state |
State enum |
Current lifecycle state of the mission. |
goals |
repeated Goal |
All goals associated with the mission, in the order the request was given. |
current_goal_index |
int32 |
Index of the currently active goal in the goals list. |
mission_feedback |
MissionFeedback |
Latest feedback for the mission. |
mission_type |
MissionType |
Type of the mission. |
owner |
string |
Owner of the mission (e.g., "touchscreen", "api", etc.). |
State enum¶
| Name | Number | Description |
|---|---|---|
| STATE_UNKNOWN | 0 | Default value. It means the state field is not returned. |
| STATE_DEFAULT | 1 | Initial state when no mission has been run (e.g., feedback is empty). |
| STATE_RUNNING | 2 | The mission is actively running. |
| STATE_PAUSED | 3 | The mission is paused. |
| STATE_CANCELED | 4 | The mission was canceled before completion. |
| STATE_SUCCEEDED | 5 | The mission completed successfully. |
| STATE_FAILED | 6 | The mission encountered an error or failure. |
MissionFeedback¶
Provides mission-specific runtime information.
| Field (oneof) | Message Type | Description |
|---|---|---|
base_feedback |
BaseFeedback |
Feedback specific to Base unit mission types. |
servi_feedback |
servi.Feedback |
Feedback specific to Servi missions. |
carti_feedback |
carti.Feedback |
Feedback specific to Carti missions. |
MissionType¶
Defines the different types of missions that can be executed.
| Field (oneof) | Message Type | Description |
|---|---|---|
base_type |
BaseType enum |
Base-specific mission types. |
servi_type |
servi.ServiType enum |
Servi-specific mission types. |
carti_type |
carti.CartiType enum |
Carti-specific mission types. |
BaseFeedback¶
| Field | Message Type | Description |
|---|---|---|
status |
Status enum |
Current feedback status of the robot. |
servi.Feedback enum¶
| Name | Number | Description |
|---|---|---|
| STATUS_UNKNOWN | 0 | Default value. It means status field is not returned. |
| STATUS_NAVIGATING | 1 | The robot is navigating to a 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. |
carti.Feedback enum¶
| Name | Number | Description |
|---|---|---|
| STATUS_UNKNOWN | 0 | Default value. It means status field is not returned. |
| STATUS_NAVIGATING | 1 | The robot is navigating to a 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. |
BaseType enum¶
| Name | Number | Description |
|---|---|---|
| BASE_TYPE_UNKNOWN | 0 | Default value for base type. |
| BASE_TYPE_NAVIGATE | 1 | A single navigation mission with a predefined goal. |
| BASE_TYPE_NAVIGATE_AUTO | 2 | An automated navigation mission that selects the best available goal from a list. |
servi.ServiType enum¶
| Name | Number | Description |
|---|---|---|
| SERVI_TYPE_UNKNOWN | 0 | Default value for servi type. |
| SERVI_TYPE_SERVING | 1 | A serving mission that navigates to goals, stopping until weight is removed. |
| SERVI_TYPE_SERVING_PATROL | 2 | A serving patrol mission that continuously loops until all weight is removed. |
| SERVI_TYPE_BUSSING | 3 | A bussing mission that navigates to goals, stopping until weight is added. |
| SERVI_TYPE_BUSSING_PATROL | 4 | A bussing patrol mission that continuously loops until weight exceeds threshold. |
| SERVI_TYPE_NAVIGATE | 5 | A single navigation mission with a predefined goal. |
| SERVI_TYPE_NAVIGATE_AUTO | 6 | An automated navigation mission that selects the best available goal from a list. |
carti.CartiType enum¶
| Name | Number | Description |
|---|---|---|
| CARTI_TYPE_UNKNOWN | 0 | Default value for carti type. |
| CARTI_TYPE_TRAVERSE | 1 | A traverse mission that follows a sequence of goals. |
| CARTI_TYPE_TRAVERSE_PATROL | 2 | A traverse patrol mission that follows a sequence of goals on loops. |
| CARTI_TYPE_NAVIGATE | 3 | A single navigation mission with a predefined goal. |
| CARTI_TYPE_NAVIGATE_AUTO | 4 | An automated navigation mission that selects the best available goal from a list. |
Status 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 target. |
JSON Response Example¶
{
"metadata": {
"timestamp": "2025-04-01T15:30:00Z",
"sequenceNumber": 128
},
"missionStates": {
"missions": [
{
"missionId": "d6637a14-5f6b-43f6-bd86-cc1871a8322e",
"state": "STATE_RUNNING",
"goals": [
{
"destinationId": "pickup_zone"
},
{
"pose": {
"xMeters": 4.2,
"yMeters": 7.8,
"headingRadians": 1.57
}
}
],
"currentGoalIndex": 1,
"missionFeedback": {
"baseFeedback": {
"status": "STATUS_NAVIGATING"
}
},
"missionType": {
"baseType": "BASE_TYPE_NAVIGATE"
},
"owner": "api"
}
],
"currentMissionIndex": 0
}
}
Errors¶
| ErrorCode | Description |
|---|---|
INVALID_ARGUMENT |
One or more request parameters are malformed or logically incorrect. |
INTERNAL |
The robot failed to stream mission status due to an internal error. Client should re-subscribe. |