Dashboards define the user experience for monitoring and operating robot fleets. They organize data into sections and widgets that can be customized per robot type using conditional display rules.
Start with dashboards created through the Settings UI, then export them using the CLI for easier configuration.
Dashboards are configured through the DashboardDefinition kind using a unique id at "account" scope only.
When to Use
- Custom views: Build monitoring interfaces tailored to your robot types and operations
- Per-robot-type dashboards: Show different widgets based on robot tags
- Operational workflows: Organize actions, cameras, and data for efficient operation
Top-Level Fields
| Field | Type | Required | Description |
|---|
label | string | Yes | Display name for the dashboard. |
order | number | No | Numeric order relative to other dashboards. |
sections | array | Yes | List of dashboard sections. |
Sections
Sections group widgets and define their scope.
| Field | Type | Required | Description |
|---|
label | string | Yes | Section title. |
scope | string | Yes | Widget scope (see below). |
withControlWidget | boolean | No | Show control bar for robot/timeframe selection. |
widgets | array | Yes | List of widgets in this section. |
conditional | object | No | Show section only for robots with specific tags. |
Section Scopes
| Scope | Description |
|---|
"fleet" | Fleet-wide information (status overview, incidents, audit log). |
"robot" | Current data for a selected robot. |
"navigation" | Map view with position, path, costmap, and teleoperation. |
"timeCapsule" | Historical data for root cause analysis. |
"mission" | Mission metrics and KPIs. |
Every widget has common properties plus type-specific configuration.
| Field | Type | Required | Description |
|---|
type | string | Yes | Widget type (see below). |
label | string | No | Widget title. |
layout | object | No | Size and position configuration. |
conditional | object | No | Show widget only for robots with specific tags. |
Layout Configuration
layout:
grid: 8 # Width in grid units (1-12)
rows: 2 # Height in rows
chroma: true # Use color-coded display
| Type | Description |
|---|
fleetStatus | Robot list with statuses (Error, Warning, Ok). |
incidentTimeline | Calendar timeline of incidents. |
incidentList | List of incidents with Time Capsule links. |
kpi | Account-level KPIs. |
locations | World map with location indicators. |
auditLogFleet | Fleet-wide audit log. |
fleetMissionTracker | Mission listing for entire fleet. |
Data Visualization
| Type | Description |
|---|
chart | Timeline chart (line/area). |
vitals | Up to 4 data sources as text or gauges. |
listData | Data sources in table format. |
keyValues | All key-value pairs with timestamps. |
history | Recent updates to a specific data source. |
stateTransitions | Colored timeline of state changes. |
Monitoring & Control
| Type | Description |
|---|
localization | Small map showing robot position. |
actions | Executable actions for the robot. |
cameraWidget | Live camera feed. |
tagsAndModes | Robot tags and current mode. |
missionTracker | Recent missions for selected robot. |
Auditing
| Type | Description |
|---|
auditLog | Recent robot events. |
diagnostics | ROS Diagnostics visualization. |
dataBags | Rosbags and log files. |
Example
kind: DashboardDefinition
apiVersion: v0.1
metadata:
id: "robot-monitoring"
scope: account/<accountId>
spec:
label: "Robot"
order: 3
sections:
- label: "Health"
scope: "robot"
withControlWidget: true
widgets:
- type: "vitals"
label: "System Vitals"
dataSources:
- id: "cpuLoadPercentage"
label: "CPU"
type: "gauge"
- id: "ramUsagePercentage"
label: "Memory"
type: "gauge"
- id: "batteryLevel"
label: "Battery"
type: "gauge"
- type: "chart"
label: "Timeline"
layout:
grid: 8
rows: 1
dataSources:
- id: "cpuLoadPercentage"
label: "CPU"
op: "maximum"
- id: "ramUsagePercentage"
label: "Memory"
op: "average"
- label: "Actions"
scope: "robot"
widgets:
- type: "actions"
config:
actionIds:
- "emergency-stop"
- "return-to-dock"
expanded: true
chart
type: "chart"
chartType: "linechart" # or "areachart"
dataSources:
- id: "cpuLoadPercentage"
label: "CPU"
op: "average" # average, count, maximum, minimum, sum, last
precision: 2
min: 0
max: 100
vitals
type: "vitals"
dataSources:
- id: "battery"
label: "Battery"
type: "gauge" # or "text"
unit: "%"
actions
type: "actions"
config:
actionIds:
- "action1"
- "action2"
expanded: true
bigButtons: false
type: "cameraWidget"
config:
cameraId: "0"
missionKPI
type: "missionKPI"
config:
kpis:
- kpiDefinitionId: "mission-success-rate"
- kpiDefinitionId: "missions"
display:
isHeader: true
icon: "MISSION"
tableColumns:
- id: "status"
label: "Status"
type: "statusChip"
config:
attributeIds:
- "data.status"
- id: "missionName"
label: "Mission"
type: "string"
config:
attributeIds:
- "data.label"
Conditional Display
Show sections or widgets only for robots with specific tags:
sections:
- label: "Cleaning Controls"
scope: "robot"
conditional:
tags:
- "cleaning-robot"
widgets:
- type: "actions"
label: "Cleaning Actions"
conditional:
tags:
- "has-vacuum"
config:
actionIds:
- "start-cleaning"
- "stop-cleaning"
This allows creating dashboards that display differently based on robot type or capabilities.