机器人采集系统会同时面对相机、传感器、控制状态和存储。它们的频率、数据量、时间戳和失败方式都不同。把所有逻辑放进一个进程,开始时简单,后期却很难隔离慢设备、编码抖动和磁盘压力。
我更倾向按职责和故障边界拆成四类角色:设备接入负责生命周期与原始数据,编码器负责格式转换,组装器按时间与任务语义形成一个 Episode,存储端负责有界落盘与结果清单。
插件接口不能抹平设备差异
统一接口适合约束启动、停止、状态和错误传播,但不应伪装所有设备能力相同。采样触发方式、时间戳来源、标定状态和数据质量必须显式暴露。否则上层会在不知道条件不成立的情况下继续组合数据。
背压必须可观察
慢消费者出现时,系统不能无界增长,也不应静默覆盖。每条队列都需要容量、满载策略和统计。达到上限后,可以终止当前 Episode、降低非关键数据频率或标记质量降级,但必须留下可查询的原因。
“继续运行”不一定比“明确失败”更可靠。若一次采集已经缺少关键模态,继续写出一个看似完整的数据集,反而会把问题推迟到训练或分析阶段。
复现依赖清单而不是目录名
每次 Episode 应记录配置版本、设备实例、时间戳语义、缺样信息、程序版本和完成状态。进程异常时,Controller 需要把失败传播到任务级结果,而不是只留一份不完整目录。
参考资料
证据边界
本文只总结模块拆分、背压和数据清单方法,不涉及具体公司拓扑、设备型号、数据格式、采样参数或存储规模。