工位每帧发一条 MQTT 事件,并持续更新 Modbus 寄存器与线圈。
快速验证
- 打开
http://<jetson-ip>:8080/healthz,frames_processed 在增长、mqtt_rejected 为 0。
- 执行
mosquitto_sub -h <jetson-ip> -t '<工位名>/inspection/#' -C 5,每条事件带 assembly、dimension 段和 verdict_reasons。
- 从工装上拿走一个期望件:
missing_count 上升,verdict 变成 NG。
- 用 Modbus 客户端连 502 端口、unit 1:Coil 0(NG)与 Coil 1(OK)互斥,HR 8 等于缺件数。
配置期望件清单
在 config/config.json 的 sources[] 下为每台摄像头单独配置 assembly 与 dimension 段:
assembly.expected[]:一个装配位一条,填 class(模型类别之一)、roi(该摄像头画面下归一化的 [x1, y1, x2, y2])、min_count 和 label(缺件时显示的名字)。
dimension:挂在看得到标定物的那一路,calibration 框住标定物,measurements[] 每项填 ROI、名义尺寸与 tolerance_mm。
rules.ng_on_defect、ng_on_missing、ng_on_extra、ng_on_dimension 分别控制哪些原因判 NG。
读取输出
Modbus TCP,unit 1,端口 502:
| 寄存器 | 含义 |
|---|
| Coil 0 / Coil 1 | NG / OK,互斥 |
| HR 0 / HR 1 | 主缺陷类别 ID / 缺陷数 |
| HR 2–5 | 主缺陷框 cx、cy、w、h,归一化 ×10000 |
| HR 6–7 | 心跳,Unix 秒的 uint32 高 / 低字 |
| HR 8 / HR 9 | 缺件数 / 多余件数 |
| HR 10 | 主测量值,毫米 ×100(长边) |
| HR 11 | 公差判定码:0 ok / 1 undersize / 2 oversize / 3 not_found / 4 uncalibrated |
HR 10 = 0 时先读 HR 11。MQTT 主题为 <工位名>/inspection/<流编号>/results,verdict = NG 不一定意味着 defect_count > 0。
下一步
- 把示例期望清单换成自己的装配位,并用自己的图像重训模型。
- 把
mqtt.host 指到带凭据的 broker,随包的 mosquitto 为本机匿名访问。
- 加摄像头就往
sources[] 里追加。reComputer J30 系列(Orin Nano 8GB)在关闭 MQTT 与 Modbus 时最多稳定运行 8 路 × 10 fps,带完整 I/O 时按更少路数规划。