Files
Cognitive_Agent/docs/workflows/t2g-seat-hardware-bench.md
2026-08-03 10:20:55 +08:00

11 KiB
Executable File
Raw Permalink Blame History

T2G 座椅真实硬件台架接入

本链路把前端一句话生成的 FunctionConfig 确定性编译为统一 IAR 固件的经典 CAN 协议,并以开发板真实反馈作为成功依据。默认仍为 dry_run;只有服务端启用硬件且目标通过门禁时才会打开 CAN 适配器。生产/公网环境默认还要求每次请求携带正确授权令牌;本地受控调试可显式关闭该令牌门禁。

自包含固件

仓库已经包含完整构建输入:

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 -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 通风/加热;这些值用于台架可见性,当前保守阈值不能替代外部限流或量产保护。
  • Opcode 1 的 ParamA 为 1–10000 绝对位置;后端显式发送 30 s 超时覆盖值。
  • 前端目标 0%/“归零”不是普通绝对位置,而是 HOME_KNOWN_RANGE (0x0B);只有收到 COMPLETE/OK、Near、Hall≤2 和 PositionValid 才算成功。
  • Opcode 3 的 ParamA 为持续时间,ParamB 为驱动等级×10(默认 90%)。
  • STOP_ALL 的专用 ACK 为 4;完成/故障 TaskState 分别为 6/7。

新版固件把 0x304/0x305 用于电流诊断,不能继续发送旧版身份请求。后端在任何控制帧之前被动观察 0x301–0x305、0x4FA、四个 MotorID、固件 revision 6 和各轴标称 MaxHall(允许 5% 台架差异);真实硬件执行启用后,未观察到完整签名会自动使用仓库内 IAR 镜像烧写,重新被动验证成功后继续原请求。烧写或复验失败时禁止发送座椅控制帧。

启用配置

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-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。