机器人采集系统会同时面对相机、传感器、控制状态和存储。它们的频率、数据量、时间戳和失败方式都不同。把所有逻辑放进一个进程,开始时简单,后期却很难隔离慢设备、编码抖动和磁盘压力。

我更倾向按职责和故障边界拆成四类角色:设备接入负责生命周期与原始数据,编码器负责格式转换,组装器按时间与任务语义形成一个 Episode,存储端负责有界落盘与结果清单。

设备接入编码转换Episode 组装存储与清单
接入保留设备差异队列容量与背压可见清单记录完整性与版本

插件接口不能抹平设备差异

统一接口适合约束启动、停止、状态和错误传播,但不应伪装所有设备能力相同。采样触发方式、时间戳来源、标定状态和数据质量必须显式暴露。否则上层会在不知道条件不成立的情况下继续组合数据。

背压必须可观察

慢消费者出现时,系统不能无界增长,也不应静默覆盖。每条队列都需要容量、满载策略和统计。达到上限后,可以终止当前 Episode、降低非关键数据频率或标记质量降级,但必须留下可查询的原因。

“继续运行”不一定比“明确失败”更可靠。若一次采集已经缺少关键模态,继续写出一个看似完整的数据集,反而会把问题推迟到训练或分析阶段。

复现依赖清单而不是目录名

每次 Episode 应记录配置版本、设备实例、时间戳语义、缺样信息、程序版本和完成状态。进程异常时,Controller 需要把失败传播到任务级结果,而不是只留一份不完整目录。

参考资料

证据边界

本文只总结模块拆分、背压和数据清单方法,不涉及具体公司拓扑、设备型号、数据格式、采样参数或存储规模。