Skip to content

Architecture

The gateway pattern

The uMe on-board SDK uses DDS for communication. DDS is a LAN discovery protocol and is impractical on iOS/Android. So the Robotics Group App does not speak DDS directly. Instead, a Gateway service on the robot wraps the on-board SDK and exposes it as a mobile-friendly WebSocket/JSON API.

 Robotics Group App (Flutter, iOS/Android)
            │
            │  ws://<robot-ip>:8765/ws   (JSON commands + status)
            ▼
 uMe Gateway (Python, on the robot's Perception Board)
            │
            │  uMe on-board SDK  (DDS, C++/Python)
            ▼
 uMe runtime  (motors, sensors, voice, camera)

This is exactly the uGO+ API strategy (REST / WebSocket / MQTT), which makes the Gateway the first uGO+ building block on uMe.

Components

Component Tech Role
Robotics Group App Flutter (Dart) Operator UI: connect, teleoperate, status, persona
uMe Gateway Python (websockets) Bridges WebSocket/JSON ↔ on-board SDK; broadcasts status
uMe on-board SDK C++/Python (DDS) On-robot motion, state, sensors

Why a native app (not web)

The app is intentionally native Flutter — not a web app — because uMe needs Bluetooth provisioning, camera streams, and App Store / Google Play distribution. (A related URG project, the Kevin teaching interface, was a Svelte web app; its uGo.UI component library is the source of the app's design tokens.)

Connectivity

The app connects to the Perception Board's IP on port 8765; robot and controlling device must be on the same network. DDS spans both on-board computers, so the Gateway reaches the motors on the Motion Board without anything being installed there:

App ──► Perception Board ──► Gateway + SDK ──(DDS)──► Motion Board ──► motors

Each robot's address is recorded at commissioning — see Deployment Process. Bluetooth is used for first-time Wi-Fi provisioning.

Design language

The app implements the URG Design System (Figma "URG Design System", code reference urg-svelte-components) as Flutter tokens — brand teal #3B8789, Montserrat, pill buttons, and the positive/warning/negative status colors. Documentation and app share the same URG look.