# 无机器人版闭环实测（2026-10-31）

机器人不可达时，用 `demo_closed_loop.py` 在终端跑同一条 Runtime 链路：视频帧 → 本地 Qwen3-VL-2B → 连续证据门槛 → 询问 → 明确同意 → Mock 服务。**没有真机运动，没有机器人扬声器。**

## 命令

```powershell
cd C:\Users\Lenovo\Documents\ChatGPT\黑客松比赛\familymate
.\.venv\Scripts\python.exe demo_closed_loop.py --video data\0dfc18....mp4 --no-voice
```

- `--wav logs\asr_confirmation.wav`：用真实录音识别代替固定回答（走 Windows 中文语音引擎）。
- `--mic`：电脑麦克风现场听一句。
- 不加 `--no-voice` 就用电脑扬声器播报询问。
- 全程使用 `MockRobot`；真实模式需另外三重条件（环境开关 + 板端 workmode=2 + UI 切换），本脚本不会启用。

## 实测输出（2026-10-31 14:41，原样）

```text
[  0.0s] 模式：MOCK · 模拟，无真机通信；不连接真机运控
[  1.1s] 素材 0dfc18604fb84feeb1d7e761f051a3dc.mp4：5 帧，8 秒；按 2 秒/帧回放
[ 23.0s] 事件 proposal SIMULATED_CALL
[ 23.0s] 询问：看你一直捂着肚子，是不是有点不舒服？需要我帮忙吗？如果需要，我可以演示拨打 120 或你指定的号码，但不会真的打出去。
[ 23.0s] 等待明确回答……
[ 23.0s] 听到：需要（置信度 1.00）
[ 23.0s] 服务：腹部关怀 · 模拟拨号
   · 已同意模拟拨号：好的，我来演示打电话。这里只是假装拨号，不会真的拨出去。
   · 模拟拨号中 · 未连接电话网络：嘟，嘟，正在模拟等待接听。
   · 模拟结束 · 没有真实通话：模拟拨号结束，没有拨出真实电话，也没有联系任何人。
[ 23.0s] 状态 EXECUTING；最近动作 SIMULATED_CALL
```

## 时间账（同一台机器，RTX 5060 Laptop）

| 阶段 | 耗时 |
|---|---|
| 模型加载（首次） | 约 8–10 s |
| 单次多帧分析 | 约 12–15 s |
| 两次证据 + 询问 | 23 s（从 0 秒起算） |
| 全流程到 EXECUTING | 约 23 s |

含义：现场演示时"动作保持 20–30 秒"是必要的，不是模型慢的问题，而是证据门槛（≥2 轮、跨 ≥4 秒、模型间隔 ≥8 秒）决定的。

## 与真机演示的差距（说清楚）

- 肢体动作 → 只有模拟日志；真实模式代码已完成但未真机验证。
- 语音 → 本次用 `--no-voice`；用电脑 SAPI 已验证可播报（单独测试 rc=0）。机器人扬声器本次不可达。
- 视觉 → 用的是已录素材；摄像头的采集链路单独验证可读帧（DSHOW 640×480）。

## 录屏用法

这个脚本适合作为"技术证据"镜头：把终端字号调大、清屏、跑一遍，23 秒内能看到完整因果链。主宣传片仍建议用 8501 界面 + 摄像头，见 `reports/demo_script_20261031.md`。
