Skip to main content
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

FieldTypeRequiredDescription
labelstringYesDisplay name for the dashboard.
ordernumberNoNumeric order relative to other dashboards.
sectionsarrayYesList of dashboard sections.

Sections

Sections group widgets and define their scope.
FieldTypeRequiredDescription
labelstringYesSection title.
scopestringYesWidget scope (see below).
withControlWidgetbooleanNoShow control bar for robot/timeframe selection.
widgetsarrayYesList of widgets in this section.
conditionalobjectNoShow section only for robots with specific tags.

Section Scopes

ScopeDescription
"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.

Widget Configuration

Every widget has common properties plus type-specific configuration.

Common Widget Fields

FieldTypeRequiredDescription
typestringYesWidget type (see below).
labelstringNoWidget title.
layoutobjectNoSize and position configuration.
conditionalobjectNoShow 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

Fleet Widgets

TypeDescription
fleetStatusRobot list with statuses (Error, Warning, Ok).
incidentTimelineCalendar timeline of incidents.
incidentListList of incidents with Time Capsule links.
kpiAccount-level KPIs.
locationsWorld map with location indicators.
auditLogFleetFleet-wide audit log.
fleetMissionTrackerMission listing for entire fleet.

Robot Widgets

Data Visualization

TypeDescription
chartTimeline chart (line/area).
vitalsUp to 4 data sources as text or gauges.
listDataData sources in table format.
keyValuesAll key-value pairs with timestamps.
historyRecent updates to a specific data source.
stateTransitionsColored timeline of state changes.

Monitoring & Control

TypeDescription
localizationSmall map showing robot position.
actionsExecutable actions for the robot.
cameraWidgetLive camera feed.
tagsAndModesRobot tags and current mode.
missionTrackerRecent missions for selected robot.

Auditing

TypeDescription
auditLogRecent robot events.
diagnosticsROS Diagnostics visualization.
dataBagsRosbags 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

Widget-Specific Configuration

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

cameraWidget

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.