Files
vision-anti-pinch/tests/ORIN_FPS_REPORT.md
T
zmv f87e5aad40 Fix live CAN feedback with CH0-only asynchronous risk transmission
Send 0x1F6 risk updates through a bounded latest-result worker on CH0 and disable CH1 initialization, reception, transmission and live display. Preserve the four actual-position bytes from 0x391 and recorded-session compatibility.

Include regression coverage, Orin camera/TensorRT/CAN validation, and the verified standalone binary with refreshed checksums.
2026-09-28 13:59:26 +08:00

3.6 KiB
Raw Blame History

实时摄像头 FPS 修复(2026-09-28)

以下为后台双通道发送与 FPS 修复阶段的历史验证记录,通道、二进制哈希与 Git 状态均指当时版本。最终 CH0 单通道实现和实机结果见 0x391 修复记录。

用户通过默认 ./run_camera.sh 运行实时摄像头时卡顿。原因已在宿主 Orin 复现:inferenceLoop() 同步发送 CH0、CH1 的 0x1F6,SDK 发送失败路径两通道合计等待约 3 秒,使结果发布和后续推理一起停顿。

真实硬件对照

设备:Jetson AGX Orin、/dev/video5 1920×1536 30 FPS、现有 YOLO/RTMW TensorRT 引擎、ZLG USBCANFD-200U。保留配置、模型、CAN 波特率和终端电阻设置;未调整功耗或时钟。

使用链接相应版本 camera_risk_core 的临时采样程序,各运行约 15 秒,按实际 published 结果增量计算 FPS,并调用 renderResult() 绘制。该指标为真实推理输出吞吐,非相机配置 FPS;采样程序不调用 GUI 的 imshow/waitKey,不录制、不保存图片。

路径 稳定输出 风险融合及发送阶段 结果延迟 CAN 状态
修复前,同步双通道 CAN 约 0.33 FPS 3016–3019 ms/帧 随积压升至约 12 秒 OPEN,TX=0,发送错误递增
修复前,仅对照关闭 CAN 29.93–30.00 FPS 约 5–6.6 ms/帧 约 42–46 ms DISABLED
修复后,后台双通道 CAN 29.97–30.00 FPS 约 6–6.9 ms/帧 约 46–50 ms OPEN,TX=0,发送错误递增

首秒包含启动过渡,后两组约 27 FPS,不纳入稳定区间。画面绘制约 19 ms/帧。另做真实 TensorRT 视频回灌参考采样约 43–48 FPS,不能代替实时摄像头验证。

修改与模拟回归

实时推理改用 queueRisk(),不等待 SDK。独立发送线程处理一对双通道帧,最多保留一个待发风险,新的覆盖尚未发送的旧结果;没有无限队列或定时旧值重发。0x1F6、DLC 8、clear→0x00/其他→0x11 和后七字节清零的协议保持不变。按需 sendCan() 仍是同步接口。

停止时清空待发风险,唤醒后台线程,等待正在执行的 SDK 调用返回,再释放设备;不持有 SDK 生命周期锁等待发送线程,避免死锁。CAN 快照反映已完成的发送,不保证包括当前推理帧。

tests/run_can.sh(模拟 SDK + UBSan)通过,新增阻塞发送期间 1000 次提交、最新结果替换、双通道、失败和停止清理覆盖;构建及 git diff --check 通过。未进行板端故障注入。

正式程序和文件核对

经宿主进程检查确认测试前没有 camera_risk,最后按原命令 ./run_camera.sh 启动正式程序,运行约 12 秒后 SIGTERM,退出码 0、停止约 1.267 秒。未改启动参数;测试后确认没有遗留进程。记录位于 /tmp/vap-fps-default-verification.json 和 /tmp/vap-fps-default-run.log;临时采样源码为 /tmp/vap_fps_probe.cpp。

实际 /proc/<pid>/exe、build/camera_risk、orin/build/camera_risk SHA256 均为:

a84680513aa61fb2af353f97e6369bbef80c9f12521ecd88454e72fcecab447f

独立包 SHA256SUMS 已刷新并完整校验。修改留在本地工作区,未提交/推送;版本引用详情见 风险发送记录。

未覆盖项

物理 CAN 发送依然失败,本次只确认该等待已与推理解耦,未确认 ACK、线缆、接收端或总线配置的故障原因。未使用独立总线分析仪验收线上载荷,也未测试物理断连重连或长期耐久。当前场景约 30 FPS 不代表任意人数/场景都能达到同样吞吐。