112 lines
5.6 KiB
Markdown
112 lines
5.6 KiB
Markdown
# 自然语言转 CAN 控制指令测试报告
|
||
|
||
## 1. 测试结论
|
||
|
||
| 项目 | 结果 |
|
||
| --- | ---: |
|
||
| 测试日期 | 2026-08-25 |
|
||
| pytest 测试入口 | 2 |
|
||
| 生成式组合用例 | 1133 |
|
||
| 定向 CAN0/CAN1 组合用例 | 6 |
|
||
| 实际执行子用例 | **1139** |
|
||
| 通过 | **1139** |
|
||
| 失败 | **0** |
|
||
| 跳过 | **0** |
|
||
| 通过率 | **100%** |
|
||
| 执行耗时 | 35.42 s |
|
||
|
||
**结论:**当前本地规则能够将本次覆盖的自然语言控制指令正确解析为 CAN0/CAN1 语义控制指令;跨通道组合中,副驾座椅指令保持在 CAN0,主驾座椅、空调、灯光、车窗、门锁和遮阳帘等指令保持在 CAN1。白名单外指令未生成 CAN 控制流。
|
||
|
||
## 2. 测试方式
|
||
|
||
- 解析器:本地规则(`provider=local`)
|
||
- 执行模式:`dry_run`
|
||
- 硬件执行:关闭
|
||
- 真实 CAN 报文下发:未进行
|
||
- 测试入口:`tests/integration/test_natural_can_command_combinations.py`
|
||
- 机器可执行用例:`tests/fixtures/natural_can_command_combination_suite.json`
|
||
- 完整逐条用例:`docs/testing/自然语言转CAN组合测试用例.csv`
|
||
|
||
执行命令:
|
||
|
||
```bash
|
||
PYTHONPATH=src:domains/seat/src .venv/bin/python -m pytest -q tests/integration/test_natural_can_command_combinations.py
|
||
```
|
||
|
||
原始结果:
|
||
|
||
```text
|
||
2 passed, 2 warnings, 1139 subtests passed in 35.42s
|
||
```
|
||
|
||
2 个警告均为 `jsonschema.RefResolver` 弃用提示,不影响本次解析结果。
|
||
|
||
## 3. 1133 条生成式用例分布
|
||
|
||
### 3.1 按组合类型
|
||
|
||
| 用例类型 | 数量 | 说明 |
|
||
| --- | ---: | --- |
|
||
| atomic | 177 | 单条原子指令 |
|
||
| pairwise | 300 | 两两组合 |
|
||
| pairwise_separator_variant | 300 | 两两组合的不同分隔方式 |
|
||
| three_command | 84 | 三指令组合 |
|
||
| four_command | 126 | 四指令组合 |
|
||
| cross_can0_can1 | 120 | CAN0/CAN1 跨通道组合 |
|
||
| multi_command_scene | 10 | 常用多指令场景 |
|
||
| safety_rejection | 16 | 白名单外和不安全输入拒绝 |
|
||
| **合计** | **1133** | |
|
||
|
||
### 3.2 按 CAN 通道
|
||
|
||
| 预期通道 | 数量 | 说明 |
|
||
| --- | ---: | --- |
|
||
| CAN0 | 13 | 副驾座椅单通道控制 |
|
||
| CAN1 | 899 | 车身、空调、主驾座椅、灯光等控制 |
|
||
| CAN0 + CAN1 | 205 | 副驾座椅与车身功能组合控制 |
|
||
| none | 16 | 安全拒绝,不应生成控制指令 |
|
||
| **合计** | **1133** | |
|
||
|
||
## 4. 代表性解析结果
|
||
|
||
| 自然语言输入 | 通道 | 预期 CAN 语义控制指令/操作 | 结果 |
|
||
| --- | --- | --- | --- |
|
||
| 后排车门上锁 | CAN1 | `door rear lock` | 通过 |
|
||
| 打开左前车窗 | CAN1 | `window front-left open` | 通过 |
|
||
| 副驾驶座椅加热开到2档 | CAN0 | `seat.set_heating(state=on, level=2)` | 通过 |
|
||
| 后排车门上锁,打开左前车窗,副驾驶座椅加热开到2档 | CAN0 + CAN1 | CAN1: `door rear lock`; CAN1: `window front-left open`; CAN0: `seat.set_heating(state=on, level=2)` | 通过 |
|
||
| 开启木马模式并打开氛围灯 | CAN0 + CAN1 | CAN0: `seat.start_dynamic_mode(mode_id=1)`; CAN1: `light ambient on` | 通过 |
|
||
| 开启动态摇篮模式,空调24度,打开遮阳帘 | CAN0 + CAN1 | CAN0: `seat.start_dynamic_mode(mode_id=2)`; CAN1: `ac temp driver 24`; CAN1: `shade open` | 通过 |
|
||
| 副驾座椅前后调到20%、坐盆调到30%、靠背调到40%、腿托调到50%,空调风量3档,关闭全部车窗 | CAN0 + CAN1 | CAN0: 四轴绝对位置 20/30/40/50; CAN1: `ac fan 3`; CAN1: `window all close` | 通过 |
|
||
| 副驾靠背向后移动15%,主驾温度设为25度,遮阳帘打开 | CAN0 + CAN1 | CAN0: 靠背相对后移 15%; CAN1: `ac temp driver 25`; CAN1: `shade open` | 通过 |
|
||
| 主驾座椅通风4档 | none | 白名单外,不生成 CAN 指令 | 通过 |
|
||
| 主驾进入零重力模式 | none | 未验证能力,不生成 CAN 指令 | 通过 |
|
||
|
||
## 5. 6 条新增定向 CAN0/CAN1 用例
|
||
|
||
| # | 自然语言 | CAN0 结果 | CAN1 结果 |
|
||
| ---: | --- | --- | --- |
|
||
| 1 | 把副驾座椅水平位置调到35%,空调温度设置为24度,打开氛围灯 | 水平绝对位置 35% | `ac temp driver 24`; `light ambient on` |
|
||
| 2 | 副驾坐盆向上调整10%,关闭后排车窗,空调风量2档 | 坐盆相对上调 10% | `window rear close`; `ac fan 2` |
|
||
| 3 | 开启木马模式并打开氛围灯 | 木马模式 | `light ambient on` |
|
||
| 4 | 开启动态摇篮模式,空调24度,打开遮阳帘 | 摇篮模式 | `ac temp driver 24`; `shade open` |
|
||
| 5 | 副驾座椅前后调到20%、坐盆调到30%、靠背调到40%、腿托调到50%,空调风量3档,关闭全部车窗 | 四轴绝对位置 | `ac fan 3`; `window all close` |
|
||
| 6 | 副驾靠背向后移动15%,主驾温度设为25度,遮阳帘打开 | 靠背相对后移 15% | `ac temp driver 25`; `shade open` |
|
||
|
||
以上 6 条用例全部通过。
|
||
|
||
## 6. 覆盖能力
|
||
|
||
- CAN0:副驾座椅加热、通风、绝对位置、相对位置、木马模式和摇篮模式。
|
||
- CAN1:门锁、车窗、空调、风口、主驾座椅、室内灯、阅读灯、氛围灯和遮阳帘。
|
||
- 组合解析:两指令、三指令、四指令、场景化多指令以及 CAN0/CAN1 跨通道组合。
|
||
- 位置语义:主驾、副驾、左前、右前、左后、右后、前排、后排。
|
||
- 安全约束:越界档位、未验证能力和白名单外目标不生成 CAN 控制流。
|
||
|
||
## 7. 范围和限制
|
||
|
||
1. 本报告验证的是“自然语言 → CAN 语义控制指令/操作”解析层。
|
||
2. 本次使用 `dry_run`,未向真实 CAN0/CAN1 总线或 MQTT Broker 下发报文。
|
||
3. 通过本报告不等于实车执行器、USB-CAN 适配器、MQTT 转发和 ECU 物理动作已完成端到端验证。
|
||
4. 如需验证真实执行,应单独进行有线 CAN 和无线 MQTT 台架测试,并记录原始报文、状态回馈和物理动作。
|