Skip to main content

System Overview

:::note Living document This page is a reference, not a post. Edit it in place as the system changes — don't append dated addenda or leave stale sections describing a previous revision. :::

Hardware​

  • Platform: Unitree G1 EDU
  • Compute: Orin NX module (companion computer), running the AI/voice/gesture-orchestration stack. Robot motion control runs on a separate onboard RockChip controller (not directly SSH-accessible), communicating with the Orin NX over DDS.

Software stack​

  • OS / L4T / JetPack: JetPack 6.2 (L4T R36.4.3), Ubuntu 22.04.5, Python 3.10.12 (system) / 3.11.15 (production venv)
  • CUDA: 12.6, Driver 540.4.0
  • DDS middleware: CycloneDDS 0.10.2 (hard-pinned — see the CycloneDDS version pinning log entry for why this exact version matters)
  • Containerization: Docker 20.10.12 (pinned — newer versions break GPU passthrough on the tegra kernel)
  • Voice pipeline: Pipecat, orchestrating STT → LLM → TTS in a single Python 3.11 venv alongside the robot SDK
  • Transport: WebRTC for gesture dispatch and vendor-adjacent audio; DDS for direct robot-state and arm-command traffic

Current pipeline components​

StageImplementationNotes
STTfaster-whisper large-v3, containerized FastAPI HTTP wrapperFull-attention encoder — latency scales with utterance length regardless of model size (architectural, not a tuning problem)
LLMOllama, GPU-confirmedRuns isolated in a jetson-container over local HTTP, separate from the SDK/Pipecat venv
TTSespeak-ng (placeholder) → ElevenLabs Flash v2.5 (target)ElevenLabs required for viseme data driving face-animation lip sync
Gesture dispatchCustom WebRTC client + DDS arm commandsCustom (taught) gestures require FSM-state gating — see the FSM gating log entry
SafetySAFE_IDLE — independent listener on the shared mic stream, force-interrupts the pipelineNot routed through the main pipeline, by design

Deployment​

Code moves from the development machine to the robot via SSH into the Orin NX (192.168.123.164), working directly in the production venv on-device rather than a separate build/push pipeline. There is currently no CI/CD or automated deployment step — changes are made, tested, and run live on the same machine they're developed against.

Open questions​

  • GPU contention at production model scale is not yet confirmed. STT + LLM sharing the Orin NX GPU has been tested at small LLM scale (1.2B params) with no observed contention — the actual production model (a much larger model) sharing the GPU with large-v3 STT has not yet been tested under load.
  • SONIC execution-time GPU usage is unconfirmed. Gesture playback likely runs a whole-body control policy inference continuously at control frequency during a live performance — whether this competes for the same GPU as STT/LLM, or is CPU-light enough to avoid it, isn't confirmed by public documentation as of this writing.
  • Streaming/CTC-based STT (e.g. Parakeet-TDT, NVIDIA Riva) as a Whisper replacement is under evaluation to break the latency floor imposed by Whisper's full-attention architecture — not yet implemented.