DEMO到商业落地:翻越节拍、稳定性、异常处理三座山的工程方法
Contents
起因
上一篇说了视觉分拣项目从 DEMO 到商业落地要翻三座大山——节拍、稳定性、异常处理,节拍能一票否决,另外两座决定项目能不能"活着收尾款"。但只指出大山在哪不算完整,这篇把翻山的工程方法逐座展开:每座山怎么量、怎么拆、用什么样的手段阶梯去翻,最后给一套交付前能把三座山一次性验证掉的验收闭环。
第一座山:节拍——先测量,再预算,后升级
第一步:摸清客户真实节拍
铭牌节拍和真实节拍是两回事。要的是峰值时段的节拍:开工来料高峰、最密批次通过的那几分钟。拿数据的方式:
- 有 PLC/SCADA 的,直接导出上游工件的到达时间戳,画到达率分布
- 没有的,去现场掐表半小时,按最密的那段算
- 客户口头说的"大概 50 一分钟",一律再乘 1.2 的安全系数
第二步:做节拍预算表
把单件时间拆到每个环节,每项给预算值和实测值,类似这样的表:
| 环节 | 预算 | 实测 | 说明 |
|---|---|---|---|
| 曝光+采图 | 15ms | 12ms | 硬触发 |
| 推理+后处理 | 35ms | 31ms | 流水化 |
| 通信下发 | 5ms | 4ms | TCP |
| 臂运动到位 | 350ms | 380ms | 含加减速 |
| 末端取放 | 250ms | 240ms | 吸盘响应 |
预算表的价值是暴露瓶颈在哪一格,而不是笼统地说"系统不够快"。实测超预算的那一格,就是下一轮优化的唯一目标。
第三步:按成本阶梯提节拍
从便宜到贵,逐级上手段,跳级就是烧钱:
- 软件级:模型量化压缩、输入分辨率减半、ROI 裁剪推理、跳帧+跟踪补位;把视觉做成流水线藏在臂动作的"影子时间"里(上一篇的核心手法)
- 工艺级:用皮带做缓冲区——视觉工位在前、抓取工位在后,皮带上排队 3~5 件工件就是天然缓存,瞬时来料尖峰被队列削平,这是流水线场景最便宜、最被低估的一招;再往上双工位交替抓取
- 设备级:换高速 SCARA、双臂、转盘多工位——到这一步方案已经重构,尽量别让项目走到这里才醒悟
第四步:按峰值验收
最密来料、最快皮带档位连续跑 20 分钟,统计节拍分布看 P99。平均节拍达标、峰值堵线的设备,客户认定它就是慢的。
第二座山:稳定性——分层设防,长跑为王
稳定性问题的特点是单独测试全过、连续长跑必挂。处理思路是分层:视觉层、硬件层、软件层、标定层,每层有各自的病和药。
视觉稳定性
- 病:换批次来料、换季节光照,模型准确率断崖
- 药:数据集覆盖产线真实分布(批次、光照、油污等级);现场拒识样本自动回流——低置信度帧自动存图入库,每月增量重训,这是模型不掉队的核心机制;模型带版本号灰度上线,新模型先影子运行对比
硬件稳定性
- 病:温漂(相机噪声变大、镜头微形变导致标定漂移)、车间电压跌落(大电机启停拉垮电网)、地环干扰(触发线耦合误触发)
- 药:机柜风道散热并留温度监控;隔离电源 + 宽压输入;相机、控制器、臂单点共地;触发信号用屏蔽线甚至改光纤/硬触发光电直连
软件稳定性
- 病:内存/句柄泄漏 72 小时后 OOM、日志写满 eMMC、进程悄悄死掉没人知道
- 药:
- 进程守护:
Restart=always的 systemd 单元只是底线,上层再配应用级看门狗(心跳超时自杀重启) - 交付前 72 小时连续烤机是硬性动作,期间用脚本周期性采集
/proc的内存、fd 数量、线程数,画曲线——爬升曲线比当场崩溃更能提前暴露泄漏 - 日志分级 + logrotate + 磁盘配额,异常现场自动保存(触发前后 N 帧原图+推理结果+坐标,“黑匣子”)
- 进程守护:
标定稳定性
- 病:支架振动、碰撞后像素-物理坐标映射失效,抓取位置系统性偏移
- 药:开机自检标准件(抓一次已知位置的标准件,偏差超阈值报警要求重标);定期自动微标定;换相机/镜头/支架后强制重标流程写进操作规程
把这几层各配一个"病-药"对,就是稳定性的全部工程内容——没什么高深技术,全是细活,但漏一条就是产线夜班电话。
第三座山:异常处理——降级不宕机
异常一定会来,工程目标不是消灭异常,是异常来了以后系统以最低的姿态继续干活。
异常分类矩阵
按来源 × 影响做分类表,每一格写明检测手段和响应动作,这张表就是异常设计的全部范围:
| 来源 | 检测 | 响应 |
|---|---|---|
| 视觉低置信 | 置信度阈值 | 拒识→人工复检位 |
| 视觉连续失效 | 连续 N 件拒识 | 报警+切备用模型 |
| 来料超规格 | 检测框越界/超大 | 分流剔除+计数 |
| 异物(手套/纸片) | 类别外检测 | 停止抓取+叫人 |
| 通信超时 | 心跳/超时 | 指数退避重连,臂侧安全停 |
| 断电 | 上电标志 | 自检序列后自动恢复 |
| 安全光栅 | 硬件 IO | 硬件级停,恢复走确认流程 |
视觉降级阶梯
置信度低→拒识(进人工通道,损失的是少量节拍);连续拒识→切上一版稳定模型(模型 A/B 双版本热备,新模型跑挂了一键回退);彻底失效→停机报警。每一级的损失都比上一级大,所以宁可早降级。
通信异常
三原则:心跳检测(断了要立刻知道)、指数退避重连(别打爆对方)、命令幂等(重发的抓取指令带工件 ID,绝不能同一件抓两次——重复抓取撞臂是真实发生过的事故源)。
断电恢复
上电自检序列固化:设备枚举→模型加载→标定自检→通信握手→待产,全程无需人工干预;断电瞬间的未完成工件状态要能清理,不能卡在"半抓取"状态。
故障注入测试
异常处理代码写得再漂亮,没演练过等于零。交付前按清单逐项注入:拔相机网线、塞异物、模拟来料超速、拉总闸再合闸、杀视觉进程——每项注入后系统应自动恢复或安全停机,需要人工爬进去救的都算不合格。有精力的话正式做一遍 FMEA(失效模式与影响分析),把"会发生什么、多频繁、多严重、怎么检测、怎么应对"填成表,给客户的验收报告里放这张表,专业度直接拉开档次。
验收闭环:一次把三座山验完
三座山的验证不是三件事,是一套流程:
- 8 小时连续跑批——验节拍(P99)+ 验稳定性基础
- 72 小时烤机 + 资源曲线——验稳定性深水区
- 故障注入清单逐项过——验异常处理
- 压力工况(最密来料+最快皮带)——验峰值节拍
- 交付 FMEA 表 + 运维手册(黑匣子数据导出方法、常见报警处置、重标定流程)
- 售后数据(拒识样本、报警记录)按月回流,驱动模型与规则迭代——项目交付不是终点,是数据飞轮的起点
总结
三座山的处理方法浓缩成三句话:节拍靠预算表和缓冲设计,不是靠硬件堆料;稳定性靠分层设防和长跑验证,不是靠运气;异常处理靠降级阶梯和故障注入演练,不是靠祈祷。DEMO 与商业落地之间差的从来不是算法精度那零点几个点,而是这三座山上日复一日的细活。
参考链接
Author 软件开发大郭
LastMod 2026-09-06