Overview
Asimov Manager runs on the Perception and Network Controller. It connects operators to the robot over the internet.
It does four things:
Video streaming - Capture from cameras, stream to operators via LiveKit
Audio - Stream mic to operators, play operator voice on speaker
Teleop commands - Receive commands from operators, forward to firmware
State broadcast - Get robot state from firmware, send to operators @ 50 Hz
flowchart TB
subgraph internet["Internet"]
livekit["LiveKit Server"]
end
subgraph pnc["Perception & Network Controller"]
manager["Asimov Manager"]
cameras["Cameras"]
mic["Mic"]
speaker["Speaker"]
end
subgraph mcb["Motion Control Board"]
firmware["Asimov Firmware"]
end
subgraph operator["Operator"]
browser["Browser/App"]
end
cameras --> manager
mic --> manager
manager --> speaker
manager <-->|"WebRTC"| livekit
livekit <-->|"WebRTC"| browser
manager <-->|"UDP nanopb"| firmware
Why Two Processes?
Asimov Firmware runs the real-time control loop. It talks to motors over CAN at 200 Hz. Adding network code would cause timing jitter.
Asimov Manager handles all the network stuff: WebRTC, video encoding, connection management. Runs on a separate board.
They talk nanopb over UDP.
Data Flow
Data |
Direction |
Transport |
Rate |
|---|---|---|---|
Video |
Robot → Operator |
WebRTC video tracks |
30-50 fps |
Audio (mic) |
Robot → Operator |
WebRTC audio track |
48 kHz |
Audio (speaker) |
Operator → Robot |
WebRTC audio track |
48 kHz |
Teleop commands |
Operator → Robot |
DataChannel (reliable) |
On demand |
Robot state |
Robot → Operator |
DataChannel (lossy) |
50 Hz |
Motor commands |
Manager → Firmware |
UDP :8888 |
On demand |
Motor state |
Firmware → Manager |
UDP :8889 |
100 Hz |
Source Files
File |
What it does |
|---|---|
|
Entry point, 100 Hz main loop |
|
YAML config parser |
|
UDP to firmware, nanopb serialization |
|
Video/audio capture, LiveKit streaming |
|
Audio playback, DataChannel commands |
|
Command/state binary packing |