diff --git a/README.md b/README.md index e680d70..337ef91 100644 --- a/README.md +++ b/README.md @@ -218,62 +218,5 @@ The reliable path is **serial**: `speak()` → `wait_for_audio_done()` → want). Parallel is kept behind `audio_lead_s` for latency-sensitive demos where occasional dropped audio is acceptable. -## Current status (2026-04-21) - -Snapshot of what is and isn't working, so whoever picks this up next -doesn't have to rediscover it. - -**Working:** - -- End-to-end flow: RealSense → YOLO11n → tracker → compliance → - UNSAFE/SAFE/PARTIAL events → robot voice + recorded arm motion. -- Wireless-remote gated start/stop (R2+X / R2+Y) via `rt/lowstate`. -- Recorded arm replay from [assets/motions/adnoc1.jsonl](assets/motions/) - via [robot/arm_replay.py](robot/arm_replay.py) — custom teach-and-replay - trajectory instead of the canned `reject` action. -- Recorded WAV library under [assets/audio/](assets/audio/) with a - `recorded_or_tts` mode that can be toggled via `tts.mode` in config. -- TtsMaker path hardened: `AUDIO_STOP_PLAY` reset + retry + 3 s RPC - timeout + index-bug workaround (see [Audio pipeline](#audio-pipeline)). -- MJPEG stream on port 8080 for remote visual QA. -- Fully config-driven — no hard-coded IPs, paths, or thresholds in code - beyond `SAQR_ROOT` fallback and firmware API ids. -- systemd unit + `start_saqr.sh` = single entry point, survives reboots. - -**Known broken / in tension:** - -- **Audio ↔ arm firmware contention** (see [Known limitations](#known-limitations)). - Current default is parallel via `audio_lead_s=0.3` — ~50 % of UNSAFE - alerts drop their audio when arm sdk is publishing. Mitigations tested - and **none of them fix the root cause** (it's a firmware limitation). - The deterministic fix is to serialise audio-then-arm; pending decision. -- **Track-ID churn** — each re-acquisition of the same person generates a - new track id, which bypasses the per-`(track_id, status)` cooldown and - triggers a fresh UNSAFE alert. Not yet quantified, but visible in - rapid-fire `ID 0001 → 0002 → 0003` sequences for what appears to be - one worker. - -**Configuration right now:** - -- `tts.mode = "tts_only"` (firmware TTS, no recorded WAVs used). -- `motion.enabled = true`, `motion.unsafe_file = "adnoc1.jsonl"` — the - custom 7-second trajectory with 60 frames of smooth move-in and 180 - frames of smooth return-to-home. -- `bridge.audio_lead_s = 0.3` — parallel mode. -- `bridge.cooldown = 8.0` — per (track_id, status). - -**Next-session picks (prioritised):** - -1. Decide parallel-vs-serial for audio+arm and wire it in. Serial is - safer for safety-critical alerts. -2. Stabilise track-IDs or make the cooldown per-identity instead of - per-track so one worker doesn't trigger N alerts. -3. Add a boot-time self-check (camera reachable, DDS iface up, model - file present, motion JSONL parseable) so failures surface before the - first event rather than during it. -4. Rotate `logs/` — currently grows unbounded. -5. Add a `logs/events.jsonl` audit trail (one structured line per - UNSAFE/SAFE event) for post-hoc compliance review. - See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for the full component map and data flow.