Files
Cognitive_Agent/docs/workflows/t2g-seat-hardware-bench.md
T

133 lines
15 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# T2G 座椅真实硬件台架接入
本链路把前端一句话生成的 `FunctionConfig` 确定性编译为统一 IAR 固件的经典 CAN 协议,并以开发板真实反馈作为成功依据。默认仍为 `dry_run`;只有服务端启用硬件且目标通过门禁时才会打开 CAN 适配器。生产/公网环境默认还要求每次请求携带正确授权令牌;本地受控调试可显式关闭该令牌门禁。
## 自包含固件
仓库已经包含完整构建输入:
```text
firmware/t2g/
├── CYPRESS_SDK_LICENSE.txt
├── common/
├── tviibh8m/
└── Seat_Controller_demo/
├── App/ Bsp/ Config/ Driver/
├── Docs/ Tests/
└── IAR/Seat_Controller_demo.ewp
```
因此迁移仓库后不再依赖原电脑桌面的 `T2G_Sample_Driver_Library_7.9.0`。IAR、CMSIS-DAP 与 ZLG 驱动属于本机工具链/硬件驱动,仍须在台架电脑安装。
```powershell
powershell -ExecutionPolicy Bypass -File .\tools\build_seat_firmware.ps1
```
构建脚本只使用仓库内 `common/tviibh8m`,在临时目录编译并回写 HEX/OUT,不连接探针、不烧录、不启动执行器。非标准 IAR 路径可通过 `COGNITIVE_AGENT_IAR_BUILD` 或 `-IarBuild` 指定。
## 四轴与量程
统一坐标为最近端 `0 Hall = 0%`,朝最远端 Hall 增加,`0x302.Value_X100` 范围为 0–10000。
| MotorID | 前端能力 | 物理执行器 | 最近端 → 最远端 | MaxHall | 全量程 |
| ---: | --- | --- | --- | ---: | ---: |
| M0 | `seat.set_longitudinal_position` | 水平前后 | 最前 → 最后 | 499(本台架最新实测;标称 480) | 215 mm |
| M1 | `seat.set_cushion_tilt` | 坐盆斜上下 | 最高 → 斜向下 | 374 | 水平 51 mm / 垂直 56 mm |
| M2 | `seat.set_backrest_recline` | 靠背 | 竖直 → 后躺 | 917 | 68° |
| M3 | `seat.set_legrest_height` | 腿托 | 最下 → 抬起 | 647 | 72° |
四轴与 physical Mode 同号,均已纳入硬件映射;台架不实现独立腿托伸缩轴,因此 `seat.set_legrest_extension` 只保留虚拟展示,真实请求会在打开 CAN 前拒绝。
## CAN 协议与反馈
- 热管理命令:`0x29E/0x3CE`;档位反馈:`0x4FA`。
- 移动命令:`0x300`;系统 ACK:`0x301`;归一化位置:`0x302`;Hall/量程:`0x303`。
- 电流诊断:`0x304` 四轴轮询,`0x305` 通风/加热;动态模式:`0x306` 以100 ms周期报告模式、阶段、循环和活动轴。这些诊断值用于台架可见性,当前保守阈值不能替代外部限流或量产保护。
- 固件身份:`0x307` 以500 ms周期报告 `SMV8`、revision、build、轴数量和协议版本;当前仓库镜像为 revision 15 / build 16。
- Opcode 1 的 `ParamA` 为 1–10000 绝对位置;后端显式发送 30 s 超时覆盖值。
- 前端目标 `0%`/“归零”不是普通绝对位置,而是 `HOME_KNOWN_RANGE (0x0B)`;只有收到 `COMPLETE/OK`、Near、Hall≤2 和 PositionValid 才算成功。
- Opcode 3 的 `ParamA` 为持续时间,`ParamB` 为驱动等级×10。M0–M2 默认 90%;M3 腿托按当前台架实测使用 50%,避免高占空比下执行器保护导致 Hall 停止和请求超时。
- `STOP_ALL` 的专用 ACK 为 4;完成/故障 TaskState 分别为 6/7。
新版固件把 `0x304/0x305` 用于电流诊断,用 `0x306` 报告原生动态模式,并用 `0x307` 提供不可与旧 revision-15 镜像混淆的 build 身份。后端在任何控制帧之前被动观察 `0x301–0x307`、`0x4FA`、四个 MotorID、固件 revision 15、build 16 和各轴标称 MaxHall(允许 5% 台架差异);真实硬件执行启用后,未观察到完整新鲜签名会自动使用仓库内 IAR 镜像烧写,重新被动验证并执行四轴位置同步后继续原请求。烧写或复验失败时禁止发送座椅控制帧。运行外部单电机测试脚本后无需手工恢复生产固件,但下一次硬件请求会包含一次自动烧录和位置同步,首条请求耗时会相应增加。
## 启用配置
```dotenv
COGNITIVE_AGENT_HARDWARE_EXECUTION_ENABLED=true
COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN_REQUIRED=false
COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN=123456
COGNITIVE_AGENT_SEAT_FIRMWARE_PROFILES=combined
COGNITIVE_AGENT_SEAT_AUTO_FLASH_ENABLED=true
COGNITIVE_AGENT_SEAT_POSITION_SYNC_ENABLED=true
COGNITIVE_AGENT_IAR_CSPYBAT=D:\Program Files\IAR Systems\Embedded Workbench 9.2\common\bin\cspybat.exe
COGNITIVE_AGENT_SEAT_CAN_BACKEND=zlgcan
COGNITIVE_AGENT_SEAT_CAN_CHANNEL=0
COGNITIVE_AGENT_SEAT_CAN_BITRATE=500000
COGNITIVE_AGENT_SEAT_AUTO_HOME_ENABLED=false
COGNITIVE_AGENT_SEAT_HOME_TIMEOUT_S=120
```
`COGNITIVE_AGENT_HARDWARE_APPROVAL_TOKEN_REQUIRED` 默认为 `true`,生产和公网部署应保持默认值。本地受控台架调试可显式设为 `false`,此时前端隐藏令牌输入且服务端不再逐请求校验令牌;硬件启用、固件、适配器、副驾目标、物理反馈和故障 STOP_ALL 等其他门禁保持不变。
## 公网多人使用与本地审批租约
公网用户选择“真实台架”后,浏览器会创建一个保存在本机 `localStorage` 的随机终端 ID。用户填写可识别的终端名称并点击“向本地申请”;申请只进入等待队列,未获批、已拒绝或已过期的执行请求会在打开 CAN 前返回 `hardware_access_required`。
台架操作员在台架电脑打开 `http://127.0.0.1:8000/hardware-control`,可查看所有等待终端并执行:
- 同意其中一台终端;若已有使用者,新的同意会撤销旧租约。
- 拒绝等待中的申请。
- 停止当前终端的使用权;后续请求立即失效。
审批页面和 `/api/local/hardware-access*` 只接受无代理头的本机回环请求。通过公网域名、Caddy 或 SSH 反向隧道访问会返回 `403 local_access_required`,即使已经登录也不能远程审批。
同一时间只有一台终端持有租约。获批后可连续执行多项真实台架测试,每次真正取得台架执行锁时刷新活跃时间;动作正在执行时不会因超时被中途撤权。最后一次动作完成后空闲 180 秒,租约自动停止,再次使用必须重新申请。用户也可点击“停止使用”主动释放。进程重启会清空全部申请和租约,以安全关闭状态重新开始。租约负责“谁可以用”,进程级单动作互斥继续负责防止同一获批终端的并发 CAN 指令互相覆盖。
`COGNITIVE_AGENT_SEAT_AUTO_FLASH_ENABLED` 在真实硬件执行启用时默认为 `true`,上面的显式配置便于台架审计;如需禁止自动覆盖控制器固件,可明确设置为 `false`。此默认值不会影响 `dry_run`。
当前台架只公布并接受副驾目标 `passenger/front_right`。没有座位词的座椅指令默认副驾;显式主驾、主副驾或前排范围请求会在打开 CAN 前拒绝,不能静默重定向。热管理 CAN 中仍出现的 `Driver_Seat_*` 是板端既有协议字段名,不代表应用层可以控制主驾。
按时长移动使用 Opcode `0x03`,语义层先按轴钳制到安全时长上限:M0/M2 30 秒、M1 20 秒、M3 25 秒,最小时长 300 ms。运动提前碰到正确方向的机械端点时,执行器必须结合 `0x302` 的 Near/Far、`Position_Valid/Value_X100` 和 `0x303` Hall 证据判断;证据一致时端点返回属于成功完成并向前端报告实际执行秒数,证据不一致的 STALL/TIMEOUT 仍属于真实故障。相对或绝对位置超量程统一钳制到目标方向端点,并在前端明确显示备用目标,不能静默不执行。
## 绝对位置与已知量程归零
绝对命令发送前必须看到 `Position_Valid=1`。SMV8 clean 记录有效时,一句话可以直接下发绝对目标;位置无效时默认失败关闭,不会静默触发全行程标定。
`COGNITIVE_AGENT_SEAT_POSITION_SYNC_ENABLED` 在真实硬件执行启用时默认为 `true`。服务进程的第一次物理移动必须先对 M0–M3 依次执行 `HOME_KNOWN_RANGE(0x0B)`,以实际近端重建四轴 Hall 与 SMV8 基准;一旦固件守卫发现控制器运行过其他程序并重新烧写仓库固件,同一同步状态立即失效,下一次物理移动前再次执行四轴归零。完整 HIL 工具也会在每次套件开始时强制四轴归零,避免“其他程序移动过台架,但旧 WorkFlash 仍显示 PositionValid”的情况。显式四轴归零请求本身可完成同步,不会先重复执行另一轮归零。
台架无遮挡、急停就绪并且明确允许自动回最近端时,可设置 `COGNITIVE_AGENT_SEAT_AUTO_HOME_ENABLED=true`。后端仅对目标失效轴发送 `HOME_KNOWN_RANGE(0x0B)`,先核对 MaxHall,再等待 `COMPLETE/OK`、Near、Hall≤2 和 PositionValid,随后继续原绝对目标。此流程会产生真实机械运动,但不会访问最远端或重测量程。Opcode `0x0A` 全行程标定不会由普通一句话请求触发。
2026-08-01 长序列中记录到的 M0/M2 无 Hall、M1 高电流无 Hall 故障,后续确认由水平、坐盆和靠背 Hall 地线断开引起,并非软件标定或堵转阈值问题。2026-08-02 重新接好地线并用手工 HIL GUI 验证后,仓库 revision 6 自动烧写成功,四轴均从机械零位以 `PositionValid=1` 启动;自动前端 HIL 的 33 条热功能、单轴、四轴归零、组合和预设模式用例全部通过。因此测试清单中的临时 `safety_blocked` 已撤销。若以后再次出现同类现象,仍应以命令期间 `0x303` Hall 与 `0x304` 电流联合诊断,不能通过提高 Duty 或阈值掩盖线路故障。
2026-08-03 revision 7加入`START_DYNAMIC_MODE(0x0E)`、`STOP_DYNAMIC_MODE(0x0F)`和`0x306`;revision 8验证了连续循环、循环中停止、堵转/无运动保护和ECU启动累计600 s自动停止的公共动态模式运行时。旧ModeID 1轨迹现已从固件、长期库和前端能力中移除,revision 11复用ModeID 1实现木马模式。
2026-08-04 revision 8复测时,公共动态运行时曾单次连续运行600.024 s并自动返回全零IDLE且无FAULT;循环中`STOP_DYNAMIC`也通过。同期动态摇篮被实台M1坐盆轴的真实STALL阻断,独立单轴复测同样在Hall约169失速;后续已恢复机构运动并保留安全全停,未通过降低目标或屏蔽堵转保护改判。
同日revision 9把摇篮改为位置闭环会合,不再使用固定30 s阶段。M1以`0x0B`从Hall 169连续回近端0且保持MaxHall=374后,Step 1→2实测17.329 s、启动/到位离散0.077/0.338 s;Step 2→3实测15.155 s、离散0.079/0.495 s;目标精确、CycleIndex进入1、下一轮四轴启动离散0.082 s、停止全零,PASS。证据见`artifacts/hil/dynamic_cradle_rev9_20260804.json`。Step 3和Step 1坐标相同,其边界是零位移原子换轮;可观测同步动作是紧随其后的下一轮Step 1→2四轴启动。
同日revision 10移除revision 9中“M1先走10 Hall、等待其他轴预备到位后再单独追赶”的临时避让。正向/返回四轴从阶段开始即全程联动;水平/靠背达到约25%行程时,坐盆已分别完成44.0%/39.0%,启动离散0.070/0.050 s,到位离散0.342/0.339 s,下一轮启动离散0.051 s,无FAULT并可正常停止。证据见`artifacts/hil/dynamic_cradle_rev10_continuous_cruise_20260804.json`。
同日revision 11移除旧ModeID 1轨迹并加入木马模式。入口为`[320,190,500,430]`,连续端点为前俯`[290,220,460,400]`与后仰`[350,160,540,460]`;稳态完整循环约9.0 s。实测两个稳态半周期四轴启动离散0.080/0.079 s、到位离散0.234/0.232 s;水平轴到25%时坐盆已达41.7%/36.7%,目标误差不超过1 Hall,自动续环与循环中停止均PASS。证据见`artifacts/hil/rocking_horse_rev11_20260804.json`。
同日revision 12把木马坐盆端点由`220↔160`扩大为`250↔130` Hall,并把M1巡航占空比由50%提升为90%。峰峰上下行程由60增至120 Hall,折算垂直分量约由9 mm增至18 mm;稳态前俯/后仰启动离散0.054/0.081 s,到位离散0.389/0.182 s,水平轴到25%时坐盆已完成46.6%/35.8%,完整循环约9.2 s。目标误差不超过2 Hall、无FAULT、自动续环与停止全零均PASS。证据见`artifacts/hil/rocking_horse_rev12_cushion_amplitude_20260804.json`。
同日revision 13加入坐盆斜向运动的水平前馈补偿:木马M0端点由`290↔350`扩大为`270↔370` Hall,峰峰行程100 Hall,巡航Duty由50%提升为90%。按台架M0 MaxHall=499换算水平峰峰行程约43.1 mm,扣除M1斜向行程估算的16.4 mm反向水平分量后,净水平摆幅约26.7 mm。稳态前俯/后仰启动离散0.077/0.052 s,到位离散0.337/0.182 s;巡航检查点四轴均持续推进,目标误差不超过1 Hall、无FAULT、自动续环与停止全零均PASS。证据见`artifacts/hil/rocking_horse_rev13_horizontal_compensation_20260804.json`。
2026-08-02 时长/超量程规则完成后,扩充清单的真实回归结果为 161/161 通过、0 失败、0 `safety_blocked`,最终清理和独立物理复核均通过。报告位于 `artifacts/hil/seat_frontend_hil_20260802_full_timed_overflow.json`;复核时加热/通风为 0 档,M0/M1/M2/M3 均为 0%,全部 `Position_Valid=1`。
2026-08-02 增加 GPT-5.6-sol 模糊意图与位置记忆同步后,完整回归为 162/162 通过;“前舱空间太挤了,把座椅调整到舒服的位置”明确记录 `provider_used=openai:gpt-5.6-sol`,物理目标为 M0/M1/M2/M3=`80/30/35/10%`。报告位于 `artifacts/hil/seat_frontend_hil_20260802_full_gpt56_position_sync.json`;最终独立复核仍为热管理关闭、四轴 0% 且全部 `Position_Valid=1`。
同日第二轮覆盖审计将清单扩充到 186 条,并修复未支持座位范围误默认到副驾、端点词跨轴污染两个风险。新增 24 条真实台架用例全部通过,包含 3 条 GPT-5.6-sol 模糊同义句、正常/最小时长、逐轴端点、超量程和 6 条无动作安全拒绝;报告位于 `artifacts/hil/seat_frontend_hil_20260802_new_coverage_targeted.json`。软件回归为 156 个测试、248 个子测试通过;最终独立 CAN 复核为热管理关闭、四轴 0% 且全部 `Position_Valid=1`。
## 上电与安全检查
1. 固定座椅,清空四轴全行程,准备硬件急停和 12 V 限流电源。
2. CAN4:RX=P3.7、TX=P3.6、P3.1 收发器使能;CANH/CANL 正确、共地、总线两端各 120 Ω。
3. 使用 Classic CAN、11-bit、DLC 8、500 kbit/s;ZCANPRO 与服务不能同时独占适配器。
4. 首次动作只做单轴短行程并目视核对 M0/M1/M2/M3 与方向;任一映射异常立即急停。
5. 先验证通风/加热关闭与低档,再执行移动;无示波器时不得声称 PWM、死区或硬实时关断已经验证。
6. 每次检查 `ExecutionReport.spec.mode=hil`、协议签名、命令帧、ACK、位置/Hall 回读与失败后的 STOP_ALL。
完整固件协议、HIL 结果和手工回归工具位于 `firmware/t2g/Seat_Controller_demo/Docs` 与 `Tests/manual_hil`。