Wherever you feel lost, Mira guides the way.
PawGuide is a robot guide dog for airports. Mira, a Unitree Go2 with a warm, bilingual, Claude-powered personality, waits for travelers at the terminal, listens to where they need to be, and walks beside them until they get there.
We built PawGuide for the people airports overwhelm the most: travelers who can't read the local language, elderly passengers, blind and disabled travelers. Not another kiosk or app to figure out — a companion you follow.
🏆 Track winner at AdventureX 2026 (Shanghai/Hangzhou) — accepted out of 4,000+ submissions, built on-site in 4 days against 800 contestants.
PawGuide is two independent systems meeting in the middle, connected by a single OpenAPI contract:
| Repo | Side | Contents |
|---|---|---|
| Litorian113/PawGuide (this repo) | Experience stack | Native SwiftUI iOS app, Zilo voice-ring integration, Claude personality, bilingual voice pipeline, exhibition website |
| cpietsch/pawguide-tech | Robot stack | Python command center, RDK X5 motion gateway on the dog, DimOS/MuJoCo simulation, provisioning & safety interlocks |
Zilo Ring ──BLE──┐
│ OpenAPI contract MCP bridge
iPhone (Swift) ──┴── HTTPS ──► Command Center ── reviewed ──► RDK X5 ──► Unitree Go2
│ (China server) commands (on the dog)
│ │
MINISO speaker ◄── voice output └────────► DimOS / MuJoCo simulation
(on Mira's back) (same command path, no hardware)
- The phone app and ring integrate with the robot exclusively through the HTTP
API defined in
contracts/pawguide-openapi.json(see robot repo). - The RDK X5 board mounted on the dog is the sole motion gateway. It exposes
only reviewed commands (
home,demo_gate) via an MCP bridge, with an always-available STOP and automatic latching on startup or heartbeat loss — if the connection drops, Mira freezes. - The same command path runs against a hardware-free MuJoCo simulation, which is how the app and the robot were developed in parallel and merged on-site.
Pick your airport, arrival date and time, the exact terminal entrance where Mira should wait, how far she should guide you (check-in → security → gate), and how she should adapt: slower pace, step-free routes, spoken instructions, your language. You get a boarding-pass-style ticket with a QR code and one promise: "Mira will be waiting for you."
Already at the airport? Lift the Zilo voice ring off its charger — Mira wakes up
and greets you through the speaker on her back. Hold the ring's button, say where
you want to go (English or 中文), and follow her. No screen, no app to open, no
friction. Alternatively, scan the QR code on her back (pawguide://mira/<id>)
to connect the app directly.
| Feature | How it works |
|---|---|
| 🧠 Claude personality | Anthropic Claude with structured JSON replies (speech / action / destination_id) and mission phases: onboarding → en route → arrival. She banters on the walk and switches destinations mid-way. |
| 🗣️ Automatic bilingual voice | Two on-device speech recognizers (en-US + zh-CN) run in parallel on the same microphone audio; the transcript matching the spoken language wins. Claude replies in the selected app language. |
| 🔊 ChatGPT voice output | Replies are voiced by OpenAI's TTS (gpt-4o-mini-tts, "nova") and play through the Bluetooth speaker (MINISO-BT2602) mounted on the dog, with the iOS system voice as offline fallback. |
| 💍 Zilo ring integration | Full port of the ring's v4 BLE protocol (Nordic UART Service, CRC16 packet stream). Auto-pairs in the background, answers time-sync, reassembles Speex voice clips, decodes them with the bundled Speex C library, transcribes on-device and feeds Mira's brain — a completely phone-free conversation loop. |
| 🔋 Charging state as session switch | The ring's charger doubles as the on/off switch for the whole encounter: we poll its charging state over BLE, so lifting the ring wakes Mira and she greets you, and docking it back ends the session — Mira returns to her waiting spot at the terminal entrance (the X5 gateway's home command), ready for the next traveler. |
| 📏 Follow-distance ranging | The ring's RSSI is read every second, median-smoothed and converted to meters via a log-distance path-loss model (iBeacon-style). Drift beyond 2 m → Mira holds position and the guidance pauses ("I'll wait right here for you"); catch up → she resumes. |
| 🎫 Booking like a flight | Six-step flow with calendar, terminal/entrance tiles, journey scope and accessibility preferences, ending in a ticket with QR code and booking reference. |
| 🌐 Full EN/中文 localization | One toggle in Profile switches the entire UI and Mira's reply language. |
| 📱 Deep links | pawguide://mira/<robot-id> QR codes open the app from the camera and connect instantly. |
| 🖥️ Exhibition website | React + TypeScript one-pager (website/) in the PawGuide design, with hero slider, gallery lightbox and the project story. |
Demo scope: robot availability, indoor navigation and live robot communication
are simulated in the app (per hackathon scope); motion commands route through
RobotMotionController, the bridge to the Go2 sport-mode API. The BLE ranging,
ring pipeline, speech, and AI conversation run live on real hardware.
PawGuide/
├── PawGuide.xcodeproj # Xcode 16 project (folder-synced)
├── PawGuide/
│ ├── App/ # App entry, root tabs, global state
│ ├── Models/ # Robot, Airport, Destination, Booking, GuidanceSession
│ ├── Features/
│ │ ├── Home/ # Product-page landing with hero gallery
│ │ ├── Booking/ # Six-step booking flow + ticket
│ │ ├── Chat/ # Mira chat (text + mic)
│ │ ├── Scanner/ # QR scanner & connection state
│ │ ├── Navigation/ # Guidance + arrival screens
│ │ ├── Profile/ # Account, devices, language, localization (L10n)
│ │ └── Splash/ # Animated launch screen
│ ├── Services/
│ │ ├── MiraBrain/ # Claude client, personality, config
│ │ ├── Ring/ # Zilo BLE protocol, Speex decoder, ring session,
│ │ │ # follow-distance ranging, Go2 motion bridge
│ │ ├── SpeechService # Dual-language live recognition
│ │ ├── VoiceOutputService # OpenAI TTS → Bluetooth speaker
│ │ └── DeviceMonitorService# Speaker / headphone route detection
│ └── Assets.xcassets # App icon, hero renders, profile assets
├── website/ # React + TS exhibition site (Vite)
├── tools/qr-generator.html # QR code generator for robot tags
└── MiraConfig.template.swift # API-key template (see below)
- Xcode 16+, iOS 17+ (iPhone recommended — BLE, camera and speech need a device)
- Optional hardware: Zilo voice ring, Bluetooth speaker, Unitree Go2 🐕
git clone https://github.com/Litorian113/PawGuide.git
cd PawGuide
cp MiraConfig.template.swift PawGuide/Services/MiraBrain/MiraConfig.swift
# → fill in your Anthropic + OpenAI API keys (file is gitignored)
open PawGuide.xcodeproj # ⌘RWithout keys, the app falls back to an offline demo brain and the iOS system voice — the full flow still works.
Simulator tip: no camera? Connect Mira via deep link:
xcrun simctl openurl booted "pawguide://mira/mira-01"
cd website && npm install && npm run devSee cpietsch/pawguide-tech for the
command center, X5 gateway provisioning, and the MuJoCo simulation
(Python / uv, pinned DimOS base).
| Device | Role |
|---|---|
| Unitree Go2 | Mira herself |
| RDK X5 | Motion gateway mounted on the dog (robot repo) |
| Zilo voice ring | Wake, hold-to-talk, and follow-distance ranging |
| MINISO-BT2602 | Bluetooth speaker on Mira's back — her voice |
Built in 4 days at AdventureX 2026 by Franz Anhäupl (experience stack: iOS app, ring integration, voice pipeline, design) and Christopher Pietsch (robot stack: command center, X5 gateway, simulation).
Thanks to AdventureX, Zilo for the ring that unlocked the frictionless interaction, and everyone we met on-site. 🧡
You don't need to find your way alone.
