Update 2026-04-21 10:34:53

This commit is contained in:
kassam 2026-04-21 10:34:54 +04:00
parent f9ad4aedd5
commit 0df2f2eb11

View File

@ -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.