Sanad Dashboard

Connecting...
CAM FACE PLACE MOVE
Operations
Voice & Audio
Motion & Replay
Controller
Navigation
Live Map
Map Editor
Recognition
Mask Face
Recordings
Temperature
Terminal
Settings & Logs

System Info

Loading...
Network interfaces
Subsystems (connected / disconnected)

Audio Control



Controls the ACTIVE speaker — G1 chest (DDS) + the selected PulseAudio sink (JBL/Anker). Applies live.
Manual sink / source override

Quick Actions

Live Voice Commands

Last heard: --
Pending action: --
Audio attached: -- | Arm attached: -- | Gemini: --

Live Gemini Process

Pause: Auto
State: --
User: --

Gemini API Key

The key used by GeminiVoiceClient and the Live Gemini subprocess. Saved to data/motions/config.json. Get a free key at aistudio.google.com/app/apikey.

Typed Replay Engine

Wake Phrase Manager

🔒 Arm actions are disabled while movement is enabled (Controller tab). Disable movement to replay / trigger / teach.

Motion Control

Replay Manager

Macro Recorder (Audio + Motion)

Voice (WAV)
Motion (JSONL)
Speed

Camera Vision & Face Recognition

--
--
Toggles take effect within ~1 second on the running Gemini session — no restart required.

Live Preview

Camera off — toggle Vision ON to see the live feed.
--
Resolution / FPS
JPEG Quality
Each button rebuilds the capture pipeline (~0.5 s). Modes match the RealSense D435I colour sensor — on USB 2.x, stick to 424×240 or 640×480. If the feed is grayscale/IR, pin the colour node with SANAD_CAMERA_USB_INDEX.

Add New Face

Tip: add 2–3 photos / different angles per person for best recognition. The description is sent to Gemini with the photos — it can then greet and talk about the person using what you wrote.

Enrolled Faces

Loading…

Zones & Places

--
Destination: none
Group locations into zones, add places inside each (name + description + optional reference photos), and link saved faces to a place. “Go here” sets a destination and shows Gemini the place — the robot drives there once movement (locomotion) is enabled.

Add New Zone

Zones

Loading…

🔋 Battery

--%
--
Voltage
--
Current
--
Pack temp
--
Cycles
--
Reading battery…
Live motor surface/winding temperatures from rt/lowstate on the full G1 (29 DOF). Blue ≈ 30°C → red ≈ 120°C. Drag to orbit, scroll to zoom. Streamed over /ws/motor-temps — no second DDS subscriber.
FSM — unknown MSC — SDK —
CAM FACE PLACE MOVE GEMINI-MOVE EXPLORE · soon
Manual operator control. Robot is assumed standing in walking mode — use Ready/Start only if needed. All controls below are locked until Enable movement is on; E-STOP always works. While movement is on, arm replays/actions are disabled (and vice-versa).

Locomotion / Teleop

Discrete step pad
vx 0.00 · vy 0.00 · ω 0.00
W/S forward·back · Q/E strafe · A/D rotate · Space halt

Postures & Modes

MotionSwitcher / Low-Level

Diagnostics — joints 12–28


    

Places

Save current pose as place

Captures the robot's current map pose under this name. Drive (or teleop) the robot to the spot first, then save. Saved places appear in the list to the left.

Missions

Multi-waypoint routes / patrols defined in web_nav3. Run executes the full sequence.

MAP NAVIGATION

map: Click: connecting…
VIEW — pick GOAL to drive, or ADD to bookmark places. Cyan = robot, green dots = this map's places. Each map has its own places. Use the Places list to Go / Move / rename / delete.

Live Map — full web_nav3 dashboard

Full web_nav3 dashboard (live map, set-pose, manual goals, missions) embedded from the robot. Also available standalone at :8765. If it stays blank, check that bringup + rosbridge are alive (see the Navigation tab) and that the robot is reachable on the network.

MAP EDITOR

map: MODE — Tool: Brush load a map…
Edit a SAVED map. Pick a map → Load & Edit. 🧽 Erase removes black phantom obstacles (paints them free); ⬛ Wall paints virtual walls / keep-outs. Click-drag to paint (brush size above). Save stores the edits per-map and applies them to the robot's navigation — it stops avoiding erased points and treats painted walls as keep-outs. Yellow = your edits. The original map .db is never modified.
unknown FACE — SPEAK —
LED face mask over Bluetooth. Check Link Gemini (below) to connect it + let Gemini show emotions; leave it off and the mask stays idle (no reconnecting). Once linked it self-heals dropped links — keep the mask near the Jetson and free it from the phone app first. Faces upload once (~25 s) then animate via PLAY.

Animated Face

Mouth 0
Face colors
Run face → it blinks/glances on its own and lip-syncs while Gemini speaks. Colors re-upload the frames (~30–60s). Auto-reconnect keeps the face alive through BLE drops.

Brightness & Text

Brightness 95
Keep ≤100 to avoid LED flicker (battery-limited).
Speed
Text overrides the animated face until you Run face / ↩ Face again.

Social / QR on Face

Social buttons show a scannable QR (short da.gd link → Instagram). Full-URL / dense QRs show full-screen but only scan if short (use QR from link below).
Saved QR codes
QR from link

Saved Text / Words

Save words/phrases, then scroll any of them across the mask on demand.

Built-in Images / Animations

Image
Anim
Built-in IMAG ids ~0–105, ANIM ids ~0–69 (values above range show garbled frames).

Skill Registry

No skills configured

Saved Records

Auto — resumes after each clip
No records saved

Terminal — unitree@robot

disconnected
Runs as the dashboard's user on the robot (typically unitree). No SSH handshake — the dashboard is already on the robot. Works on whichever Wi-Fi the robot is connected to.

Scripts Manager

Gemini persona:
Create variants (e.g. sanad_script_v2.txt) then select one and “Use for Gemini”. Default is always sanad_script.txt.

Prompt Management

Storage

loading…
“Clean all” = recordings + named records + logs. Faces, motions & zones are shown for tracking only — manage those in their own tabs.

Live Logs