feat: 完善 N7 智能座舱交互与控制链路

This commit is contained in:
vee
2026-09-07 15:34:59 +08:00
parent 32d179143f
commit c96970f068
100 changed files with 30088 additions and 1174 deletions
+1 -1
View File
@@ -70,7 +70,7 @@
| 指令/能力 | 当前状态 | 发送逻辑 |
| --- | --- | --- |
| `ac compressor <on\|off>` | `climate.set_ac` 在后端能力层可编译,但当前没有对应的直接精确文本解析入口 | 若由受信能力层调用:`0x1DE` 经典 CAN,3 帧,间隔 100 ms,反馈 ID `0x404`;但本项不是直接指令白名单入口 |
| `ac compressor <on\|off>` | 能力目录保留 `climate.set_ac` 的虚拟编排;矩阵显示其应使用独立请求位和 `0x0DB` 反馈,但尚未完成实车 HIL 闭环验证,因此不属于原生 CAN 白名单 | 物理执行拒绝,发送 0 帧;不得复用空调电源位或把虚拟结果描述为车端完成 |
| `door vehicle <lock\|unlock>` | 可解析,但当前 CH1 实车验证未观察到有效整车门锁动作,因此会被安全拒绝,不属于可下发白名单 | 安全门禁拒绝,发送 0 帧 |
| `ac defrost <on\|off>` | 存在旧解析入口,但当前 CAN1 运行时未实现;前除霜应使用 `ac mode defrost` | 编译门禁拒绝,发送 0 帧 |
@@ -0,0 +1,424 @@
# N7 红外学习与 NFC 外设场景设计
## 1. 设计边界
本方案严格基于当前自扩展链路:
```text
外设原遥控器
→ 红外学习器学习动作信号
→ 动作与设备/槽位信息写入 NFC 能力卡
→ 车端 NFC 读卡器识别设备卡或场景卡
→ 场景结合车端实时状态和 CAN 反馈进行编排
→ 红外控制器发射已学习信号
→ 外设执行动作
```
由此产生三个设计原则:
1. 外设必须真正使用红外遥控,不能把蓝牙、2.4 GHz RF、Wi-Fi 或自制传感器设备混入当前链路;
2. 车端有权威状态反馈,可以用于条件、分支和阶段完成;红外外设通常没有状态回传,因此只能标记“红外指令已发出”,不能声称物理动作已确认;
3. 深度联动应采用“NFC 选择/触发 → 车端设备执行并等待反馈 → 满足条件后发射外设红外动作”,而不是让多个设备无条件同时开关。
## 2. 红外外设准入条件
适合进入预设和自定义场景的外设应满足:
- 遥控器确认为 36~40 kHz 常见红外载波,而不是 RF、蓝牙或 2.4 GHz;
- 每个关键能力具有固定、可重复学习的红外码,无滚动码或动态配对;
- 优先提供独立 `ON`、`OFF`、固定颜色、固定档位和固定模式指令;
- 只有单一 `POWER TOGGLE` 或循环切换模式的设备,不进入自动预设,只允许人工单次控制;
- 动作在 1~3 次重复发射下稳定,长按型动作必须验证重复周期和停止指令;
- 外设使用 5V USB 或受控 12V 低压供电,功率、温升和固定方式适合车内;
- 红外接收窗可被控制器稳定照射,设备安装后不易遮挡或移动;
- 外设失控不会夹伤、烫伤、影响驾驶或阻断车端安全能力;
- 动态灯光、投影和移动玩具只能在 P 挡、零车速场景运行。
### 2.1 学习验收
每个候选外设在进入能力目录前至少验证:
| 项目 | 要求 |
|---|---|
| 协议类型 | 红外学习器能稳定识别,不是 RF/BLE |
| 单动作复现 | 连续执行 30 次,成功率达到展项要求 |
| 幂等性 | 重复发送固定 ON/OFF/档位不会产生相反结果 |
| 响应时间 | 记录发射次数、间隔和设备响应延迟 |
| 断电恢复 | 明确断电后默认状态,不能依赖未知记忆状态 |
| 码冲突 | 同一车内其他外设不会被该动作误触发 |
| 安装 | 接收窗与发射器保持视距,颠簸后仍然可靠 |
## 3. 符合车端需求的外设清单
## 3.1 A 级:建议作为首批展示和产品外设
| 外设 | 车端真实需求 | 必须具备的红外遥控能力 | 可联动车端能力 | 适用场景 |
|---|---|---|---|---|
| 红外 RGB/流水灯带 | 原车氛围灯亮度和动态效果不足;缺少空间状态提示 | 独立开/关、固定色、亮度、呼吸、渐变、流水、速度 | 原车氛围灯、阅读灯、车窗、遮阳帘、空调、无线充电 | 光域增强、离车检查、充电提示、影院、故事 |
| 红外星空投影灯 | 驻车休息和儿童场景缺少顶部沉浸效果 | 独立开/关、固定颜色、旋转开/关、亮度、定时 | 遮阳帘、阅读灯、座椅、空调、氛围灯 | 星际故事、晚安、充电休憩 |
| 红外桌面/夹持风扇 | 后排或局部送风不足;暴晒后需要快速换气 | 独立开/关、1~3 档、摇头开/关、定时 | 车窗、空调、内外循环、座椅通风、舱内温度 | 极速凉舱、露营通风、局部舒适 |
| 红外故事机/白噪音机 | 充电等待、儿童陪伴、午休需要非屏幕声音 | 开/关、播放、暂停、音量档位、曲目/模式、睡眠模式 | 座椅、遮阳帘、阅读灯、空调 | 故事舱、晚安、冥想、阅读 |
| 红外机器人/玩偶 | 需要有角色感和肉眼可见的互动外设 | 唤醒、挥手、说话、唱歌、跳舞、停止、休眠 | 灯光、座椅姿态、座椅动态模式、空调风量 | 星际故事、生日、迎宾、充电游戏 |
| 红外补光灯 | 车内直播、视频会议、补妆和拍摄时原车灯位不合适 | 独立开/关、亮度档位、冷/暖/自然光、固定效果 | 遮阳帘、座椅、阅读灯、空调 | 移动摄影棚、视频会议、补妆 |
## 3.2 B 级:可以扩展,但需挑选具体型号
| 外设 | 价值 | 红外要求与问题 | 建议 |
|---|---|---|---|
| 红外微型投影仪 | 驻车影院、露营娱乐 | 很多型号只有电源 Toggle,启动慢,关机可能需二次确认 | 选择具备独立关机指令、自动信号源和稳定启动时间的型号 |
| 红外空气净化器 | 停车休息、宠物和空气舒适 | 需排除臭氧/强离子模式;体积和供电需适车 | 仅作为空调辅助,不能冒充车端空气质量保障 |
| 红外露营灯/尾门灯 | 尾门和帐篷区照明 | 动态模式可能通过循环键选择,状态不确定 | 只学习固定暖光、白光、亮度和明确关闭 |
| 红外 LED 字幕牌/像素屏 | 生日、应援、露营提示 | 遥控器通常只能切换预置内容,不能动态写文字 | 提前写入固定图案,把红外动作定义为“播放预设 1/2/3” |
| 红外香氛机 | 午休、迎宾和放松 | 液体倾倒、过敏、宠物和儿童限制 | 只选防倾倒、低压、雾化与灯光分离控制型号,默认不参与场景 |
## 3.3 C 级:不建议进入首批车端场景
- 只有 RF/蓝牙遥控的遥控车、无人机和大量消费级玩具;
- 依赖长按且没有独立 STOP 的移动玩具;
- 电热毯、暖风机、加热坐垫等高热设备;
- 无防护激光投影、UV 消毒灯和高亮快闪设备;
- 易倾倒加湿器、开放液体装置和烟雾机;
- 高扭矩机械支架、伸缩机构和裸露电机;
- 仅有电源 Toggle 且无法确定当前状态的设备。
## 4. NFC 卡设计
建议把 NFC 分成两类,既符合当前学习链路,也方便构建预设和自定义场景。
### 4.1 外设能力卡
每个红外外设对应一张能力卡,记录:
```yaml
kind: PeripheralCapabilityCard
device_id: ir-strip-01
device_type: ambient_light_strip
capabilities:
- name: light.power_on
ir_slot: 21
- name: light.power_off
ir_slot: 22
- name: light.blue
ir_slot: 23
- name: light.breathe
ir_slot: 24
compatibility:
power: usb_5v
parked_only_effects: [flash, chase]
```
刷外设卡用于识别设备、导入能力、单项测试或替换场景中的同类设备。
### 4.2 场景卡
场景卡不重复保存所有原始红外波形,而是引用已经学习的外设能力和车端场景版本:
```yaml
kind: SceneCard
scene_id: family-space-adventure
scene_version: 3
bindings:
ambient_booster: ir-strip-01
projector: star-projector-01
story_actor: robot-01
```
用户刷“月球、火星、返航、极速凉舱、影院”等实体场景卡,即可触发预设或自定义功能。
## 5. 场景一:光语座舱
### 5.1 产品需求
原车氛围灯不仅偏弱,车辆状态也集中显示在屏幕。外接红外灯带可以同时承担氛围增强和离散状态提示。虽然红外无法做连续参数控制,但固定颜色、呼吸、流水和快慢模式足够形成状态语言。
### 5.2 车端状态驱动灯带
| 车端状态 | 红外灯带动作 | 原车设备配合 |
|---|---|---|
| 正常氛围模式 | 固定主题色或低速渐变 | 原车氛围灯同色低亮 |
| 座椅正在调整 | 蓝色流水 | 座椅到位后切换固定蓝色 |
| 动态摇篮运行 | 蓝色呼吸或慢速渐变 | 停止后恢复当前主题 |
| 空调高风量制冷 | 蓝色快速渐变 | 风量降低后切换慢速渐变 |
| 任一车窗未关好 | 红色慢闪 | 全部车窗反馈关闭后绿灯一次 |
| 遮阳帘移动 | 暖白呼吸 | 到位后恢复主题色 |
| 手机正在无线充电 | 蓝色呼吸 | 满电切换绿色,故障切换红色闪烁 |
| 场景正常结束 | 绿色呼吸一次后恢复/关闭 | 依据场景恢复原车灯光 |
### 5.3 状态优先级
灯带同一时间只能处于一个红外模式,必须规定优先级:
```text
车窗/无线充电故障提示
> 场景中止提示
> 座椅/遮阳帘运动反馈
> 充电与空调状态
> 普通氛围效果
```
仅在状态变化时发射红外信号,并设置最小保持时间,避免车端状态抖动导致频繁切换。
### 5.4 自定义示例
> 我的副驾座椅调整时灯带用蓝色流水,到位后变成湖蓝;如果有车窗没关好,始终优先红色慢闪。
## 6. 场景二:烈日快速凉舱
### 6.1 产品需求
车辆暴晒后,仅靠空调内循环降温较慢;外接红外风扇可以辅助排出热空气并改善副驾或后排局部送风。车端舱温、车窗和空调反馈决定外设风扇的运行阶段。
### 6.2 状态驱动流程
1. 用户刷“极速凉舱”场景卡或选择预设;
2. 系统确认 P 挡、零车速和舱内温度高于设定阈值;
3. 车窗打开到预设通风开度;只有实际车窗反馈匹配后,才向红外风扇发送“高档 + 摇头”;
4. 灯带显示橙色快速渐变,表示热空气排出阶段;
5. 达到通风时长或舱温开始下降后,车窗关闭;
6. 必须等待四窗全部关闭反馈,才切换空调低温、内循环、高风量、副驾座椅通风;
7. 红外风扇切换中档,灯带切换蓝色渐变;
8. 舱温达到目标范围后,外接风扇降到低档或关闭,车端空调恢复舒适档,灯带变为稳定湖蓝;
9. 任何车窗关闭失败都不会进入内循环完成状态,界面和灯带保持故障提示。
外接风扇没有物理反馈,因此执行报告写“风扇高档红外指令已发出”,舱温变化只能作为整体效果证据,不能证明风扇自身状态。
## 7. 场景三:驻车沉浸影院
### 7.1 外设
- 红外微型投影仪或星空投影灯;
- 红外灯带;
- 可选红外音响/白噪音设备;
- 可选红外风扇。
### 7.2 联动流程
1. 刷“影院外设套装卡”或“驻车影院”场景卡;
2. 校验 P 挡和零车速;
3. 关闭四窗、关闭遮阳帘、关闭阅读灯,副驾进入影院姿态,空调进入低噪声档;
4. 场景等待四窗、遮阳帘和座椅的真实反馈;
5. 只有遮光和座椅条件满足后,才发送投影仪/星空灯 ON、灯带深蓝和外部音响播放;
6. 座椅被人工调整时,影院继续,但场景释放座椅,不在结束时覆盖用户的新姿态;
7. 挡位离开 P 或用户取消时,优先发送外设明确 OFF,再停止动态灯效并恢复仍由场景持有的车端资源;
8. 如果投影设备只有 Power Toggle,不允许加入该预设。
这比“同时打开投影和调座椅”多了一层必要关系:车辆先完成遮光、姿态和安全条件,外设才进入工作状态。
## 8. 场景四:NFC 星际故事卡
### 8.1 产品需求
充电和停车等待时,通过实体 NFC 卡选择故事章节,减少儿童持续观看屏幕。红外玩偶、投影灯和灯带提供外部角色与舞台,车端座椅、空调和遮阳帘成为剧情的一部分。
### 8.2 外设与场景卡
- 红外星空投影灯;
- 红外故事机器人/玩偶;
- 红外灯带;
- 可选红外风扇;
- “启程、月球、火星、返航”四张 NFC 场景卡。
### 8.3 章节联动
#### 启程卡
1. 检查 P 挡和零车速;
2. 遮阳帘关闭、阅读灯关闭、副驾进入休闲姿态;
3. 遮阳帘反馈到位后,星空投影灯开启;
4. 座椅反馈到位后,玩偶执行“挥手 + 发射台词”;
5. 灯带进入蓝色流水,空调风量短时提高形成“启动气流”。
#### 月球卡
- 原车氛围灯切换冷蓝;
- 灯带切换白蓝呼吸;
- 空调转为低风量;
- 原车灯光反馈匹配后,玩偶讲述月球章节;
- 投影灯切换白色星空和慢速旋转。
#### 火星卡
- 原车氛围灯和灯带切换红色;
- 副驾短时进入轻柔动态摇篮;
- 动态模式反馈开始后,风扇高档模拟沙尘气流,玩偶执行火星表演;
- 动态模式结束后,风扇降档,灯带从红闪切换稳定红色。
#### 返航卡
- 红外玩偶 STOP、投影 OFF、风扇 OFF、灯带暖白;
- 车端座椅、空调、遮阳帘和原车灯光按资源所有权恢复;
- 所有可确认车端状态恢复后,灯带发送绿色呼吸一次再关闭。
### 8.4 自定义方式
用户可以学习自己玩偶的动作,并修改实体章节卡:
> 火星卡里不要让原来的机器人表演,改成我的恐龙叫三次;返航时先关投影,再恢复座椅。
这充分利用“红外信号写入 NFC、刷卡选择能力”的现有链路,同时形成实体、无屏和可自定义的车端产品体验。
## 9. 场景五:离车确认光带
### 9.1 产品需求
离车前用户需要确认车窗、遮阳帘和无线充电位,但这些状态分散在屏幕中。灯带可以作为最终确认出口。
### 9.2 联动流程
1. 刷“离车”场景卡或在车机选择离车预设;
2. 任一车窗未完全关闭:灯带红色慢闪,车机标出具体车窗;
3. 遮阳帘未达到离车目标:灯带暖白呼吸,车机继续关闭并等待反馈;
4. 左右无线充电区域仍有设备或出现故障:灯带黄色闪烁,提醒取走手机;
5. 所有可确认项目满足后:灯带绿色呼吸一次,原车氛围灯与灯带关闭;
6. 外设灯带只负责提示,不替代车端状态判断。
这是灯带比“第三方氛围灯”更进一步的长期产品功能。
## 10. 场景六:移动摄影棚
### 10.1 外设
- 红外补光灯;
- 红外背景灯带;
- 可选红外微型风扇。
### 10.2 NFC 风格卡
- 暖肤人像;
- 冷白会议;
- 蓝紫短视频;
- 证件照。
### 10.3 联动流程
1. 刷风格卡,确认 P 挡和零车速;
2. 遮阳帘调整到该风格的目标位置,座椅进入镜头姿态;
3. 阅读灯关闭,空调降低风量和噪声;
4. 等待遮阳帘、座椅和空调状态反馈;
5. 向补光灯发送固定色温与亮度,背景灯带发送主题色;
6. 用户调整座椅后,场景释放座椅控制,不自动拉回;
7. 用户刷“摄影结束”卡,补光灯和背景灯明确 OFF,车端状态恢复。
## 11. 场景七:露营布营与收营
### 11.1 外设
- 红外露营灯/尾门灯;
- 红外风扇;
- 红外投影仪;
- 红外灯带。
### 11.2 两张关键场景卡
**布营卡**:车端先完成驻车、车窗通风开度、座椅和灯光设置;收到车端反馈后,再开启露营灯、风扇和投影。
**收营卡**:先向所有红外外设发送明确 OFF,再关闭车窗和遮阳帘、恢复座椅和空调;车端反馈全部完成后灯带绿色提示。
收营场景的实际价值高于单纯派对效果,因为它把容易遗漏的多设备关闭动作集中处理。红外外设没有状态反馈,因此界面显示“已发送关闭指令”,仍建议用户目视确认。
## 12. 推荐技术展配置
### 12.1 四件主外设
1. 红外 RGB/流水灯带:兼顾氛围增强和状态提示;
2. 红外桌面风扇:体现舱温、车窗、空调和外设的状态驱动协同;
3. 红外星空投影灯:提供强视觉效果;
4. 红外机器人/故事玩偶:提供角色和动作反馈。
可选第五件是红外补光灯,用于展示成人创作者场景。
### 12.2 六张展示卡
- 灯带能力卡;
- 风扇能力卡;
- 启程场景卡;
- 月球场景卡;
- 火星场景卡;
- 返航场景卡。
### 12.3 展示顺序
1. 分别学习灯带和风扇动作并写入能力卡,证明外设适配;
2. 刷“极速凉舱”,展示车窗反馈驱动风扇档位与灯带状态;
3. 刷“启程/月球/火星”实体卡,展示车端状态决定投影、玩偶和风扇的动作时机;
4. 刷“返航”,展示外设明确关闭、车端恢复与结果分级;
5. 修改火星卡中的玩偶绑定或动作顺序,保存为自定义场景卡。
## 13. 对现有工程的增量
### 13.1 外设能力模型增加红外特性
```yaml
transport: infrared
ir_slot: 21
idempotent: true
command_semantics: power_off
repeat: 2
interval_ms: 250
parked_only: false
physical_feedback: unavailable
```
只有 `idempotent=true` 的关键开关和固定档位能力才能进入自动预设。
### 13.2 场景增加车端反馈门控
```yaml
- id: close_shade
capability: vehicle.sunshade.set
parameters: {covered_percent: 100}
wait_for:
state: vehicle.sunshade.covered_percent
equals: 100
timeout_ms: 8000
- id: start_projector
depends_on: [close_shade]
capability: peripheral.projector.power_on
confirmation: ir_sent_only
failure_policy: continue
```
### 13.3 红外外设影子状态
车机为每个外设保存“最后一次已发送的确定指令”,仅用于避免重复操作和生成恢复计划。影子状态不能作为物理状态证据。设备重新上电、NFC 重新识别或红外链路异常后,影子状态必须失效。
### 13.4 多设备红外管理
- 记录每个外设协议、地址、重复次数和发射间隔;
- 做码冲突测试;
- 同一时刻的多个红外动作在控制器侧顺序发射;
- 控制器和设备接收窗必须保持固定视距;
- 对移动玩具保留独立 STOP,并在取消时优先发送。
### 13.5 结果分级
- `车端反馈已确认`:CAN0/CAN1 状态匹配;
- `红外网关已确认`:控制器确认接收了发射请求;
- `红外指令已发出`:无法证明外设物理状态;
- `场景已降级`:缺少外设能力,跳过可选外设节点;
- `场景已拒绝`:缺少必要的独立 OFF/STOP 或安全条件不满足。
## 14. 实施顺序
### P0:使用现有红外/NFC能力
- 按准入条件采购并筛选灯带、风扇、投影灯和玩偶;
- 学习并验证固定 ON/OFF、颜色、档位、模式和 STOP;
- 制作能力卡与“启程、月球、火星、返航”场景卡;
- 实现极速凉舱、驻车影院和星际故事三个预设;
- 自定义场景先支持替换外设、调整顺序和修改车端参数。
### P1:补齐状态驱动
- Android 场景执行器增加 `wait_for`、车端条件分支和超时降级;
- 光语座舱监听车窗、座椅、空调、遮阳帘和无线充电状态变化;
- 红外外设增加幂等性、重复参数、影子状态和恢复规则;
- 浏览器只负责编辑和观察,场景下发到车机本地执行。
### P2:形成产品目录
- 发布红外外设兼容性清单和认证测试;
- 提供官方能力卡、场景卡和可复制模板;
- 允许用户将自己学习的红外动作绑定到官方场景角色;
- 对香氛、净化、移动玩具和投影设备建立专项安全限制。