起因

上一篇说了视觉分拣项目从 DEMO 到商业落地要翻三座大山——节拍、稳定性、异常处理,节拍能一票否决,另外两座决定项目能不能"活着收尾款"。但只指出大山在哪不算完整,这篇把翻山的工程方法逐座展开:每座山怎么量、怎么拆、用什么样的手段阶梯去翻,最后给一套交付前能把三座山一次性验证掉的验收闭环。

第一座山:节拍——先测量,再预算,后升级

第一步:摸清客户真实节拍

铭牌节拍和真实节拍是两回事。要的是峰值时段的节拍:开工来料高峰、最密批次通过的那几分钟。拿数据的方式:

  • 有 PLC/SCADA 的,直接导出上游工件的到达时间戳,画到达率分布
  • 没有的,去现场掐表半小时,按最密的那段算
  • 客户口头说的"大概 50 一分钟",一律再乘 1.2 的安全系数

第二步:做节拍预算表

把单件时间拆到每个环节,每项给预算值和实测值,类似这样的表:

环节 预算 实测 说明
曝光+采图 15ms 12ms 硬触发
推理+后处理 35ms 31ms 流水化
通信下发 5ms 4ms TCP
臂运动到位 350ms 380ms 含加减速
末端取放 250ms 240ms 吸盘响应

预算表的价值是暴露瓶颈在哪一格,而不是笼统地说"系统不够快"。实测超预算的那一格,就是下一轮优化的唯一目标。

第三步:按成本阶梯提节拍

从便宜到贵,逐级上手段,跳级就是烧钱:

  1. 软件级:模型量化压缩、输入分辨率减半、ROI 裁剪推理、跳帧+跟踪补位;把视觉做成流水线藏在臂动作的"影子时间"里(上一篇的核心手法)
  2. 工艺级用皮带做缓冲区——视觉工位在前、抓取工位在后,皮带上排队 3~5 件工件就是天然缓存,瞬时来料尖峰被队列削平,这是流水线场景最便宜、最被低估的一招;再往上双工位交替抓取
  3. 设备级:换高速 SCARA、双臂、转盘多工位——到这一步方案已经重构,尽量别让项目走到这里才醒悟

第四步:按峰值验收

最密来料、最快皮带档位连续跑 20 分钟,统计节拍分布看 P99。平均节拍达标、峰值堵线的设备,客户认定它就是慢的

第二座山:稳定性——分层设防,长跑为王

稳定性问题的特点是单独测试全过、连续长跑必挂。处理思路是分层:视觉层、硬件层、软件层、标定层,每层有各自的病和药。

视觉稳定性

  • 病:换批次来料、换季节光照,模型准确率断崖
  • 药:数据集覆盖产线真实分布(批次、光照、油污等级);现场拒识样本自动回流——低置信度帧自动存图入库,每月增量重训,这是模型不掉队的核心机制;模型带版本号灰度上线,新模型先影子运行对比

硬件稳定性

  • 病:温漂(相机噪声变大、镜头微形变导致标定漂移)、车间电压跌落(大电机启停拉垮电网)、地环干扰(触发线耦合误触发)
  • 药:机柜风道散热并留温度监控;隔离电源 + 宽压输入;相机、控制器、臂单点共地;触发信号用屏蔽线甚至改光纤/硬触发光电直连

软件稳定性

  • 病:内存/句柄泄漏 72 小时后 OOM、日志写满 eMMC、进程悄悄死掉没人知道
  • 药:
    • 进程守护:Restart=always 的 systemd 单元只是底线,上层再配应用级看门狗(心跳超时自杀重启)
    • 交付前 72 小时连续烤机是硬性动作,期间用脚本周期性采集 /proc 的内存、fd 数量、线程数,画曲线——爬升曲线比当场崩溃更能提前暴露泄漏
    • 日志分级 + logrotate + 磁盘配额,异常现场自动保存(触发前后 N 帧原图+推理结果+坐标,“黑匣子”)

标定稳定性

  • 病:支架振动、碰撞后像素-物理坐标映射失效,抓取位置系统性偏移
  • 药:开机自检标准件(抓一次已知位置的标准件,偏差超阈值报警要求重标);定期自动微标定;换相机/镜头/支架后强制重标流程写进操作规程

把这几层各配一个"病-药"对,就是稳定性的全部工程内容——没什么高深技术,全是细活,但漏一条就是产线夜班电话。

第三座山:异常处理——降级不宕机

异常一定会来,工程目标不是消灭异常,是异常来了以后系统以最低的姿态继续干活

异常分类矩阵

按来源 × 影响做分类表,每一格写明检测手段和响应动作,这张表就是异常设计的全部范围:

来源 检测 响应
视觉低置信 置信度阈值 拒识→人工复检位
视觉连续失效 连续 N 件拒识 报警+切备用模型
来料超规格 检测框越界/超大 分流剔除+计数
异物(手套/纸片) 类别外检测 停止抓取+叫人
通信超时 心跳/超时 指数退避重连,臂侧安全停
断电 上电标志 自检序列后自动恢复
安全光栅 硬件 IO 硬件级停,恢复走确认流程

视觉降级阶梯

置信度低→拒识(进人工通道,损失的是少量节拍);连续拒识→切上一版稳定模型(模型 A/B 双版本热备,新模型跑挂了一键回退);彻底失效→停机报警。每一级的损失都比上一级大,所以宁可早降级。

通信异常

三原则:心跳检测(断了要立刻知道)、指数退避重连(别打爆对方)、命令幂等(重发的抓取指令带工件 ID,绝不能同一件抓两次——重复抓取撞臂是真实发生过的事故源)。

断电恢复

上电自检序列固化:设备枚举→模型加载→标定自检→通信握手→待产,全程无需人工干预;断电瞬间的未完成工件状态要能清理,不能卡在"半抓取"状态。

故障注入测试

异常处理代码写得再漂亮,没演练过等于零。交付前按清单逐项注入:拔相机网线、塞异物、模拟来料超速、拉总闸再合闸、杀视觉进程——每项注入后系统应自动恢复或安全停机,需要人工爬进去救的都算不合格。有精力的话正式做一遍 FMEA(失效模式与影响分析),把"会发生什么、多频繁、多严重、怎么检测、怎么应对"填成表,给客户的验收报告里放这张表,专业度直接拉开档次。

验收闭环:一次把三座山验完

三座山的验证不是三件事,是一套流程:

  1. 8 小时连续跑批——验节拍(P99)+ 验稳定性基础
  2. 72 小时烤机 + 资源曲线——验稳定性深水区
  3. 故障注入清单逐项过——验异常处理
  4. 压力工况(最密来料+最快皮带)——验峰值节拍
  5. 交付 FMEA 表 + 运维手册(黑匣子数据导出方法、常见报警处置、重标定流程)
  6. 售后数据(拒识样本、报警记录)按月回流,驱动模型与规则迭代——项目交付不是终点,是数据飞轮的起点

总结

三座山的处理方法浓缩成三句话:节拍靠预算表和缓冲设计,不是靠硬件堆料;稳定性靠分层设防和长跑验证,不是靠运气;异常处理靠降级阶梯和故障注入演练,不是靠祈祷。DEMO 与商业落地之间差的从来不是算法精度那零点几个点,而是这三座山上日复一日的细活。

参考链接