优化了副驾座椅控制

This commit is contained in:
minghanchen
2026-08-25 11:39:41 +08:00
parent 33c92d1352
commit 9ac8fdface
34 changed files with 31714 additions and 289 deletions
@@ -0,0 +1 @@
,orin,ubuntu,25.08.2026 09:37,file:///home/orin/.config/libreoffice/4;
@@ -0,0 +1,111 @@
# 自然语言转 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 台架测试,并记录原始报文、状态回馈和物理动作。
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,48 @@
# 自然语言转 CAN 控制指令组合测试说明
- 生成日期:2026-08-24
- 总用例数:**1133**
- 执行方式:本地规则、`dry_run`,不发送真实 CAN 帧
- 完整逐条清单:`docs/testing/自然语言转CAN组合测试用例.csv`
- 机器可执行数据:`tests/fixtures/natural_can_command_combination_suite.json`
## 覆盖数量
| 用例类型 | 数量 |
| --- | ---: |
| `atomic` | 177 |
| `cross_can0_can1` | 120 |
| `four_command` | 126 |
| `multi_command_scene` | 10 |
| `pairwise` | 300 |
| `pairwise_separator_variant` | 300 |
| `safety_rejection` | 16 |
| `three_command` | 84 |
| 通道 | 数量 |
| --- | ---: |
| `can0` | 13 |
| `can0+can1` | 205 |
| `can1` | 899 |
| `none` | 16 |
## 组合策略
1. 原子用例覆盖 CAN1 门锁、车窗、空调、风口、主驾座椅、灯光、遮阳帘,以及 CAN0 副驾座椅。
2. 两两组合从 25 个互不冲突的控制槽中取组合,同时覆盖中文逗号和分号分隔形式。
3. 三指令和四指令组合覆盖 CAN0/CAN1、座椅、空调、灯光、车窗、门锁、风口与遮阳帘的交叉。
4. 跨通道组合明确检查副驾座椅留在 CAN0、主驾和车身控制留在 CAN1。
5. 多指令场景覆盖观影、双座椅、全温区空调、泊车关闭、车窗与遮阳帘等常用场景。
6. 安全用例要求白名单外目标、档位、能力和矛盾指令不生成 CAN 控制流。
## 执行
```bash
PYTHONPATH=src:domains/seat/src .venv/bin/python -m pytest -q tests/integration/test_natural_can_command_combinations.py
```
重新生成清单:
```bash
.venv/bin/python tools/generate_natural_can_command_suite.py
```