troubleshooting·
scan by symptom
| symptom | rc | fix |
|---|---|---|
| nothing responds | 3104 | DDS can't reach the bus, see below |
| arm won't move | 7404 | wrong FSM → use_unitree("loco", "SetFsmId", {"fsm_id": 500}) |
| arm holding | 7401 | g1_release_arm() |
| arm occupied | 7400 | another writer, kill stale process |
| walking refused | 7302 | use_unitree("loco", "SetFsmId", {"fsm_id": 501}) first |
| lidar silent | - | g1_lidar_switch(on=True) |
| "the robot did not move" | 0 | moved=false: not in FSM 501, or a request under 0.1 m; say set fsm 501 |
no photo, 401 in the log |
- | camera token minted at the 1970 boot clock; make token-refresh |
| voice silent, tools work | - | snoozed; make voice-status, unmute from the dashboard pill or make unmute |
| model changed, persona still old | - | "Apply to all personas" in Configuration, or docker compose up -d --force-recreate |
nothing responds (rc=3104)·
ip link show eth0 must say UP, ping 192.168.123.161 must answer, and
CYCLONEDDS_URI must be set (source env.sh). Ping fails: the Jetson is on
the wrong network, see network.
arm issues·
7404 wrong FSM: g1_arm_action(..., auto_transition=True) fixes it;
7401 holding: g1_release_arm(); 7400 occupied: a second writer on
rt/armsdk, find it with make ps and restart that persona.
telegram not responding·
docker compose logs neon-telegram, your id in TELEGRAM_ALLOWED_USERS, the
token still valid at @BotFather.
echo or fan noise in voice·
Tune in this order: stream_delay_ms (120 for the chest speaker), make sure the
USB mic was picked (g1_speak(action="debug")), then vad_threshold 0.7 to
0.85 and silence_duration_ms 700 to 1000. Details on
voice architecture.
cameras·
The dashboard is the only process that opens the cameras; everyone else pulls
GET /api/camera/<id>/snapshot with a service token. 401/403 in a
consumer log means the token is stale: the Jetson boots at 1970 until NTP and a
token minted then is dated 1980. /api/health reports
camera_proxy_token: ok|expired|missing|invalid; the Configuration env tab has a
Refresh button, make token-refresh does the same from a shell, and
use_camera re-mints once on its own. Still black: docker compose logs
neon-dashboard for the device open, and ls /dev/video* after a replug.
voice is quiet·
make voice-status. Muted gates the mic and the speaker; a snooze clears itself
at its deadline, unmute earlier from the dashboard pill, make unmute, or
Telegram /unmute. Not muted and still quiet: journalctl -u neon-voice -n 50
(provider key, mic not found, VOICE_MIC_NAME).
slow answers·
- Pick a lighter Bedrock model in Configuration (applies to the dashboard at once, "Apply to all personas" recreates the rest)
- Too many heavy tool calls: check the activity log for stray vision calls
- Context overflow: start a fresh thread (dashboard: Reset; Telegram: /reset)
"pip wheel broken"·
The unitree_sdk2_python wheel is missing subpackages; make sdk clones the
source (make run-bare does it for you).
still stuck?·
make log-show # last 30 turns, every persona, tool rows with rc
journalctl -u neon-voice -f # the voice process
docker compose logs -f neon-dashboard # cameras, auth, the dashboard agent
Or ask the agent: "read recent logs and tell me what's wrong". Else
open an issue with rc + logs.