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.